Sha256: 9e62730a9936267289cdd94cbfe3c08251ad6c85778acf00398b61603adb4faa

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module SolidusAfterpay
  class UpdateOrderAttributesService < BaseService
    def initialize(order:, afterpay_order_token:, payment_method:, request_env:)
      @order = order
      @afterpay_order_token = afterpay_order_token
      @payment_method = payment_method
      @request_env = request_env

      super()
    end

    def call
      return false if afterpay_order.nil?

      ::Spree::OrderUpdateAttributes.new(order, update_params, request_env: request_env).apply
    end

    private

    def afterpay_order
      @afterpay_order ||= payment_method.gateway.find_order(token: afterpay_order_token)
    end

    def shipping_rate
      @shipping_rate ||= ::Spree::ShippingRate.find(afterpay_order.shippingOptionIdentifier.to_i)
    end

    def update_params
      {
        email: afterpay_order.consumer.email,
        shipments_attributes: [{
          selected_shipping_rate_id: shipping_rate.id,
          id: shipping_rate.shipment.id
        }],
        payments_attributes: [{
          payment_method_id: payment_method.id,
          amount: afterpay_order.amount.amount,
          source_attributes: {
            token: afterpay_order_token
          }
        }]
      }
    end

    attr_reader :order, :afterpay_order_token, :payment_method, :request_env
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
solidus_afterpay-0.3.0 app/services/solidus_afterpay/update_order_attributes_service.rb
solidus_afterpay-0.2.0 app/services/solidus_afterpay/update_order_attributes_service.rb