Skip to content

Instantly share code, notes, and snippets.

@rubyrider
Last active December 21, 2015 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rubyrider/6363277 to your computer and use it in GitHub Desktop.
Save rubyrider/6363277 to your computer and use it in GitHub Desktop.
Order and Purchase Code Refactoring
class OrderService
class << self
def find_or_create_purchase_for_order(order, credit_card_id, shipping_fee = 0.0)
buyer, seller, purchase, s_state = order.buyer, order.seller, Purchase.find_by_user_id_and_order_id(user.id, order.id), order.cart.shipping_address.state.upcase
sale_tax = SalesTax.find_by_user_id(vendor.id).send(s_state) rescue 0.0
total_chargeable_amount = calculate_total order.price, sale_tax, vendor.reppio_cut
create_purchase order, credit_card_id, shipping_fee, total_chargeable_amount, sales_tax # updated here
end
def calculate_total price, sale_tax, reppio_cut
(price+ price*sales_tax) - reppio_cut
end
def create_purchase order, credit_card_id, shipping_fee, total_chargeable_amount, sales_tax
price, total = order.price, total_chargeable_amount # updated here
order.buyer.purchases.create
(
seller_id: vendor.id,
order_id: order.id,
shipping_address_id: order.cart.shipping_address.id,
purchase_price: price,
sales_tax: sales_tax,
shipping_fee: shipping_fee,
credit_card_id: credit_card_id,
total_cost: total,
for_pickup: true
)
end
end
end
end
class OrderService
def self.find_or_create_purchase_for_order(order, credit_card_id, shipping_fee = 0.0)
user = order.buyer
purchase = Purchase.find_by_user_id_and_order_id(user.id, order.id)
vendor = order.seller
unless purchase
if order.cart.shipping_address
shipping_address = order.cart.shipping_address
sales_tax_row = SalesTax.find_by_user_id(vendor.id)
sales_tax = eval("sales_tax_row." + shipping_address.state.upcase).to_f rescue 0.0
end
sales_tax_row = SalesTax.find_by_user_id(vendor.id)
begin
sales_tax = eval("sales_tax_row." + user.state.upcase).to_f rescue 0.0000
rescue
sales_tax = 0.0000
end
price = order.price
total = (price+ price*sales_tax) - vendor.reppio_cut
purchase = user.purchases.build(
:seller_id => vendor.id,
:order_id => order.id,
:shipping_address_id => order.cart.shipping_address.id,
:purchase_price => price,
:sales_tax => sales_tax,
:shipping_fee => shipping_fee,
:credit_card_id => credit_card_id,
:total_cost => total,
:for_pickup => true
)
purchase.save
end
purchase
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment