У меня есть файл Ruby, который автоматически превращает заказы клиентов с сайта электронной коммерции в файл CSV. Различные CSV-файлы печатаются в зависимости от поставщиков продукта.
Мне нужно добавить суффикс в конце номера заказа для разных поставщиков. Например, для поставщика с именем «Стили Electri c» мне нужно добавить -ES
в конце номера их заказа. Таким образом, будущие номера заказов, такие как 12345
, должны стать 12345-ES
.
. Мне кажется, мне, возможно, придется добавить оператор if
/ else
в файл csvgen.rb, что-то вроде:
if(vendor = Electric styles){order-number-ES}
Не уверен, как это сделать.
файл process2:
This script processes the CSV files, it is executed when a CSV is detected in the Dropbox folder by run.rb
# The ~/Dropbox/ORDERS/ARCHIVE/RUNNING/running.csv file contains all orders.
# Electric Styles
cat ~/Dropbox/*.csv | head -1 > ~/Dropbox/ORDERS/ElectricStyles.csv
grep -i -E "Electric Styles" *.csv >> ~/Dropbox/ORDERS/ElectricStyles.csv
awk -F, '{$14=$14*0.0352739619;print}' OFS=, ~/Dropbox/ORDERS/ElectricStyles.csv | awk -F, '{$14=$14==int($14)?int($14):int($14)+1}1' OFS=, | sponge ~/Dropbox/ORDERS/ElectricStyles.csv
cp ~/Dropbox/ORDERS/ElectricStyles.csv ~/Dropbox/ORDERS/ElectricStyles.$now.csv
rm ~/Dropbox/ORDERS/ElectricStyles.csv
cp ~/Dropbox/ORDERS/ElectricStyles*.csv ~/Dropbox/ORDERS/ElectricStyles/
cat ~/Dropbox/ORDERS/ElectricStyles/*.csv | sort -u -r > ~/Dropbox/ORDERS/ElectricStyles/RUNNING/running.csv
файл run.rb:
#!/usr/bin/env ruby
`dropbox start`
while 1 == 1 do
csvexists = !Dir.glob('/root/Dropbox/*.csv').empty?
sleep(10)
`proftpd`
if csvexists == true
sleep(10)
`/root/Dropbox/process2`
else
end
end
Файл csvgen.rb:
csvgen.rb
#!/usr/bin/ruby
require 'mechanize'
require 'json'
require 'csv'
def every_n_seconds(n)
loop do
before = Time.now
yield
interval = n-(Time.now-before)
sleep(interval) if interval > 0
end
end
every_n_seconds(86400) do
web = Mechanize.new
auth = web.auth('xxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxx', domain = 'xxxxxxxxxxxx.myshopify.com')
count = /\:(\d*)/.match(web.get("https://xxxxxxxxxxxx.myshopify.com/admin/orders/count.json").body).to_s.gsub(':','').to_i
pages = count / 250 + 1
orders = []
catch :oldorder do
pages.times do |page|
puts page
order = JSON.parse(web.get("https://xxxxxxxxxxx.myshopify.com/admin/orders.json?fields=order_number,created_at,shipping_address,shipping_lines,line_items&page=#{page}&limit=250").body)['orders']
order.each do |order|
date = DateTime.iso8601(order["created_at"]).strftime('%m/%d/%Y')
today = Date.today.strftime('%m/%d/%Y')
yestr = Date.today.prev_day.strftime('%m/%d/%Y')
throw :oldorder if date.to_s != today.to_s && date.to_s != yestr.to_s
# throw :oldorder if order["order_number"] < 10000
cust,ord,ord1 = [],[],[]
unless order["shipping_lines"] == []
cust << order["order_number"]
cust << order["shipping_address"]["first_name"]
cust << order["shipping_address"]["last_name"]
cust << order["shipping_address"]["address1"]
cust << order["shipping_address"]["address2"]
cust << order["shipping_address"]["city"]
cust << order["shipping_address"]["province_code"]
cust << order["shipping_address"]["zip"]
cust << order["shipping_address"]["country_code"]
order["line_items"].each do |product|
ord1 = product["title"],
product["variant_title"],
product["quantity"],
product["vendor"],
product["grams"],
order["shipping_lines"].first["code"],
product["sku"],
date
ord << cust + ord1
end
ord.each do |o|
orders << o
end
end
end
end
end
puts orders.count
`echo "Order Number,Shipping Address First Name,Shipping Address Last Name,Shipping Address Address 1,Shipping Address Address 2,Shipping Address City,Shipping Address Province code,Shipping Address Postal Code,Shipping Address Country code,Product Title,Product Variant Title,Product Quantity,Brand,Product Weight,Shipping Method,Product SKU,Created at" > /root/Dropbox/file.csv`
orders.each do |o|
CSV.open("/root/Dropbox/file.csv", "a+:UTF-8") do |csv|
csv << o
end
end
end