Class: Spree::Cart::Recalculate

Inherits:
Object
  • Object
show all
Includes:
ServiceModule::Base
Defined in:
app/services/spree/cart/recalculate.rb

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:, line_item:, line_item_created: false, options: {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/services/spree/cart/recalculate.rb', line 6

def call(order:, line_item:, line_item_created: false, options: {})
  order_updater = ::Spree::OrderUpdater.new(order)

  order.payments.store_credits.checkout.destroy_all
  order_updater.update

  shipment = options[:shipment]
  if shipment.present?
    # ADMIN END SHIPMENT RATE FIX
    # refresh shipments to ensure correct shipment amount is calculated when using price sack calculator
    # for calculating shipment rates.
    # Currently shipment rate is calculated on previous order total instead of current order total when updating a shipment from admin end.
    order.refresh_shipment_rates(::Spree::ShippingMethod::DISPLAY_ON_BACK_END)
    shipment.update_amounts
  else
    order.ensure_updated_shipments
  end

  ::Spree::PromotionHandler::Cart.new(order, line_item).activate
  ::Spree::Adjustable::AdjustmentsUpdater.update(line_item)
  ::Spree::TaxRate.adjust(order, [line_item.reload]) if line_item_created
  order_updater.update
  success(line_item)
end