Как добавить суффикс к номеру заказа в Ruby - PullRequest
0 голосов
/ 30 марта 2020

У меня есть файл Ruby, который автоматически превращает заказы клиентов с сайта электронной коммерции в файл CSV. Различные CSV-файлы печатаются в зависимости от поставщиков продукта.

Мне нужно добавить суффикс в конце номера заказа для разных поставщиков. Например, для поставщика с именем «Стили Electri c» мне нужно добавить -ES в конце номера их заказа. Таким образом, будущие номера заказов, такие как 12345, должны стать 12345-ES.

. Мне кажется, мне, возможно, придется добавить оператор if / else в файл csvgen.rb, что-то вроде:

if(vendor = Electric styles){order-number-ES}

Не уверен, как это сделать.

enter image description here

файл 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

1 Ответ

0 голосов
/ 30 марта 2020

В вашем файле csvgen.rb вам нужно изменить

cust << order["order_number"] 

на

cust << "#{order["order_number"]}-ES" 

, если -ES нужно каждый раз писать для каждого заказа.

Если вам нужен динамик c order_number, приведите пример строки файла CSV, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...