solidus_friendly_promotions 1.0.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +4 -4
  3. data/CHANGELOG.md +31 -0
  4. data/Gemfile +2 -7
  5. data/MIGRATING.md +1 -1
  6. data/README.md +22 -16
  7. data/app/assets/config/solidus_friendly_promotions/manifest.js +7 -1
  8. data/app/controllers/solidus_friendly_promotions/admin/benefits_controller.rb +85 -0
  9. data/app/controllers/solidus_friendly_promotions/admin/conditions_controller.rb +69 -0
  10. data/app/controllers/solidus_friendly_promotions/admin/promotions_controller.rb +4 -3
  11. data/app/decorators/models/solidus_friendly_promotions/adjustment_decorator.rb +4 -4
  12. data/app/decorators/models/solidus_friendly_promotions/line_item_decorator.rb +2 -2
  13. data/app/decorators/models/solidus_friendly_promotions/order_decorator.rb +6 -6
  14. data/app/helpers/solidus_friendly_promotions/admin/benefits_helper.rb +19 -0
  15. data/app/helpers/solidus_friendly_promotions/admin/conditions_helper.rb +12 -0
  16. data/app/helpers/solidus_friendly_promotions/admin/promotions_helper.rb +15 -0
  17. data/app/javascript/solidus_friendly_promotions/controllers/product_option_values_controller.js +1 -1
  18. data/app/javascript/solidus_friendly_promotions/web_components/number_with_currency.js +35 -0
  19. data/app/javascript/solidus_friendly_promotions/{jquery → web_components}/option_value_picker.js +8 -0
  20. data/app/javascript/solidus_friendly_promotions/web_components/product_picker.js +7 -0
  21. data/app/javascript/solidus_friendly_promotions/web_components/select_two.js +11 -0
  22. data/app/javascript/solidus_friendly_promotions/web_components/taxon_picker.js +7 -0
  23. data/app/javascript/solidus_friendly_promotions/web_components/user_picker.js +7 -0
  24. data/app/javascript/solidus_friendly_promotions/web_components/variant_picker.js +7 -0
  25. data/app/javascript/solidus_friendly_promotions.js +7 -11
  26. data/app/models/concerns/solidus_friendly_promotions/{actions/order_level_action.rb → benefits/order_benefit.rb} +2 -2
  27. data/app/models/concerns/solidus_friendly_promotions/{rules/line_item_applicable_order_rule.rb → conditions/line_item_applicable_order_condition.rb} +2 -2
  28. data/app/models/concerns/solidus_friendly_promotions/{rules/line_item_level_rule.rb → conditions/line_item_level_condition.rb} +2 -2
  29. data/app/models/concerns/solidus_friendly_promotions/{rules/order_level_rule.rb → conditions/order_level_condition.rb} +2 -2
  30. data/app/models/concerns/solidus_friendly_promotions/{rules/shipment_level_rule.rb → conditions/shipment_level_condition.rb} +2 -2
  31. data/app/models/solidus_friendly_promotions/{promotion_action.rb → benefit.rb} +48 -10
  32. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_line_item.rb +6 -2
  33. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_line_item_quantity_groups.rb +3 -3
  34. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_shipment.rb +6 -2
  35. data/app/models/solidus_friendly_promotions/{actions → benefits}/create_discounted_item.rb +6 -7
  36. data/app/models/solidus_friendly_promotions/calculators/distributed_amount.rb +1 -1
  37. data/app/models/solidus_friendly_promotions/calculators/tiered_flat_rate.rb +1 -1
  38. data/app/models/solidus_friendly_promotions/calculators/tiered_percent.rb +1 -1
  39. data/app/models/solidus_friendly_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb +4 -2
  40. data/app/models/solidus_friendly_promotions/{promotion_rule.rb → condition.rb} +13 -7
  41. data/app/models/solidus_friendly_promotions/condition_product.rb +8 -0
  42. data/app/models/solidus_friendly_promotions/condition_store.rb +8 -0
  43. data/app/models/solidus_friendly_promotions/condition_taxon.rb +8 -0
  44. data/app/models/solidus_friendly_promotions/{promotion_rules_user.rb → condition_user.rb} +2 -2
  45. data/app/models/solidus_friendly_promotions/{rules → conditions}/discounted_item_total.rb +3 -3
  46. data/app/models/solidus_friendly_promotions/{rules → conditions}/first_order.rb +3 -3
  47. data/app/models/solidus_friendly_promotions/{rules → conditions}/first_repeat_purchase_since.rb +3 -3
  48. data/app/models/solidus_friendly_promotions/{rules → conditions}/item_total.rb +5 -5
  49. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_option_value.rb +3 -3
  50. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_product.rb +8 -8
  51. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_taxon.rb +8 -8
  52. data/app/models/solidus_friendly_promotions/{rules → conditions}/minimum_quantity.rb +8 -8
  53. data/app/models/solidus_friendly_promotions/{rules → conditions}/nth_order.rb +5 -5
  54. data/app/models/solidus_friendly_promotions/{rules → conditions}/one_use_per_user.rb +3 -3
  55. data/app/models/solidus_friendly_promotions/{rules → conditions}/option_value.rb +3 -3
  56. data/app/models/solidus_friendly_promotions/{rules → conditions}/product.rb +9 -9
  57. data/app/models/solidus_friendly_promotions/{rules → conditions}/shipping_method.rb +3 -3
  58. data/app/models/solidus_friendly_promotions/{rules → conditions}/store.rb +6 -6
  59. data/app/models/solidus_friendly_promotions/{rules → conditions}/taxon.rb +12 -12
  60. data/app/models/solidus_friendly_promotions/{rules → conditions}/user.rb +7 -7
  61. data/app/models/solidus_friendly_promotions/{rules → conditions}/user_logged_in.rb +3 -3
  62. data/app/models/solidus_friendly_promotions/{rules → conditions}/user_role.rb +3 -3
  63. data/app/models/solidus_friendly_promotions/eligibility_result.rb +1 -1
  64. data/app/models/solidus_friendly_promotions/eligibility_results.rb +7 -7
  65. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/discount_order.rb +28 -29
  66. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/load_promotions.rb +10 -11
  67. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/persist_discounted_order.rb +2 -2
  68. data/app/models/solidus_friendly_promotions/order_promotion.rb +1 -1
  69. data/app/models/solidus_friendly_promotions/permission_sets/friendly_promotion_management.rb +1 -1
  70. data/app/models/solidus_friendly_promotions/promotion.rb +26 -42
  71. data/app/models/solidus_friendly_promotions/promotion_advertiser.rb +10 -0
  72. data/app/models/solidus_friendly_promotions/promotion_code.rb +1 -1
  73. data/app/models/solidus_friendly_promotions/shipping_rate_discount.rb +1 -1
  74. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_adjust_line_item.html.erb +6 -0
  75. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/actions → benefit_fields}/_adjust_line_item_quantity_groups.html.erb +4 -4
  76. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_adjust_shipment.html.erb +6 -0
  77. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_calculator_fields.erb +11 -0
  78. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/actions → benefit_fields}/_create_discounted_item.html.erb +8 -6
  79. data/app/views/solidus_friendly_promotions/admin/benefits/_benefit.html.erb +50 -0
  80. data/app/views/solidus_friendly_promotions/admin/benefits/_calculator_select.html.erb +16 -0
  81. data/app/views/solidus_friendly_promotions/admin/benefits/_form.html.erb +3 -0
  82. data/app/views/solidus_friendly_promotions/admin/benefits/_new_benefit.html.erb +33 -0
  83. data/app/views/solidus_friendly_promotions/admin/benefits/_type_select.html.erb +16 -0
  84. data/app/views/solidus_friendly_promotions/admin/benefits/edit.html.erb +19 -0
  85. data/app/views/solidus_friendly_promotions/admin/benefits/new.html.erb +1 -0
  86. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/_default_fields.html.erb +1 -1
  87. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/distributed_amount/_fields.html.erb +3 -3
  88. data/app/views/solidus_friendly_promotions/admin/calculator_fields/flat_rate/_fields.html.erb +6 -0
  89. data/app/views/solidus_friendly_promotions/admin/calculator_fields/flexi_rate/_fields.html.erb +24 -0
  90. data/app/views/solidus_friendly_promotions/admin/calculator_fields/percent/_fields.html.erb +6 -0
  91. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_flat_rate/_fields.html.erb +32 -0
  92. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_flat_rate/_tier_fields.html.erb +7 -8
  93. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_percent/_fields.html.erb +47 -0
  94. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_percent/_tier_fields.html.erb +8 -7
  95. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_percent_on_eligible_item_quantity/_fields.html.erb +11 -9
  96. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_percent_on_eligible_item_quantity/_tier_fields.html.erb +35 -0
  97. data/app/views/solidus_friendly_promotions/admin/condition_fields/_first_order.html.erb +3 -0
  98. data/app/views/solidus_friendly_promotions/admin/condition_fields/_first_repeat_purchase_since.html.erb +7 -0
  99. data/app/views/solidus_friendly_promotions/admin/condition_fields/_item_total.html.erb +15 -0
  100. data/app/views/solidus_friendly_promotions/admin/condition_fields/_line_item_option_value.html.erb +25 -0
  101. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_line_item_product.html.erb +7 -7
  102. data/app/views/solidus_friendly_promotions/admin/condition_fields/_line_item_taxon.html.erb +17 -0
  103. data/app/views/solidus_friendly_promotions/admin/condition_fields/_minimum_quantity.html.erb +5 -0
  104. data/app/views/solidus_friendly_promotions/admin/condition_fields/_nth_order.html.erb +15 -0
  105. data/app/views/solidus_friendly_promotions/admin/condition_fields/_one_use_per_user.html.erb +3 -0
  106. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_option_value.html.erb +10 -10
  107. data/app/views/solidus_friendly_promotions/admin/condition_fields/_product.html.erb +28 -0
  108. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_shipping_method.html.erb +3 -3
  109. data/app/views/solidus_friendly_promotions/admin/condition_fields/_store.html.erb +9 -0
  110. data/app/views/solidus_friendly_promotions/admin/condition_fields/_taxon.html.erb +28 -0
  111. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user.html.erb +7 -0
  112. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user_logged_in.html.erb +3 -0
  113. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user_role.html.erb +15 -0
  114. data/app/views/solidus_friendly_promotions/admin/condition_fields/line_item_option_value/_option_value_fields.html.erb +21 -0
  115. data/app/views/solidus_friendly_promotions/admin/conditions/_condition.html.erb +26 -0
  116. data/app/views/solidus_friendly_promotions/admin/conditions/_new_condition.html.erb +26 -0
  117. data/app/views/solidus_friendly_promotions/admin/conditions/_type_select.html.erb +20 -0
  118. data/app/views/solidus_friendly_promotions/admin/conditions/new.html.erb +1 -0
  119. data/app/views/solidus_friendly_promotions/admin/promotion_code_batches/_form_fields.html.erb +5 -5
  120. data/app/views/solidus_friendly_promotions/admin/promotion_code_batches/new.html.erb +3 -3
  121. data/app/views/solidus_friendly_promotions/admin/promotions/_form.html.erb +36 -8
  122. data/app/views/solidus_friendly_promotions/admin/promotions/_table_filter.html.erb +6 -6
  123. data/app/views/solidus_friendly_promotions/admin/promotions/edit.html.erb +7 -41
  124. data/app/views/solidus_friendly_promotions/admin/shared/_number_with_currency.html.erb +20 -0
  125. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_boolean.html.erb +14 -0
  126. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_decimal.html.erb +12 -0
  127. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  128. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_integer.html.erb +12 -0
  129. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_password.html.erb +12 -0
  130. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_string.html.erb +12 -0
  131. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_text.html.erb +12 -0
  132. data/bin/sandbox +3 -3
  133. data/config/importmap.rb +2 -0
  134. data/config/locales/en.yml +139 -91
  135. data/config/routes.rb +3 -2
  136. data/db/migrate/20231011120928_add_db_comments_to_friendly_promotion_rules_taxons.rb +2 -2
  137. data/db/migrate/20231011142040_add_db_comments_to_friendly_promotion_rules_users.rb +1 -1
  138. data/db/migrate/20231011190222_add_db_comments_to_friendly_promotion_actions.rb +1 -1
  139. data/db/migrate/20240409093831_add_action_reference_to_rules.rb +34 -0
  140. data/db/migrate/20240506142650_remove_promotion_rules_promotion_id.rb +5 -0
  141. data/db/migrate/20240508080834_rename_promotion_rules_to_conditions.rb +19 -0
  142. data/db/migrate/20240508131514_rename_friendly_promotion_actions_to_friendly_benefits.rb +19 -0
  143. data/db/migrate/20240612113608_update_column_comments_for_benefits.rb +31 -0
  144. data/db/migrate/20240612114132_update_column_comments_for_conditions.rb +30 -0
  145. data/db/migrate/20240612115209_update_column_comments_for_condition_stores.rb +23 -0
  146. data/db/migrate/20240612115749_update_column_comments_for_condition_products.rb +22 -0
  147. data/db/migrate/20240612120411_update_column_comments_for_condition_taxons.rb +24 -0
  148. data/db/migrate/20240612121049_update_column_comments_for_condition_users.rb +23 -0
  149. data/lib/generators/solidus_friendly_promotions/install/templates/initializer.rb +30 -30
  150. data/lib/solidus_friendly_promotions/configuration.rb +11 -3
  151. data/lib/solidus_friendly_promotions/migrate_adjustments.rb +11 -11
  152. data/lib/solidus_friendly_promotions/promotion_map.rb +17 -17
  153. data/lib/solidus_friendly_promotions/promotion_migrator.rb +16 -16
  154. data/lib/solidus_friendly_promotions/testing_support/factories/friendly_promotion_factory.rb +8 -34
  155. data/lib/solidus_friendly_promotions/testing_support/factories/friendly_shipping_rate_discount_factory.rb +2 -2
  156. data/lib/solidus_friendly_promotions/version.rb +1 -1
  157. data/lib/tasks/solidus_friendly_promotions/migrate_adjustments.rake +2 -2
  158. data/solidus_friendly_promotions.gemspec +2 -2
  159. metadata +115 -88
  160. data/.rubocop_todo.yml +0 -157
  161. data/app/controllers/solidus_friendly_promotions/admin/promotion_actions_controller.rb +0 -103
  162. data/app/controllers/solidus_friendly_promotions/admin/promotion_rules_controller.rb +0 -105
  163. data/app/helpers/solidus_friendly_promotions/admin/promotion_actions_helper.rb +0 -23
  164. data/app/helpers/solidus_friendly_promotions/admin/promotion_rules_helper.rb +0 -25
  165. data/app/models/solidus_friendly_promotions/products_promotion_rule.rb +0 -8
  166. data/app/models/solidus_friendly_promotions/promotion_rules_store.rb +0 -8
  167. data/app/models/solidus_friendly_promotions/promotion_rules_taxon.rb +0 -8
  168. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_calculator_select.html.erb +0 -16
  169. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_form.html.erb +0 -3
  170. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_promotion_action.html.erb +0 -29
  171. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_type_select.html.erb +0 -14
  172. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_adjust_line_item.html.erb +0 -6
  173. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_adjust_shipment.html.erb +0 -6
  174. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_calculator_fields.erb +0 -9
  175. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/flat_rate/_fields.html.erb +0 -6
  176. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_flat_rate/_fields.html.erb +0 -34
  177. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_percent/_fields.html.erb +0 -34
  178. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_percent_on_eligible_item_quantity/_tier_fields.html.erb +0 -27
  179. data/app/views/solidus_friendly_promotions/admin/promotion_actions/edit.html.erb +0 -23
  180. data/app/views/solidus_friendly_promotions/admin/promotion_actions/new.html.erb +0 -26
  181. data/app/views/solidus_friendly_promotions/admin/promotion_rules/_promotion_rule.html.erb +0 -22
  182. data/app/views/solidus_friendly_promotions/admin/promotion_rules/_type_select.html.erb +0 -20
  183. data/app/views/solidus_friendly_promotions/admin/promotion_rules/new.html.erb +0 -24
  184. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_first_order.html.erb +0 -3
  185. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_first_repeat_purchase_since.html.erb +0 -6
  186. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_item_total.html.erb +0 -17
  187. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_line_item_option_value.html.erb +0 -25
  188. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_line_item_taxon.html.erb +0 -17
  189. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_minimum_quantity.html.erb +0 -5
  190. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_nth_order.html.erb +0 -15
  191. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_one_use_per_user.html.erb +0 -3
  192. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_product.html.erb +0 -44
  193. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_store.html.erb +0 -9
  194. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_taxon.html.erb +0 -44
  195. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user.html.erb +0 -7
  196. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user_logged_in.html.erb +0 -3
  197. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user_role.html.erb +0 -15
  198. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/line_item_option_value/_option_value_fields.html.erb +0 -17
  199. data/app/views/solidus_friendly_promotions/admin/promotions/_activations_edit.html.erb +0 -22
  200. data/app/views/solidus_friendly_promotions/admin/promotions/_activations_new.html.erb +0 -43
data/bin/sandbox CHANGED
@@ -43,12 +43,13 @@ if [ ! -d "sandbox" ]; then
43
43
  exit 1
44
44
  fi
45
45
 
46
- echo "~~~> Adding solidus (with i18n and authentication) and your gem to the Gemfile"
46
+ echo "~~~> Adding solidus (with i18n) to the Gemfile"
47
47
  cd ./sandbox
48
48
  cat <<RUBY >> Gemfile
49
49
  gem 'solidus', github: 'solidusio/solidus', branch: '$SOLIDUS_BRANCH'
50
50
  gem 'rails-i18n'
51
51
  gem 'solidus_i18n'
52
+ gem 'solidus_auth_devise'
52
53
 
53
54
  gem '$extension_name', path: '..'
54
55
 
@@ -63,9 +64,8 @@ unbundled bundle install --gemfile Gemfile
63
64
 
64
65
  unbundled bundle exec rake db:drop db:create
65
66
 
66
- unbundled bin/rails generate solidus:install \
67
+ unbundled bundle exec rails generate solidus:install \
67
68
  --auto-accept \
68
- --admin_preview=false \
69
69
  $@
70
70
 
71
71
  unbundled bundle exec rails generate solidus:auth:install --auto-run-migrations
data/config/importmap.rb CHANGED
@@ -8,5 +8,7 @@ pin_all_from SolidusFriendlyPromotions::Engine.root.join("app/javascript/solidus
8
8
  under: "solidus_friendly_promotions/controllers"
9
9
  pin_all_from SolidusFriendlyPromotions::Engine.root.join("app/javascript/solidus_friendly_promotions/jquery"),
10
10
  under: "solidus_friendly_promotions/jquery"
11
+ pin_all_from SolidusFriendlyPromotions::Engine.root.join("app/javascript/solidus_friendly_promotions/web_components"),
12
+ under: "solidus_friendly_promotions/web_components"
11
13
 
12
14
  pin "solidus_friendly_promotions", to: "solidus_friendly_promotions.js", preload: true
@@ -9,41 +9,50 @@ en:
9
9
  promotion_categories: Promotion Categories
10
10
  legacy_promotions: Legacy Promotions
11
11
  legacy_promotion_categories: Legacy Promotion Categories
12
+ hints:
13
+ solidus_friendly_promotions/promotion:
14
+ expires_at: This determines when the promotion expires. <br> If no value is specified, the promotion will never expire.
15
+ promo_code_will_be_disabled: Selecting this option, promo codes will be disabled for this promotion because all its conditions / benefits will be applied automatically to all orders.
16
+ starts_at: This determines when the promotion can be applied to orders. <br> If no value is specified, the promotion will be immediately available.
12
17
  solidus_friendly_promotions:
13
- actions: Actions
18
+ hints:
19
+ solidus_friendly_promotions/benefit:
20
+ conditions: This is used to determine if the benefit should be applied.
21
+ type: This is the type of benefit that will be applied.
22
+ calculator: This is used to determine the promotional discount to be applied to an order, an item, or shipping charges.
23
+ benefits: Benefits
14
24
  adjustment_labels:
15
25
  line_item: "%{promotion} (%{promotion_customer_label})"
16
26
  shipment: "%{promotion} (%{promotion_customer_label})"
17
27
  shipping_rate: "%{promotion} (%{promotion_customer_label})"
18
28
  adjustment_type: Adjustment type
19
- add_action: New Action
20
- add_rule: New Rule
21
- order_rules: Order Rules
22
- line_item_rules: Line Item Rules
23
- shipment_rules: Shipment Rules
24
- line_item_actions: Line Item Actions
25
- shipment_actions: Shipment Actions
26
- order_actions: Order Actions
27
- invalid_promotion_rule_level: Invalid Promotion Rule Level. Must be one of "order", "shipment", or "line_item"
28
- invalid_promotion_action: Invalid promotion action.
29
- invalid_promotion_rule: Invalid promotion rule.
29
+ add_benefit: Add Benefit
30
+ add_condition: Add Condition
31
+ order_conditions: Order Conditions
32
+ line_item_conditions: Line Item Conditions
33
+ shipment_conditions: Shipment Conditions
34
+ line_item_benefits: Line Item Benefits
35
+ shipment_benefits: Shipment Benefits
36
+ order_benefits: Order Benefits
37
+ invalid_benefit: Invalid promotion benefit.
38
+ invalid_condition: Invalid promotion condition.
30
39
  create_promotion_code: Create promotion code
31
40
  current_promotion_usage: 'Current Usage: %{count}'
32
- discount_rules: Promotion Rules
41
+ discount_conditions: Promotion Conditions
33
42
  download_promotion_codes_list: Download codes list
34
43
  new_promotion: New Promotion
35
44
  new_promotion_category: New Promotion Category
36
45
  new_promotion_code_batch: New Promotion Code Batch
37
46
  number_of_codes: "%{count} codes"
38
47
  legacy_promotions: Legacy Promotions
39
- no_rules_added: No Rules Added
48
+ no_conditions_added: No Conditions Added
40
49
  promotion_successfully_created: Promotion has been successfully created!
41
50
  promotion_total_changed_before_complete: One or more of the promotions on your order have become ineligible and were removed. Please check the new order amounts and try again.
42
51
  promotion_code_batches:
43
52
  finished: Finished
44
53
  errored: Errored
45
54
  view_promotion_codes_list: View codes list
46
- promotion_rules:
55
+ conditions:
47
56
  line_item_product:
48
57
  match_policies:
49
58
  include: Line item's product is one of the chosen products
@@ -52,9 +61,17 @@ en:
52
61
  match_policies:
53
62
  include: Line item's product has one of the chosen taxons
54
63
  exclude: Line item's product does not have one of the chosen taxons
55
- hints:
56
- solidus_friendly_promotions/calculator:
57
- promotions: This is used to determine the promotional discount to be applied to an order, an item, or shipping charges.
64
+ item_total_condition:
65
+ operators:
66
+ gt: greater than
67
+ gte: greater than or equal to
68
+ user_condition:
69
+ choose_users: Choose Users
70
+ user_role_condition:
71
+ choose_roles: Choose Roles
72
+ label: User must contain %{select} of these roles
73
+ match_all: all
74
+ match_any: at least one
58
75
  coupon_code: Coupon code
59
76
  eligibility_results:
60
77
  coupon_code_applied: The coupon code was successfully applied to your order.
@@ -67,50 +84,50 @@ en:
67
84
  coupon_code_not_found: The coupon code you entered doesn't exist. Please try again.
68
85
  coupon_code_not_present: The coupon code you are trying to remove is not present on this order.
69
86
  coupon_code_unknown_error: This coupon code could not be applied to the cart at this time.
70
- solidus_friendly_promotions/rules/first_order:
87
+ solidus_friendly_promotions/conditions/first_order:
71
88
  not_first_order: This coupon code can only be applied to your first order.
72
- solidus_friendly_promotions/rules/first_repeat_purchase_since:
73
- solidus_friendly_promotions/rules/item_total:
89
+ solidus_friendly_promotions/conditions/first_repeat_purchase_since:
90
+ solidus_friendly_promotions/conditions/item_total:
74
91
  item_total_doesnt_match_with_operator: This coupon code can't be applied to orders %{operator} %{amount}.
75
92
  item_total_less_than: This coupon code can't be applied to orders less than %{amount}.
76
93
  item_total_less_than_or_equal: This coupon code can't be applied to orders less than or equal to %{amount}.
77
- solidus_friendly_promotions/rules/discounted_item_total:
94
+ solidus_friendly_promotions/conditions/discounted_item_total:
78
95
  item_total_doesnt_match_with_operator: This coupon code can't be applied to orders %{operator} %{amount}.
79
96
  item_total_less_than: This coupon code can't be applied to orders less than %{amount}.
80
97
  item_total_less_than_or_equal: This coupon code can't be applied to orders less than or equal to %{amount}.
81
- solidus_friendly_promotions/rules/landing_page:
82
- solidus_friendly_promotions/rules/nth_order:
83
- solidus_friendly_promotions/rules/one_use_per_user:
98
+ solidus_friendly_promotions/conditions/landing_page:
99
+ solidus_friendly_promotions/conditions/nth_order:
100
+ solidus_friendly_promotions/conditions/one_use_per_user:
84
101
  no_user_specified: You need to login before applying this coupon code.
85
102
  limit_once_per_user: This coupon code can only be used once per user.
86
- solidus_friendly_promotions/rules/option_value:
87
- solidus_friendly_promotions/rules/line_item_option_value:
88
- solidus_friendly_promotions/rules/product:
103
+ solidus_friendly_promotions/conditions/option_value:
104
+ solidus_friendly_promotions/conditions/line_item_option_value:
105
+ solidus_friendly_promotions/conditions/product:
89
106
  has_excluded_product: Your cart contains a product that prevents this coupon code from being applied.
90
107
  missing_product: This coupon code can't be applied because you don't have all of the necessary products in your cart.
91
108
  no_applicable_products: You need to add an applicable product before applying this coupon code.
92
- solidus_friendly_promotions/rules/line_item_product:
109
+ solidus_friendly_promotions/conditions/line_item_product:
93
110
  has_excluded_product: Your cart contains a product that prevents this coupon code from being applied.
94
111
  missing_product: This coupon code can't be applied because you don't have all of the necessary products in your cart.
95
112
  no_applicable_products: You need to add an applicable product before applying this coupon code.
96
- solidus_friendly_promotions/rules/taxon:
113
+ solidus_friendly_promotions/conditions/taxon:
97
114
  has_excluded_taxon: Your cart contains a product from an excluded category that prevents this coupon code from being applied.
98
115
  missing_taxon: You need to add a product from all applicable categories before applying this coupon code.
99
116
  no_matching_taxons: You need to add a product from an applicable category before applying this coupon code.
100
- solidus_friendly_promotions/rules/line_item_taxon:
117
+ solidus_friendly_promotions/conditions/line_item_taxon:
101
118
  has_excluded_taxon: Your cart contains a product from an excluded category that prevents this coupon code from being applied.
102
119
  missing_taxon: You need to add a product from all applicable categories before applying this coupon code.
103
120
  no_matching_taxons: You need to add a product from an applicable category before applying this coupon code.
104
- solidus_friendly_promotions/rules/user:
121
+ solidus_friendly_promotions/conditions/user:
105
122
  no_user_specified: You need to login before applying this coupon code.
106
- solidus_friendly_promotions/rules/user_logged_in:
123
+ solidus_friendly_promotions/conditions/user_logged_in:
107
124
  no_user_specified: You need to login before applying this coupon code.
108
- solidus_friendly_promotions/rules/user_role:
109
- solidus_friendly_promotions/rules/minimum_quantity:
125
+ solidus_friendly_promotions/conditions/user_role:
126
+ solidus_friendly_promotions/conditions/minimum_quantity:
110
127
  quantity_less_than_minimum:
111
128
  one: "You need to add a least 1 applicable item to your order."
112
129
  other: "You need to add a least %{count} applicable items to your order."
113
- product_rule:
130
+ product_condition:
114
131
  choose_products: Choose products
115
132
  label: Order must contain %{select} these products
116
133
  match_all: all of
@@ -120,19 +137,23 @@ en:
120
137
  product_source:
121
138
  group: From product group
122
139
  manual: Manually choose
123
- taxon_rule:
140
+ taxon_condition:
124
141
  choose_taxons: Choose taxons
125
142
  label: Order must contain %{select} of these taxons
126
143
  match_all: all
127
144
  match_any: at least one
128
145
  match_none: none
146
+ line_item_option_value_condition:
147
+ add_product: Add product
148
+ option_value_condition:
149
+ add_product: Add product
129
150
  crud:
130
151
  add: Add
131
152
  destroy: Delete
132
153
  update: Update
133
154
  admin:
134
155
  promotions:
135
- actions:
156
+ benefits:
136
157
  calculator_label: Calculated by
137
158
  activations_edit:
138
159
  auto: All orders will attempt to use this promotion
@@ -147,8 +168,9 @@ en:
147
168
  expires_at_placeholder: Never
148
169
  general: General
149
170
  starts_at_placeholder: Immediately
171
+ codes_present: This promotion has promotion codes defined. You cannot select the apply automatically option.
150
172
  edit:
151
- order_rules: Order Rules
173
+ order_conditions: Order Conditions
152
174
  calculator:
153
175
  add_tier: Add tier
154
176
  promotion_status:
@@ -165,34 +187,34 @@ en:
165
187
  subject: Promotion code batch finished
166
188
  activerecord:
167
189
  models:
168
- solidus_friendly_promotions/actions/adjust_shipment: Discount matching shipments
169
- solidus_friendly_promotions/actions/adjust_line_item: Discount matching line items
170
- solidus_friendly_promotions/actions/create_discounted_item: Create discounted line item
171
- solidus_friendly_promotions/actions/adjust_line_item_quantity_groups: Discount matching line items based on quantity groups
190
+ solidus_friendly_promotions/benefits/adjust_shipment: Discount matching shipments
191
+ solidus_friendly_promotions/benefits/adjust_line_item: Discount matching line items
192
+ solidus_friendly_promotions/benefits/create_discounted_item: Create discounted line item
193
+ solidus_friendly_promotions/benefits/adjust_line_item_quantity_groups: Discount matching line items based on quantity groups
172
194
  solidus_friendly_promotions/calculators/distributed_amount: Distributed Amount
173
- solidus_friendly_promotions/calculators/percent: Flat Percent
195
+ solidus_friendly_promotions/calculators/percent: Percent
174
196
  solidus_friendly_promotions/calculators/flat_rate: Flat Rate
175
197
  solidus_friendly_promotions/calculators/flexi_rate: Flexible Rate
176
198
  solidus_friendly_promotions/calculators/tiered_flat_rate: Tiered Flat Rate
177
199
  solidus_friendly_promotions/calculators/tiered_percent: Tiered Percent
178
200
  solidus_friendly_promotions/calculators/tiered_percent_on_eligible_item_quantity: Tiered Percent based on eligible item quantity
179
- solidus_friendly_promotions/rules/first_order: First Order
180
- solidus_friendly_promotions/rules/first_repeat_purchase_since: First Repeat Purchase Since
181
- solidus_friendly_promotions/rules/item_total: Item Total
182
- solidus_friendly_promotions/rules/discounted_item_total: Item Total after previous lanes
183
- solidus_friendly_promotions/rules/landing_page: Landing Page
184
- solidus_friendly_promotions/rules/minimum_quantity: Minimum Quantity
185
- solidus_friendly_promotions/rules/nth_order: Nth Order
186
- solidus_friendly_promotions/rules/one_use_per_user: One Use Per User
187
- solidus_friendly_promotions/rules/option_value: Option Value(s)
188
- solidus_friendly_promotions/rules/line_item_option_value: Line Item Option Value(s)
189
- solidus_friendly_promotions/rules/product: Order Product(s)
190
- solidus_friendly_promotions/rules/line_item_product: Line Item Product(s)
191
- solidus_friendly_promotions/rules/taxon: Order Taxon(s)
192
- solidus_friendly_promotions/rules/line_item_taxon: Line Item Taxon(s)
193
- solidus_friendly_promotions/rules/user: User
194
- solidus_friendly_promotions/rules/user_logged_in: User Logged In
195
- solidus_friendly_promotions/rules/user_role: User Role(s)
201
+ solidus_friendly_promotions/conditions/first_order: First Order
202
+ solidus_friendly_promotions/conditions/first_repeat_purchase_since: First Repeat Purchase Since
203
+ solidus_friendly_promotions/conditions/item_total: Item Total
204
+ solidus_friendly_promotions/conditions/discounted_item_total: Item Total after previous lanes
205
+ solidus_friendly_promotions/conditions/landing_page: Landing Page
206
+ solidus_friendly_promotions/conditions/minimum_quantity: Minimum Quantity
207
+ solidus_friendly_promotions/conditions/nth_order: Nth Order
208
+ solidus_friendly_promotions/conditions/one_use_per_user: One Use Per User
209
+ solidus_friendly_promotions/conditions/option_value: Option Value(s)
210
+ solidus_friendly_promotions/conditions/line_item_option_value: Line Item Option Value(s)
211
+ solidus_friendly_promotions/conditions/product: Order Product(s)
212
+ solidus_friendly_promotions/conditions/line_item_product: Line Item Product(s)
213
+ solidus_friendly_promotions/conditions/taxon: Order Taxon(s)
214
+ solidus_friendly_promotions/conditions/line_item_taxon: Line Item Taxon(s)
215
+ solidus_friendly_promotions/conditions/user: User
216
+ solidus_friendly_promotions/conditions/user_logged_in: User Logged In
217
+ solidus_friendly_promotions/conditions/user_role: User Role(s)
196
218
  solidus_friendly_promotions/promotion_code_batch:
197
219
  one: Code batch
198
220
  other: Code batches
@@ -205,57 +227,61 @@ en:
205
227
  pre: Pre
206
228
  default: Default
207
229
  post: Post
208
- solidus_friendly_promotions/promotion_action:
209
- type: Action Type
210
- solidus_friendly_promotions/actions/adjust_line_item:
230
+ solidus_friendly_promotions/benefit:
231
+ type: Benefit Type
232
+ solidus_friendly_promotions/condition:
233
+ type: Condition Type
234
+ solidus_friendly_promotions/benefits/adjust_line_item:
211
235
  description: Creates a promotion credit on matching line items
212
- solidus_friendly_promotions/actions/adjust_shipment:
236
+ solidus_friendly_promotions/benefits/adjust_shipment:
213
237
  description: Creates a promotion credit on matching shipments
214
- solidus_friendly_promotions/actions/create_discounted_item:
238
+ solidus_friendly_promotions/benefits/create_discounted_item:
215
239
  description: Creates a discounted item with the quantity the applicable line items.
216
240
  preferred_quantity: Quantity per applicable line item quantity
217
241
  preferred_necessary_quantity: Number of items needed for a discounted item
218
- solidus_friendly_promotions/rules/first_order:
242
+ solidus_friendly_promotions/conditions/first_order:
219
243
  description: Must be the customer's first order
220
- solidus_friendly_promotions/rules/first_repeat_purchase_since:
221
- description: Available only to user who have not purchased in a while
222
- form_text: Apply this promotion to users whose last order was more than X days ago
223
- solidus_friendly_promotions/rules/item_total:
224
- description: Order total meets these criteria
225
- solidus_friendly_promotions/rules/landing_page:
244
+ solidus_friendly_promotions/conditions/first_repeat_purchase_since:
245
+ description: Available only to users who have not purchased in a while
246
+ preferred_days_ago: Last purchase was at least this many days ago
247
+ solidus_friendly_promotions/conditions/item_total:
248
+ description: Order total must be greater than or equal to the specified amount
249
+ preferred_operator: Operator
250
+ preferred_amount: Amount
251
+ solidus_friendly_promotions/conditions/landing_page:
226
252
  description: Customer must have visited the specified page
227
- solidus_friendly_promotions/rules/nth_order:
228
- description: Apply a promotion to every nth order a user has completed.
253
+ solidus_friendly_promotions/conditions/nth_order:
254
+ description: Apply a promotion to the nth order a user has completed.
229
255
  form_text: 'Apply this promotion on the users Nth order: '
230
- solidus_friendly_promotions/rules/one_use_per_user:
256
+ solidus_friendly_promotions/conditions/one_use_per_user:
231
257
  description: Only one use per user
232
- solidus_friendly_promotions/rules/option_value:
258
+ solidus_friendly_promotions/conditions/option_value:
233
259
  description: Order includes specified product(s) with matching option value(s)
234
260
  preferred_line_item_applicable: Should also apply to line items
235
- solidus_friendly_promotions/rules/line_item_option_value:
261
+ solidus_friendly_promotions/conditions/line_item_option_value:
236
262
  description: Line Item has specified product with matching option value
237
- solidus_friendly_promotions/rules/minimum_quantity:
263
+ solidus_friendly_promotions/conditions/minimum_quantity:
238
264
  description: Order contains minimum quantity of applicable items
239
- solidus_friendly_promotions/rules/product:
265
+ solidus_friendly_promotions/conditions/product:
240
266
  description: Order includes specified product(s)
241
267
  line_item_level_description: 'Line item matches the specified products:'
242
268
  preferred_line_item_applicable: Should also apply to line items
243
- solidus_friendly_promotions/rules/line_item_product:
269
+ solidus_friendly_promotions/conditions/line_item_product:
244
270
  description: Line item matches specified product(s)
245
271
  preferred_match_policy: Match Policy
246
- solidus_friendly_promotions/rules/store:
272
+ solidus_friendly_promotions/conditions/store:
247
273
  description: Available only to the specified stores
248
- solidus_friendly_promotions/rules/taxon:
274
+ solidus_friendly_promotions/conditions/taxon:
249
275
  description: Order includes products with specified taxon(s)
250
276
  preferred_line_item_applicable: Should also apply to line items
251
- solidus_friendly_promotions/rules/line_item_taxon:
277
+ solidus_friendly_promotions/conditions/line_item_taxon:
252
278
  description: Line Item has product with specified taxon(s)
253
279
  preferred_match_policy: Match Policy
254
- solidus_friendly_promotions/rules/user:
280
+ solidus_friendly_promotions/conditions/user:
255
281
  description: Available only to the specified users
256
- solidus_friendly_promotions/rules/user_logged_in:
282
+ solidus_friendly_promotions/conditions/user_logged_in:
257
283
  description: Available only to logged in users
258
- solidus_friendly_promotions/rules/user_role:
284
+ solidus_friendly_promotions/conditions/user_role:
259
285
  description: Order includes User with specified Role(s)
260
286
  solidus_friendly_promotions/calculators/tiered_flat_rate:
261
287
  description: Flat Rate in tiers based on item amount
@@ -265,16 +291,26 @@ en:
265
291
  description: Tiered percentage based on order's item total
266
292
  preferred_base_percent: Base Percent
267
293
  tiers: Tiers
294
+ order_item_total: Order Item Total
295
+ percent: Percent
268
296
  solidus_friendly_promotions/calculators/tiered_percent_on_eligible_item_quantity:
269
297
  description: Tiered percentage based on eligible item quantity
270
298
  preferred_base_percent: Base Percent
271
299
  tiers: Tiers
300
+ order_item_total: Order Item Total
301
+ discount: Discount
272
302
  solidus_friendly_promotions/calculators/flat_rate:
273
303
  description: Provides a flat rate discount
304
+ solidus_friendly_promotions/calculators/flexi_rate:
305
+ description: Calculates a discount for the first item and (separately) any additional items, with a maximum number of items that can be specified.
306
+ preferred_first_item: Discount for the first item
307
+ preferred_additional_item: Discount for additional items
308
+ preferred_max_items: Maximum number of items
309
+ preferred_currency: Currency
274
310
  solidus_friendly_promotions/calculators/percent:
275
311
  description: Provides a discount calculated by percent of the discountable amount of the item being discounted
276
312
  solidus_friendly_promotions/calculators/distributed_amount:
277
- description: Distributed the configured amount among all eligible line items of the order
313
+ description: Distributes the configured amount among all eligible line items of the order.
278
314
  explanation: |
279
315
  <p>
280
316
  This amount will be distributed to line items weighted relative to
@@ -311,13 +347,20 @@ en:
311
347
  </tr>
312
348
  </tbody>
313
349
  </table>
350
+ preferred_amount: Amount
314
351
 
315
352
  errors:
316
353
  models:
317
- solidus_friendly_promotions/promotion_action:
354
+ solidus_friendly_promotions/benefit:
318
355
  attributes:
319
356
  base:
320
- cannot_destroy_if_order_completed: Action has been applied to complete orders. It cannot be destroyed.
357
+ cannot_destroy_if_order_completed: Benefit has been applied to complete orders. It cannot be destroyed.
358
+ solidus_friendly_promotions/condition:
359
+ attributes:
360
+ benefit:
361
+ already_contains_condition_type: already contains this condition type
362
+ type:
363
+ invalid_condition_type: is not a valid condition type
321
364
  solidus_friendly_promotions/promotion_code:
322
365
  attributes:
323
366
  base:
@@ -325,4 +368,9 @@ en:
325
368
  spree/line_item:
326
369
  attributes:
327
370
  quantity:
328
- cannot_be_changed_for_automated_items: cannot be changed on a line item managed by a promotion action
371
+ cannot_be_changed_for_automated_items: cannot be changed on a line item managed by a promotion benefit
372
+ solidus_friendly_promotions/promotion:
373
+ attributes:
374
+ apply_automatically:
375
+ disallowed_with_path: cannot be set to true when path is present
376
+ disallowed_with_promotion_codes: cannot be set to true when promotion code is present
data/config/routes.rb CHANGED
@@ -6,8 +6,9 @@ SolidusFriendlyPromotions::Engine.routes.draw do
6
6
  resources :promotion_categories, except: [:show]
7
7
 
8
8
  resources :promotions do
9
- resources :promotion_rules
10
- resources :promotion_actions
9
+ resources :benefits do
10
+ resources :conditions
11
+ end
11
12
  resources :promotion_codes, only: [:index, :new, :create]
12
13
  resources :promotion_code_batches, only: [:index, :new, :create] do
13
14
  get "/download", to: "promotion_code_batches#download", defaults: {format: "csv"}
@@ -16,8 +16,8 @@ class AddDbCommentsToFriendlyPromotionRulesTaxons < ActiveRecord::Migration[6.1]
16
16
 
17
17
  def friendly_promotion_rules_taxons_table_comment
18
18
  <<~COMMENT
19
- Join table between promotion rules and taxons. Only used if the promotion rule's type is SolidusFriendlyPromotion::Rules::Taxon or
20
- SolidusFriendlyPromotion::Rules::LineItemTaxon. Represents those taxons that the promotion rule matches on using its any/all/none
19
+ Join table between promotion rules and taxons. Only used if the promotion rule's type is SolidusFriendlyPromotion::Conditions::Taxon or
20
+ SolidusFriendlyPromotion::Conditions::LineItemTaxon. Represents those taxons that the promotion rule matches on using its any/all/none
21
21
  or include/exclude match policy.
22
22
  COMMENT
23
23
  end
@@ -16,7 +16,7 @@ class AddDbCommentsToFriendlyPromotionRulesUsers < ActiveRecord::Migration[6.1]
16
16
 
17
17
  def friendly_promotion_rules_users_table_comment
18
18
  <<~COMMENT
19
- Join table between promotion rules and users. Used with promotion rules of type "SolidusFriendlyPromotions::Rules::User".
19
+ Join table between promotion rules and users. Used with promotion rules of type "SolidusFriendlyPromotions::Conditions::User".
20
20
  An entry here indicates that a promotion is eligible for the user ID specified here.
21
21
  COMMENT
22
22
  end
@@ -38,7 +38,7 @@ class AddDbCommentsToFriendlyPromotionActions < ActiveRecord::Migration[6.1]
38
38
  def type_comment
39
39
  <<~COMMENT
40
40
  A class name representing which promotion action this represents.
41
- Usually SolidusFriendlyPromotions::Actions::Adjust{LineItem,Shipment}.
41
+ Usually SolidusFriendlyPromotions::PromotionAction::Adjust{LineItem,Shipment}.
42
42
  COMMENT
43
43
  end
44
44
 
@@ -0,0 +1,34 @@
1
+ class AddActionReferenceToRules < ActiveRecord::Migration[7.0]
2
+ class LocalBenefit < ApplicationRecord
3
+ self.table_name = "friendly_promotion_actions"
4
+ has_many :actions, class_name: "SolidusFriendlyPromotions::Condition", foreign_key: :action_id
5
+ end
6
+
7
+ def up
8
+ remove_foreign_key :friendly_promotion_rules, :friendly_promotions
9
+ change_column :friendly_promotion_rules, :promotion_id, :integer, null: true
10
+
11
+ add_reference :friendly_promotion_rules, :action, index: {name: :rule}, null: true, foreign_key: {to_table: :friendly_promotion_actions}
12
+
13
+ SolidusFriendlyPromotions::Condition.reset_column_information
14
+
15
+ LocalBenefit.find_each do |action|
16
+ SolidusFriendlyPromotions::Condition.where(promotion_id: action.promotion_id).each do |rule|
17
+ rule.dup.tap do |new_rule|
18
+ new_rule.preload_relations.each do |relation|
19
+ new_rule.send(:"#{relation}=", rule.send(relation).dup)
20
+ end
21
+ new_rule.action = action
22
+ new_rule.save!
23
+ end
24
+ rule.destroy!
25
+ end
26
+ end
27
+ end
28
+
29
+ def down
30
+ SolidusFriendlyPromotions::Condition.where.not(action_id: nil).delete_all
31
+ change_column :friendly_promotion_rules, :promotion_id, :integer, null: true
32
+ add_foreign_key :friendly_promotion_rules, :friendly_promotions, column: :promotion_id
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ class RemovePromotionRulesPromotionId < ActiveRecord::Migration[7.1]
2
+ def up
3
+ remove_column :friendly_promotion_rules, :promotion_id
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ class RenamePromotionRulesToConditions < ActiveRecord::Migration[7.1]
2
+ def change
3
+ rename_table :friendly_promotion_rules, :friendly_conditions
4
+ rename_table :friendly_promotion_rules_stores, :friendly_condition_stores
5
+ rename_table :friendly_promotion_rules_taxons, :friendly_condition_taxons
6
+ rename_table :friendly_promotion_rules_users, :friendly_condition_users
7
+ rename_table :friendly_products_promotion_rules, :friendly_condition_products
8
+ rename_column :friendly_condition_stores, :promotion_rule_id, :condition_id
9
+ rename_column :friendly_condition_taxons, :promotion_rule_id, :condition_id
10
+ rename_column :friendly_condition_users, :promotion_rule_id, :condition_id
11
+ rename_column :friendly_condition_products, :promotion_rule_id, :condition_id
12
+ sql = <<~SQL
13
+ UPDATE friendly_conditions
14
+ SET type = REPLACE(type, 'SolidusFriendlyPromotions::Rules', 'SolidusFriendlyPromotions::Conditions')
15
+ SQL
16
+
17
+ execute(sql)
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ class RenameFriendlyPromotionActionsToFriendlyBenefits < ActiveRecord::Migration[7.1]
2
+ def change
3
+ rename_table :friendly_promotion_actions, :friendly_benefits
4
+ rename_column :friendly_conditions, :action_id, :benefit_id
5
+ rename_column :spree_line_items, :managed_by_order_action_id, :managed_by_order_benefit_id
6
+ rename_column :friendly_shipping_rate_discounts, :promotion_action_id, :benefit_id
7
+ update_benefit_type_sql = <<~SQL
8
+ UPDATE friendly_benefits
9
+ SET type = REPLACE(type, 'SolidusFriendlyPromotions::Actions', 'SolidusFriendlyPromotions::Benefits')
10
+ SQL
11
+ execute(update_benefit_type_sql)
12
+ update_adjustment_source_type_sql = <<~SQL
13
+ UPDATE spree_adjustments
14
+ SET source_type = REPLACE(source_type, 'SolidusFriendlyPromotions::Actions', 'SolidusFriendlyPromotions::Benefits')
15
+ WHERE source_type LIKE 'SolidusFriendlyPromotions::Actions%'
16
+ SQL
17
+ execute(update_adjustment_source_type_sql)
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ class UpdateColumnCommentsForBenefits < ActiveRecord::Migration[6.1]
2
+ def up
3
+ if connection.supports_comments?
4
+ change_table_comment(:friendly_benefits, friendly_benefits_table_comment)
5
+ change_column_comment(:friendly_benefits, :type, type_comment)
6
+ change_column_comment(:friendly_benefits, :preferences, preferences_comment)
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def friendly_benefits_table_comment
13
+ <<~COMMENT
14
+ Single Table inheritance table. Represents what to do to an order when the linked promotion is eligible.
15
+ Promotions can have many benefits.
16
+ COMMENT
17
+ end
18
+
19
+ def type_comment
20
+ <<~COMMENT
21
+ A class name representing which benefit this represents.
22
+ Usually SolidusFriendlyPromotions::Benefits::Adjust{LineItem,Shipment}.
23
+ COMMENT
24
+ end
25
+
26
+ def preferences_comment
27
+ <<~COMMENT
28
+ Preferences for this benefit. Serialized YAML.
29
+ COMMENT
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ class UpdateColumnCommentsForConditions < ActiveRecord::Migration[7.1]
2
+ def up
3
+ if connection.supports_comments?
4
+ change_table_comment(:friendly_conditions, friendly_conditions_table_comment)
5
+ change_column_comment(:friendly_conditions, :benefit_id, benefit_id_comment)
6
+ change_column_comment(:friendly_conditions, :preferences, preferences_comment)
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def friendly_conditions_table_comment
13
+ <<~COMMENT
14
+ Represents a promotion benefit condition. A promotion benefit may have many conditions, which determine whether the benefit is eligible.
15
+ All conditions must be eligible for the benefit to be eligible. If there are no conditions, the benefit is always eligible.
16
+ COMMENT
17
+ end
18
+
19
+ def benefit_id_comment
20
+ <<~COMMENT
21
+ Foreign key to the friendly_benefits table.
22
+ COMMENT
23
+ end
24
+
25
+ def preferences_comment
26
+ <<~COMMENT
27
+ Preferences for this promotion condition. Serialized YAML column with preferences for this promotion condition.
28
+ COMMENT
29
+ end
30
+ end