Merge pull request #8731 from Matt-Yorkley/split-checkout-default-addresses

Split checkout: default address saving
This commit is contained in:
Filipe
2022-01-19 17:43:51 +00:00
committed by GitHub
5 changed files with 66 additions and 5 deletions

View File

@@ -30,7 +30,7 @@ module Spree
go_to_state :complete
end
attr_accessor :use_billing, :checkout_processing
attr_accessor :use_billing, :checkout_processing, :save_bill_address, :save_ship_address
token_resource
@@ -104,6 +104,8 @@ module Spree
before_save :update_shipping_fees!, if: :complete?
before_save :update_payment_fees!, if: :complete?
after_save_commit DefaultAddressUpdater
# -- Scopes
scope :not_empty, -> {
left_outer_joins(:line_items).where.not(spree_line_items: { id: nil })

View File

@@ -24,6 +24,7 @@ module Checkout
def apply_strong_parameters
@order_params = params.require(:order).permit(
:email, :shipping_method_id, :special_instructions, :existing_card_id,
:save_bill_address, :save_ship_address,
bill_address_attributes: ::PermittedAttributes::Address.attributes,
ship_address_attributes: ::PermittedAttributes::Address.attributes,
payments_attributes: [

View File

@@ -0,0 +1,42 @@
# frozen_string_literal: true
class DefaultAddressUpdater
def self.after_commit(order)
return unless order.save_bill_address || order.save_ship_address
new(order).call
end
def initialize(order)
@order = order
end
def call
assign_bill_addresses
assign_ship_addresses
customer.save
user&.save
end
private
attr_reader :order
delegate :save_ship_address, :save_bill_address, :customer, :user,
:bill_address_id, :ship_address_id, to: :order
def assign_bill_addresses
return unless save_bill_address
customer.bill_address_id = bill_address_id
user&.bill_address_id = bill_address_id
end
def assign_ship_addresses
return unless save_ship_address
customer.ship_address_id = ship_address_id
user&.ship_address_id = ship_address_id
end
end

View File

@@ -60,8 +60,8 @@
- if spree_current_user||true
%div.checkout-input
= f.check_box :checkout_default_bill_address
= f.label :checkout_default_bill_address, t(:checkout_default_bill_address)
= f.check_box :save_bill_address
= f.label :save_bill_address, t(:checkout_default_bill_address)
%div.checkout-substep{ "data-controller": "toggle shippingmethod" }
- selected_shipping_method = @order.shipping_method&.id || params[:shipping_method_id]
@@ -136,8 +136,8 @@
- if spree_current_user
%div.checkout-input{ "data-toggle-target": "content", style: "display: none" }
= f.check_box :default_ship_address, { id: "default_ship_address", name: "default_ship_address" }
= f.label :default_ship_address, t(:checkout_default_ship_address), { for: "default_ship_address" }
= f.check_box :save_ship_address
= f.label :save_ship_address, t(:checkout_default_ship_address)
.div.checkout-input
= f.label :special_instructions, t(:checkout_instructions)

View File

@@ -82,6 +82,22 @@ describe SplitCheckoutController, type: :controller do
expect(response).to redirect_to checkout_step_path(:payment)
expect(order.reload.state).to eq "payment"
end
describe "saving default addresses" do
it "updates default bill address on user and customer" do
put :update, params: params.merge({ order: { save_bill_address: true } })
expect(order.customer.bill_address).to eq(order.bill_address)
expect(order.user.bill_address).to eq(order.bill_address)
end
it "updates default ship address on user and customer" do
put :update, params: params.merge({ order: { save_ship_address: true } })
expect(order.customer.ship_address).to eq(order.ship_address)
expect(order.user.ship_address).to eq(order.ship_address)
end
end
end
end