Advertisement
Guest User

Untitled

a guest
Jun 13th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.76 KB | None | 0 0
  1. Dir.glob("#{source_path}/*.csv").each do |item|
  2.       begin
  3.         rows = CSV.read(item, headers: true)
  4.         grouped_by_email = rows.group_by { |row| [row['donor_email'], row['productsku_id'], row['donor_address1']] }.values
  5.       rescue => e
  6.         puts e
  7.         next
  8.       else
  9.         grouped_by_email.each do |group|
  10.  
  11.           group_skus = group.map{ |x| x['product_sku_id'] }
  12.           same_skus = group_skus.uniq.length == group_skus.length
  13.  
  14.           group.each do |row_field|
  15.             campaign_id = row_field['campaign_id'].try(:downcase)
  16.             next unless campaign_id
  17.             next unless campaign_id.include? 'shirt'
  18.  
  19.             sku = row_field['productsku_id']
  20.             donor_email = row_field['donor_email']
  21.             sku_size = row_field['productsku_size']
  22.             order_id = row_field['order_id']
  23.             order_date = row_field['order_date']
  24.             client_id = row_field['client_id']
  25.             client_name = row_field['client_name']
  26.             campaign_name = row_field['campaign_name']
  27.             donor_id = row_field['donor_id']
  28.             donor_firstname = row_field['donor_firstname']
  29.             donor_lastname = row_field['donor_lastname']
  30.             donor_address1 = row_field['donor_address1']
  31.             donor_address2 = row_field['donor_address2']
  32.             donor_address3 = row_field['donor_address3']
  33.             donor_city = row_field['donor_city']
  34.             donor_state = row_field['donor_state']
  35.             donor_zip = row_field['donor_zip']
  36.  
  37.             four_months_ago = Date.today.beginning_of_month - 4.months
  38.  
  39.             next if Date.strptime(order_date, "%m/%d/%Y") < four_months_ago
  40.             next if @processed_orders.include? order_id
  41.  
  42.             orders_from_db = Order.where('createdAt >= ?', four_months_ago).where(email: donor_email, orderId: order_id)
  43.  
  44.             if orders_from_db.any?
  45.               orders_from_db.each do |order|
  46.                 order_products = OrderProduct.where('createdAt >= ?', four_months_ago).where(orderId: order.id)
  47.                 next unless order_products.any?
  48.  
  49.                 order_products.each do |order_product|
  50.                   next unless order_product.order.campaignId.include? 'shirt'
  51.  
  52.                   next unless (order_product.code.include?("-#{sku_size}")  && (!sku_size.nil? || sku_size.try(:empty?)))
  53.  
  54.                   next if @processed_orders.include? order_id
  55.  
  56.                   if order_product.variationList["size"].empty?
  57.                     CSV.open('incorrect_parsed_orders.csv', 'ab') do |csv|
  58.                       csv << [
  59.                           order_id, order_date, client_id, client_name, campaign_id, campaign_name,
  60.                           sku, sku_size, donor_id, donor_firstname, donor_lastname,
  61.                           donor_email, donor_address1, donor_address2, donor_address3, donor_city,
  62.                           donor_state, donor_zip, order.id, 0, 1
  63.                       ]
  64.                     end
  65.                     @processed_orders << order_id
  66.                   elsif order_products.size != group_skus.length && !@processed_orders.include?(order_id) # order_product.quantity >= 2 &&
  67.                     CSV.open('incorrect_parsed_orders.csv', 'ab') do |csv|
  68.                       csv << [
  69.                           order_id, order_date, client_id, client_name, campaign_id, campaign_name,
  70.                           sku, sku_size, donor_id, donor_firstname, donor_lastname,
  71.                           donor_email, donor_address1, donor_address2, donor_address3, donor_city,
  72.                           donor_state, donor_zip, order.id, 0, 1
  73.                       ]
  74.                     end
  75.                     @processed_orders << order_id
  76.                   end
  77.                 end
  78.                 # if order_products.pluck(:code).size != group_skus.length
  79.                 #   CSV.open('missing_sizes_in_db.csv', 'ab') do |csv|
  80.                 #     csv << [order_id, sku, sku_size, donor_email, row_field['order_date'], order.id]
  81.                 #   end
  82.                 #   puts 'Written +1'
  83.                 # end
  84.               end
  85.             else
  86.               CSV.open('missed_parsed_orders.csv', 'ab') do |csv|
  87.                 csv << [
  88.                     order_id, order_date, client_id, client_name, campaign_id, campaign_name,
  89.                     sku, sku_size, donor_id, donor_firstname, donor_lastname,
  90.                     donor_email, donor_address1, donor_address2, donor_address3, donor_city,
  91.                     donor_state, donor_zip, 'N/A', 1, 0
  92.                 ]
  93.               end
  94.               puts 'Written +1'
  95.             end
  96.             @processed_orders << order_id
  97.             puts "FILE READ: #{item}"
  98.           end
  99.           puts '-------------------'
  100.         end
  101.       end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement