solidus_core 3.0.0 → 4.5.1
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/README.md +1 -2
- data/Rakefile +7 -2
- data/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/controllers/spree/base_controller.rb +1 -3
- data/app/helpers/spree/base_helper.rb +3 -3
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/helpers/spree/products_helper.rb +2 -2
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +1 -1
- data/app/mailers/spree/order_mailer.rb +3 -3
- data/app/mailers/spree/reimbursement_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
- data/app/models/concerns/spree/default_price.rb +30 -10
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/named_type.rb +2 -0
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/ransackable_attributes.rb +9 -5
- data/app/models/concerns/spree/user_address_book.rb +19 -10
- data/app/models/concerns/spree/user_methods.rb +40 -6
- data/app/models/spree/address.rb +11 -9
- data/app/models/spree/adjustment.rb +15 -76
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/flat_fee.rb +21 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +3 -3
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +13 -10
- data/app/models/spree/customer_return.rb +6 -3
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +56 -29
- data/app/models/spree/image/active_storage_attachment.rb +2 -7
- data/app/models/spree/image/paperclip_attachment.rb +2 -2
- data/app/models/spree/inventory_unit.rb +2 -2
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +26 -8
- data/app/models/spree/log_entry.rb +98 -1
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/null_promotion_adjuster.rb +13 -0
- data/app/models/spree/null_promotion_advertiser.rb +9 -0
- data/app/models/spree/null_promotion_finder.rb +9 -0
- data/app/models/spree/null_promotion_handler.rb +44 -0
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +4 -3
- data/app/models/spree/order/number_generator.rb +7 -1
- data/app/models/spree/order.rb +143 -96
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +7 -5
- data/app/models/spree/order_merger.rb +5 -7
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +15 -19
- data/app/models/spree/order_taxation.rb +7 -4
- data/app/models/spree/order_update_attributes.rb +3 -1
- data/app/models/spree/order_updater.rb +25 -63
- data/app/models/spree/payment/processing.rb +60 -57
- data/app/models/spree/payment.rb +14 -27
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
- data/app/models/spree/payment_method/credit_card.rb +0 -4
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +29 -10
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +3 -3
- data/app/models/spree/product/scopes.rb +23 -10
- data/app/models/spree/product.rb +30 -23
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/refund.rb +13 -3
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +6 -6
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +6 -1
- data/app/models/spree/return_authorization.rb +3 -1
- data/app/models/spree/return_item.rb +13 -15
- data/app/models/spree/return_reason.rb +6 -1
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +12 -10
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
- data/app/models/spree/stock/availability.rb +11 -3
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +2 -2
- data/app/models/spree/stock/quantifier.rb +12 -8
- data/app/models/spree/stock/simple_coordinator.rb +38 -28
- data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
- data/app/models/spree/stock_item.rb +2 -1
- data/app/models/spree/stock_location.rb +7 -7
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +31 -16
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_prioritizer.rb +17 -0
- data/app/models/spree/store_credit_reason.rb +6 -1
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +3 -2
- data/app/models/spree/tax/order_tax.rb +3 -1
- data/app/models/spree/tax/tax_helpers.rb +14 -3
- data/app/models/spree/tax/tax_location.rb +4 -7
- data/app/models/spree/tax_calculator/default.rb +32 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +14 -1
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +25 -3
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +4 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +25 -8
- data/app/models/spree/variant/scopes.rb +4 -0
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +64 -37
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet.rb +2 -2
- data/app/models/spree/zone.rb +1 -1
- data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
- data/app/views/layouts/spree/base_mailer.html.erb +2 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
- data/config/i18n-tasks.yml +134 -0
- data/config/locales/en.yml +439 -338
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +2 -2
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
- data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
- data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
- data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
- data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
- data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
- data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
- data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
- data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
- data/db/seeds.rb +5 -1
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
- data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -0
- data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +5 -0
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
- data/lib/generators/solidus/install/install_generator.rb +210 -156
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
- data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
- data/lib/generators/solidus/update/update_generator.rb +124 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -2
- data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
- data/lib/spree/app_configuration.rb +220 -71
- data/lib/spree/bus.rb +11 -0
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -69
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -165
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +49 -16
- data/lib/spree/core/environment/calculators.rb +35 -3
- data/lib/spree/core/environment/promotions.rb +25 -4
- data/lib/spree/core/environment_extension.rb +16 -2
- data/lib/spree/core/importer/order.rb +6 -6
- data/lib/spree/core/importer/product.rb +3 -3
- data/lib/spree/core/nested_class_set.rb +28 -0
- data/lib/spree/core/null_promotion_configuration.rb +84 -0
- data/lib/spree/core/product_duplicator.rb +1 -1
- data/lib/spree/core/product_filters.rb +2 -2
- data/lib/spree/core/search/base.rb +18 -9
- data/lib/spree/core/search/variant.rb +2 -2
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -247
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/stock_configuration.rb +18 -0
- data/lib/spree/core/validators/email.rb +2 -4
- data/lib/spree/core/version.rb +5 -1
- data/lib/spree/core/versioned_value.rb +75 -0
- data/lib/spree/core.rb +40 -16
- data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
- data/lib/spree/deprecation.rb +3 -51
- data/lib/spree/deprecator.rb +9 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +1 -1
- data/lib/spree/migration_helpers.rb +3 -3
- data/lib/spree/migrations.rb +13 -11
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -30
- data/lib/spree/permission_sets/configuration_display.rb +5 -23
- data/lib/spree/permission_sets/configuration_management.rb +5 -23
- data/lib/spree/permission_sets/dashboard_display.rb +5 -9
- data/lib/spree/permission_sets/default_customer.rb +5 -35
- data/lib/spree/permission_sets/order_display.rb +5 -19
- data/lib/spree/permission_sets/order_management.rb +5 -20
- data/lib/spree/permission_sets/product_display.rb +5 -17
- data/lib/spree/permission_sets/product_management.rb +5 -19
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
- data/lib/spree/permission_sets/stock_display.rb +5 -10
- data/lib/spree/permission_sets/stock_management.rb +5 -10
- data/lib/spree/permission_sets/super_user.rb +5 -9
- data/lib/spree/permission_sets/user_display.rb +5 -11
- data/lib/spree/permission_sets/user_management.rb +5 -23
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +35 -14
- data/lib/spree/preferences/configuration.rb +88 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/preferable.rb +13 -0
- data/lib/spree/preferences/preferable_class_methods.rb +12 -4
- data/lib/spree/preferences/preference_differentiator.rb +29 -0
- data/lib/spree/preferences/static_model_preferences.rb +25 -10
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +101 -0
- data/lib/spree/testing_support/capybara_ext.rb +11 -1
- data/lib/spree/testing_support/common_rake.rb +76 -23
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +39 -28
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
- data/lib/spree/testing_support/dummy_app.rb +71 -42
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +9 -13
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
- data/lib/spree/testing_support/factories/country_factory.rb +1 -7
- data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
- data/lib/spree/testing_support/factories/image_factory.rb +0 -5
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
- data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +19 -38
- data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
- data/lib/spree/testing_support/factories/price_factory.rb +0 -7
- data/lib/spree/testing_support/factories/product_factory.rb +5 -13
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
- data/lib/spree/testing_support/factories/property_factory.rb +0 -5
- data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/role_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
- data/lib/spree/testing_support/factories/state_factory.rb +8 -10
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
- data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_factory.rb +0 -5
- data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
- data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
- data/lib/spree/testing_support/factories/user_factory.rb +6 -9
- data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
- data/lib/spree/testing_support/factory_bot.rb +6 -29
- data/lib/spree/testing_support/flaky.rb +22 -0
- data/lib/spree/testing_support/order_walkthrough.rb +7 -6
- data/lib/spree/testing_support/sequences.rb +0 -5
- data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
- data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
- data/lib/spree/testing_support/silence_deprecations.rb +9 -0
- data/lib/spree/user_class_handle.rb +2 -2
- data/lib/tasks/colorado_delivery_fee.rake +28 -0
- data/lib/tasks/payment_method.rake +29 -0
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- data/solidus_core.gemspec +18 -8
- metadata +233 -117
- data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
- data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
- data/app/models/spree/calculator/distributed_amount.rb +0 -33
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
- data/app/models/spree/calculator/flexi_rate.rb +0 -22
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
- data/app/models/spree/calculator/tiered_percent.rb +0 -62
- data/app/models/spree/line_item_action.rb +0 -8
- data/app/models/spree/order_promotion.rb +0 -27
- data/app/models/spree/promotion/actions/create_adjustment.rb +0 -77
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
- data/app/models/spree/promotion/rules/first_order.rb +0 -38
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
- data/app/models/spree/promotion/rules/item_total.rb +0 -53
- data/app/models/spree/promotion/rules/nth_order.rb +0 -45
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
- data/app/models/spree/promotion/rules/option_value.rb +0 -50
- data/app/models/spree/promotion/rules/product.rb +0 -74
- data/app/models/spree/promotion/rules/store.rb +0 -22
- data/app/models/spree/promotion/rules/taxon.rb +0 -87
- data/app/models/spree/promotion/rules/user.rb +0 -30
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
- data/app/models/spree/promotion/rules/user_role.rb +0 -45
- data/app/models/spree/promotion.rb +0 -284
- data/app/models/spree/promotion_action.rb +0 -43
- data/app/models/spree/promotion_category.rb +0 -8
- data/app/models/spree/promotion_chooser.rb +0 -34
- data/app/models/spree/promotion_code/batch_builder.rb +0 -64
- data/app/models/spree/promotion_code.rb +0 -50
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -55
- data/app/models/spree/promotion_handler/coupon.rb +0 -123
- data/app/models/spree/promotion_handler/page.rb +0 -26
- data/app/models/spree/promotion_handler/shipping.rb +0 -61
- data/app/models/spree/promotion_rule.rb +0 -55
- data/app/models/spree/promotion_rule_role.rb +0 -8
- data/app/models/spree/promotion_rule_store.rb +0 -10
- data/app/models/spree/promotion_rule_taxon.rb +0 -8
- data/app/models/spree/promotion_rule_user.rb +0 -10
- data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/app/subscribers/spree/mailer_subscriber.rb +0 -25
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
- data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
- data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
- data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
- data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
- data/lib/spree/event/configuration.rb +0 -25
- data/lib/spree/event/subscriber.rb +0 -86
- data/lib/spree/event/subscriber_registry.rb +0 -94
- data/lib/spree/event.rb +0 -119
- data/lib/spree/permission_sets/promotion_display.rb +0 -15
- data/lib/spree/permission_sets/promotion_management.rb +0 -15
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
- data/lib/spree/testing_support/factories.rb +0 -11
- data/lib/spree/testing_support.rb +0 -31
- data/lib/tasks/upgrade.rake +0 -15
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Full permissions for store administration.
|
6
|
+
#
|
7
|
+
# This permission set is always added to users with the `:admin` role.
|
8
|
+
#
|
9
|
+
# It grants permission to perform any read or write action on any resource.
|
10
|
+
class SuperUser < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:other
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:super_user
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def activate!
|
22
|
+
can :manage, :all
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Read-only permissions for users, roles and store credits.
|
6
|
+
#
|
7
|
+
# This permission set allows users to view all related information about
|
8
|
+
# users, roles and store credits, also from the admin panel.
|
9
|
+
class UserDisplay < PermissionSets::Base
|
10
|
+
class << self
|
11
|
+
def privilege
|
12
|
+
:display
|
13
|
+
end
|
14
|
+
|
15
|
+
def category
|
16
|
+
:user
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def activate!
|
21
|
+
can [:read, :admin, :edit, :addresses, :orders, :items], Spree.user_class
|
22
|
+
can [:read, :admin], Spree::StoreCredit
|
23
|
+
can :read, Spree::Role
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Full permissions for user management.
|
6
|
+
#
|
7
|
+
# This permission set grants full control over all user and
|
8
|
+
# related resources, including:
|
9
|
+
#
|
10
|
+
# - Users
|
11
|
+
# - Store credits
|
12
|
+
# - Roles
|
13
|
+
# - API keys
|
14
|
+
class UserManagement < PermissionSets::Base
|
15
|
+
class << self
|
16
|
+
def privilege
|
17
|
+
:management
|
18
|
+
end
|
19
|
+
|
20
|
+
def category
|
21
|
+
:user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def activate!
|
26
|
+
can [:admin, :read, :create, :update, :save_in_address_book, :remove_from_address_book, :addresses, :orders, :items], Spree.user_class
|
27
|
+
|
28
|
+
# NOTE: This does not work with accessible_by.
|
29
|
+
# See https://github.com/solidusio/solidus/pull/1263
|
30
|
+
can :update_email, Spree.user_class do |user|
|
31
|
+
user.spree_roles.none?
|
32
|
+
end
|
33
|
+
can :update_password, Spree.user_class do |user|
|
34
|
+
user.spree_roles.none?
|
35
|
+
end
|
36
|
+
|
37
|
+
cannot :destroy, Spree.user_class
|
38
|
+
can :manage, Spree::StoreCredit
|
39
|
+
can :manage, :api_key
|
40
|
+
can :read, Spree::Role
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/app/models/spree/price.rb
CHANGED
@@ -13,7 +13,7 @@ module Spree
|
|
13
13
|
delegate :tax_rates, to: :variant
|
14
14
|
|
15
15
|
validate :check_price
|
16
|
-
validates :amount,
|
16
|
+
validates :amount, numericality: {
|
17
17
|
greater_than_or_equal_to: 0,
|
18
18
|
less_than_or_equal_to: MAXIMUM_AMOUNT
|
19
19
|
}
|
@@ -30,7 +30,7 @@ module Spree
|
|
30
30
|
money_methods :amount, :price
|
31
31
|
alias_method :money, :display_amount
|
32
32
|
|
33
|
-
self.
|
33
|
+
self.allowed_ransackable_attributes = %w(amount variant_id currency country_iso)
|
34
34
|
|
35
35
|
# An alias for #amount
|
36
36
|
def price
|
@@ -55,7 +55,7 @@ module Spree
|
|
55
55
|
|
56
56
|
def display_country
|
57
57
|
if country_iso
|
58
|
-
"#{country_iso} (#{
|
58
|
+
"#{country_iso} (#{I18n.t(country_iso, scope: [:spree, :country_names])})"
|
59
59
|
else
|
60
60
|
I18n.t(:any_country, scope: [:spree, :admin, :prices])
|
61
61
|
end
|
@@ -29,25 +29,25 @@ module Spree
|
|
29
29
|
scope :descend_by_name, -> { order(name: :desc) }
|
30
30
|
|
31
31
|
add_search_scope :ascend_by_master_price do
|
32
|
-
joins(master: :
|
32
|
+
joins(master: :prices).select('spree_products.* , spree_prices.amount')
|
33
33
|
.order(Spree::Price.arel_table[:amount].asc)
|
34
34
|
end
|
35
35
|
|
36
36
|
add_search_scope :descend_by_master_price do
|
37
|
-
joins(master: :
|
37
|
+
joins(master: :prices).select('spree_products.* , spree_prices.amount')
|
38
38
|
.order(Spree::Price.arel_table[:amount].desc)
|
39
39
|
end
|
40
40
|
|
41
41
|
add_search_scope :price_between do |low, high|
|
42
|
-
joins(master: :
|
42
|
+
joins(master: :prices).where(Price.table_name => { amount: low..high })
|
43
43
|
end
|
44
44
|
|
45
45
|
add_search_scope :master_price_lte do |price|
|
46
|
-
joins(master: :
|
46
|
+
joins(master: :prices).where("#{price_table_name}.amount <= ?", price)
|
47
47
|
end
|
48
48
|
|
49
49
|
add_search_scope :master_price_gte do |price|
|
50
|
-
joins(master: :
|
50
|
+
joins(master: :prices).where("#{price_table_name}.amount >= ?", price)
|
51
51
|
end
|
52
52
|
|
53
53
|
# This scope selects products in taxon AND all its descendants
|
@@ -158,7 +158,7 @@ module Spree
|
|
158
158
|
# order: 'COALESCE(cnt, 0) DESC'
|
159
159
|
add_search_scope :descend_by_popularity do
|
160
160
|
joins(:master).
|
161
|
-
order(%{
|
161
|
+
order(Arel.sql(%{
|
162
162
|
COALESCE((
|
163
163
|
SELECT
|
164
164
|
COUNT(#{Spree::LineItem.quoted_table_name}.id)
|
@@ -171,7 +171,7 @@ module Spree
|
|
171
171
|
WHERE
|
172
172
|
popular_variants.product_id = #{Spree::Product.quoted_table_name}.id
|
173
173
|
), 0) DESC
|
174
|
-
})
|
174
|
+
}))
|
175
175
|
end
|
176
176
|
|
177
177
|
add_search_scope :not_deleted do
|
@@ -194,10 +194,23 @@ module Spree
|
|
194
194
|
group("spree_products.id").joins(:taxons).where(Spree::Taxon.arel_table[:name].eq(name))
|
195
195
|
end
|
196
196
|
|
197
|
-
def self.
|
198
|
-
sku_match = "%#{sku}%"
|
197
|
+
def self.with_all_variant_sku_cont(sku)
|
199
198
|
variant_table = Spree::Variant.arel_table
|
200
|
-
subquery = Spree::Variant.where(
|
199
|
+
subquery = Spree::Variant.with_discarded.where(
|
200
|
+
variant_table[:sku].matches("%#{sku}%").and(
|
201
|
+
variant_table[:product_id].eq(arel_table[:id])
|
202
|
+
)
|
203
|
+
)
|
204
|
+
where(subquery.arel.exists)
|
205
|
+
end
|
206
|
+
|
207
|
+
def self.with_kept_variant_sku_cont(sku)
|
208
|
+
variant_table = Spree::Variant.arel_table
|
209
|
+
subquery = Spree::Variant.where(
|
210
|
+
variant_table[:sku].matches("%#{sku}%").and(
|
211
|
+
variant_table[:product_id].eq(arel_table[:id])
|
212
|
+
)
|
213
|
+
)
|
201
214
|
where(subquery.arel.exists)
|
202
215
|
end
|
203
216
|
|
data/app/models/spree/product.rb
CHANGED
@@ -16,7 +16,6 @@ module Spree
|
|
16
16
|
self.product_option_types = []
|
17
17
|
self.product_properties = []
|
18
18
|
self.classifications.destroy_all
|
19
|
-
self.product_promotion_rules = []
|
20
19
|
end
|
21
20
|
|
22
21
|
has_many :product_option_types, dependent: :destroy, inverse_of: :product
|
@@ -31,11 +30,9 @@ module Spree
|
|
31
30
|
has_many :classifications, dependent: :delete_all, inverse_of: :product
|
32
31
|
has_many :taxons, through: :classifications, before_remove: :remove_taxon
|
33
32
|
|
34
|
-
has_many :product_promotion_rules, dependent: :destroy
|
35
|
-
has_many :promotion_rules, through: :product_promotion_rules
|
36
|
-
|
37
33
|
belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true
|
38
34
|
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products, optional: true
|
35
|
+
belongs_to :primary_taxon, class_name: 'Spree::Taxon', optional: true
|
39
36
|
|
40
37
|
has_one :master,
|
41
38
|
-> { where(is_master: true).with_discarded },
|
@@ -61,6 +58,19 @@ module Spree
|
|
61
58
|
has_many :line_items, through: :variants_including_master
|
62
59
|
has_many :orders, through: :line_items
|
63
60
|
|
61
|
+
has_many :option_values, -> { distinct }, through: :variants_including_master
|
62
|
+
|
63
|
+
scope :sort_by_master_default_price_amount_asc, -> {
|
64
|
+
with_default_price.order('spree_prices.amount ASC')
|
65
|
+
}
|
66
|
+
scope :sort_by_master_default_price_amount_desc, -> {
|
67
|
+
with_default_price.order('spree_prices.amount DESC')
|
68
|
+
}
|
69
|
+
scope :with_default_price, -> {
|
70
|
+
left_joins(master: :prices)
|
71
|
+
.where(master: { spree_prices: Spree::Config.default_pricing_options.desired_attributes })
|
72
|
+
}
|
73
|
+
|
64
74
|
def find_or_build_master
|
65
75
|
master || build_master
|
66
76
|
end
|
@@ -72,8 +82,11 @@ module Spree
|
|
72
82
|
:height,
|
73
83
|
:price,
|
74
84
|
:sku,
|
85
|
+
:track_inventory,
|
75
86
|
:weight,
|
76
87
|
:width,
|
88
|
+
:gtin,
|
89
|
+
:condition
|
77
90
|
]
|
78
91
|
MASTER_ATTRIBUTES.each do |attr|
|
79
92
|
delegate :"#{attr}", :"#{attr}=", to: :find_or_build_master
|
@@ -84,7 +97,7 @@ module Spree
|
|
84
97
|
:display_price,
|
85
98
|
:has_default_price?,
|
86
99
|
:images,
|
87
|
-
:
|
100
|
+
:price_for_options,
|
88
101
|
:rebuild_vat_prices=,
|
89
102
|
to: :find_or_build_master
|
90
103
|
|
@@ -119,12 +132,9 @@ module Spree
|
|
119
132
|
|
120
133
|
alias :options :product_option_types
|
121
134
|
|
122
|
-
self.
|
123
|
-
self.
|
124
|
-
|
125
|
-
def self.ransackable_scopes(_auth_object = nil)
|
126
|
-
%i(with_discarded with_variant_sku_cont)
|
127
|
-
end
|
135
|
+
self.allowed_ransackable_associations = %w[stores variants_including_master master variants option_values]
|
136
|
+
self.allowed_ransackable_attributes = %w[name slug]
|
137
|
+
self.allowed_ransackable_scopes = %i[available with_discarded with_all_variant_sku_cont with_kept_variant_sku_cont]
|
128
138
|
|
129
139
|
# @return [Boolean] true if there are any variants
|
130
140
|
def has_variants?
|
@@ -243,7 +253,7 @@ module Spree
|
|
243
253
|
ActiveRecord::Base.transaction do
|
244
254
|
# Works around spree_i18n https://github.com/spree/spree/issues/301
|
245
255
|
property = Spree::Property.create_with(presentation: property_name).find_or_create_by(name: property_name)
|
246
|
-
product_property = Spree::ProductProperty.where(product: self, property:
|
256
|
+
product_property = Spree::ProductProperty.where(product: self, property:).first_or_initialize
|
247
257
|
product_property.value = property_value
|
248
258
|
product_property.save!
|
249
259
|
end
|
@@ -251,8 +261,7 @@ module Spree
|
|
251
261
|
|
252
262
|
# @return [Array] all advertised and not-rejected promotions
|
253
263
|
def possible_promotions
|
254
|
-
|
255
|
-
Spree::Promotion.advertised.where(id: promotion_ids).reject(&:inactive?)
|
264
|
+
Spree::Config.promotions.advertiser_class.for_product(self)
|
256
265
|
end
|
257
266
|
|
258
267
|
# The number of on-hand stock items; Infinity if any variant does not track
|
@@ -285,6 +294,10 @@ module Spree
|
|
285
294
|
@gallery ||= Spree::Config.product_gallery_class.new(self)
|
286
295
|
end
|
287
296
|
|
297
|
+
def brand
|
298
|
+
Spree::Config.brand_selector_class.new(self).call
|
299
|
+
end
|
300
|
+
|
288
301
|
private
|
289
302
|
|
290
303
|
def any_variants_not_track_inventory?
|
@@ -327,14 +340,8 @@ module Spree
|
|
327
340
|
# If the master is invalid, the Product object will be assigned its errors
|
328
341
|
def validate_master
|
329
342
|
unless master.valid?
|
330
|
-
|
331
|
-
|
332
|
-
errors.add(error.attribute, error.message)
|
333
|
-
end
|
334
|
-
else
|
335
|
-
master.errors.each do |att, error|
|
336
|
-
errors.add(att, error)
|
337
|
-
end
|
343
|
+
master.errors.each do |error|
|
344
|
+
errors.add(error.attribute, error.message)
|
338
345
|
end
|
339
346
|
end
|
340
347
|
end
|
@@ -363,7 +370,7 @@ module Spree
|
|
363
370
|
end
|
364
371
|
|
365
372
|
def remove_taxon(taxon)
|
366
|
-
removed_classifications = classifications.where(taxon:
|
373
|
+
removed_classifications = classifications.where(taxon:)
|
367
374
|
removed_classifications.each(&:remove_from_list)
|
368
375
|
end
|
369
376
|
end
|
@@ -9,6 +9,6 @@ module Spree
|
|
9
9
|
belongs_to :product, touch: true, class_name: 'Spree::Product', inverse_of: :product_properties, optional: true
|
10
10
|
belongs_to :property, class_name: 'Spree::Property', inverse_of: :product_properties, optional: true
|
11
11
|
|
12
|
-
self.
|
12
|
+
self.allowed_ransackable_attributes = ['value']
|
13
13
|
end
|
14
14
|
end
|
data/app/models/spree/refund.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class Refund < Spree::Base
|
5
|
+
include Metadata
|
6
|
+
|
5
7
|
belongs_to :payment, inverse_of: :refunds, optional: true
|
6
8
|
belongs_to :reason, class_name: 'Spree::RefundReason', foreign_key: :refund_reason_id, optional: true
|
7
9
|
belongs_to :reimbursement, inverse_of: :refunds, optional: true
|
@@ -21,7 +23,7 @@ module Spree
|
|
21
23
|
delegate :currency, to: :payment
|
22
24
|
|
23
25
|
def money
|
24
|
-
Spree::Money.new(amount, { currency:
|
26
|
+
Spree::Money.new(amount, { currency: })
|
25
27
|
end
|
26
28
|
alias display_amount money
|
27
29
|
|
@@ -31,6 +33,14 @@ module Spree
|
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
36
|
+
# Sets this price's amount to a new value, parsing it if the new value is
|
37
|
+
# a string.
|
38
|
+
#
|
39
|
+
# @param price [String, #to_d] a new amount
|
40
|
+
def amount=(price)
|
41
|
+
self[:amount] = Spree::LocalizedNumber.parse(price)
|
42
|
+
end
|
43
|
+
|
34
44
|
def description
|
35
45
|
payment.payment_method.name
|
36
46
|
end
|
@@ -45,7 +55,7 @@ module Spree
|
|
45
55
|
credit_cents = money.cents
|
46
56
|
|
47
57
|
@perform_response = process!(credit_cents)
|
48
|
-
log_entries.build(
|
58
|
+
log_entries.build(parsed_payment_response_details_with_fallback: perform_response)
|
49
59
|
|
50
60
|
self.transaction_id = perform_response.authorization
|
51
61
|
save!
|
@@ -82,7 +92,7 @@ module Spree
|
|
82
92
|
end
|
83
93
|
|
84
94
|
def update_order
|
85
|
-
payment.order.
|
95
|
+
payment.order.recalculate
|
86
96
|
end
|
87
97
|
end
|
88
98
|
end
|
@@ -2,12 +2,17 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class RefundReason < Spree::Base
|
5
|
-
|
5
|
+
scope :active, -> { where(active: true) }
|
6
|
+
default_scope -> { order(arel_table[:name].lower) }
|
7
|
+
|
8
|
+
validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
|
6
9
|
|
7
10
|
RETURN_PROCESSING_REASON = 'Return processing'
|
8
11
|
|
9
12
|
has_many :refunds
|
10
13
|
|
14
|
+
self.allowed_ransackable_attributes = %w[name code]
|
15
|
+
|
11
16
|
def self.return_processing_reason
|
12
17
|
find_by!(name: RETURN_PROCESSING_REASON, mutable: false)
|
13
18
|
end
|
@@ -57,7 +57,7 @@ module Spree
|
|
57
57
|
def build_from_customer_return(customer_return)
|
58
58
|
order = customer_return.order
|
59
59
|
order.reimbursements.build({
|
60
|
-
customer_return
|
60
|
+
customer_return:,
|
61
61
|
return_items: customer_return.return_items.accepted.not_reimbursed
|
62
62
|
})
|
63
63
|
end
|
@@ -88,14 +88,14 @@ module Spree
|
|
88
88
|
reload
|
89
89
|
update!(total: calculated_total)
|
90
90
|
|
91
|
-
reimbursement_performer.perform(self, created_by:
|
91
|
+
reimbursement_performer.perform(self, created_by:)
|
92
92
|
|
93
93
|
if unpaid_amount_within_tolerance?
|
94
94
|
reimbursed!
|
95
|
-
Spree::
|
95
|
+
Spree::Bus.publish :reimbursement_reimbursed, reimbursement: self
|
96
96
|
else
|
97
97
|
errored!
|
98
|
-
Spree::
|
98
|
+
Spree::Bus.publish :reimbursement_errored, reimbursement: self
|
99
99
|
end
|
100
100
|
|
101
101
|
if errored?
|
@@ -108,7 +108,7 @@ module Spree
|
|
108
108
|
reload
|
109
109
|
update!(total: calculated_total)
|
110
110
|
|
111
|
-
reimbursement_performer.simulate(self, created_by:
|
111
|
+
reimbursement_performer.simulate(self, created_by:)
|
112
112
|
end
|
113
113
|
|
114
114
|
def return_items_requiring_exchange
|
@@ -131,7 +131,7 @@ module Spree
|
|
131
131
|
def return_all(created_by:)
|
132
132
|
return_items.each(&:accept!)
|
133
133
|
save!
|
134
|
-
perform!(created_by:
|
134
|
+
perform!(created_by:)
|
135
135
|
end
|
136
136
|
|
137
137
|
# The returned category is used as the category
|
@@ -12,12 +12,12 @@ module Spree
|
|
12
12
|
# - #display_amount
|
13
13
|
# so they can be displayed in the Admin UI appropriately.
|
14
14
|
def simulate(reimbursement, created_by:)
|
15
|
-
execute(reimbursement, true, created_by:
|
15
|
+
execute(reimbursement, true, created_by:)
|
16
16
|
end
|
17
17
|
|
18
18
|
# Actually perform the reimbursement
|
19
19
|
def perform(reimbursement, created_by:)
|
20
|
-
execute(reimbursement, false, created_by:
|
20
|
+
execute(reimbursement, false, created_by:)
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
@@ -26,7 +26,7 @@ module Spree
|
|
26
26
|
reimbursement_type_hash = calculate_reimbursement_types(reimbursement)
|
27
27
|
|
28
28
|
reimbursement_type_hash.flat_map do |reimbursement_type, return_items|
|
29
|
-
reimbursement_type.reimburse(reimbursement, return_items, simulate, created_by:
|
29
|
+
reimbursement_type.reimburse(reimbursement, return_items, simulate, created_by:)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -12,7 +12,7 @@ module Spree
|
|
12
12
|
class ReimbursementTaxCalculator
|
13
13
|
class << self
|
14
14
|
def call(reimbursement)
|
15
|
-
reimbursement.return_items.includes(:inventory_unit).
|
15
|
+
reimbursement.return_items.includes(:inventory_unit).find_each do |return_item|
|
16
16
|
set_tax!(return_item)
|
17
17
|
end
|
18
18
|
end
|
@@ -26,8 +26,8 @@ module Spree
|
|
26
26
|
included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total
|
27
27
|
|
28
28
|
return_item.update!({
|
29
|
-
additional_tax_total
|
30
|
-
included_tax_total:
|
29
|
+
additional_tax_total:,
|
30
|
+
included_tax_total:
|
31
31
|
})
|
32
32
|
end
|
33
33
|
end
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
class << self
|
8
8
|
def reimburse(reimbursement, return_items, simulate, created_by:)
|
9
9
|
unpaid_amount = return_items.sum(&:total).round(2, :down)
|
10
|
-
reimbursement_list, _unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate, created_by:
|
10
|
+
reimbursement_list, _unpaid_amount = create_credits(reimbursement, unpaid_amount, simulate, created_by:)
|
11
11
|
reimbursement_list
|
12
12
|
end
|
13
13
|
end
|
@@ -21,7 +21,7 @@ module Spree
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def create_credits(reimbursement, unpaid_amount, simulate, reimbursement_list = [], created_by:)
|
24
|
-
credits = [create_credit(reimbursement, unpaid_amount, simulate, created_by:
|
24
|
+
credits = [create_credit(reimbursement, unpaid_amount, simulate, created_by:)]
|
25
25
|
unpaid_amount -= credits.sum(&:amount)
|
26
26
|
reimbursement_list += credits
|
27
27
|
|
@@ -32,8 +32,8 @@ module Spree
|
|
32
32
|
|
33
33
|
def create_refund(reimbursement, payment, amount, simulate)
|
34
34
|
refund = reimbursement.refunds.build({
|
35
|
-
payment
|
36
|
-
amount
|
35
|
+
payment:,
|
36
|
+
amount:,
|
37
37
|
reason: Spree::RefundReason.return_processing_reason
|
38
38
|
})
|
39
39
|
|
@@ -50,8 +50,8 @@ module Spree
|
|
50
50
|
# If you have multiple methods of crediting a customer, overwrite this method
|
51
51
|
# Must return an array of objects the respond to #description, #display_amount
|
52
52
|
def create_credit(reimbursement, unpaid_amount, simulate, created_by:)
|
53
|
-
creditable = create_creditable(reimbursement, unpaid_amount, created_by:
|
54
|
-
credit = reimbursement.credits.build(creditable
|
53
|
+
creditable = create_creditable(reimbursement, unpaid_amount, created_by:)
|
54
|
+
credit = reimbursement.credits.build(creditable:, amount: unpaid_amount)
|
55
55
|
simulate ? credit.readonly! : credit.save!
|
56
56
|
credit
|
57
57
|
end
|
@@ -61,7 +61,7 @@ module Spree
|
|
61
61
|
user: reimbursement.order.user,
|
62
62
|
amount: unpaid_amount,
|
63
63
|
category: reimbursement.store_credit_category,
|
64
|
-
created_by
|
64
|
+
created_by:,
|
65
65
|
memo: "Refund for uncreditable payments on order #{reimbursement.order.number}",
|
66
66
|
currency: reimbursement.order.currency
|
67
67
|
)
|
@@ -2,12 +2,17 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class ReimbursementType < Spree::Base
|
5
|
-
|
5
|
+
scope :active, -> { where(active: true) }
|
6
|
+
default_scope -> { order(arel_table[:name].lower) }
|
7
|
+
|
8
|
+
validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
|
6
9
|
|
7
10
|
ORIGINAL = 'original'
|
8
11
|
|
9
12
|
has_many :return_items
|
10
13
|
|
14
|
+
self.allowed_ransackable_attributes = %w[name]
|
15
|
+
|
11
16
|
# This method will reimburse the return items based on however it child implements it
|
12
17
|
# By default it takes a reimbursement, the return items it needs to reimburse, and if
|
13
18
|
# it is a simulation or a real reimbursement. This should return an array
|
@@ -4,6 +4,8 @@ module Spree
|
|
4
4
|
# Models the return of Inventory Units to a Stock Location for an Order.
|
5
5
|
#
|
6
6
|
class ReturnAuthorization < Spree::Base
|
7
|
+
include Metadata
|
8
|
+
|
7
9
|
belongs_to :order, class_name: 'Spree::Order', inverse_of: :return_authorizations, optional: true
|
8
10
|
|
9
11
|
has_many :return_items, inverse_of: :return_authorization, dependent: :destroy
|
@@ -27,7 +29,7 @@ module Spree
|
|
27
29
|
extend DisplayMoney
|
28
30
|
money_methods :amount, :total_excluding_vat
|
29
31
|
|
30
|
-
self.
|
32
|
+
self.allowed_ransackable_attributes = ['memo']
|
31
33
|
|
32
34
|
def total_excluding_vat
|
33
35
|
return_items.sum(&:total_excluding_vat)
|