class Order2cb::Order
Public Class Methods
find(order_number)
click to toggle source
# File lib/order2cb/order.rb, line 4 def self.find(order_number) sql = "SELECT * FROM exp_spree_orders where number = '#{order_number}';" data = $db_client.query(sql) return Order.new(data.first) end
new(data)
click to toggle source
# File lib/order2cb/order.rb, line 10 def initialize(data) @data = data end
Public Instance Methods
adjustments()
click to toggle source
# File lib/order2cb/order.rb, line 145 def adjustments line_items_results = [] db_adjustments_by_order.each do |adj| line_items_results << { 'qty' => 1, 'sku' => adj['coupon_code'], 'price' => exvat(adj['amount']), 'size' => nil, 'speed_rating' => nil, 'load_index' => nil, 'description' => 'Promotion' } end line_items_results end
current_state()
click to toggle source
# File lib/order2cb/order.rb, line 18 def current_state if high_risk? return "Requiring action Risk" elsif fitting_centre['mobile_fitting'] return "Ready for mobile fitting" else return "Ready for dataflex" end end
customer()
click to toggle source
# File lib/order2cb/order.rb, line 32 def customer [@data['title'], @data['first_name'], @data['surname']].reject{|s| s.strip.empty?}.join(" ") end
db_adjustments_by_order()
click to toggle source
# File lib/order2cb/order.rb, line 141 def db_adjustments_by_order $db_client.query("SELECT * FROM exp_spree_adjustments WHERE source_id = '#{@data['id']}' ORDER BY id ASC") end
exvat(with_vat_amount)
click to toggle source
# File lib/order2cb/order.rb, line 164 def exvat(with_vat_amount) (with_vat_amount / 120) * 100 end
fitting_centre()
click to toggle source
# File lib/order2cb/order.rb, line 91 def fitting_centre channel_fields = $db_client.query("SELECT exp_channel_fields.* FROM exp_channel_fields JOIN exp_channels on exp_channels.channel_id = exp_channel_fields.group_id WHERE exp_channels.channel_name = 'branches'") data_field_id = $db_client.query("SELECT exp_channel_fields.field_id FROM exp_channel_fields JOIN exp_channels on exp_channels.channel_id = exp_channel_fields.group_id WHERE exp_channels.channel_name = 'branches' and exp_channel_fields.field_name = 'dataflex_id'").first["field_id"] fitting_centre_fields = $db_client.query("SELECT * FROM exp_channel_data WHERE field_id_#{data_field_id} = '#{@data['fitting_centre_id']}'") fitting_centre_hash = {} channel_fields.map{|f| fitting_centre_hash[f['field_name']] = fitting_centre_fields.first["field_id_#{f['field_id']}"]} is_mobile_fitting = fitting_centre_hash['is_mobile_fitting'].upcase == "YES" details = { 'phone_number' => fitting_centre_hash['phone_number'], 'branch_number' => fitting_centre_hash['dataflex_id'], 'mobile_fitting' => is_mobile_fitting } if is_mobile_fitting address_components = [fitting_centre_hash['street'], fitting_centre_hash['street2'], fitting_centre_hash['town'], fitting_centre_hash['postcode']] address = address_components.reject{|comp| comp.strip.empty?}.join(", ") details['mobile_fitter'] = fitting_centre_hash['name'] details['customer_contact_name'] = 'Unknown' details['fitting_address'] = address else details['name'] = fitting_centre_hash['name'] end details end
get_line_items()
click to toggle source
# File lib/order2cb/order.rb, line 161 def get_line_items $db_client.query("SELECT * FROM exp_remote_line_items WHERE order_id = #{@data['id']} ORDER BY id ASC;") end
high_risk?()
click to toggle source
# File lib/order2cb/order.rb, line 28 def high_risk? (@data["risk_score"] && @data["risk_score"] > 22) || (@data["worldpay_risk_score"] && @data["worldpay_risk_score"] >= 40) end
line_item_price(line_item_row)
click to toggle source
# File lib/order2cb/order.rb, line 168 def line_item_price(line_item_row) line_item_row['prices'].to_s.split(",")[0].to_s.to_f end
line_items()
click to toggle source
# File lib/order2cb/order.rb, line 120 def line_items line_items_results = [] @operational_stock_order = true get_line_items.each do |line_item_row| if line_item_row['is_operational_stock']==0 @operational_stock_order = false end line_items_results << { 'qty' => line_item_row['quantity'], 'sku' => line_item_row['sku'], 'price' => exvat(line_item_price(line_item_row)), 'size' => line_item_row['tyre_size'], 'speed_rating' => line_item_row['speed_rating'], 'load_index' => line_item_row['load_index'].to_i, 'description' => line_item_row['sku_description'] } end line_items_results end
market_opt_in()
click to toggle source
# File lib/order2cb/order.rb, line 36 def market_opt_in @data['accept_marketing'] == 1 end
number()
click to toggle source
# File lib/order2cb/order.rb, line 14 def number @data['number'] end
order_details()
click to toggle source
# File lib/order2cb/order.rb, line 48 def order_details { 'title' => @data['number'], 'case_type_id' => ENV['CB_CASE_TYPE_ID'], 'case_type' => 'tyre-shopper-order', 'current_state' => current_state, 'order_number' => @data['number'], 'order_date' => DateTime.now, 'customer' => customer, 'vrn' => @data['vehicle_registration'], 'address1' => @data['address1'], 'address2' => @data['address2'], 'address3' => @data['town'], 'postcode' => @data['postcode'], 'daytime_telephone' => @data['daytime_telephone'], 'evening_telephone' => @data['evening_telephone'], 'email' => @data['email'], 'market_opt_in' => market_opt_in, 'payment_type' => payment_type, 'transaction_reference' => payment_reference, 'card_number' => @data['card_last_digits'], 'account_holder' => @data['card_holder_name'], 'streamline_risk_assessment' => @data['worldpay_risk_score'], 'tyre_shopper_risk_assessment' => @data['risk_score'], 'tyre_shopper_risk_assessment_notes' => @data['risk_score_reasons'], 'order_source' => 'TyreShopper', 'is_van_tyre' => short_codes.include?("VN"), 'is_winter_tyre' => short_codes.include?("W"), 'is_4x4_tyre' => short_codes.include?("4X"), 'is_run_flat_tyre' => short_codes.include?("RF"), # set time to + 5 hours 'fitting_date' => @data['fitting_date'] + 5.hours, 'am_pm' => @data['fitting_day_part'], 'stock_check' => true, 'original_total' => @data['total'] } end
payment_reference()
click to toggle source
# File lib/order2cb/order.rb, line 44 def payment_reference @data['card_type'].to_s.strip == "" ? @data['pp_payment_id'] : @data['number'] end
payment_type()
click to toggle source
# File lib/order2cb/order.rb, line 40 def payment_type @data['card_type'].to_s.strip == "" ? "PayPal" : "Creditcard" end
short_codes()
click to toggle source
# File lib/order2cb/order.rb, line 86 def short_codes sql = "SELECT short_code FROM exp_remote_line_items where order_id = #{@data["id"]};" $db_client.query(sql).map{|row| row["short_code"].to_s.upcase.split("-")}.flatten.compact.uniq end
to_hash()
click to toggle source
# File lib/order2cb/order.rb, line 172 def to_hash order = order_details.merge(fitting_centre) order['line_items'] = [] order['line_items'] += line_items order['line_items'] += adjustments order['operational_stock'] = @operational_stock_order return {'case' => order} end
to_json()
click to toggle source
# File lib/order2cb/order.rb, line 184 def to_json self.to_hash.to_json end