solidus_promotions 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.eslintrc.json +10 -0
- data/.github/stale.yml +1 -0
- data/MIGRATING.md +184 -0
- data/README.md +122 -0
- data/Rakefile +20 -0
- data/app/assets/config/solidus_promotions/manifest.js +13 -0
- data/app/decorators/models/solidus_promotions/adjustment_decorator.rb +11 -0
- data/app/decorators/models/solidus_promotions/line_item_decorator.rb +27 -0
- data/app/decorators/models/solidus_promotions/order_decorator.rb +42 -0
- data/app/decorators/models/solidus_promotions/order_recalculator_decorator.rb +15 -0
- data/app/decorators/models/solidus_promotions/shipment_decorator.rb +14 -0
- data/app/decorators/models/solidus_promotions/shipping_rate_decorator.rb +29 -0
- data/app/helpers/solidus_promotions/admin/benefits_helper.rb +19 -0
- data/app/helpers/solidus_promotions/admin/conditions_helper.rb +14 -0
- data/app/helpers/solidus_promotions/admin/promotions_helper.rb +15 -0
- data/app/javascript/backend/solidus_promotions/controllers/application.js +9 -0
- data/app/javascript/backend/solidus_promotions/controllers/calculator_tiers_controller.js +37 -0
- data/app/javascript/backend/solidus_promotions/controllers/flash_controller.js +10 -0
- data/app/javascript/backend/solidus_promotions/controllers/index.js +8 -0
- data/app/javascript/backend/solidus_promotions/controllers/product_option_values_controller.js +62 -0
- data/app/javascript/backend/solidus_promotions/web_components/number_with_currency.js +35 -0
- data/app/javascript/backend/solidus_promotions/web_components/option_value_picker.js +52 -0
- data/app/javascript/backend/solidus_promotions/web_components/product_picker.js +7 -0
- data/app/javascript/backend/solidus_promotions/web_components/select_two.js +11 -0
- data/app/javascript/backend/solidus_promotions/web_components/taxon_picker.js +7 -0
- data/app/javascript/backend/solidus_promotions/web_components/user_picker.js +7 -0
- data/app/javascript/backend/solidus_promotions/web_components/variant_picker.js +7 -0
- data/app/javascript/backend/solidus_promotions.js +11 -0
- data/app/jobs/solidus_promotions/promotion_code_batch_job.rb +26 -0
- data/app/mailers/solidus_promotions/promotion_code_batch_mailer.rb +15 -0
- data/app/models/concerns/solidus_promotions/benefits/line_item_benefit.rb +15 -0
- data/app/models/concerns/solidus_promotions/benefits/order_benefit.rb +15 -0
- data/app/models/concerns/solidus_promotions/benefits/shipment_benefit.rb +15 -0
- data/app/models/concerns/solidus_promotions/calculators/promotion_calculator.rb +11 -0
- data/app/models/concerns/solidus_promotions/conditions/line_item_applicable_order_level_condition.rb +23 -0
- data/app/models/concerns/solidus_promotions/conditions/line_item_level_condition.rb +15 -0
- data/app/models/concerns/solidus_promotions/conditions/order_level_condition.rb +15 -0
- data/app/models/concerns/solidus_promotions/conditions/shipment_level_condition.rb +15 -0
- data/app/models/concerns/solidus_promotions/discountable_amount.rb +21 -0
- data/app/models/solidus_promotions/benefit.rb +123 -0
- data/app/models/solidus_promotions/benefits/adjust_line_item.rb +13 -0
- data/app/models/solidus_promotions/benefits/adjust_line_item_quantity_groups.rb +107 -0
- data/app/models/solidus_promotions/benefits/adjust_shipment.rb +13 -0
- data/app/models/solidus_promotions/benefits/create_discounted_item.rb +49 -0
- data/app/models/solidus_promotions/calculators/distributed_amount.rb +31 -0
- data/app/models/solidus_promotions/calculators/flat_rate.rb +23 -0
- data/app/models/solidus_promotions/calculators/flexi_rate.rb +26 -0
- data/app/models/solidus_promotions/calculators/percent.rb +19 -0
- data/app/models/solidus_promotions/calculators/tiered_flat_rate.rb +58 -0
- data/app/models/solidus_promotions/calculators/tiered_percent.rb +68 -0
- data/app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb +40 -0
- data/app/models/solidus_promotions/condition.rb +61 -0
- data/app/models/solidus_promotions/condition_product.rb +8 -0
- data/app/models/solidus_promotions/condition_store.rb +8 -0
- data/app/models/solidus_promotions/condition_taxon.rb +8 -0
- data/app/models/solidus_promotions/condition_user.rb +8 -0
- data/app/models/solidus_promotions/conditions/discounted_item_total.rb +22 -0
- data/app/models/solidus_promotions/conditions/first_order.rb +31 -0
- data/app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb +31 -0
- data/app/models/solidus_promotions/conditions/item_total.rb +75 -0
- data/app/models/solidus_promotions/conditions/line_item_option_value.rb +37 -0
- data/app/models/solidus_promotions/conditions/line_item_product.rb +56 -0
- data/app/models/solidus_promotions/conditions/line_item_taxon.rb +59 -0
- data/app/models/solidus_promotions/conditions/minimum_quantity.rb +42 -0
- data/app/models/solidus_promotions/conditions/nth_order.rb +40 -0
- data/app/models/solidus_promotions/conditions/one_use_per_user.rb +25 -0
- data/app/models/solidus_promotions/conditions/option_value.rb +28 -0
- data/app/models/solidus_promotions/conditions/product.rb +85 -0
- data/app/models/solidus_promotions/conditions/shipping_method.rb +19 -0
- data/app/models/solidus_promotions/conditions/store.rb +26 -0
- data/app/models/solidus_promotions/conditions/taxon.rb +98 -0
- data/app/models/solidus_promotions/conditions/user.rb +35 -0
- data/app/models/solidus_promotions/conditions/user_logged_in.rb +16 -0
- data/app/models/solidus_promotions/conditions/user_role.rb +42 -0
- data/app/models/solidus_promotions/distributed_amounts_handler.rb +39 -0
- data/app/models/solidus_promotions/eligibility_result.rb +5 -0
- data/app/models/solidus_promotions/eligibility_results.rb +47 -0
- data/app/models/solidus_promotions/item_discount.rb +21 -0
- data/app/models/solidus_promotions/migration_support/order_promotion_syncer.rb +54 -0
- data/app/models/solidus_promotions/order_adjuster/choose_discounts.rb +21 -0
- data/app/models/solidus_promotions/order_adjuster/discount_order.rb +93 -0
- data/app/models/solidus_promotions/order_adjuster/load_promotions.rb +53 -0
- data/app/models/solidus_promotions/order_adjuster/persist_discounted_order.rb +79 -0
- data/app/models/solidus_promotions/order_adjuster.rb +33 -0
- data/app/models/solidus_promotions/order_promotion.rb +23 -0
- data/app/models/solidus_promotions/permission_sets/solidus_promotion_management.rb +15 -0
- data/app/models/solidus_promotions/promotion.rb +163 -0
- data/app/models/solidus_promotions/promotion_advertiser.rb +10 -0
- data/app/models/solidus_promotions/promotion_category.rb +9 -0
- data/app/models/solidus_promotions/promotion_code/batch_builder.rb +73 -0
- data/app/models/solidus_promotions/promotion_code.rb +56 -0
- data/app/models/solidus_promotions/promotion_code_batch.rb +25 -0
- data/app/models/solidus_promotions/promotion_finder.rb +10 -0
- data/app/models/solidus_promotions/promotion_handler/coupon.rb +113 -0
- data/app/models/solidus_promotions/promotion_handler/page.rb +30 -0
- data/app/models/solidus_promotions/shipping_rate_discount.rb +11 -0
- data/app/subscribers/solidus_promotions/order_promotion_subscriber.rb +20 -0
- data/bin/rails +13 -0
- data/config/importmap.rb +14 -0
- data/config/locales/en.yml +376 -0
- data/config/locales/promotion_categories.en.yml +6 -0
- data/config/locales/promotions.en.yml +6 -0
- data/config/routes.rb +38 -0
- data/db/migrate/20230703101637_create_promotions.rb +25 -0
- data/db/migrate/20230703113625_create_promotion_benefits.rb +15 -0
- data/db/migrate/20230703141116_create_promotion_categories.rb +14 -0
- data/db/migrate/20230703143943_create_promotion_conditions.rb +12 -0
- data/db/migrate/20230704083830_add_condition_join_tables.rb +31 -0
- data/db/migrate/20230704102444_create_promotion_codes.rb +11 -0
- data/db/migrate/20230704102656_create_promotion_code_batches.rb +34 -0
- data/db/migrate/20230705171556_create_order_promotions.rb +11 -0
- data/db/migrate/20230725074235_create_shipping_rate_discounts.rb +12 -0
- data/db/migrate/20231011100059_add_db_comments_to_order_promotions.rb +61 -0
- data/db/migrate/20231011120928_add_db_comments_to_condition_taxons.rb +54 -0
- data/db/migrate/20231011131324_add_db_comments_to_conditions.rb +60 -0
- data/db/migrate/20231011142040_add_db_comments_to_condition_users.rb +53 -0
- data/db/migrate/20231011155822_add_db_comments_to_promotions.rb +123 -0
- data/db/migrate/20231011163030_add_db_comments_to_promotion_codes.rb +60 -0
- data/db/migrate/20231011173312_add_db_comments_to_promotion_code_batches.rb +91 -0
- data/db/migrate/20231011184205_add_db_comments_to_condition_stores.rb +53 -0
- data/db/migrate/20231011190222_add_db_comments_to_benefits.rb +61 -0
- data/db/migrate/20231012020928_add_db_comments_to_condition_products.rb +52 -0
- data/db/migrate/20231012120928_add_db_comments_to_promotion_categories.rb +52 -0
- data/db/migrate/20231104135812_add_managed_by_order_benefit_to_line_items.rb +5 -0
- data/lib/components/admin/solidus_admin/orders/show/adjustments/index/source/solidus_promotions_benefit/component.rb +17 -0
- data/lib/components/admin/solidus_promotions/orders/index/component.rb +15 -0
- data/lib/components/admin/solidus_promotions/orders/index/component.yml +3 -0
- data/lib/components/admin/solidus_promotions/promotion_categories/index/component.rb +60 -0
- data/lib/components/admin/solidus_promotions/promotions/index/component.rb +108 -0
- data/lib/components/admin/solidus_promotions/promotions/index/component.yml +10 -0
- data/lib/controllers/admin/solidus_promotions/promotion_categories_controller.rb +29 -0
- data/lib/controllers/admin/solidus_promotions/promotions_controller.rb +46 -0
- data/lib/controllers/backend/solidus_promotions/admin/base_controller.rb +15 -0
- data/lib/controllers/backend/solidus_promotions/admin/benefits_controller.rb +85 -0
- data/lib/controllers/backend/solidus_promotions/admin/conditions_controller.rb +69 -0
- data/lib/controllers/backend/solidus_promotions/admin/promotion_categories_controller.rb +13 -0
- data/lib/controllers/backend/solidus_promotions/admin/promotion_code_batches_controller.rb +42 -0
- data/lib/controllers/backend/solidus_promotions/admin/promotion_codes_controller.rb +58 -0
- data/lib/controllers/backend/solidus_promotions/admin/promotions_controller.rb +65 -0
- data/lib/generators/solidus_promotions/install/install_generator.rb +56 -0
- data/lib/generators/solidus_promotions/install/templates/initializer.rb +6 -0
- data/lib/solidus_promotions/configuration.rb +125 -0
- data/lib/solidus_promotions/engine.rb +115 -0
- data/lib/solidus_promotions/migrate_adjustments.rb +62 -0
- data/lib/solidus_promotions/migrate_order_promotions.rb +73 -0
- data/lib/solidus_promotions/promotion_map.rb +126 -0
- data/lib/solidus_promotions/promotion_migrator.rb +103 -0
- data/lib/solidus_promotions/testing_support/factories/completed_order_with_solidus_promotion_factory.rb +20 -0
- data/lib/solidus_promotions/testing_support/factories/solidus_order_promotion_factory.rb +8 -0
- data/lib/solidus_promotions/testing_support/factories/solidus_promotion_category_factory.rb +7 -0
- data/lib/solidus_promotions/testing_support/factories/solidus_promotion_code_factory.rb +8 -0
- data/lib/solidus_promotions/testing_support/factories/solidus_promotion_factory.rb +65 -0
- data/lib/solidus_promotions/testing_support/factories/solidus_shipping_rate_discount_factory.rb +14 -0
- data/lib/solidus_promotions/testing_support/factory_bot.rb +30 -0
- data/lib/solidus_promotions.rb +37 -0
- data/lib/tasks/solidus_promotions/migrate_adjustments.rake +17 -0
- data/lib/tasks/solidus_promotions/migrate_existing_promotions.rake +12 -0
- data/lib/tasks/solidus_promotions/migrate_order_promotions.rake +17 -0
- data/lib/views/backend/solidus_promotions/admin/benefit_fields/_adjust_line_item.html.erb +6 -0
- data/lib/views/backend/solidus_promotions/admin/benefit_fields/_adjust_line_item_quantity_groups.html.erb +13 -0
- data/lib/views/backend/solidus_promotions/admin/benefit_fields/_adjust_shipment.html.erb +6 -0
- data/lib/views/backend/solidus_promotions/admin/benefit_fields/_calculator_fields.erb +11 -0
- data/lib/views/backend/solidus_promotions/admin/benefit_fields/_create_discounted_item.html.erb +21 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/_benefit.html.erb +50 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/_calculator_select.html.erb +16 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/_form.html.erb +3 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/_new_benefit.html.erb +33 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/_type_select.html.erb +16 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/edit.html.erb +19 -0
- data/lib/views/backend/solidus_promotions/admin/benefits/new.html.erb +1 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/_default_fields.html.erb +6 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/distributed_amount/_fields.html.erb +18 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/flat_rate/_fields.html.erb +6 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/flexi_rate/_fields.html.erb +24 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/percent/_fields.html.erb +6 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_flat_rate/_fields.html.erb +32 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_flat_rate/_tier_fields.html.erb +31 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_percent/_fields.html.erb +47 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_percent/_tier_fields.html.erb +33 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_percent_on_eligible_item_quantity/_fields.html.erb +36 -0
- data/lib/views/backend/solidus_promotions/admin/calculator_fields/tiered_percent_on_eligible_item_quantity/_tier_fields.html.erb +35 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_first_order.html.erb +3 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_first_repeat_purchase_since.html.erb +7 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_item_total.html.erb +15 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_line_item_option_value.html.erb +25 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_line_item_product.html.erb +21 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_line_item_taxon.html.erb +17 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_minimum_quantity.html.erb +5 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_nth_order.html.erb +15 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_one_use_per_user.html.erb +3 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_option_value.html.erb +63 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_product.html.erb +27 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_shipping_method.html.erb +10 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_store.html.erb +9 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_taxon.html.erb +27 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_user.html.erb +7 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_user_logged_in.html.erb +3 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/_user_role.html.erb +15 -0
- data/lib/views/backend/solidus_promotions/admin/condition_fields/line_item_option_value/_option_value_fields.html.erb +21 -0
- data/lib/views/backend/solidus_promotions/admin/conditions/_condition.html.erb +26 -0
- data/lib/views/backend/solidus_promotions/admin/conditions/_new_condition.html.erb +26 -0
- data/lib/views/backend/solidus_promotions/admin/conditions/_type_select.html.erb +20 -0
- data/lib/views/backend/solidus_promotions/admin/conditions/new.html.erb +1 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_categories/_form.html.erb +14 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_categories/edit.html.erb +10 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_categories/index.html.erb +47 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_categories/new.html.erb +10 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_code_batches/_form_fields.html.erb +22 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_code_batches/download.csv.ruby +8 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_code_batches/index.html.erb +65 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_code_batches/new.html.erb +8 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_codes/index.csv.ruby +8 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_codes/index.html.erb +32 -0
- data/lib/views/backend/solidus_promotions/admin/promotion_codes/new.html.erb +31 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/_form.html.erb +124 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/_table.html.erb +57 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/_table_filter.html.erb +78 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/edit.html.erb +41 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/index.html.erb +23 -0
- data/lib/views/backend/solidus_promotions/admin/promotions/new.html.erb +9 -0
- data/lib/views/backend/solidus_promotions/admin/shared/_number_with_currency.html.erb +20 -0
- data/lib/views/backend/solidus_promotions/admin/shared/_promotion_sub_menu.html.erb +14 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_boolean.html.erb +14 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_decimal.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_integer.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_password.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_string.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/admin/shared/preference_fields/_text.html.erb +12 -0
- data/lib/views/backend/solidus_promotions/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +2 -0
- data/lib/views/backend/solidus_promotions/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +2 -0
- data/solidus_promotions.gemspec +33 -0
- metadata +366 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddDbCommentsToConditionStores < ActiveRecord::Migration[6.1]
|
4
|
+
def up
|
5
|
+
if connection.supports_comments?
|
6
|
+
change_table_comment(:solidus_promotions_condition_stores, solidus_promotions_condition_stores_table_comment)
|
7
|
+
change_column_comment(:solidus_promotions_condition_stores, :id, id_comment)
|
8
|
+
change_column_comment(:solidus_promotions_condition_stores, :store_id, store_id_comment)
|
9
|
+
change_column_comment(:solidus_promotions_condition_stores, :condition_id, condition_id_comment)
|
10
|
+
change_column_comment(:solidus_promotions_condition_stores, :created_at, created_at_comment)
|
11
|
+
change_column_comment(:solidus_promotions_condition_stores, :updated_at, updated_at_comment)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def solidus_promotions_condition_stores_table_comment
|
18
|
+
<<~COMMENT
|
19
|
+
Join table between conditions and stores. Only used with the condition "Store", which checks that an order
|
20
|
+
has been placed in a particular Spree::Store instance.
|
21
|
+
COMMENT
|
22
|
+
end
|
23
|
+
|
24
|
+
def id_comment
|
25
|
+
<<~COMMENT
|
26
|
+
Primary key of this table.
|
27
|
+
COMMENT
|
28
|
+
end
|
29
|
+
|
30
|
+
def store_id_comment
|
31
|
+
<<~COMMENT
|
32
|
+
Foreign key to the spree_stores table.
|
33
|
+
COMMENT
|
34
|
+
end
|
35
|
+
|
36
|
+
def condition_id_comment
|
37
|
+
<<~COMMENT
|
38
|
+
Foreign key to the solidus_promotions_promotion_rules table.
|
39
|
+
COMMENT
|
40
|
+
end
|
41
|
+
|
42
|
+
def created_at_comment
|
43
|
+
<<~COMMENT
|
44
|
+
Timestamp indicating when this record was created.
|
45
|
+
COMMENT
|
46
|
+
end
|
47
|
+
|
48
|
+
def updated_at_comment
|
49
|
+
<<~COMMENT
|
50
|
+
Timestamp indicating when this record was last updated.
|
51
|
+
COMMENT
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddDbCommentsToBenefits < ActiveRecord::Migration[6.1]
|
4
|
+
def up
|
5
|
+
if connection.supports_comments?
|
6
|
+
change_table_comment(:solidus_promotions_benefits, solidus_promotions_benefits_table_comment)
|
7
|
+
change_column_comment(:solidus_promotions_benefits, :id, id_comment)
|
8
|
+
change_column_comment(:solidus_promotions_benefits, :promotion_id, promotion_id_comment)
|
9
|
+
change_column_comment(:solidus_promotions_benefits, :type, type_comment)
|
10
|
+
change_column_comment(:solidus_promotions_benefits, :preferences, preferences_comment)
|
11
|
+
change_column_comment(:solidus_promotions_benefits, :created_at, created_at_comment)
|
12
|
+
change_column_comment(:solidus_promotions_benefits, :updated_at, updated_at_comment)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def solidus_promotions_benefits_table_comment
|
19
|
+
<<~COMMENT
|
20
|
+
Single Table inheritance table. Represents what to do to an order when the linked promotion is eligible.
|
21
|
+
Promotions can have many benefits.
|
22
|
+
COMMENT
|
23
|
+
end
|
24
|
+
|
25
|
+
def id_comment
|
26
|
+
<<~COMMENT
|
27
|
+
Primary key of this table.
|
28
|
+
COMMENT
|
29
|
+
end
|
30
|
+
|
31
|
+
def promotion_id_comment
|
32
|
+
<<~COMMENT
|
33
|
+
Foreign key to the solidus_promotions_promotions table.
|
34
|
+
COMMENT
|
35
|
+
end
|
36
|
+
|
37
|
+
def type_comment
|
38
|
+
<<~COMMENT
|
39
|
+
A class name representing which benefit this represents.
|
40
|
+
Usually SolidusPromotions::PromotionAction::Adjust{LineItem,Shipment}.
|
41
|
+
COMMENT
|
42
|
+
end
|
43
|
+
|
44
|
+
def preferences_comment
|
45
|
+
<<~COMMENT
|
46
|
+
Preferences for this benefit. Serialized YAML.
|
47
|
+
COMMENT
|
48
|
+
end
|
49
|
+
|
50
|
+
def created_at_comment
|
51
|
+
<<~COMMENT
|
52
|
+
Timestamp indicating when this record was created.
|
53
|
+
COMMENT
|
54
|
+
end
|
55
|
+
|
56
|
+
def updated_at_comment
|
57
|
+
<<~COMMENT
|
58
|
+
Timestamp indicating when this record was last updated.
|
59
|
+
COMMENT
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddDbCommentsToConditionProducts < ActiveRecord::Migration[6.1]
|
4
|
+
def up
|
5
|
+
if connection.supports_comments?
|
6
|
+
change_table_comment(:solidus_promotions_condition_products, solidus_promotions_condition_products_table_comment)
|
7
|
+
change_column_comment(:solidus_promotions_condition_products, :id, id_comment)
|
8
|
+
change_column_comment(:solidus_promotions_condition_products, :product_id, product_id_comment)
|
9
|
+
change_column_comment(:solidus_promotions_condition_products, :condition_id, condition_id_comment)
|
10
|
+
change_column_comment(:solidus_promotions_condition_products, :created_at, created_at_comment)
|
11
|
+
change_column_comment(:solidus_promotions_condition_products, :updated_at, updated_at_comment)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def solidus_promotions_condition_products_table_comment
|
18
|
+
<<~COMMENT
|
19
|
+
Join table between conditions and products.
|
20
|
+
COMMENT
|
21
|
+
end
|
22
|
+
|
23
|
+
def id_comment
|
24
|
+
<<~COMMENT
|
25
|
+
Primary key of this table.
|
26
|
+
COMMENT
|
27
|
+
end
|
28
|
+
|
29
|
+
def product_id_comment
|
30
|
+
<<~COMMENT
|
31
|
+
Foreign key to the spree_products table.
|
32
|
+
COMMENT
|
33
|
+
end
|
34
|
+
|
35
|
+
def condition_id_comment
|
36
|
+
<<~COMMENT
|
37
|
+
Foreign key to the solidus_promotions_conditions table.
|
38
|
+
COMMENT
|
39
|
+
end
|
40
|
+
|
41
|
+
def created_at_comment
|
42
|
+
<<~COMMENT
|
43
|
+
Timestamp indicating when this record was created.
|
44
|
+
COMMENT
|
45
|
+
end
|
46
|
+
|
47
|
+
def updated_at_comment
|
48
|
+
<<~COMMENT
|
49
|
+
Timestamp indicating when this record was last updated.
|
50
|
+
COMMENT
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddDbCommentsToPromotionCategories < ActiveRecord::Migration[6.1]
|
4
|
+
def up
|
5
|
+
if connection.supports_comments?
|
6
|
+
change_table_comment(:solidus_promotions_promotion_categories, solidus_promotions_promotion_categories_table_comment)
|
7
|
+
change_column_comment(:solidus_promotions_promotion_categories, :id, id_comment)
|
8
|
+
change_column_comment(:solidus_promotions_promotion_categories, :name, name_comment)
|
9
|
+
change_column_comment(:solidus_promotions_promotion_categories, :code, code_comment)
|
10
|
+
change_column_comment(:solidus_promotions_promotion_categories, :created_at, created_at_comment)
|
11
|
+
change_column_comment(:solidus_promotions_promotion_categories, :updated_at, updated_at_comment)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def solidus_promotions_promotion_categories_table_comment
|
18
|
+
<<~COMMENT
|
19
|
+
Category that helps admins index promotions.
|
20
|
+
COMMENT
|
21
|
+
end
|
22
|
+
|
23
|
+
def id_comment
|
24
|
+
<<~COMMENT
|
25
|
+
Primary key of this table.
|
26
|
+
COMMENT
|
27
|
+
end
|
28
|
+
|
29
|
+
def name_comment
|
30
|
+
<<~COMMENT
|
31
|
+
Name of this promotion category.
|
32
|
+
COMMENT
|
33
|
+
end
|
34
|
+
|
35
|
+
def code_comment
|
36
|
+
<<~COMMENT
|
37
|
+
Code of this promotion category.
|
38
|
+
COMMENT
|
39
|
+
end
|
40
|
+
|
41
|
+
def created_at_comment
|
42
|
+
<<~COMMENT
|
43
|
+
Timestamp indicating when this record was created.
|
44
|
+
COMMENT
|
45
|
+
end
|
46
|
+
|
47
|
+
def updated_at_comment
|
48
|
+
<<~COMMENT
|
49
|
+
Timestamp indicating when this record was last updated.
|
50
|
+
COMMENT
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class SolidusAdmin::Orders::Show::Adjustments::Index::Source::SolidusPromotionsBenefit::Component < SolidusAdmin::Orders::Show::Adjustments::Index::Source::Component
|
4
|
+
def detail
|
5
|
+
link_to("#{model_name}: #{promotion_name}", solidus_promotions.edit_admin_promotion_path(adjustment.source_id), class: "body-link")
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def promotion_name
|
11
|
+
source.promotion.name
|
12
|
+
end
|
13
|
+
|
14
|
+
def solidus_promotions
|
15
|
+
@solidus_promotions ||= SolidusPromotions::Engine.routes.url_helpers
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class SolidusPromotions::Orders::Index::Component < SolidusAdmin::Orders::Index::Component
|
4
|
+
def filters
|
5
|
+
super + [
|
6
|
+
{
|
7
|
+
label: t(".filters.promotions"),
|
8
|
+
combinator: "or",
|
9
|
+
attribute: "solidus_promotions_id",
|
10
|
+
predicate: "in",
|
11
|
+
options: SolidusPromotions::Promotion.all.pluck(:name, :id)
|
12
|
+
}
|
13
|
+
]
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class SolidusPromotions::PromotionCategories::Index::Component < SolidusAdmin::UI::Pages::Index::Component
|
4
|
+
def model_class
|
5
|
+
SolidusPromotions::PromotionCategory
|
6
|
+
end
|
7
|
+
|
8
|
+
def row_url(promotion_category)
|
9
|
+
solidus_promotions.edit_admin_promotion_category_path(promotion_category)
|
10
|
+
end
|
11
|
+
|
12
|
+
def page_actions
|
13
|
+
render component("ui/button").new(
|
14
|
+
tag: :a,
|
15
|
+
text: t(".add"),
|
16
|
+
href: solidus_promotions.new_admin_promotion_category_path,
|
17
|
+
icon: "add-line"
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def batch_actions
|
22
|
+
[
|
23
|
+
{
|
24
|
+
label: t(".batch_actions.delete"),
|
25
|
+
action: solidus_promotions.promotion_categories_path,
|
26
|
+
method: :delete,
|
27
|
+
icon: "delete-bin-7-line"
|
28
|
+
}
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def columns
|
33
|
+
[
|
34
|
+
name_column,
|
35
|
+
code_column
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
def name_column
|
40
|
+
{
|
41
|
+
header: :name,
|
42
|
+
data: ->(promotion_category) do
|
43
|
+
content_tag :div, promotion_category.name
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def code_column
|
49
|
+
{
|
50
|
+
header: :code,
|
51
|
+
data: ->(promotion_category) do
|
52
|
+
content_tag :div, promotion_category.code
|
53
|
+
end
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
def solidus_promotions
|
58
|
+
@solidus_promotions ||= SolidusPromotions::Engine.routes.url_helpers
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class SolidusPromotions::Promotions::Index::Component < SolidusAdmin::UI::Pages::Index::Component
|
4
|
+
def model_class
|
5
|
+
SolidusPromotions::Promotion
|
6
|
+
end
|
7
|
+
|
8
|
+
def search_key
|
9
|
+
:name_or_codes_value_or_path_or_description_cont
|
10
|
+
end
|
11
|
+
|
12
|
+
def search_url
|
13
|
+
solidus_promotions.promotions_path
|
14
|
+
end
|
15
|
+
|
16
|
+
def row_url(promotion)
|
17
|
+
solidus_promotions.admin_promotion_path(promotion)
|
18
|
+
end
|
19
|
+
|
20
|
+
def page_actions
|
21
|
+
render component("ui/button").new(
|
22
|
+
tag: :a,
|
23
|
+
text: t(".add"),
|
24
|
+
href: solidus_promotions.new_admin_promotion_path,
|
25
|
+
icon: "add-line"
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def batch_actions
|
30
|
+
[
|
31
|
+
{
|
32
|
+
label: t(".batch_actions.delete"),
|
33
|
+
action: solidus_promotions.promotions_path,
|
34
|
+
method: :delete,
|
35
|
+
icon: "delete-bin-7-line"
|
36
|
+
}
|
37
|
+
]
|
38
|
+
end
|
39
|
+
|
40
|
+
def scopes
|
41
|
+
[
|
42
|
+
{ name: :active, label: t(".scopes.active"), default: true },
|
43
|
+
{ name: :draft, label: t(".scopes.draft") },
|
44
|
+
{ name: :future, label: t(".scopes.future") },
|
45
|
+
{ name: :expired, label: t(".scopes.expired") },
|
46
|
+
{ name: :all, label: t(".scopes.all") }
|
47
|
+
]
|
48
|
+
end
|
49
|
+
|
50
|
+
def filters
|
51
|
+
[
|
52
|
+
{
|
53
|
+
label: SolidusPromotions::PromotionCategory.model_name.human.pluralize,
|
54
|
+
attribute: "promotion_category_id",
|
55
|
+
predicate: "in",
|
56
|
+
options: SolidusPromotions::PromotionCategory.pluck(:name, :id)
|
57
|
+
}
|
58
|
+
]
|
59
|
+
end
|
60
|
+
|
61
|
+
def columns
|
62
|
+
[
|
63
|
+
{
|
64
|
+
header: :name,
|
65
|
+
data: ->(promotion) do
|
66
|
+
content_tag :div, promotion.name
|
67
|
+
end
|
68
|
+
},
|
69
|
+
{
|
70
|
+
header: :code,
|
71
|
+
data: ->(promotion) do
|
72
|
+
count = promotion.codes.count
|
73
|
+
(count == 1) ? promotion.codes.pick(:value) : t("spree.number_of_codes", count: count)
|
74
|
+
end
|
75
|
+
},
|
76
|
+
{
|
77
|
+
header: :status,
|
78
|
+
data: ->(promotion) do
|
79
|
+
if promotion.active?
|
80
|
+
render component("ui/badge").new(name: t(".status.active"), color: :green)
|
81
|
+
else
|
82
|
+
render component("ui/badge").new(name: t(".status.inactive"), color: :graphite_light)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
},
|
86
|
+
{
|
87
|
+
header: :usage_limit,
|
88
|
+
data: ->(promotion) { promotion.usage_limit || icon_tag("infinity-line") }
|
89
|
+
},
|
90
|
+
{
|
91
|
+
header: :uses,
|
92
|
+
data: ->(promotion) { promotion.usage_count }
|
93
|
+
},
|
94
|
+
{
|
95
|
+
header: :starts_at,
|
96
|
+
data: ->(promotion) { promotion.starts_at ? l(promotion.starts_at, format: :long) : icon_tag("infinity-line") }
|
97
|
+
},
|
98
|
+
{
|
99
|
+
header: :expires_at,
|
100
|
+
data: ->(promotion) { promotion.expires_at ? l(promotion.expires_at, format: :long) : icon_tag("infinity-line") }
|
101
|
+
}
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
def solidus_promotions
|
106
|
+
@solidus_promotions ||= SolidusPromotions::Engine.routes.url_helpers
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusPromotions
|
4
|
+
class PromotionCategoriesController < SolidusAdmin::BaseController
|
5
|
+
include SolidusAdmin::ControllerHelpers::Search
|
6
|
+
|
7
|
+
def index
|
8
|
+
promotion_categories = apply_search_to(
|
9
|
+
SolidusPromotions::PromotionCategory.all,
|
10
|
+
param: :q
|
11
|
+
)
|
12
|
+
|
13
|
+
set_page_and_extract_portion_from(promotion_categories)
|
14
|
+
|
15
|
+
respond_to do |format|
|
16
|
+
format.html { render component("promotion_categories/index").new(page: @page) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
@promotion_categories = SolidusPromotions::PromotionCategory.where(id: params[:id])
|
22
|
+
|
23
|
+
SolidusPromotions::PromotionCategory.transaction { @promotion_categories.destroy_all }
|
24
|
+
|
25
|
+
flash[:notice] = t(".success")
|
26
|
+
redirect_back_or_to solidus_promotions.promotion_categories_path, status: :see_other
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusPromotions
|
4
|
+
class PromotionsController < SolidusAdmin::BaseController
|
5
|
+
include SolidusAdmin::ControllerHelpers::Search
|
6
|
+
|
7
|
+
search_scope(:active, default: true, &:active)
|
8
|
+
search_scope(:draft) { _1.where.not(id: _1.has_benefits.select(:id)) }
|
9
|
+
search_scope(:future) { _1.has_benefits.where(starts_at: Time.current..) }
|
10
|
+
search_scope(:expired) { _1.has_benefits.where(expires_at: ..Time.current) }
|
11
|
+
search_scope(:all)
|
12
|
+
|
13
|
+
def index
|
14
|
+
promotions = apply_search_to(
|
15
|
+
SolidusPromotions::Promotion.order(id: :desc),
|
16
|
+
param: :q
|
17
|
+
)
|
18
|
+
|
19
|
+
set_page_and_extract_portion_from(promotions)
|
20
|
+
|
21
|
+
respond_to do |format|
|
22
|
+
format.html { render component("promotions/index").new(page: @page) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def destroy
|
27
|
+
@promotions = SolidusPromotions::Promotion.where(id: params[:id])
|
28
|
+
|
29
|
+
SolidusPromotions::Promotion.transaction { @promotions.destroy_all }
|
30
|
+
|
31
|
+
flash[:notice] = t(".success")
|
32
|
+
redirect_back_or_to promotions_path, status: :see_other
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def load_promotion
|
38
|
+
@promotion = SolidusPromotions::Promotion.find_by!(number: params[:id])
|
39
|
+
authorize! action_name, @promotion
|
40
|
+
end
|
41
|
+
|
42
|
+
def promotion_params
|
43
|
+
params.require(:promotion).permit(:user_id, permitted_promotion_attributes)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusPromotions
|
4
|
+
module Admin
|
5
|
+
class BaseController < Spree::Admin::ResourceController
|
6
|
+
def routes_proxy
|
7
|
+
solidus_promotions
|
8
|
+
end
|
9
|
+
|
10
|
+
def parent_model_name
|
11
|
+
self.class.parent_data[:model_name].gsub("solidus_promotions/", "")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusPromotions
|
4
|
+
module Admin
|
5
|
+
class BenefitsController < Spree::Admin::BaseController
|
6
|
+
before_action :load_promotion, only: [:create, :destroy, :new, :update, :edit]
|
7
|
+
before_action :validate_benefit_type, only: [:create, :edit]
|
8
|
+
|
9
|
+
def new
|
10
|
+
@benefit = @promotion.benefits.build(benefit_params)
|
11
|
+
render layout: false
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
@benefit = @benefit_type.new(benefit_params)
|
16
|
+
@benefit.promotion = @promotion
|
17
|
+
if @benefit.save(validate: false)
|
18
|
+
flash[:success] =
|
19
|
+
t("spree.successfully_created", resource: SolidusPromotions::Benefit.model_name.human)
|
20
|
+
redirect_to location_after_save, format: :html
|
21
|
+
else
|
22
|
+
render :new, layout: false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
@benefit = @promotion.benefits.find(params[:id])
|
28
|
+
if params.dig(:benefit, :calculator_type)
|
29
|
+
@benefit.calculator_type = params[:benefit][:calculator_type]
|
30
|
+
end
|
31
|
+
render layout: false
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
@benefit = @promotion.benefits.find(params[:id])
|
36
|
+
@benefit.assign_attributes(benefit_params)
|
37
|
+
if @benefit.save
|
38
|
+
flash[:success] =
|
39
|
+
t("spree.successfully_updated", resource: SolidusPromotions::Benefit.model_name.human)
|
40
|
+
redirect_to location_after_save, format: :html
|
41
|
+
else
|
42
|
+
render :edit
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def destroy
|
47
|
+
@benefit = @promotion.benefits.find(params[:id])
|
48
|
+
if @benefit.destroy
|
49
|
+
flash[:success] =
|
50
|
+
t("spree.successfully_removed", resource: SolidusPromotions::Benefit.model_name.human)
|
51
|
+
end
|
52
|
+
redirect_to location_after_save, format: :html
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def location_after_save
|
58
|
+
solidus_promotions.edit_admin_promotion_path(@promotion)
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_promotion
|
62
|
+
@promotion = SolidusPromotions::Promotion.find(params[:promotion_id])
|
63
|
+
end
|
64
|
+
|
65
|
+
def benefit_params
|
66
|
+
params[:benefit].try(:permit!) || {}
|
67
|
+
end
|
68
|
+
|
69
|
+
def validate_benefit_type
|
70
|
+
requested_type = params[:benefit].delete(:type)
|
71
|
+
benefit_types = SolidusPromotions.config.benefits
|
72
|
+
@benefit_type = benefit_types.detect do |klass|
|
73
|
+
klass.name == requested_type
|
74
|
+
end
|
75
|
+
return if @benefit_type
|
76
|
+
|
77
|
+
flash[:error] = t("solidus_promotions.invalid_benefit")
|
78
|
+
respond_to do |format|
|
79
|
+
format.html { redirect_to solidus_promotions.edit_admin_promotion_path(@promotion) }
|
80
|
+
format.js { render layout: false }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusPromotions
|
4
|
+
module Admin
|
5
|
+
class ConditionsController < Spree::Admin::BaseController
|
6
|
+
helper "solidus_promotions/admin/conditions"
|
7
|
+
|
8
|
+
before_action :load_benefit, only: [:create, :destroy, :update, :new]
|
9
|
+
rescue_from ActiveRecord::SubclassNotFound, with: :invalid_condition_error
|
10
|
+
|
11
|
+
def new
|
12
|
+
@condition = @benefit.conditions.build(condition_params)
|
13
|
+
render layout: false
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@condition = @benefit.conditions.build(condition_params)
|
18
|
+
if @condition.save
|
19
|
+
flash[:success] =
|
20
|
+
t("spree.successfully_created", resource: model_class.model_name.human)
|
21
|
+
end
|
22
|
+
redirect_to location_after_save
|
23
|
+
end
|
24
|
+
|
25
|
+
def update
|
26
|
+
@condition = @benefit.conditions.find(params[:id])
|
27
|
+
@condition.assign_attributes(condition_params)
|
28
|
+
if @condition.save
|
29
|
+
flash[:success] =
|
30
|
+
t("spree.successfully_updated", resource: model_class.model_name.human)
|
31
|
+
end
|
32
|
+
redirect_to location_after_save
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
@condition = @benefit.conditions.find(params[:id])
|
37
|
+
if @condition.destroy
|
38
|
+
flash[:success] =
|
39
|
+
t("spree.successfully_removed", resource: model_class.model_name.human)
|
40
|
+
end
|
41
|
+
redirect_to location_after_save
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def invalid_condition_error
|
47
|
+
flash[:error] = t("solidus_promotions.invalid_condition")
|
48
|
+
redirect_to location_after_save
|
49
|
+
end
|
50
|
+
|
51
|
+
def location_after_save
|
52
|
+
solidus_promotions.edit_admin_promotion_path(@promotion)
|
53
|
+
end
|
54
|
+
|
55
|
+
def load_benefit
|
56
|
+
@promotion = SolidusPromotions::Promotion.find(params[:promotion_id])
|
57
|
+
@benefit = @promotion.benefits.find(params[:benefit_id])
|
58
|
+
end
|
59
|
+
|
60
|
+
def model_class
|
61
|
+
SolidusPromotions::Condition
|
62
|
+
end
|
63
|
+
|
64
|
+
def condition_params
|
65
|
+
params[:condition].try(:permit!) || {}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|