spree_core 3.0.10 → 3.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js.coffee.erb +12 -3
- data/app/helpers/spree/base_helper.rb +4 -1
- data/app/helpers/spree/products_helper.rb +37 -6
- data/app/mailers/spree/base_mailer.rb +11 -2
- data/app/models/concerns/spree/adjustment_source.rb +3 -10
- data/app/models/concerns/spree/default_price.rb +7 -1
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/user_api_authentication.rb +7 -1
- data/app/models/concerns/spree/user_methods.rb +47 -0
- data/app/models/concerns/spree/user_reporting.rb +2 -2
- data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
- data/app/models/spree/address.rb +8 -7
- data/app/models/spree/adjustable/adjuster/base.rb +25 -0
- data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
- data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
- data/app/models/spree/adjustable/adjustments_updater.rb +22 -45
- data/app/models/spree/adjustment.rb +8 -10
- data/app/models/spree/app_configuration.rb +5 -2
- data/app/models/spree/base.rb +4 -0
- data/app/models/spree/calculator.rb +0 -5
- data/app/models/spree/calculator/default_tax.rb +2 -10
- data/app/models/spree/classification.rb +7 -3
- data/app/models/spree/country.rb +14 -3
- data/app/models/spree/credit_card.rb +21 -31
- data/app/models/spree/customer_return.rb +7 -15
- data/app/models/spree/gateway.rb +7 -6
- data/app/models/spree/image.rb +1 -1
- data/app/models/spree/inventory_unit.rb +9 -6
- data/app/models/spree/legacy_user.rb +1 -6
- data/app/models/spree/line_item.rb +69 -68
- data/app/models/spree/log_entry.rb +1 -4
- data/app/models/spree/option_type.rb +15 -6
- data/app/models/spree/option_type_prototype.rb +9 -0
- data/app/models/spree/option_value.rb +11 -3
- data/app/models/spree/option_value_variant.rb +6 -0
- data/app/models/spree/order.rb +113 -64
- data/app/models/spree/order/checkout.rb +8 -11
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/store_credit.rb +96 -0
- data/app/models/spree/order_contents.rb +6 -1
- data/app/models/spree/order_inventory.rb +4 -8
- data/app/models/spree/order_promotion.rb +6 -0
- data/app/models/spree/order_updater.rb +2 -7
- data/app/models/spree/payment.rb +46 -19
- data/app/models/spree/payment/gateway_options.rb +8 -4
- data/app/models/spree/payment_method.rb +12 -13
- data/app/models/spree/payment_method/store_credit.rb +130 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +16 -6
- data/app/models/spree/product.rb +52 -49
- data/app/models/spree/product/scopes.rb +7 -2
- data/app/models/spree/product_option_type.rb +7 -2
- data/app/models/spree/product_promotion_rule.rb +9 -0
- data/app/models/spree/product_property.rb +8 -10
- data/app/models/spree/promotion.rb +19 -19
- data/app/models/spree/promotion/rules/product.rb +3 -1
- data/app/models/spree/promotion/rules/taxon.rb +2 -1
- data/app/models/spree/promotion/rules/user.rb +4 -4
- data/app/models/spree/promotion_action.rb +3 -3
- data/app/models/spree/promotion_category.rb +1 -1
- data/app/models/spree/promotion_rule_taxon.rb +9 -0
- data/app/models/spree/promotion_rule_user.rb +9 -0
- data/app/models/spree/property.rb +2 -1
- data/app/models/spree/property_prototype.rb +9 -0
- data/app/models/spree/prototype.rb +8 -3
- data/app/models/spree/prototype_taxon.rb +9 -0
- data/app/models/spree/refund.rb +10 -7
- data/app/models/spree/refund_reason.rb +1 -1
- data/app/models/spree/reimbursement.rb +12 -16
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +23 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
- data/app/models/spree/return_authorization.rb +8 -13
- data/app/models/spree/return_authorization_reason.rb +1 -1
- data/app/models/spree/return_item.rb +13 -12
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/role.rb +3 -2
- data/app/models/spree/role_user.rb +6 -0
- data/app/models/spree/shipment.rb +18 -23
- data/app/models/spree/shipment_handler.rb +2 -2
- data/app/models/spree/shipping_category.rb +6 -3
- data/app/models/spree/shipping_method.rb +11 -10
- data/app/models/spree/shipping_method_zone.rb +6 -0
- data/app/models/spree/shipping_rate.rb +16 -29
- data/app/models/spree/state.rb +3 -2
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/content_item.rb +10 -12
- data/app/models/spree/stock/coordinator.rb +13 -14
- data/app/models/spree/stock/estimator.rb +28 -30
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -9
- data/app/models/spree/stock/packer.rb +1 -1
- data/app/models/spree/stock/quantifier.rb +5 -5
- data/app/models/spree/stock/splitter/backordered.rb +2 -2
- data/app/models/spree/stock_item.rb +12 -18
- data/app/models/spree/stock_location.rb +4 -7
- data/app/models/spree/stock_movement.rb +11 -9
- data/app/models/spree/stock_transfer.rb +11 -12
- data/app/models/spree/store.rb +14 -6
- data/app/models/spree/store_credit.rb +252 -0
- data/app/models/spree/store_credit_category.rb +22 -0
- data/app/models/spree/store_credit_event.rb +38 -0
- data/app/models/spree/store_credit_type.rb +6 -0
- data/app/models/spree/tax_category.rb +3 -8
- data/app/models/spree/tax_rate.rb +56 -122
- data/app/models/spree/taxon.rb +11 -5
- data/app/models/spree/tracker.rb +12 -1
- data/app/models/spree/validations/db_maximum_length_validator.rb +2 -1
- data/app/models/spree/variant.rb +82 -50
- data/app/models/spree/zone.rb +21 -17
- data/app/models/spree/zone_member.rb +6 -0
- data/app/validators/db_maximum_length_validator.rb +11 -0
- data/app/views/layouts/spree/base_mailer.html.erb +38 -781
- data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
- data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
- data/app/views/spree/order_mailer/_total.html.erb +8 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +13 -28
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +49 -63
- data/app/views/spree/order_mailer/confirm_email.text.erb +1 -1
- data/app/views/spree/shared/_base_mailer_header.html.erb +5 -7
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
- data/app/views/spree/shared/_error_messages.html.erb +1 -1
- data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +21 -14
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +3 -3
- data/config/initializers/user_class_extensions.rb +7 -38
- data/config/locales/en.yml +113 -13
- data/config/routes.rb +7 -0
- data/db/default/spree/default_reimbursement_type.rb +1 -1
- data/db/default/spree/zones.rb +4 -5
- data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
- data/db/migrate/20150314013438_add_missing_indexes.rb +25 -0
- data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
- data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
- data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
- data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
- data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
- data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
- data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
- data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
- data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
- data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
- data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
- data/db/migrate/20160219165458_add_indexes.rb +14 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +31 -24
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -1
- data/lib/spree/core.rb +16 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -1
- data/lib/spree/core/controller_helpers/common.rb +3 -3
- data/lib/spree/core/controller_helpers/order.rb +6 -5
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +29 -0
- data/lib/spree/core/delegate_belongs_to.rb +2 -2
- data/lib/spree/core/engine.rb +30 -25
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/importer/order.rb +37 -40
- data/lib/spree/core/number_generator.rb +52 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/base.rb +4 -3
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/localized_number.rb +3 -1
- data/lib/spree/permitted_attributes.rb +5 -2
- data/lib/spree/testing_support/common_rake.rb +3 -3
- data/lib/spree/testing_support/factories.rb +3 -3
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +2 -2
- data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -0
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +9 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -0
- data/lib/spree/testing_support/factories/state_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
- data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
- data/lib/spree/testing_support/microdata.rb +189 -0
- data/lib/tasks/core.rake +68 -0
- data/lib/tasks/exchanges.rake +2 -2
- data/spec/fixtures/microdata.html +22 -0
- data/spec/fixtures/microdata_itemref.html +15 -0
- data/spec/fixtures/microdata_no_itemscope.html +20 -0
- data/spec/helpers/base_helper_spec.rb +64 -1
- data/spec/helpers/products_helper_spec.rb +75 -3
- data/spec/lib/i18n_spec.rb +2 -2
- data/spec/lib/search/base_spec.rb +2 -2
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +4 -2
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +56 -0
- data/spec/lib/spree/core/importer/order_spec.rb +226 -123
- data/spec/lib/spree/core/number_generator_spec.rb +175 -0
- data/spec/lib/spree/core_spec.rb +23 -0
- data/spec/lib/spree/localized_number_spec.rb +10 -0
- data/spec/mailers/order_mailer_spec.rb +11 -13
- data/spec/mailers/shipment_mailer_spec.rb +26 -8
- data/spec/mailers/test_mailer_spec.rb +15 -1
- data/spec/models/option_type_prototype_spec.rb +9 -0
- data/spec/models/spree/ability_spec.rb +6 -13
- data/spec/models/spree/address_spec.rb +1 -1
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +2 -262
- data/spec/models/spree/adjustment_spec.rb +27 -1
- data/spec/models/spree/app_configuration_spec.rb +5 -2
- data/spec/models/spree/calculator/default_tax_spec.rb +39 -14
- data/spec/models/spree/concerns/user_methods_spec.rb +55 -0
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
- data/spec/models/spree/country_spec.rb +45 -8
- data/spec/models/spree/credit_card_spec.rb +8 -8
- data/spec/models/spree/customer_return_spec.rb +4 -26
- data/spec/models/spree/gateway_spec.rb +7 -0
- data/spec/models/spree/image_spec.rb +3 -0
- data/spec/models/spree/inventory_unit_spec.rb +1 -18
- data/spec/models/spree/line_item_spec.rb +78 -18
- data/spec/models/spree/option_type_spec.rb +2 -2
- data/spec/models/spree/option_value_spec.rb +8 -3
- data/spec/models/spree/order/checkout_spec.rb +49 -39
- data/spec/models/spree/order/currency_updater_spec.rb +3 -3
- data/spec/models/spree/order/finalizing_spec.rb +0 -3
- data/spec/models/spree/order/payment_spec.rb +1 -1
- data/spec/models/spree/order/state_machine_spec.rb +1 -6
- data/spec/models/spree/order/store_credit_spec.rb +423 -0
- data/spec/models/spree/order/updating_spec.rb +2 -2
- data/spec/models/spree/order_contents_spec.rb +42 -1
- data/spec/models/spree/order_inventory_spec.rb +27 -17
- data/spec/models/spree/order_spec.rb +65 -52
- data/spec/models/spree/payment/gateway_options_spec.rb +10 -2
- data/spec/models/spree/payment/store_credit_spec.rb +60 -0
- data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
- data/spec/models/spree/payment_method_spec.rb +22 -14
- data/spec/models/spree/payment_spec.rb +37 -44
- data/spec/models/spree/price_spec.rb +86 -0
- data/spec/models/spree/product/scopes_spec.rb +35 -0
- data/spec/models/spree/product_option_type_spec.rb +6 -2
- data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
- data/spec/models/spree/product_property_spec.rb +11 -0
- data/spec/models/spree/product_spec.rb +82 -15
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/user_spec.rb +8 -0
- data/spec/models/spree/promotion_action_spec.rb +1 -1
- data/spec/models/spree/promotion_rule_spec.rb +1 -1
- data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
- data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
- data/spec/models/spree/promotion_spec.rb +57 -36
- data/spec/models/spree/property_prototype_spec.rb +9 -0
- data/spec/models/spree/prototype_taxon_spec.rb +9 -0
- data/spec/models/spree/refund_reason_spec.rb +7 -0
- data/spec/models/spree/reimbursement_spec.rb +3 -30
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +17 -5
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
- data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
- data/spec/models/spree/return_authorization_spec.rb +2 -22
- data/spec/models/spree/return_item_spec.rb +50 -1
- data/spec/models/spree/returns_calculator_spec.rb +1 -1
- data/spec/models/spree/role_spec.rb +7 -0
- data/spec/models/spree/shipment_spec.rb +17 -17
- data/spec/models/spree/shipping_calculator_spec.rb +2 -2
- data/spec/models/spree/shipping_category_spec.rb +14 -0
- data/spec/models/spree/shipping_method_spec.rb +9 -2
- data/spec/models/spree/shipping_rate_spec.rb +40 -41
- data/spec/models/spree/state_spec.rb +12 -1
- data/spec/models/spree/stock/content_item_spec.rb +9 -0
- data/spec/models/spree/stock/estimator_spec.rb +56 -8
- data/spec/models/spree/stock/quantifier_spec.rb +61 -32
- data/spec/models/spree/stock_item_spec.rb +19 -1
- data/spec/models/spree/store_credit_event_spec.rb +101 -0
- data/spec/models/spree/store_credit_spec.rb +786 -0
- data/spec/models/spree/store_spec.rb +39 -11
- data/spec/models/spree/tax_category_spec.rb +6 -1
- data/spec/models/spree/tax_rate_spec.rb +204 -44
- data/spec/models/spree/user_spec.rb +105 -38
- data/spec/models/spree/variant_spec.rb +281 -9
- data/spec/models/spree/zone_member_spec.rb +38 -0
- data/spec/models/spree/zone_spec.rb +32 -8
- data/spec/spec_helper.rb +3 -0
- data/spec/support/concerns/{adjustment_source_spec.rb → adjustment_source.rb} +0 -0
- data/spec/support/concerns/{default_price_spec.rb → default_price.rb} +9 -0
- data/spec/validators/db_maximum_length_validator_spec.rb +22 -0
- data/spree_core.gemspec +5 -6
- metadata +99 -36
- data/CHANGELOG.md +0 -4
- data/app/models/concerns/spree/number_generator.rb +0 -39
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -24
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spree
|
2
|
+
module Adjustable
|
3
|
+
module Adjuster
|
4
|
+
class Tax < Spree::Adjustable::Adjuster::Base
|
5
|
+
def update
|
6
|
+
tax = adjustments.tax
|
7
|
+
included_tax_total = tax.is_included.reload.map(&:update!).compact.sum
|
8
|
+
additional_tax_total = tax.additional.reload.map(&:update!).compact.sum
|
9
|
+
|
10
|
+
update_totals(included_tax_total, additional_tax_total)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def adjustments
|
16
|
+
adjustable.try(:all_adjustments) || adjustable.adjustments
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_totals(included_tax_total, additional_tax_total)
|
20
|
+
@totals[:included_tax_total] = included_tax_total
|
21
|
+
@totals[:additional_tax_total] = additional_tax_total
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -7,63 +7,40 @@ module Spree
|
|
7
7
|
|
8
8
|
def initialize(adjustable)
|
9
9
|
@adjustable = adjustable
|
10
|
-
adjustable.reload if shipment? && persisted?
|
10
|
+
adjustable.reload if shipment? && adjustable.persisted?
|
11
11
|
end
|
12
12
|
|
13
13
|
def update
|
14
|
-
return unless persisted?
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
delegate :adjustments, :persisted?, to: :adjustable
|
14
|
+
return unless @adjustable.persisted?
|
15
|
+
|
16
|
+
totals = {
|
17
|
+
non_taxable_adjustment_total: 0,
|
18
|
+
taxable_adjustment_total: 0
|
19
|
+
}
|
20
|
+
adjusters.each do |klass|
|
21
|
+
klass.adjust(@adjustable, totals)
|
22
|
+
end
|
24
23
|
|
25
|
-
|
26
|
-
promo_adjustments = adjustments.competing_promos.reload.map { |a| a.update!(adjustable) }
|
27
|
-
promos_total = promo_adjustments.compact.sum
|
28
|
-
choose_best_promo_adjustment unless promos_total == 0
|
29
|
-
@promo_total = best_promo_adjustment.try(:amount).to_f
|
24
|
+
persist_totals totals
|
30
25
|
end
|
31
26
|
|
32
|
-
|
33
|
-
tax = (adjustable.try(:all_adjustments) || adjustable.adjustments).tax
|
34
|
-
@included_tax_total = tax.is_included.reload.map(&:update!).compact.sum
|
35
|
-
@additional_tax_total = tax.additional.reload.map(&:update!).compact.sum
|
36
|
-
end
|
27
|
+
private
|
37
28
|
|
38
|
-
def persist_totals
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
)
|
29
|
+
def persist_totals(totals)
|
30
|
+
attributes = totals
|
31
|
+
attributes[:adjustment_total] = totals[:non_taxable_adjustment_total] +
|
32
|
+
totals[:taxable_adjustment_total] +
|
33
|
+
totals[:additional_tax_total]
|
34
|
+
attributes[:updated_at] = Time.current
|
35
|
+
@adjustable.update_columns(totals)
|
46
36
|
end
|
47
37
|
|
48
38
|
def shipment?
|
49
|
-
adjustable.is_a?(Shipment)
|
39
|
+
@adjustable.is_a?(Shipment)
|
50
40
|
end
|
51
41
|
|
52
|
-
|
53
|
-
|
54
|
-
# two adjustments have the same amount, then it will pick the
|
55
|
-
# latest one.
|
56
|
-
def choose_best_promo_adjustment
|
57
|
-
if best_promo_adjustment
|
58
|
-
other_promotions = adjustments.competing_promos.where.not(id: best_promo_adjustment.id)
|
59
|
-
other_promotions.update_all(eligible: false)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def best_promo_adjustment
|
64
|
-
@best_promo_adjustment ||= begin
|
65
|
-
adjustments.competing_promos.eligible.reorder("amount ASC, created_at DESC, id DESC").first
|
66
|
-
end
|
42
|
+
def adjusters
|
43
|
+
Rails.application.config.spree.adjusters
|
67
44
|
end
|
68
45
|
end
|
69
46
|
end
|
@@ -22,13 +22,13 @@
|
|
22
22
|
# it might be reinstated.
|
23
23
|
module Spree
|
24
24
|
class Adjustment < Spree::Base
|
25
|
-
|
26
|
-
|
25
|
+
with_options polymorphic: true do
|
26
|
+
belongs_to :adjustable, touch: true
|
27
|
+
belongs_to :source
|
28
|
+
end
|
27
29
|
belongs_to :order, class_name: 'Spree::Order', inverse_of: :all_adjustments
|
28
30
|
|
29
|
-
validates :adjustable, presence: true
|
30
|
-
validates :order, presence: true
|
31
|
-
validates :label, presence: true
|
31
|
+
validates :adjustable, :order, :label, presence: true
|
32
32
|
validates :amount, numericality: true
|
33
33
|
|
34
34
|
state_machine :state, initial: :open do
|
@@ -67,14 +67,12 @@ module Spree
|
|
67
67
|
scope :is_included, -> { where(included: true) }
|
68
68
|
scope :additional, -> { where(included: false) }
|
69
69
|
scope :competing_promos, -> { where(source_type: competing_promos_source_types) }
|
70
|
+
scope :for_complete_order, -> { joins(:order).merge(Spree::Order.complete) }
|
71
|
+
scope :for_incomplete_order, -> { joins(:order).merge(Spree::Order.incomplete) }
|
70
72
|
|
71
73
|
extend DisplayMoney
|
72
74
|
money_methods :amount
|
73
75
|
|
74
|
-
def closed?
|
75
|
-
state == "closed"
|
76
|
-
end
|
77
|
-
|
78
76
|
def currency
|
79
77
|
adjustable ? adjustable.currency : Spree::Config[:currency]
|
80
78
|
end
|
@@ -89,7 +87,7 @@ module Spree
|
|
89
87
|
def update!(target = adjustable)
|
90
88
|
return amount if closed? || source.blank?
|
91
89
|
amount = source.compute_amount(target)
|
92
|
-
attributes = { amount: amount, updated_at: Time.
|
90
|
+
attributes = { amount: amount, updated_at: Time.current }
|
93
91
|
attributes[:eligible] = source.promotion.eligible?(target) if promotion?
|
94
92
|
update_columns(attributes)
|
95
93
|
amount
|
@@ -22,6 +22,7 @@ module Spree
|
|
22
22
|
# Alphabetized to more easily lookup particular preferences
|
23
23
|
preference :address_requires_state, :boolean, default: true # should state/state_name be required
|
24
24
|
preference :admin_interface_logo, :string, default: 'logo/spree_50.png'
|
25
|
+
preference :admin_path, :string, default: '/admin'
|
25
26
|
preference :admin_products_per_page, :integer, default: 10
|
26
27
|
preference :allow_checkout_on_gateway_error, :boolean, default: false
|
27
28
|
preference :allow_guest_checkout, :boolean, default: true
|
@@ -48,6 +49,7 @@ module Spree
|
|
48
49
|
preference :require_master_price, :boolean, default: true
|
49
50
|
preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
|
50
51
|
preference :return_eligibility_number_of_days, :integer, default: 365
|
52
|
+
preference :send_core_emails, :boolean, default: true # Default mail headers settings
|
51
53
|
preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
|
52
54
|
preference :show_only_complete_orders_by_default, :boolean, default: true
|
53
55
|
preference :show_variant_full_price, :boolean, default: false #Displays variant full price or difference with product price. Default false to be compatible with older behavior
|
@@ -56,8 +58,9 @@ module Spree
|
|
56
58
|
preference :tax_using_ship_address, :boolean, default: true
|
57
59
|
preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
|
58
60
|
|
59
|
-
#
|
60
|
-
preference :
|
61
|
+
# Store credits configurations
|
62
|
+
preference :non_expiring_credit_types, :array, default: []
|
63
|
+
preference :credit_to_new_allocation, :boolean, default: false
|
61
64
|
|
62
65
|
# searcher_class allows spree extension writers to provide their own Search class
|
63
66
|
def searcher_class
|
data/app/models/spree/base.rb
CHANGED
@@ -27,11 +27,6 @@ module Spree
|
|
27
27
|
'Base Calculator'
|
28
28
|
end
|
29
29
|
|
30
|
-
###################################################################
|
31
|
-
|
32
|
-
def self.register(*klasses)
|
33
|
-
end
|
34
|
-
|
35
30
|
# Returns all calculators applicable for kind of work
|
36
31
|
def self.calculators
|
37
32
|
Rails.application.config.spree.calculators
|
@@ -2,6 +2,7 @@ require_dependency 'spree/calculator'
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class Calculator::DefaultTax < Calculator
|
5
|
+
include VatPriceCalculation
|
5
6
|
def self.description
|
6
7
|
Spree.t(:default_tax)
|
7
8
|
end
|
@@ -38,11 +39,7 @@ module Spree
|
|
38
39
|
def compute_shipping_rate(shipping_rate)
|
39
40
|
if rate.included_in_price
|
40
41
|
pre_tax_amount = shipping_rate.cost / (1 + rate.amount)
|
41
|
-
|
42
|
-
deduced_total_by_rate(pre_tax_amount, rate)
|
43
|
-
else
|
44
|
-
deduced_total_by_rate(pre_tax_amount, rate) * - 1
|
45
|
-
end
|
42
|
+
deduced_total_by_rate(pre_tax_amount, rate)
|
46
43
|
else
|
47
44
|
with_tax_amount = shipping_rate.cost * rate.amount
|
48
45
|
round_to_two_places(with_tax_amount)
|
@@ -55,13 +52,8 @@ module Spree
|
|
55
52
|
self.calculable
|
56
53
|
end
|
57
54
|
|
58
|
-
def round_to_two_places(amount)
|
59
|
-
BigDecimal.new(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
|
60
|
-
end
|
61
|
-
|
62
55
|
def deduced_total_by_rate(pre_tax_amount, rate)
|
63
56
|
round_to_two_places(pre_tax_amount * rate.amount)
|
64
57
|
end
|
65
|
-
|
66
58
|
end
|
67
59
|
end
|
@@ -2,10 +2,14 @@ module Spree
|
|
2
2
|
class Classification < Spree::Base
|
3
3
|
self.table_name = 'spree_products_taxons'
|
4
4
|
acts_as_list scope: :taxon
|
5
|
-
belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true
|
6
|
-
belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true
|
7
5
|
|
6
|
+
with_options inverse_of: :classifications, touch: true do
|
7
|
+
belongs_to :product, class_name: "Spree::Product"
|
8
|
+
belongs_to :taxon, class_name: "Spree::Taxon"
|
9
|
+
end
|
10
|
+
|
11
|
+
validates :taxon, :product, presence: true
|
8
12
|
# For #3494
|
9
|
-
|
13
|
+
validates :taxon_id, uniqueness: { scope: :product_id, message: :already_linked, allow_blank: true }
|
10
14
|
end
|
11
15
|
end
|
data/app/models/spree/country.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
class Country < Spree::Base
|
3
|
-
has_many :states,
|
4
|
-
has_many :addresses, dependent: :
|
3
|
+
has_many :states, dependent: :destroy
|
4
|
+
has_many :addresses, dependent: :restrict_with_error
|
5
5
|
|
6
6
|
has_many :zone_members,
|
7
7
|
-> { where(zoneable_type: 'Spree::Country') },
|
@@ -11,7 +11,9 @@ module Spree
|
|
11
11
|
|
12
12
|
has_many :zones, through: :zone_members, class_name: 'Spree::Zone'
|
13
13
|
|
14
|
-
|
14
|
+
before_destroy :ensure_not_default
|
15
|
+
|
16
|
+
validates :name, :iso_name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
|
15
17
|
|
16
18
|
def self.default
|
17
19
|
country_id = Spree::Config[:default_country_id]
|
@@ -25,5 +27,14 @@ module Spree
|
|
25
27
|
def to_s
|
26
28
|
name
|
27
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def ensure_not_default
|
34
|
+
if id.eql?(Spree::Config[:default_country_id])
|
35
|
+
errors.add(:base, Spree.t(:default_country_cannot_be_deleted))
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
28
39
|
end
|
29
40
|
end
|
@@ -8,15 +8,20 @@ module Spree
|
|
8
8
|
|
9
9
|
after_save :ensure_one_default
|
10
10
|
|
11
|
+
# As of rails 4.2 string columns always return strings, we can override it on model level.
|
12
|
+
attribute :month, Type::Integer.new
|
13
|
+
attribute :year, Type::Integer.new
|
14
|
+
|
15
|
+
attr_reader :number
|
11
16
|
attr_accessor :encrypted_data,
|
12
|
-
|
13
|
-
|
14
|
-
:verification_value
|
17
|
+
:imported,
|
18
|
+
:verification_value
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
with_options if: :require_card_numbers?, on: :create do
|
21
|
+
validates :month, :year, numericality: { only_integer: true }
|
22
|
+
validates :number, :verification_value, presence: true, unless: :imported
|
23
|
+
validates :name, presence: true
|
24
|
+
end
|
20
25
|
|
21
26
|
scope :with_payment_profile, -> { where('gateway_customer_profile_id IS NOT NULL') }
|
22
27
|
scope :default, -> { where(default: true) }
|
@@ -41,20 +46,6 @@ module Spree
|
|
41
46
|
jcb: /^(?:2131|1800|35\d{3})\d{11}$/
|
42
47
|
}
|
43
48
|
|
44
|
-
# As of rails 4.2 string columns always return strings, perhaps we should
|
45
|
-
# change these to integer columns on db level
|
46
|
-
def month
|
47
|
-
if type_casted = super
|
48
|
-
type_casted.to_i
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def year
|
53
|
-
if type_casted = super
|
54
|
-
type_casted.to_i
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
49
|
def expiry=(expiry)
|
59
50
|
return unless expiry.present?
|
60
51
|
|
@@ -65,7 +56,7 @@ module Spree
|
|
65
56
|
[match[1], match[2]]
|
66
57
|
end
|
67
58
|
if self[:year]
|
68
|
-
self[:year] = "20
|
59
|
+
self[:year] = "20#{ self[:year] }" if self[:year] / 100 == 0
|
69
60
|
self[:year] = self[:year].to_i
|
70
61
|
end
|
71
62
|
self[:month] = self[:month].to_i if self[:month]
|
@@ -144,12 +135,12 @@ module Spree
|
|
144
135
|
|
145
136
|
def to_active_merchant
|
146
137
|
ActiveMerchant::Billing::CreditCard.new(
|
147
|
-
:
|
148
|
-
:
|
149
|
-
:
|
150
|
-
:
|
151
|
-
:
|
152
|
-
:
|
138
|
+
number: number,
|
139
|
+
month: month,
|
140
|
+
year: year,
|
141
|
+
verification_value: verification_value,
|
142
|
+
first_name: first_name,
|
143
|
+
last_name: last_name,
|
153
144
|
)
|
154
145
|
end
|
155
146
|
|
@@ -161,9 +152,8 @@ module Spree
|
|
161
152
|
|
162
153
|
def ensure_one_default
|
163
154
|
if self.user_id && self.default
|
164
|
-
CreditCard.where(default: true).where.not(id: self.id)
|
165
|
-
|
166
|
-
end
|
155
|
+
CreditCard.where(default: true, user_id: self.user_id).where.not(id: self.id)
|
156
|
+
.update_all(default: false)
|
167
157
|
end
|
168
158
|
end
|
169
159
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
class CustomerReturn < Spree::Base
|
3
|
+
include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
|
3
4
|
belongs_to :stock_location
|
4
5
|
|
5
6
|
has_many :reimbursements, inverse_of: :customer_return
|
@@ -7,11 +8,8 @@ module Spree
|
|
7
8
|
has_many :return_items, inverse_of: :customer_return
|
8
9
|
|
9
10
|
after_create :process_return!
|
10
|
-
before_create :generate_number
|
11
|
-
|
12
|
-
validates :return_items, presence: true
|
13
|
-
validates :stock_location, presence: true
|
14
11
|
|
12
|
+
validates :return_items, :stock_location, presence: true
|
15
13
|
validate :must_have_return_authorization, on: :create
|
16
14
|
validate :return_items_belong_to_same_order
|
17
15
|
|
@@ -20,6 +18,10 @@ module Spree
|
|
20
18
|
extend DisplayMoney
|
21
19
|
money_methods pre_tax_total: { currency: Spree::Config[:currency] }
|
22
20
|
|
21
|
+
self.whitelisted_ransackable_attributes = ['number']
|
22
|
+
|
23
|
+
delegate :id, to: :order, prefix: true, allow_nil: true
|
24
|
+
|
23
25
|
def completely_decided?
|
24
26
|
!return_items.undecided.exists?
|
25
27
|
end
|
@@ -34,9 +36,6 @@ module Spree
|
|
34
36
|
return_items.first.inventory_unit.order
|
35
37
|
end
|
36
38
|
|
37
|
-
def order_id
|
38
|
-
order.try(:id)
|
39
|
-
end
|
40
39
|
|
41
40
|
def pre_tax_total
|
42
41
|
return_items.sum(:pre_tax_amount)
|
@@ -54,20 +53,13 @@ module Spree
|
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
57
|
-
def generate_number
|
58
|
-
self.number ||= loop do
|
59
|
-
random = "CR#{Array.new(9){rand(9)}.join}"
|
60
|
-
break random unless self.class.exists?(number: random)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
56
|
def process_return!
|
65
57
|
return_items.each(&:receive!)
|
66
58
|
order.return! if order.all_inventory_units_returned?
|
67
59
|
end
|
68
60
|
|
69
61
|
def return_items_belong_to_same_order
|
70
|
-
if return_items.
|
62
|
+
if return_items.any? { |return_item| return_item.inventory_unit.order_id != order_id }
|
71
63
|
errors.add(:base, Spree.t(:return_items_cannot_be_associated_with_multiple_orders))
|
72
64
|
end
|
73
65
|
end
|