solidus_core 2.9.5 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +4 -4
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +2 -2
- data/app/models/concerns/spree/user_methods.rb +2 -2
- data/app/models/spree/address.rb +13 -17
- data/app/models/spree/adjustment.rb +20 -9
- data/app/models/spree/asset.rb +1 -1
- data/app/models/spree/base.rb +0 -2
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
- data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
- data/app/models/spree/calculator/tiered_percent.rb +6 -6
- data/app/models/spree/carton.rb +3 -3
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/credit_card.rb +4 -4
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/image/paperclip_attachment.rb +1 -1
- data/app/models/spree/inventory_unit.rb +5 -23
- data/app/models/spree/line_item.rb +4 -4
- data/app/models/spree/line_item_action.rb +2 -2
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/option_values_variant.rb +2 -2
- data/app/models/spree/order.rb +11 -27
- data/app/models/spree/order/checkout.rb +1 -1
- data/app/models/spree/order/payments.rb +2 -2
- data/app/models/spree/order_cancellations.rb +1 -1
- data/app/models/spree/order_capturing.rb +2 -2
- data/app/models/spree/order_contents.rb +2 -2
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_promotion.rb +3 -3
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_taxation.rb +3 -3
- data/app/models/spree/payment.rb +8 -45
- data/app/models/spree/payment/processing.rb +3 -3
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/payment_method.rb +5 -2
- data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
- data/app/models/spree/payment_source.rb +1 -1
- data/app/models/spree/price.rb +2 -2
- data/app/models/spree/product.rb +5 -5
- data/app/models/spree/product/scopes.rb +218 -210
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_promotion_rule.rb +2 -2
- data/app/models/spree/product_property.rb +2 -2
- data/app/models/spree/promotion.rb +28 -13
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/option_value.rb +2 -2
- data/app/models/spree/promotion/rules/product.rb +3 -3
- data/app/models/spree/promotion_action.rb +2 -2
- data/app/models/spree/promotion_chooser.rb +2 -2
- data/app/models/spree/promotion_code.rb +11 -10
- data/app/models/spree/promotion_code/batch_builder.rb +3 -3
- data/app/models/spree/promotion_code_batch.rb +1 -1
- data/app/models/spree/promotion_rule.rb +2 -2
- data/app/models/spree/promotion_rule_role.rb +2 -2
- data/app/models/spree/promotion_rule_store.rb +2 -2
- data/app/models/spree/promotion_rule_taxon.rb +2 -2
- data/app/models/spree/promotion_rule_user.rb +2 -2
- data/app/models/spree/refund.rb +5 -5
- data/app/models/spree/reimbursement.rb +5 -13
- data/app/models/spree/reimbursement/credit.rb +2 -2
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
- data/app/models/spree/return_authorization.rb +4 -10
- data/app/models/spree/return_item.rb +13 -52
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/role_user.rb +2 -2
- data/app/models/spree/shipment.rb +7 -41
- data/app/models/spree/shipping_calculator.rb +0 -4
- data/app/models/spree/shipping_manifest.rb +3 -3
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_method_stock_location.rb +2 -2
- data/app/models/spree/shipping_method_zone.rb +2 -2
- data/app/models/spree/shipping_rate.rb +2 -2
- data/app/models/spree/shipping_rate_tax.rb +2 -2
- data/app/models/spree/state.rb +2 -2
- data/app/models/spree/state_change.rb +2 -2
- data/app/models/spree/stock/differentiator.rb +1 -1
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock_item.rb +3 -3
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +13 -12
- data/app/models/spree/store_credit.rb +8 -8
- data/app/models/spree/store_credit_event.rb +3 -3
- data/app/models/spree/store_payment_method.rb +2 -2
- data/app/models/spree/store_shipping_method.rb +2 -2
- data/app/models/spree/tax_calculator/default.rb +0 -4
- data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
- data/app/models/spree/tax_rate.rb +5 -1
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
- data/app/models/spree/unit_cancel.rb +5 -2
- data/app/models/spree/user_address.rb +2 -2
- data/app/models/spree/user_last_url_storer.rb +46 -0
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
- data/app/models/spree/user_stock_location.rb +2 -2
- data/app/models/spree/variant.rb +10 -10
- data/app/models/spree/variant/scopes.rb +37 -29
- data/app/models/spree/variant_property_rule.rb +1 -1
- data/app/models/spree/variant_property_rule_condition.rb +2 -2
- data/app/models/spree/variant_property_rule_value.rb +2 -2
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +1 -1
- data/app/models/spree/zone_member.rb +2 -2
- data/config/initializers/inflections.rb +5 -0
- data/config/initializers/money.rb +2 -0
- data/config/locales/en.yml +34 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
- data/lib/spree/app_configuration.rb +18 -3
- data/lib/spree/core.rb +12 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -13
- data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
- data/lib/spree/core/engine.rb +2 -2
- data/lib/spree/core/importer/order.rb +29 -28
- data/lib/spree/core/importer/product.rb +2 -2
- data/lib/spree/core/product_filters.rb +15 -15
- data/lib/spree/core/role_configuration.rb +2 -2
- data/lib/spree/core/search/variant.rb +1 -1
- data/lib/spree/core/state_machines.rb +78 -0
- data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
- data/lib/spree/core/state_machines/payment.rb +61 -0
- data/lib/spree/core/state_machines/reimbursement.rb +33 -0
- data/lib/spree/core/state_machines/return_authorization.rb +32 -0
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/lib/spree/core/state_machines/shipment.rb +58 -0
- data/lib/spree/core/stock_configuration.rb +1 -0
- data/lib/spree/core/validators/email.rb +1 -8
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permission_sets/default_customer.rb +1 -1
- data/lib/spree/permission_sets/user_management.rb +3 -0
- data/lib/spree/permitted_attributes.rb +78 -9
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/testing_support/dummy_app.rb +4 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -1
- data/solidus_core.gemspec +6 -6
- data/spec/lib/search/base_spec.rb +5 -1
- data/spec/lib/search/variant_spec.rb +1 -1
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +8 -1
- data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
- data/spec/lib/spree/core/validators/email_spec.rb +18 -18
- data/spec/lib/spree/event_spec.rb +15 -3
- data/spec/lib/spree/permitted_attributes_spec.rb +41 -0
- data/spec/models/spree/ability_spec.rb +1 -1
- data/spec/models/spree/address_spec.rb +23 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
- data/spec/models/spree/carton_spec.rb +10 -2
- data/spec/models/spree/classification_spec.rb +21 -9
- data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
- data/spec/models/spree/concerns/user_methods_spec.rb +5 -4
- data/spec/models/spree/credit_card_spec.rb +2 -2
- data/spec/models/spree/customer_return_spec.rb +1 -1
- data/spec/models/spree/order/checkout_spec.rb +1 -1
- data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
- data/spec/models/spree/order/payment_spec.rb +1 -1
- data/spec/models/spree/order_contents_spec.rb +1 -1
- data/spec/models/spree/order_inventory_spec.rb +3 -3
- data/spec/models/spree/order_merger_spec.rb +3 -3
- data/spec/models/spree/order_shipping_spec.rb +1 -1
- data/spec/models/spree/order_spec.rb +14 -21
- data/spec/models/spree/order_updater_spec.rb +4 -3
- data/spec/models/spree/payment_create_spec.rb +6 -16
- data/spec/models/spree/payment_spec.rb +12 -12
- data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
- data/spec/models/spree/preference_spec.rb +4 -4
- data/spec/models/spree/preferences/preferable_spec.rb +3 -3
- data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -0
- data/spec/models/spree/promotion_rule_spec.rb +6 -6
- data/spec/models/spree/promotion_spec.rb +71 -54
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +3 -3
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
- data/spec/models/spree/return_item_spec.rb +11 -11
- data/spec/models/spree/returns_calculator_spec.rb +2 -2
- data/spec/models/spree/shipment_spec.rb +6 -6
- data/spec/models/spree/shipping_calculator_spec.rb +1 -13
- data/spec/models/spree/shipping_method_spec.rb +32 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
- data/spec/models/spree/stock/differentiator_spec.rb +2 -2
- data/spec/models/spree/stock/estimator_spec.rb +3 -3
- data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
- data/spec/models/spree/stock/package_spec.rb +28 -28
- data/spec/models/spree/stock/quantifier_spec.rb +2 -2
- data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
- data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
- data/spec/models/spree/stock_quantities_spec.rb +1 -1
- data/spec/models/spree/store_credit_spec.rb +8 -8
- data/spec/models/spree/tax_category_spec.rb +1 -1
- data/spec/models/spree/tax_rate_spec.rb +1 -0
- data/spec/models/spree/taxon_spec.rb +2 -2
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
- data/spec/models/spree/unit_cancel_spec.rb +5 -0
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
- data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
- data/spec/models/spree/user_spec.rb +3 -3
- metadata +46 -39
- data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
- data/spec/models/spree/order/updating_spec.rb +0 -18
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class OptionValue < Spree::Base
|
|
5
|
-
belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values
|
|
5
|
+
belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values, optional: true
|
|
6
6
|
acts_as_list scope: :option_type
|
|
7
7
|
|
|
8
8
|
has_many :option_values_variants, dependent: :destroy
|
data/app/models/spree/order.rb
CHANGED
|
@@ -55,15 +55,15 @@ module Spree
|
|
|
55
55
|
deprecate :temporary_credit_card= => :temporary_payment_source=, deprecator: Spree::Deprecation
|
|
56
56
|
|
|
57
57
|
# Customer info
|
|
58
|
-
belongs_to :user, class_name: Spree::UserClassHandle.new
|
|
59
|
-
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address'
|
|
58
|
+
belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true
|
|
59
|
+
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address', optional: true
|
|
60
60
|
alias_attribute :billing_address, :bill_address
|
|
61
61
|
|
|
62
|
-
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address'
|
|
62
|
+
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address', optional: true
|
|
63
63
|
alias_attribute :shipping_address, :ship_address
|
|
64
64
|
alias_attribute :ship_total, :shipment_total
|
|
65
65
|
|
|
66
|
-
belongs_to :store, class_name: 'Spree::Store'
|
|
66
|
+
belongs_to :store, class_name: 'Spree::Store', optional: true
|
|
67
67
|
|
|
68
68
|
# Items
|
|
69
69
|
has_many :line_items, -> { order(:created_at, :id) }, dependent: :destroy, inverse_of: :order
|
|
@@ -93,6 +93,7 @@ module Spree
|
|
|
93
93
|
|
|
94
94
|
# Payments
|
|
95
95
|
has_many :payments, dependent: :destroy, inverse_of: :order
|
|
96
|
+
has_many :valid_store_credit_payments, -> { store_credits.valid }, inverse_of: :order, class_name: 'Spree::Payment', foreign_key: :order_id
|
|
96
97
|
|
|
97
98
|
# Returns
|
|
98
99
|
has_many :return_authorizations, dependent: :destroy, inverse_of: :order
|
|
@@ -101,9 +102,9 @@ module Spree
|
|
|
101
102
|
|
|
102
103
|
# Logging
|
|
103
104
|
has_many :state_changes, as: :stateful
|
|
104
|
-
belongs_to :created_by, class_name: Spree::UserClassHandle.new
|
|
105
|
-
belongs_to :approver, class_name: Spree::UserClassHandle.new
|
|
106
|
-
belongs_to :canceler, class_name: Spree::UserClassHandle.new
|
|
105
|
+
belongs_to :created_by, class_name: Spree::UserClassHandle.new, optional: true
|
|
106
|
+
belongs_to :approver, class_name: Spree::UserClassHandle.new, optional: true
|
|
107
|
+
belongs_to :canceler, class_name: Spree::UserClassHandle.new, optional: true
|
|
107
108
|
|
|
108
109
|
accepts_nested_attributes_for :line_items
|
|
109
110
|
accepts_nested_attributes_for :bill_address
|
|
@@ -435,13 +436,6 @@ module Spree
|
|
|
435
436
|
touch :completed_at
|
|
436
437
|
|
|
437
438
|
Spree::Event.fire 'order_finalized', order: self
|
|
438
|
-
|
|
439
|
-
if method(:deliver_order_confirmation_email).owner != self.class
|
|
440
|
-
Spree::Deprecation.warn \
|
|
441
|
-
"deliver_order_confirmation_email has been deprecated and moved to " \
|
|
442
|
-
"Spree::MailerSubscriber#order_finalized, please move there any customizations.",
|
|
443
|
-
caller(1)
|
|
444
|
-
end
|
|
445
439
|
end
|
|
446
440
|
|
|
447
441
|
def fulfill!
|
|
@@ -450,16 +444,6 @@ module Spree
|
|
|
450
444
|
save!
|
|
451
445
|
end
|
|
452
446
|
|
|
453
|
-
def deliver_order_confirmation_email
|
|
454
|
-
Spree::Deprecation.warn \
|
|
455
|
-
"deliver_order_confirmation_email has been deprecated and moved to " \
|
|
456
|
-
"Spree::MailerSubscriber#order_finalized.",
|
|
457
|
-
caller(1)
|
|
458
|
-
|
|
459
|
-
Spree::Config.order_mailer_class.confirm_email(order).deliver_later
|
|
460
|
-
order.update_column(:confirmation_delivered, true)
|
|
461
|
-
end
|
|
462
|
-
|
|
463
447
|
# Helper methods for checkout steps
|
|
464
448
|
def paid?
|
|
465
449
|
%w(paid credit_owed).include?(payment_state)
|
|
@@ -548,7 +532,7 @@ module Spree
|
|
|
548
532
|
def create_proposed_shipments
|
|
549
533
|
if completed?
|
|
550
534
|
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed'))
|
|
551
|
-
elsif shipments.any? { |
|
|
535
|
+
elsif shipments.any? { |shipment| !shipment.pending? }
|
|
552
536
|
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_shipments_not_pending'))
|
|
553
537
|
else
|
|
554
538
|
shipments.destroy_all
|
|
@@ -676,7 +660,7 @@ module Spree
|
|
|
676
660
|
if remaining_total.zero?
|
|
677
661
|
other_payments.each(&:invalidate!)
|
|
678
662
|
elsif other_payments.size == 1
|
|
679
|
-
other_payments.first.
|
|
663
|
+
other_payments.first.update!(amount: remaining_total)
|
|
680
664
|
end
|
|
681
665
|
|
|
682
666
|
payments.reset
|
|
@@ -703,7 +687,7 @@ module Spree
|
|
|
703
687
|
|
|
704
688
|
def total_applicable_store_credit
|
|
705
689
|
if can_complete? || complete?
|
|
706
|
-
|
|
690
|
+
valid_store_credit_payments.to_a.sum(&:amount)
|
|
707
691
|
else
|
|
708
692
|
[total, (user.try(:available_store_credit_total, currency: currency) || 0.0)].min
|
|
709
693
|
end
|
|
@@ -41,7 +41,7 @@ module Spree
|
|
|
41
41
|
# On first definition, state_machines will not be defined
|
|
42
42
|
state_machines.clear if respond_to?(:state_machines)
|
|
43
43
|
state_machine :state, initial: :cart, use_transactions: false do
|
|
44
|
-
klass.next_event_transitions.each { |
|
|
44
|
+
klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
|
|
45
45
|
|
|
46
46
|
# Persist the state on the order
|
|
47
47
|
after_transition do |order, transition|
|
|
@@ -46,9 +46,9 @@ module Spree
|
|
|
46
46
|
|
|
47
47
|
payment.public_send(method)
|
|
48
48
|
end
|
|
49
|
-
rescue Core::GatewayError =>
|
|
49
|
+
rescue Core::GatewayError => error
|
|
50
50
|
result = !!Spree::Config[:allow_checkout_on_gateway_error]
|
|
51
|
-
errors.add(:base,
|
|
51
|
+
errors.add(:base, error.message) && (return result)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
@@ -139,7 +139,7 @@ class Spree::OrderCancellations
|
|
|
139
139
|
|
|
140
140
|
shipments.each do |shipment|
|
|
141
141
|
if shipment.inventory_units.all? { |iu| iu.shipped? || iu.canceled? }
|
|
142
|
-
shipment.
|
|
142
|
+
shipment.update!(state: 'shipped', shipped_at: Time.current)
|
|
143
143
|
end
|
|
144
144
|
end
|
|
145
145
|
end
|
|
@@ -41,8 +41,8 @@ class Spree::OrderCapturing
|
|
|
41
41
|
private
|
|
42
42
|
|
|
43
43
|
def sorted_payments(order)
|
|
44
|
-
order.payments.pending.sort_by do |
|
|
45
|
-
[@sorted_payment_method_classes.index(
|
|
44
|
+
order.payments.pending.sort_by do |payment|
|
|
45
|
+
[@sorted_payment_method_classes.index(payment.payment_method.class), payment.id]
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -35,7 +35,7 @@ module Spree
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def update_cart(params)
|
|
38
|
-
if order.
|
|
38
|
+
if order.update(params)
|
|
39
39
|
unless order.completed?
|
|
40
40
|
order.line_items = order.line_items.select { |li| li.quantity > 0 }
|
|
41
41
|
# Update totals, then check if the order is eligible for any cart promotions.
|
|
@@ -61,7 +61,7 @@ module Spree
|
|
|
61
61
|
raise ArgumentError, 'user or name must be specified'
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
order.
|
|
64
|
+
order.update!(
|
|
65
65
|
approver: user,
|
|
66
66
|
approver_name: name,
|
|
67
67
|
approved_at: Time.current
|
|
@@ -4,7 +4,7 @@ module Spree
|
|
|
4
4
|
class OrderMutex < Spree::Base
|
|
5
5
|
class LockFailed < StandardError; end
|
|
6
6
|
|
|
7
|
-
belongs_to :order, class_name: "Spree::Order"
|
|
7
|
+
belongs_to :order, class_name: "Spree::Order", optional: true
|
|
8
8
|
|
|
9
9
|
scope :expired, -> { where(arel_table[:created_at].lteq(Spree::Config[:order_mutex_max_age].seconds.ago)) }
|
|
10
10
|
|
|
@@ -8,9 +8,9 @@ module Spree
|
|
|
8
8
|
class OrderPromotion < Spree::Base
|
|
9
9
|
self.table_name = 'spree_orders_promotions'
|
|
10
10
|
|
|
11
|
-
belongs_to :order, class_name: 'Spree::Order'
|
|
12
|
-
belongs_to :promotion, class_name: 'Spree::Promotion'
|
|
13
|
-
belongs_to :promotion_code, class_name: 'Spree::PromotionCode'
|
|
11
|
+
belongs_to :order, class_name: 'Spree::Order', optional: true
|
|
12
|
+
belongs_to :promotion, class_name: 'Spree::Promotion', optional: true
|
|
13
|
+
belongs_to :promotion_code, class_name: 'Spree::PromotionCode', optional: true
|
|
14
14
|
|
|
15
15
|
validates :order, presence: true
|
|
16
16
|
validates :promotion, presence: true
|
|
@@ -64,7 +64,7 @@ class Spree::OrderShipping
|
|
|
64
64
|
inventory_units.map(&:shipment).uniq.each do |shipment|
|
|
65
65
|
# Temporarily propagate the tracking number to the shipment as well
|
|
66
66
|
# TODO: Remove tracking numbers from shipments.
|
|
67
|
-
shipment.
|
|
67
|
+
shipment.update!(tracking: tracking_number)
|
|
68
68
|
|
|
69
69
|
next unless shipment.inventory_units.reload.all? { |iu| iu.shipped? || iu.canceled? }
|
|
70
70
|
# TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
|
|
@@ -25,12 +25,12 @@ module Spree
|
|
|
25
25
|
# @return [void]
|
|
26
26
|
def apply(taxes)
|
|
27
27
|
@order.line_items.each do |item|
|
|
28
|
-
taxed_items = taxes.line_item_taxes.select { |
|
|
28
|
+
taxed_items = taxes.line_item_taxes.select { |element| element.item_id == item.id }
|
|
29
29
|
update_adjustments(item, taxed_items)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
@order.shipments.each do |item|
|
|
33
|
-
taxed_items = taxes.shipment_taxes.select { |
|
|
33
|
+
taxed_items = taxes.shipment_taxes.select { |element| element.item_id == item.id }
|
|
34
34
|
update_adjustments(item, taxed_items)
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -74,7 +74,7 @@ module Spree
|
|
|
74
74
|
label: tax_item.label,
|
|
75
75
|
included: tax_item.included_in_price
|
|
76
76
|
)
|
|
77
|
-
tax_adjustment.
|
|
77
|
+
tax_adjustment.update!(amount: tax_item.amount)
|
|
78
78
|
tax_adjustment
|
|
79
79
|
end
|
|
80
80
|
end
|
data/app/models/spree/payment.rb
CHANGED
|
@@ -15,9 +15,9 @@ module Spree
|
|
|
15
15
|
NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
|
|
16
16
|
RISKY_AVS_CODES = ['A', 'C', 'E', 'F', 'G', 'I', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'U', 'W', 'Z'].freeze
|
|
17
17
|
|
|
18
|
-
belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments
|
|
19
|
-
belongs_to :source, polymorphic: true
|
|
20
|
-
belongs_to :payment_method, -> { with_deleted }, class_name: 'Spree::PaymentMethod', inverse_of: :payments
|
|
18
|
+
belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments, optional: true
|
|
19
|
+
belongs_to :source, polymorphic: true, optional: true
|
|
20
|
+
belongs_to :payment_method, -> { with_deleted }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true
|
|
21
21
|
|
|
22
22
|
has_many :offsets, -> { offset_payment }, class_name: "Spree::Payment", foreign_key: :source_id
|
|
23
23
|
has_many :log_entries, as: :source
|
|
@@ -47,7 +47,7 @@ module Spree
|
|
|
47
47
|
default_scope -> { order(:created_at) }
|
|
48
48
|
|
|
49
49
|
scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') }
|
|
50
|
-
scope :with_state, ->(
|
|
50
|
+
scope :with_state, ->(state) { where(state: state.to_s) }
|
|
51
51
|
# "offset" is reserved by activerecord
|
|
52
52
|
scope :offset_payment, -> { where("source_type = 'Spree::Payment' AND amount < 0 AND state = 'completed'") }
|
|
53
53
|
|
|
@@ -63,44 +63,7 @@ module Spree
|
|
|
63
63
|
scope :store_credits, -> { where(source_type: Spree::StoreCredit.to_s) }
|
|
64
64
|
scope :not_store_credits, -> { where(arel_table[:source_type].not_eq(Spree::StoreCredit.to_s).or(arel_table[:source_type].eq(nil))) }
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
state_machine initial: :checkout do
|
|
68
|
-
# With card payments, happens before purchase or authorization happens
|
|
69
|
-
#
|
|
70
|
-
# Setting it after creating a profile and authorizing a full amount will
|
|
71
|
-
# prevent the payment from being authorized again once Order transitions
|
|
72
|
-
# to complete
|
|
73
|
-
event :started_processing do
|
|
74
|
-
transition from: [:checkout, :pending, :completed, :processing], to: :processing
|
|
75
|
-
end
|
|
76
|
-
# When processing during checkout fails
|
|
77
|
-
event :failure do
|
|
78
|
-
transition from: [:pending, :processing], to: :failed
|
|
79
|
-
end
|
|
80
|
-
# With card payments this represents authorizing the payment
|
|
81
|
-
event :pend do
|
|
82
|
-
transition from: [:checkout, :processing], to: :pending
|
|
83
|
-
end
|
|
84
|
-
# With card payments this represents completing a purchase or capture transaction
|
|
85
|
-
event :complete do
|
|
86
|
-
transition from: [:processing, :pending, :checkout], to: :completed
|
|
87
|
-
end
|
|
88
|
-
event :void do
|
|
89
|
-
transition from: [:pending, :processing, :completed, :checkout], to: :void
|
|
90
|
-
end
|
|
91
|
-
# when the card brand isnt supported
|
|
92
|
-
event :invalidate do
|
|
93
|
-
transition from: [:checkout], to: :invalid
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
after_transition do |payment, transition|
|
|
97
|
-
payment.state_changes.create!(
|
|
98
|
-
previous_state: transition.from,
|
|
99
|
-
next_state: transition.to,
|
|
100
|
-
name: 'payment'
|
|
101
|
-
)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
66
|
+
include ::Spree::Config.state_machines.payment
|
|
104
67
|
|
|
105
68
|
# @return [String] this payment's response code
|
|
106
69
|
def transaction_id
|
|
@@ -232,8 +195,8 @@ module Spree
|
|
|
232
195
|
return if source.imported
|
|
233
196
|
|
|
234
197
|
payment_method.create_profile(self)
|
|
235
|
-
rescue ActiveMerchant::ConnectionError =>
|
|
236
|
-
gateway_error
|
|
198
|
+
rescue ActiveMerchant::ConnectionError => error
|
|
199
|
+
gateway_error error
|
|
237
200
|
end
|
|
238
201
|
|
|
239
202
|
def invalidate_old_payments
|
|
@@ -273,7 +236,7 @@ module Spree
|
|
|
273
236
|
# type of payment getting refunded, hence the additional check
|
|
274
237
|
# if the source is a store credit.
|
|
275
238
|
if store_credit? && source.is_a?(Spree::StoreCredit)
|
|
276
|
-
source.
|
|
239
|
+
source.update!({
|
|
277
240
|
action: Spree::StoreCredit::ELIGIBLE_ACTION,
|
|
278
241
|
action_amount: amount,
|
|
279
242
|
action_authorization_code: response_code
|
|
@@ -59,7 +59,7 @@ module Spree
|
|
|
59
59
|
)
|
|
60
60
|
money = ::Money.new(amount, currency)
|
|
61
61
|
capture_events.create!(amount: money.to_d)
|
|
62
|
-
|
|
62
|
+
update!(amount: captured_amount)
|
|
63
63
|
handle_response(response, :complete, :failure)
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -199,8 +199,8 @@ module Spree
|
|
|
199
199
|
|
|
200
200
|
def protect_from_connection_error
|
|
201
201
|
yield
|
|
202
|
-
rescue ActiveMerchant::ConnectionError =>
|
|
203
|
-
gateway_error(
|
|
202
|
+
rescue ActiveMerchant::ConnectionError => error
|
|
203
|
+
gateway_error(error)
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
def gateway_error(error)
|
|
@@ -93,8 +93,8 @@ module Spree
|
|
|
93
93
|
else
|
|
94
94
|
active.available_to_users.available_to_admin
|
|
95
95
|
end
|
|
96
|
-
available_payment_methods.select do |
|
|
97
|
-
store.nil? || store.payment_methods.empty? || store.payment_methods.include?(
|
|
96
|
+
available_payment_methods.select do |payment|
|
|
97
|
+
store.nil? || store.payment_methods.empty? || store.payment_methods.include?(payment)
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
100
|
|
|
@@ -199,6 +199,9 @@ module Spree
|
|
|
199
199
|
# 4. app/views/spree/admin/payments/source_views/_{partial_name}.html.erb
|
|
200
200
|
# The view that represents your payment method on orders in the backend
|
|
201
201
|
#
|
|
202
|
+
# 5. app/views/spree/api/payments/source_views/_{partial_name}.json.jbuilder
|
|
203
|
+
# The view that represents your payment method on orders through the api
|
|
204
|
+
#
|
|
202
205
|
def partial_name
|
|
203
206
|
deprecated_method_type_override || type.demodulize.underscore
|
|
204
207
|
end
|
|
@@ -19,7 +19,7 @@ module Spree
|
|
|
19
19
|
return if payment.source.has_payment_profile?
|
|
20
20
|
# simulate the storage of credit card profile using remote service
|
|
21
21
|
if success = VALID_CCS.include?(payment.source.number)
|
|
22
|
-
payment.source.
|
|
22
|
+
payment.source.update(gateway_customer_profile_id: generate_profile_id(success))
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -4,7 +4,7 @@ module Spree
|
|
|
4
4
|
class PaymentSource < Spree::Base
|
|
5
5
|
self.abstract_class = true
|
|
6
6
|
|
|
7
|
-
belongs_to :payment_method
|
|
7
|
+
belongs_to :payment_method, optional: true
|
|
8
8
|
|
|
9
9
|
has_many :payments, as: :source
|
|
10
10
|
has_many :wallet_payment_sources, class_name: 'Spree::WalletPaymentSource', as: :payment_source, inverse_of: :payment_source
|
data/app/models/spree/price.rb
CHANGED
|
@@ -12,8 +12,8 @@ module Spree
|
|
|
12
12
|
|
|
13
13
|
MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
|
|
14
14
|
|
|
15
|
-
belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', touch: true
|
|
16
|
-
belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso"
|
|
15
|
+
belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', touch: true, optional: true
|
|
16
|
+
belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso", optional: true
|
|
17
17
|
|
|
18
18
|
delegate :product, to: :variant
|
|
19
19
|
delegate :tax_rates, to: :variant
|
data/app/models/spree/product.rb
CHANGED
|
@@ -25,7 +25,7 @@ module Spree
|
|
|
25
25
|
variants_including_master.discard_all
|
|
26
26
|
self.product_option_types = []
|
|
27
27
|
self.product_properties = []
|
|
28
|
-
self.classifications
|
|
28
|
+
self.classifications.destroy_all
|
|
29
29
|
self.product_promotion_rules = []
|
|
30
30
|
end
|
|
31
31
|
|
|
@@ -44,8 +44,8 @@ module Spree
|
|
|
44
44
|
has_many :product_promotion_rules, dependent: :destroy
|
|
45
45
|
has_many :promotion_rules, through: :product_promotion_rules
|
|
46
46
|
|
|
47
|
-
belongs_to :tax_category, class_name: 'Spree::TaxCategory'
|
|
48
|
-
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products
|
|
47
|
+
belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true
|
|
48
|
+
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products, optional: true
|
|
49
49
|
|
|
50
50
|
has_one :master,
|
|
51
51
|
-> { where(is_master: true).with_deleted },
|
|
@@ -190,7 +190,7 @@ module Spree
|
|
|
190
190
|
# @return [Hash] option_type as keys, array of variants as values.
|
|
191
191
|
def categorise_variants_from_option(opt_type, pricing_options = Spree::Config.default_pricing_options)
|
|
192
192
|
return {} unless option_types.include?(opt_type)
|
|
193
|
-
variants.with_prices(pricing_options).group_by { |
|
|
193
|
+
variants.with_prices(pricing_options).group_by { |variant| variant.option_values.detect { |option| option.option_type == opt_type } }
|
|
194
194
|
end
|
|
195
195
|
deprecate :categorise_variants_from_option, deprecator: Spree::Deprecation
|
|
196
196
|
|
|
@@ -323,7 +323,7 @@ module Spree
|
|
|
323
323
|
|
|
324
324
|
def any_variants_not_track_inventory?
|
|
325
325
|
if variants_including_master.loaded?
|
|
326
|
-
variants_including_master.any? { |
|
|
326
|
+
variants_including_master.any? { |variant| !variant.should_track_inventory? }
|
|
327
327
|
else
|
|
328
328
|
!Spree::Config.track_inventory_levels || variants_including_master.where(track_inventory: false).exists?
|
|
329
329
|
end
|