solidus_friendly_promotions 1.0.1 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Gemfile +1 -1
  4. data/MIGRATING.md +1 -1
  5. data/README.md +22 -16
  6. data/app/assets/config/solidus_friendly_promotions/manifest.js +7 -1
  7. data/app/controllers/solidus_friendly_promotions/admin/benefits_controller.rb +85 -0
  8. data/app/controllers/solidus_friendly_promotions/admin/conditions_controller.rb +69 -0
  9. data/app/controllers/solidus_friendly_promotions/admin/promotions_controller.rb +3 -3
  10. data/app/decorators/models/solidus_friendly_promotions/adjustment_decorator.rb +4 -4
  11. data/app/decorators/models/solidus_friendly_promotions/line_item_decorator.rb +2 -2
  12. data/app/decorators/models/solidus_friendly_promotions/order_decorator.rb +6 -6
  13. data/app/helpers/solidus_friendly_promotions/admin/benefits_helper.rb +19 -0
  14. data/app/helpers/solidus_friendly_promotions/admin/conditions_helper.rb +12 -0
  15. data/app/javascript/solidus_friendly_promotions/controllers/product_option_values_controller.js +1 -1
  16. data/app/javascript/solidus_friendly_promotions/web_components/number_with_currency.js +35 -0
  17. data/app/javascript/solidus_friendly_promotions/{jquery → web_components}/option_value_picker.js +8 -0
  18. data/app/javascript/solidus_friendly_promotions/web_components/product_picker.js +7 -0
  19. data/app/javascript/solidus_friendly_promotions/web_components/select_two.js +11 -0
  20. data/app/javascript/solidus_friendly_promotions/web_components/taxon_picker.js +7 -0
  21. data/app/javascript/solidus_friendly_promotions/web_components/user_picker.js +7 -0
  22. data/app/javascript/solidus_friendly_promotions/web_components/variant_picker.js +7 -0
  23. data/app/javascript/solidus_friendly_promotions.js +7 -11
  24. data/app/models/concerns/solidus_friendly_promotions/{actions/order_level_action.rb → benefits/order_benefit.rb} +2 -2
  25. data/app/models/concerns/solidus_friendly_promotions/{rules/line_item_applicable_order_rule.rb → conditions/line_item_applicable_order_condition.rb} +2 -2
  26. data/app/models/concerns/solidus_friendly_promotions/{rules/line_item_level_rule.rb → conditions/line_item_level_condition.rb} +2 -2
  27. data/app/models/concerns/solidus_friendly_promotions/{rules/order_level_rule.rb → conditions/order_level_condition.rb} +2 -2
  28. data/app/models/concerns/solidus_friendly_promotions/{rules/shipment_level_rule.rb → conditions/shipment_level_condition.rb} +2 -2
  29. data/app/models/solidus_friendly_promotions/{promotion_action.rb → benefit.rb} +48 -11
  30. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_line_item.rb +6 -2
  31. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_line_item_quantity_groups.rb +3 -3
  32. data/app/models/solidus_friendly_promotions/{actions → benefits}/adjust_shipment.rb +6 -2
  33. data/app/models/solidus_friendly_promotions/{actions → benefits}/create_discounted_item.rb +6 -7
  34. data/app/models/solidus_friendly_promotions/calculators/distributed_amount.rb +1 -1
  35. data/app/models/solidus_friendly_promotions/calculators/tiered_flat_rate.rb +1 -1
  36. data/app/models/solidus_friendly_promotions/calculators/tiered_percent.rb +1 -1
  37. data/app/models/solidus_friendly_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb +4 -2
  38. data/app/models/solidus_friendly_promotions/{promotion_rule.rb → condition.rb} +13 -7
  39. data/app/models/solidus_friendly_promotions/condition_product.rb +8 -0
  40. data/app/models/solidus_friendly_promotions/condition_store.rb +8 -0
  41. data/app/models/solidus_friendly_promotions/condition_taxon.rb +8 -0
  42. data/app/models/solidus_friendly_promotions/{promotion_rules_user.rb → condition_user.rb} +2 -2
  43. data/app/models/solidus_friendly_promotions/{rules → conditions}/discounted_item_total.rb +3 -3
  44. data/app/models/solidus_friendly_promotions/{rules → conditions}/first_order.rb +3 -3
  45. data/app/models/solidus_friendly_promotions/{rules → conditions}/first_repeat_purchase_since.rb +3 -3
  46. data/app/models/solidus_friendly_promotions/{rules → conditions}/item_total.rb +5 -5
  47. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_option_value.rb +3 -3
  48. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_product.rb +8 -8
  49. data/app/models/solidus_friendly_promotions/{rules → conditions}/line_item_taxon.rb +8 -8
  50. data/app/models/solidus_friendly_promotions/{rules → conditions}/minimum_quantity.rb +8 -8
  51. data/app/models/solidus_friendly_promotions/{rules → conditions}/nth_order.rb +5 -5
  52. data/app/models/solidus_friendly_promotions/{rules → conditions}/one_use_per_user.rb +3 -3
  53. data/app/models/solidus_friendly_promotions/{rules → conditions}/option_value.rb +3 -3
  54. data/app/models/solidus_friendly_promotions/{rules → conditions}/product.rb +9 -9
  55. data/app/models/solidus_friendly_promotions/{rules → conditions}/shipping_method.rb +3 -3
  56. data/app/models/solidus_friendly_promotions/{rules → conditions}/store.rb +6 -6
  57. data/app/models/solidus_friendly_promotions/{rules → conditions}/taxon.rb +12 -12
  58. data/app/models/solidus_friendly_promotions/{rules → conditions}/user.rb +7 -7
  59. data/app/models/solidus_friendly_promotions/{rules → conditions}/user_logged_in.rb +3 -3
  60. data/app/models/solidus_friendly_promotions/{rules → conditions}/user_role.rb +3 -3
  61. data/app/models/solidus_friendly_promotions/eligibility_result.rb +1 -1
  62. data/app/models/solidus_friendly_promotions/eligibility_results.rb +7 -7
  63. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/discount_order.rb +28 -29
  64. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/load_promotions.rb +10 -11
  65. data/app/models/solidus_friendly_promotions/friendly_promotion_adjuster/persist_discounted_order.rb +2 -2
  66. data/app/models/solidus_friendly_promotions/order_promotion.rb +1 -1
  67. data/app/models/solidus_friendly_promotions/permission_sets/friendly_promotion_management.rb +1 -1
  68. data/app/models/solidus_friendly_promotions/promotion.rb +14 -43
  69. data/app/models/solidus_friendly_promotions/promotion_advertiser.rb +10 -0
  70. data/app/models/solidus_friendly_promotions/promotion_code.rb +1 -1
  71. data/app/models/solidus_friendly_promotions/shipping_rate_discount.rb +1 -1
  72. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_adjust_line_item.html.erb +6 -0
  73. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/actions → benefit_fields}/_adjust_line_item_quantity_groups.html.erb +4 -4
  74. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_adjust_shipment.html.erb +6 -0
  75. data/app/views/solidus_friendly_promotions/admin/benefit_fields/_calculator_fields.erb +11 -0
  76. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/actions → benefit_fields}/_create_discounted_item.html.erb +8 -6
  77. data/app/views/solidus_friendly_promotions/admin/benefits/_benefit.html.erb +50 -0
  78. data/app/views/solidus_friendly_promotions/admin/benefits/_calculator_select.html.erb +16 -0
  79. data/app/views/solidus_friendly_promotions/admin/benefits/_form.html.erb +3 -0
  80. data/app/views/solidus_friendly_promotions/admin/benefits/_new_benefit.html.erb +33 -0
  81. data/app/views/solidus_friendly_promotions/admin/benefits/_type_select.html.erb +16 -0
  82. data/app/views/solidus_friendly_promotions/admin/benefits/edit.html.erb +19 -0
  83. data/app/views/solidus_friendly_promotions/admin/benefits/new.html.erb +1 -0
  84. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/_default_fields.html.erb +1 -1
  85. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/distributed_amount/_fields.html.erb +3 -3
  86. data/app/views/solidus_friendly_promotions/admin/calculator_fields/flat_rate/_fields.html.erb +6 -0
  87. data/app/views/solidus_friendly_promotions/admin/calculator_fields/flexi_rate/_fields.html.erb +24 -0
  88. data/app/views/solidus_friendly_promotions/admin/calculator_fields/percent/_fields.html.erb +6 -0
  89. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_flat_rate/_fields.html.erb +32 -0
  90. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_flat_rate/_tier_fields.html.erb +7 -8
  91. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_percent/_fields.html.erb +47 -0
  92. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_percent/_tier_fields.html.erb +8 -7
  93. data/app/views/solidus_friendly_promotions/admin/{promotion_actions/calculators → calculator_fields}/tiered_percent_on_eligible_item_quantity/_fields.html.erb +11 -9
  94. data/app/views/solidus_friendly_promotions/admin/calculator_fields/tiered_percent_on_eligible_item_quantity/_tier_fields.html.erb +35 -0
  95. data/app/views/solidus_friendly_promotions/admin/condition_fields/_first_order.html.erb +3 -0
  96. data/app/views/solidus_friendly_promotions/admin/condition_fields/_first_repeat_purchase_since.html.erb +7 -0
  97. data/app/views/solidus_friendly_promotions/admin/condition_fields/_item_total.html.erb +15 -0
  98. data/app/views/solidus_friendly_promotions/admin/condition_fields/_line_item_option_value.html.erb +25 -0
  99. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_line_item_product.html.erb +7 -7
  100. data/app/views/solidus_friendly_promotions/admin/condition_fields/_line_item_taxon.html.erb +17 -0
  101. data/app/views/solidus_friendly_promotions/admin/condition_fields/_minimum_quantity.html.erb +5 -0
  102. data/app/views/solidus_friendly_promotions/admin/condition_fields/_nth_order.html.erb +15 -0
  103. data/app/views/solidus_friendly_promotions/admin/condition_fields/_one_use_per_user.html.erb +3 -0
  104. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_option_value.html.erb +10 -10
  105. data/app/views/solidus_friendly_promotions/admin/condition_fields/_product.html.erb +28 -0
  106. data/app/views/solidus_friendly_promotions/admin/{promotion_rules/rules → condition_fields}/_shipping_method.html.erb +3 -3
  107. data/app/views/solidus_friendly_promotions/admin/condition_fields/_store.html.erb +9 -0
  108. data/app/views/solidus_friendly_promotions/admin/condition_fields/_taxon.html.erb +28 -0
  109. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user.html.erb +7 -0
  110. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user_logged_in.html.erb +3 -0
  111. data/app/views/solidus_friendly_promotions/admin/condition_fields/_user_role.html.erb +15 -0
  112. data/app/views/solidus_friendly_promotions/admin/condition_fields/line_item_option_value/_option_value_fields.html.erb +21 -0
  113. data/app/views/solidus_friendly_promotions/admin/conditions/_condition.html.erb +26 -0
  114. data/app/views/solidus_friendly_promotions/admin/conditions/_new_condition.html.erb +26 -0
  115. data/app/views/solidus_friendly_promotions/admin/conditions/_type_select.html.erb +20 -0
  116. data/app/views/solidus_friendly_promotions/admin/conditions/new.html.erb +1 -0
  117. data/app/views/solidus_friendly_promotions/admin/promotion_code_batches/_form_fields.html.erb +5 -5
  118. data/app/views/solidus_friendly_promotions/admin/promotions/_form.html.erb +4 -4
  119. data/app/views/solidus_friendly_promotions/admin/promotions/_table_filter.html.erb +6 -6
  120. data/app/views/solidus_friendly_promotions/admin/promotions/edit.html.erb +7 -41
  121. data/app/views/solidus_friendly_promotions/admin/shared/_number_with_currency.html.erb +20 -0
  122. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_boolean.html.erb +14 -0
  123. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_decimal.html.erb +12 -0
  124. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  125. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_integer.html.erb +12 -0
  126. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_password.html.erb +12 -0
  127. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_string.html.erb +12 -0
  128. data/app/views/solidus_friendly_promotions/admin/shared/preference_fields/_text.html.erb +12 -0
  129. data/bin/sandbox +3 -3
  130. data/config/importmap.rb +2 -0
  131. data/config/locales/en.yml +128 -94
  132. data/config/routes.rb +3 -2
  133. data/db/migrate/20231011120928_add_db_comments_to_friendly_promotion_rules_taxons.rb +2 -2
  134. data/db/migrate/20231011142040_add_db_comments_to_friendly_promotion_rules_users.rb +1 -1
  135. data/db/migrate/20231011190222_add_db_comments_to_friendly_promotion_actions.rb +1 -1
  136. data/db/migrate/20240409093831_add_action_reference_to_rules.rb +34 -0
  137. data/db/migrate/20240506142650_remove_promotion_rules_promotion_id.rb +5 -0
  138. data/db/migrate/20240508080834_rename_promotion_rules_to_conditions.rb +19 -0
  139. data/db/migrate/20240508131514_rename_friendly_promotion_actions_to_friendly_benefits.rb +19 -0
  140. data/db/migrate/20240612113608_update_column_comments_for_benefits.rb +31 -0
  141. data/db/migrate/20240612114132_update_column_comments_for_conditions.rb +30 -0
  142. data/db/migrate/20240612115209_update_column_comments_for_condition_stores.rb +23 -0
  143. data/db/migrate/20240612115749_update_column_comments_for_condition_products.rb +22 -0
  144. data/db/migrate/20240612120411_update_column_comments_for_condition_taxons.rb +24 -0
  145. data/db/migrate/20240612121049_update_column_comments_for_condition_users.rb +23 -0
  146. data/lib/generators/solidus_friendly_promotions/install/templates/initializer.rb +30 -30
  147. data/lib/solidus_friendly_promotions/configuration.rb +11 -3
  148. data/lib/solidus_friendly_promotions/migrate_adjustments.rb +11 -11
  149. data/lib/solidus_friendly_promotions/promotion_map.rb +17 -17
  150. data/lib/solidus_friendly_promotions/promotion_migrator.rb +16 -16
  151. data/lib/solidus_friendly_promotions/testing_support/factories/friendly_promotion_factory.rb +8 -34
  152. data/lib/solidus_friendly_promotions/testing_support/factories/friendly_shipping_rate_discount_factory.rb +2 -2
  153. data/lib/solidus_friendly_promotions/version.rb +1 -1
  154. data/lib/tasks/solidus_friendly_promotions/migrate_adjustments.rake +2 -2
  155. data/solidus_friendly_promotions.gemspec +2 -2
  156. metadata +114 -86
  157. data/.rubocop_todo.yml +0 -157
  158. data/app/controllers/solidus_friendly_promotions/admin/promotion_actions_controller.rb +0 -103
  159. data/app/controllers/solidus_friendly_promotions/admin/promotion_rules_controller.rb +0 -105
  160. data/app/helpers/solidus_friendly_promotions/admin/promotion_actions_helper.rb +0 -23
  161. data/app/helpers/solidus_friendly_promotions/admin/promotion_rules_helper.rb +0 -25
  162. data/app/models/solidus_friendly_promotions/products_promotion_rule.rb +0 -8
  163. data/app/models/solidus_friendly_promotions/promotion_rules_store.rb +0 -8
  164. data/app/models/solidus_friendly_promotions/promotion_rules_taxon.rb +0 -8
  165. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_calculator_select.html.erb +0 -16
  166. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_form.html.erb +0 -3
  167. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_promotion_action.html.erb +0 -29
  168. data/app/views/solidus_friendly_promotions/admin/promotion_actions/_type_select.html.erb +0 -14
  169. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_adjust_line_item.html.erb +0 -6
  170. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_adjust_shipment.html.erb +0 -6
  171. data/app/views/solidus_friendly_promotions/admin/promotion_actions/actions/_calculator_fields.erb +0 -9
  172. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/flat_rate/_fields.html.erb +0 -6
  173. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_flat_rate/_fields.html.erb +0 -34
  174. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_percent/_fields.html.erb +0 -34
  175. data/app/views/solidus_friendly_promotions/admin/promotion_actions/calculators/tiered_percent_on_eligible_item_quantity/_tier_fields.html.erb +0 -27
  176. data/app/views/solidus_friendly_promotions/admin/promotion_actions/edit.html.erb +0 -23
  177. data/app/views/solidus_friendly_promotions/admin/promotion_actions/new.html.erb +0 -26
  178. data/app/views/solidus_friendly_promotions/admin/promotion_rules/_promotion_rule.html.erb +0 -22
  179. data/app/views/solidus_friendly_promotions/admin/promotion_rules/_type_select.html.erb +0 -20
  180. data/app/views/solidus_friendly_promotions/admin/promotion_rules/new.html.erb +0 -24
  181. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_first_order.html.erb +0 -3
  182. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_first_repeat_purchase_since.html.erb +0 -6
  183. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_item_total.html.erb +0 -17
  184. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_line_item_option_value.html.erb +0 -25
  185. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_line_item_taxon.html.erb +0 -17
  186. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_minimum_quantity.html.erb +0 -5
  187. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_nth_order.html.erb +0 -15
  188. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_one_use_per_user.html.erb +0 -3
  189. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_product.html.erb +0 -44
  190. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_store.html.erb +0 -9
  191. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_taxon.html.erb +0 -44
  192. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user.html.erb +0 -7
  193. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user_logged_in.html.erb +0 -3
  194. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/_user_role.html.erb +0 -15
  195. data/app/views/solidus_friendly_promotions/admin/promotion_rules/rules/line_item_option_value/_option_value_fields.html.erb +0 -17
@@ -0,0 +1,9 @@
1
+ <p>
2
+ <%= condition.class.human_attribute_name(:description) %>
3
+ </p>
4
+ <div class="form-group">
5
+ <%= label_tag "#{param_prefix}[store_ids][]", Spree::Store.model_name.human(count: :other) %>
6
+ <%= select_tag "#{param_prefix}[store_ids][]",
7
+ options_from_collection_for_select(Spree::Store.all, :id, :name, condition.store_ids),
8
+ multiple: true, is: "select-two", class: "fullwidth" %>
9
+ </div>
@@ -0,0 +1,28 @@
1
+ <p>
2
+ <%= condition.class.human_attribute_name(:description) %>
3
+ </p>
4
+ <%= fields_for param_prefix, condition do |form| %>
5
+ <div class="field taxons_condition_taxons">
6
+ <%= form.label :taxon_ids_string, t('solidus_friendly_promotions.taxon_condition.choose_taxons') %>
7
+ <%= form.hidden_field :taxon_ids_string, value: condition.taxon_ids.join(","), is: "taxon-picker", class: "fullwidth" %>
8
+ </div>
9
+
10
+ <div class="form-group">
11
+ <%
12
+ match_policy_options = options_for_select(
13
+ SolidusFriendlyPromotions::Conditions::Taxon::MATCH_POLICIES.map { |s| [t("solidus_friendly_promotions.taxon_condition.match_#{s}"),s] },
14
+ condition.preferred_match_policy
15
+ )
16
+ %>
17
+ <% select = form.select :preferred_match_policy, match_policy_options %>
18
+ <%= form.label :preferred_match_policy, t('solidus_friendly_promotions.taxon_condition.label', select: select).html_safe %>
19
+ </label>
20
+ </div>
21
+
22
+ <div class="form-group">
23
+ <%= form.label :preferred_line_item_applicable do %>
24
+ <%= form.check_box :preferred_line_item_applicable %>
25
+ <%= condition.class.human_attribute_name(:preferred_line_item_applicable) %>
26
+ <% end %>
27
+ </div>
28
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <p>
2
+ <%= condition.class.human_attribute_name(:description) %>
3
+ </p>
4
+ <div class="form-group">
5
+ <label><%= t('solidus_friendly_promotions.user_condition.choose_users') %></label><br>
6
+ <input type='hidden' name='<%= param_prefix %>[user_ids_string]' is="user-picker" class='fullwidth' value='<%= condition.user_ids.join(",") %>'>
7
+ </div>
@@ -0,0 +1,3 @@
1
+ <p>
2
+ <%= condition.class.human_attribute_name(:description) %>
3
+ </p>
@@ -0,0 +1,15 @@
1
+ <p>
2
+ <%= condition.class.human_attribute_name(:description) %>
3
+ </p>
4
+ <div class="form-group">
5
+ <%= label_tag "#{param_prefix}_preferred_role_ids", t('solidus_friendly_promotions.user_role_condition.choose_roles') %>
6
+ <%= select_tag "#{param_prefix}[preferred_role_ids]",
7
+ options_from_collection_for_select(
8
+ Spree::Role.all, :id, :name, condition.preferred_role_ids
9
+ ), class: 'fullwidth', is: 'select-two', multiple: true %>
10
+ </div>
11
+ <div class="form-group">
12
+ <label>
13
+ <%= t('solidus_friendly_promotions.user_role_condition.label', select: select_tag("#{param_prefix}[preferred_match_policy]", options_for_select(SolidusFriendlyPromotions::Conditions::UserRole::MATCH_POLICIES.map{ |s| [t("solidus_friendly_promotions.user_role_condition.match_#{s}"),s] }, condition.preferred_match_policy), { class: 'custom-select'})).html_safe %>
14
+ </label>
15
+ </div>
@@ -0,0 +1,21 @@
1
+ <div class="fullwidth promo-condition-option-value d-flex align-content-stretch mb-3">
2
+ <div class="mr-2" style="flex-grow: 1;">
3
+ <input
4
+ is="product-picker"
5
+ class="w-100"
6
+ data-action="select2Change->product-option-values#propagate_product_id_to_value_input"
7
+ type="hidden"
8
+ value="<%= product_option_values[0] %>"
9
+ >
10
+ </div>
11
+ <div class="mr-2 ml-2" style="flex-grow: 1;">
12
+ <input
13
+ is="option-value-picker"
14
+ class="fullwidth"
15
+ name="<%= form.object_name %>[preferred_eligible_values][<%= product_option_values[0] %>]"
16
+ type="hidden"
17
+ value="<%= product_option_values[1].join(",") %>"
18
+ >
19
+ </div>
20
+ <a class="fa fa-trash remove p-2" data-action="click->product-option-values#remove_row"></a>
21
+ </div>
@@ -0,0 +1,26 @@
1
+ <div class="card bg-light mb-3 ">
2
+ <div class="card-header">
3
+ <%= condition.class.model_name.human %>
4
+ <span class="float-right">
5
+ <% if can?(:destroy, condition) %>
6
+ <%= link_to_with_icon 'trash', '', solidus_friendly_promotions.admin_promotion_benefit_condition_path(@promotion, condition.benefit, condition), method: :delete, class: 'delete' %>
7
+ <% end %>
8
+ </span>
9
+ </div>
10
+ <div class="card-body">
11
+ <%= form_with model: condition, scope: :condition, url: solidus_friendly_promotions.admin_promotion_benefit_condition_path(@promotion, condition.benefit, condition), method: :patch do |form| %>
12
+ <% param_prefix = "promotion[conditions_attributes][#{condition.id}]" %>
13
+ <%= hidden_field_tag "#{param_prefix}[id]", condition.id %>
14
+ <%= render partial: "spree/shared/error_messages", locals: { target: condition } %>
15
+ <%= render condition, condition: condition, param_prefix: "condition", form: form %>
16
+
17
+ <% if condition.updateable? %>
18
+ <div class="row">
19
+ <div class="col-12">
20
+ <%= form.submit(t(:update, scope: [:solidus_friendly_promotions, :crud]), class: "btn btn-secondary float-right") %>
21
+ </div>
22
+ </div>
23
+ <% end %>
24
+ <% end %>
25
+ </div>
26
+ </div>
@@ -0,0 +1,26 @@
1
+ <%= turbo_frame_tag condition.benefit, "new_condition" do %>
2
+ <div class="card bg-light mb-3">
3
+ <div class="card-header">
4
+ <%= t(:add_condition, scope: :solidus_friendly_promotions) %>
5
+ </div>
6
+ <div class="card-body">
7
+ <%= render 'solidus_friendly_promotions/admin/conditions/type_select', benefit: condition.benefit %>
8
+ <% flash.each do |severity, message| %>
9
+ <%= content_tag(:div, "", data: { controller: :flash, severity: severity, message: message }) %>
10
+ <% end %>
11
+ <% if condition.valid? %>
12
+ <%= form_with model: condition, scope: "condition", url: solidus_friendly_promotions.admin_promotion_benefit_conditions_path(@promotion, condition.benefit), data: { turbo: false } do |form| %>
13
+ <%= hidden_field_tag "condition[type]", condition.class.name %>
14
+ <%= render condition, condition: condition, param_prefix: "condition", form: form %>
15
+
16
+ <div class="row">
17
+ <div class="col-12">
18
+ <%= form.submit(t(:add, scope: [:solidus_friendly_promotions, :crud]), class: "btn btn-secondary float-right") %>
19
+ </div>
20
+ </div>
21
+
22
+ <% end %>
23
+ <% end %>
24
+ </div>
25
+ </div>
26
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <%= form_with(
2
+ model: @condition || benefit.conditions.build,
3
+ scope: :condition,
4
+ url: solidus_friendly_promotions.new_admin_promotion_benefit_condition_path(@promotion, benefit),
5
+ method: :get,
6
+ class: "mb-3"
7
+ ) do |form| %>
8
+ <%= form.label :type %>
9
+ <%= admin_hint SolidusFriendlyPromotions::Condition.human_attribute_name(:type), t(:conditions, scope: [:solidus_friendly_promotions, :hints, "solidus_friendly_promotions/benefit"]) %>
10
+ <%=
11
+ form.select :type,
12
+ options_for_condition_types(benefit, @condition),
13
+ {
14
+ include_blank: t(:choose_condition, scope: 'solidus_friendly_promotions')
15
+ },
16
+ class: 'custom-select fullwidth',
17
+ onchange: 'this.form.requestSubmit()',
18
+ required: true
19
+ %>
20
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render "new_condition", condition: @condition %>
@@ -1,22 +1,22 @@
1
- <div class="field">
1
+ <div class="form-group">
2
2
  <%= batch.label :base_code, class: "required" %>
3
3
  <%= batch.text_field :base_code, class: "fullwidth", required: true %>
4
4
  </div>
5
- <div class="field">
5
+ <div class="form-group">
6
6
  <%= batch.label :number_of_codes, class: "required" %>
7
7
  <%= batch.number_field :number_of_codes, class: "fullwidth", min: 1, required: true %>
8
8
  </div>
9
- <div class="field">
9
+ <div class="form-group">
10
10
  <%= batch.label :join_characters %>
11
11
  <%= batch.text_field :join_characters, class: "fullwidth" %>
12
12
  </div>
13
13
  <% unless promotion_id %>
14
- <div class="field">
14
+ <div class="form-group">
15
15
  <%= f.label :per_code_usage_limit %>
16
16
  <%= f.text_field :per_code_usage_limit, class: "fullwidth" %>
17
17
  </div>
18
18
  <% end %>
19
- <div class="field">
19
+ <div class="form-group">
20
20
  <%= batch.label :email %>
21
21
  <%= batch.text_field :email, class: "fullwidth" %>
22
22
  </div>
@@ -49,7 +49,7 @@
49
49
  <% end %>
50
50
  <% end %>
51
51
 
52
- <div id="starts_at_field" class="field">
52
+ <div id="starts_at_field" class="form-group">
53
53
  <%= f.label :starts_at %>
54
54
  <%= f.field_hint :starts_at %>
55
55
  <%=
@@ -61,7 +61,7 @@
61
61
  %>
62
62
  </div>
63
63
 
64
- <div id="expires_at_field" class="field">
64
+ <div id="expires_at_field" class="form-group">
65
65
  <%= f.label :expires_at %>
66
66
  <%= f.field_hint :expires_at %>
67
67
  <%=
@@ -73,7 +73,7 @@
73
73
  data: { :'enable-time' => true, :'default-hour' => 0 }
74
74
  %>
75
75
  </div>
76
- <div class="field">
76
+ <div class="form-group">
77
77
  <%= f.field_container :lane do %>
78
78
  <%= f.label :lane %><br>
79
79
  <%=
@@ -109,7 +109,7 @@
109
109
 
110
110
  <div class="col-4">
111
111
  <% if f.object.new_record? %>
112
- <div id="promotion_single_code" class="field">
112
+ <div id="promotion_single_code" class="form-group">
113
113
  <%= label_tag :single_code, SolidusFriendlyPromotions::PromotionCode.model_name.human %>
114
114
  <%= text_field_tag :single_code, @promotion.codes.first.try!(:value), class: "fullwidth", disabled: f.object.apply_automatically || f.object.path.present? %>
115
115
  </div>
@@ -7,28 +7,28 @@
7
7
  <%= search_form_for [:admin, search] do |f| %>
8
8
  <div class="row">
9
9
  <div class="col-4">
10
- <div class="field">
10
+ <div class="form-group">
11
11
  <%= label_tag :q_name_cont, SolidusFriendlyPromotions::Promotion.human_attribute_name(:name) %>
12
12
  <%= f.text_field :name_cont, tabindex: 1 %>
13
13
  </div>
14
14
  </div>
15
15
 
16
16
  <div class="col-4">
17
- <div class="field">
17
+ <div class="form-group">
18
18
  <%= label_tag :q_customer_label_cont, SolidusFriendlyPromotions::Promotion.human_attribute_name(:customer_label) %>
19
19
  <%= f.text_field :customer_label_cont, tabindex: 1 %>
20
20
  </div>
21
21
  </div>
22
22
 
23
23
  <div class="col-2">
24
- <div class="field">
24
+ <div class="form-group">
25
25
  <%= label_tag :q_codes_value_cont, SolidusFriendlyPromotions::Promotion.human_attribute_name(:code) %>
26
26
  <%= f.text_field :codes_value_cont, tabindex: 1 %>
27
27
  </div>
28
28
  </div>
29
29
 
30
30
  <div class="col-2">
31
- <div class="field">
31
+ <div class="form-group">
32
32
  <%= label_tag :q_path_cont, SolidusFriendlyPromotions::Promotion.human_attribute_name(:path) %>
33
33
  <%= f.text_field :path_cont, tabindex: 1 %>
34
34
  </div>
@@ -53,14 +53,14 @@
53
53
  </div>
54
54
 
55
55
  <div class="col-2">
56
- <div class="field">
56
+ <div class="form-group">
57
57
  <%= label_tag :q_promotion_category_id_eq, SolidusFriendlyPromotions::PromotionCategory.model_name.human %><br>
58
58
  <%= f.collection_select(:promotion_category_id_eq, @promotion_categories, :id, :name, { include_blank: t(:all, scope: :spree) }, { class: 'custom-select fullwidth' }) %>
59
59
  </div>
60
60
  </div>
61
61
 
62
62
  <div class="col-2">
63
- <div class="field">
63
+ <div class="form-group">
64
64
  <%= label_tag :q_lane_eq, SolidusFriendlyPromotions::Promotion.human_attribute_name(:lane) %><br>
65
65
  <%= f.select(:lane_eq, SolidusFriendlyPromotions::Promotion.lane_options, { include_blank: t(:all, scope: :spree) }, { class: 'custom-select fullwidth' }) %>
66
66
  </div>
@@ -5,6 +5,7 @@
5
5
 
6
6
  <%= content_for :head do %>
7
7
  <%= javascript_importmap_tags "solidus_friendly_promotions", importmap: SolidusFriendlyPromotions.importmap %>
8
+ <%#= stylesheet_link_tag 'solidus_friendly_promotions/promotions' %>
8
9
  <% end %>
9
10
 
10
11
  <% content_for :page_actions do %>
@@ -28,48 +29,13 @@
28
29
  <% end %>
29
30
  <% end %>
30
31
 
31
-
32
32
  <fieldset>
33
- <legend align="center"><%= t(:order_rules, scope: :solidus_friendly_promotions) %></legend>
34
-
35
- <%= render partial: 'solidus_friendly_promotions/admin/promotion_rules/promotion_rule', collection: promotion_rules_by_level(@promotion, :order), locals: { level: :order } %>
36
-
37
- <%= turbo_frame_tag @promotion, "new_order_promotion_rule" do %>
38
- <%= link_to t(:add_rule, scope: :solidus_friendly_promotions), solidus_friendly_promotions.new_admin_promotion_promotion_rule_path(@promotion, level: :order), class: 'btn btn-secondary' %>
39
- <% end %>
40
- </fieldset>
41
-
42
- <div class="row">
43
- <div class="col-12">
44
- <%= turbo_frame_tag @promotion, "new_promotion_action" do %>
45
- <%= link_to t(:add_action, scope: :solidus_friendly_promotions), solidus_friendly_promotions.new_admin_promotion_promotion_action_path(@promotion), class: 'btn btn-secondary' %>
33
+ <legend align="center"><%= t("benefits", scope: :solidus_friendly_promotions) %></legend>
34
+ <% if @promotion.benefits.any? %>
35
+ <%= render partial: 'solidus_friendly_promotions/admin/benefits/benefit', collection: @promotion.benefits %>
46
36
  <% end %>
47
- </div>
48
- </div>
49
37
 
50
- <div class="row">
51
- <% [:order, :line_item, :shipment].each do |level| %>
52
- <% if promotion_actions_by_level(@promotion, level).any? %>
53
- <div class="col-<%= level == :order ? 12 : 6 %>">
54
- <fieldset>
55
- <legend align="center"><%= t("#{level}_actions", scope: :solidus_friendly_promotions) %></legend>
56
-
57
- <%= render partial: 'solidus_friendly_promotions/admin/promotion_actions/promotion_action', collection: promotion_actions_by_level(@promotion, level), locals: {} %>
58
- </fieldset>
59
- </div>
60
- <% if level != :order %>
61
- <div class="col-6">
62
- <fieldset>
63
- <legend align="center"><%= t("#{level}_rules", scope: :solidus_friendly_promotions) %></legend>
64
-
65
- <%= render partial: 'solidus_friendly_promotions/admin/promotion_rules/promotion_rule', collection: promotion_rules_by_level(@promotion, level), locals: { level: level } %>
66
-
67
- <%= turbo_frame_tag @promotion, "new_#{level}_promotion_rule" do %>
68
- <%= link_to t(:add_rule, scope: :solidus_friendly_promotions), solidus_friendly_promotions.new_admin_promotion_promotion_rule_path(@promotion, level: level), class: 'btn btn-secondary' %>
69
- <% end %>
70
- </fieldset>
71
- </div>
72
- <% end %>
38
+ <%= turbo_frame_tag @promotion, "new_benefit" do %>
39
+ <%= link_to t(:add_benefit, scope: :solidus_friendly_promotions), solidus_friendly_promotions.new_admin_promotion_benefit_path(@promotion), class: 'btn btn-secondary' %>
73
40
  <% end %>
74
- <% end %>
75
- </div>
41
+ </fieldset>
@@ -0,0 +1,20 @@
1
+ <% amount_attr ||= :amount %>
2
+ <% currency_attr ||= :currency %>
3
+ <% currency ||= nil %>
4
+ <% required ||= nil %>
5
+
6
+ <number-with-currency class="input-group number-with-currency <%= "number-with-currency-with-select" unless currency %>">
7
+ <div class="input-group-prepend">
8
+ <span class="input-group-text number-with-currency-symbol"></span>
9
+ </div>
10
+ <%= f.text_field amount_attr, value: number_to_currency(f.object.public_send(amount_attr), unit: '', delimiter: ''), class: 'form-control number-with-currency-amount', required: required %>
11
+ <% if currency %>
12
+ <div class="input-group-append">
13
+ <span class="input-group-text number-with-currency-addon" data-currency="<%= currency %>">
14
+ <%= ::Money::Currency.find(currency).iso_code %>
15
+ </span>
16
+ </div>
17
+ <% else %>
18
+ <%= f.select currency_attr, Spree::Config.available_currencies.map(&:iso_code), {selected: f.object.send(currency_attr) || Spree::Config.currency}, {required: required, class: 'number-with-currency-select'} %>
19
+ <% end %>
20
+ </number-with-currency>
@@ -0,0 +1,14 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = local_assigns[:html_options] || {} %>
3
+
4
+ <div class="form-group">
5
+ <label>
6
+ <% if local_assigns[:form] %>
7
+ <%= form.check_box attribute, html_options %>
8
+ <% else %>
9
+ <%= hidden_field_tag name, 0 %>
10
+ <%= check_box_tag name, 1, value, html_options %>
11
+ <% end %>
12
+ <%= label || form.object.class.human_attribute_name(attribute) %>
13
+ </label>
14
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {class: 'input_decimal fullwidth'}.update(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.text_field attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= text_field_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {class: 'input_string fullwidth'}.merge(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.text_field attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= text_field_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {class: 'input_integer fullwidth'}.update(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.number_field attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= number_field_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {class: 'password_string fullwidth'}.update(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.password_field attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= password_field_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {class: 'input_string fullwidth'}.update(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.text_field attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= text_field_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,12 @@
1
+ <% label = local_assigns[:label].presence %>
2
+ <% html_options = {cols: 85, rows: 15}.update(local_assigns[:html_options] || {}) %>
3
+
4
+ <div class="form-group">
5
+ <% if local_assigns[:form] %>
6
+ <%= form.label attribute, label %>
7
+ <%= form.text_area attribute, html_options %>
8
+ <% else %>
9
+ <%= label_tag name, label %>
10
+ <%= text_area_tag name, value, html_options %>
11
+ <% end %>
12
+ </div>
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