workarea-admin 3.4.45 → 3.5.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +52 -0
  3. data/app/assets/images/workarea/admin/email_logo.png +0 -0
  4. data/app/assets/javascripts/workarea/admin/application.js.erb +11 -1
  5. data/app/assets/javascripts/workarea/admin/config.js.erb +96 -0
  6. data/app/assets/javascripts/workarea/admin/modules/active_by_segment_tooltips.js +108 -0
  7. data/app/assets/javascripts/workarea/admin/modules/calendars.js +1 -1
  8. data/app/assets/javascripts/workarea/admin/modules/categorized_autocomplete_fields.js +1 -1
  9. data/app/assets/javascripts/workarea/admin/modules/impersonation_notification.js +44 -0
  10. data/app/assets/javascripts/workarea/admin/modules/jump_to_menus.js +74 -0
  11. data/app/assets/javascripts/workarea/admin/modules/new_navigation_taxons.js +1 -2
  12. data/app/assets/javascripts/workarea/admin/modules/release_reminder.js +1 -0
  13. data/app/assets/javascripts/workarea/admin/modules/selects.js +33 -0
  14. data/app/assets/javascripts/workarea/admin/modules/style_guide_autocomplete_fields.js +42 -0
  15. data/app/assets/javascripts/workarea/admin/modules/timeline_report_chart.js +105 -0
  16. data/app/assets/javascripts/workarea/admin/modules/toggle_elements.js +27 -0
  17. data/app/assets/javascripts/workarea/admin/modules/tribute_areas.js +91 -0
  18. data/app/assets/javascripts/workarea/admin/templates/chart_legend.jst.ejs +17 -9
  19. data/app/assets/javascripts/workarea/admin/templates/jump_to_menu.jst.ejs +13 -0
  20. data/app/assets/stylesheets/workarea/admin/application.scss.erb +3 -0
  21. data/app/assets/stylesheets/workarea/admin/base/_forms.scss +2 -2
  22. data/app/assets/stylesheets/workarea/admin/components/_activity.scss +24 -16
  23. data/app/assets/stylesheets/workarea/admin/components/_activity_group.scss +3 -19
  24. data/app/assets/stylesheets/workarea/admin/components/_box.scss +21 -5
  25. data/app/assets/stylesheets/workarea/admin/components/_calendar.scss +102 -140
  26. data/app/assets/stylesheets/workarea/admin/components/_chart_legend.scss +10 -13
  27. data/app/assets/stylesheets/workarea/admin/components/_checkbox.scss +49 -23
  28. data/app/assets/stylesheets/workarea/admin/components/_content_block_list.scss +5 -3
  29. data/app/assets/stylesheets/workarea/admin/components/_date_marker.scss +24 -3
  30. data/app/assets/stylesheets/workarea/admin/components/_index_table.scss +5 -0
  31. data/app/assets/stylesheets/workarea/admin/components/_jump_to_menu.scss +57 -0
  32. data/app/assets/stylesheets/workarea/admin/components/_product_summary.scss +46 -0
  33. data/app/assets/stylesheets/workarea/admin/components/_toggle_button.scss +1 -4
  34. data/app/assets/stylesheets/workarea/admin/email/_base.scss +30 -2
  35. data/app/assets/stylesheets/workarea/admin/email/_components.scss +66 -5
  36. data/app/assets/stylesheets/workarea/admin/email/_helpers.scss +16 -5
  37. data/app/assets/stylesheets/workarea/admin/email/{_settings.scss → _settings.scss.erb} +4 -4
  38. data/app/controllers/workarea/admin/application_controller.rb +2 -4
  39. data/app/controllers/workarea/admin/bulk_action_sequential_product_edits_controller.rb +4 -6
  40. data/app/controllers/workarea/admin/bulk_variant_saving.rb +1 -2
  41. data/app/controllers/workarea/admin/catalog_products_controller.rb +4 -6
  42. data/app/controllers/workarea/admin/catalog_variants_controller.rb +2 -3
  43. data/app/controllers/workarea/admin/comments_controller.rb +9 -0
  44. data/app/controllers/workarea/admin/configurations_controller.rb +29 -0
  45. data/app/controllers/workarea/admin/content_assets_controller.rb +3 -1
  46. data/app/controllers/workarea/admin/content_blocks_controller.rb +1 -7
  47. data/app/controllers/workarea/admin/create_catalog_products_controller.rb +2 -8
  48. data/app/controllers/workarea/admin/create_release_undos_controller.rb +43 -0
  49. data/app/controllers/workarea/admin/create_segments_controller.rb +68 -0
  50. data/app/controllers/workarea/admin/dashboards_controller.rb +2 -0
  51. data/app/controllers/workarea/admin/data_file_imports_controller.rb +7 -2
  52. data/app/controllers/workarea/admin/fulfillment_skus_controller.rb +58 -0
  53. data/app/controllers/workarea/admin/fulfillment_tokens_controller.rb +56 -0
  54. data/app/controllers/workarea/admin/guest_browsings_controller.rb +2 -2
  55. data/app/controllers/workarea/admin/impersonations_controller.rb +3 -4
  56. data/app/controllers/workarea/admin/orders_controller.rb +3 -0
  57. data/app/controllers/workarea/admin/pricing_discount_redemptions_controller.rb +13 -0
  58. data/app/controllers/workarea/admin/pricing_overrides_controller.rb +1 -1
  59. data/app/controllers/workarea/admin/product_rules_controller.rb +1 -2
  60. data/app/controllers/workarea/admin/releases_controller.rb +8 -13
  61. data/app/controllers/workarea/admin/reports_controller.rb +18 -0
  62. data/app/controllers/workarea/admin/segment_overrides_controller.rb +19 -0
  63. data/app/controllers/workarea/admin/segment_rules_controller.rb +62 -0
  64. data/app/controllers/workarea/admin/segments_controller.rb +48 -0
  65. data/app/controllers/workarea/admin/tax_rates_controller.rb +62 -1
  66. data/app/controllers/workarea/admin/unsubscribes_controller.rb +40 -0
  67. data/app/controllers/workarea/admin/users_controller.rb +19 -0
  68. data/app/helpers/workarea/admin/application_helper.rb +2 -12
  69. data/app/helpers/workarea/admin/configurations_helper.rb +9 -0
  70. data/app/helpers/workarea/admin/content_helper.rb +2 -3
  71. data/app/helpers/workarea/admin/fulfillment_helper.rb +10 -0
  72. data/app/helpers/workarea/admin/icons_helper.rb +26 -0
  73. data/app/helpers/workarea/admin/navigation_helper.rb +1 -0
  74. data/app/helpers/workarea/admin/pricing_overrides_helper.rb +1 -1
  75. data/app/helpers/workarea/admin/products_helper.rb +13 -0
  76. data/app/helpers/workarea/admin/releases_helper.rb +5 -21
  77. data/app/helpers/workarea/admin/segments_helper.rb +68 -0
  78. data/app/helpers/workarea/admin/settings_helper.rb +11 -3
  79. data/app/mailers/workarea/admin/comment_mailer.rb +3 -3
  80. data/app/mailers/workarea/admin/status_report_mailer.rb +19 -6
  81. data/app/view_models/workarea/admin/bulk_action_product_edit_view_model.rb +5 -0
  82. data/app/view_models/workarea/admin/changeset_view_model.rb +15 -3
  83. data/app/view_models/workarea/admin/code_list_view_model.rb +1 -1
  84. data/app/view_models/workarea/admin/commentable_view_model.rb +4 -0
  85. data/app/view_models/workarea/admin/content_view_model.rb +2 -0
  86. data/app/view_models/workarea/admin/dashboards/marketing_view_model.rb +5 -9
  87. data/app/view_models/workarea/admin/dashboards/reports_view_model.rb +25 -0
  88. data/app/view_models/workarea/admin/discounts/buy_some_get_some_view_model.rb +6 -0
  89. data/app/view_models/workarea/admin/discounts/category_view_model.rb +6 -0
  90. data/app/view_models/workarea/admin/discounts/free_gift_view_model.rb +6 -0
  91. data/app/view_models/workarea/admin/discounts/order_total_view_model.rb +6 -0
  92. data/app/view_models/workarea/admin/discounts/product_attribute_view_model.rb +6 -0
  93. data/app/view_models/workarea/admin/discounts/product_view_model.rb +6 -0
  94. data/app/view_models/workarea/admin/discounts/quantity_fixed_price_view_model.rb +6 -0
  95. data/app/view_models/workarea/admin/discounts/shipping_view_model.rb +6 -0
  96. data/app/view_models/workarea/admin/featured_products_view_model.rb +6 -12
  97. data/app/view_models/workarea/admin/fulfillment_sku_view_model.rb +22 -0
  98. data/app/view_models/workarea/admin/fulfillment_token_view_model.rb +15 -0
  99. data/app/view_models/workarea/admin/fulfillment_view_model.rb +14 -0
  100. data/app/view_models/workarea/admin/insight_view_model.rb +2 -2
  101. data/app/view_models/workarea/admin/insights/product_view_model.rb +2 -2
  102. data/app/view_models/workarea/admin/insights/segment_view_model.rb +25 -0
  103. data/app/view_models/workarea/admin/order_view_model.rb +4 -0
  104. data/app/view_models/workarea/admin/pricing_sku_view_model.rb +0 -51
  105. data/app/view_models/workarea/admin/product_rules_preview_view_model.rb +2 -2
  106. data/app/view_models/workarea/admin/product_view_model.rb +26 -5
  107. data/app/view_models/workarea/admin/recommendations_view_model.rb +3 -11
  108. data/app/view_models/workarea/admin/release_calendar_view_model.rb +4 -9
  109. data/app/view_models/workarea/admin/release_event_view_model.rb +8 -41
  110. data/app/view_models/workarea/admin/release_view_model.rb +10 -17
  111. data/app/view_models/workarea/admin/releases_feed_view_model.rb +5 -13
  112. data/app/view_models/workarea/admin/reports/customers_view_model.rb +4 -2
  113. data/app/view_models/workarea/admin/reports/low_inventory_view_model.rb +2 -5
  114. data/app/view_models/workarea/admin/reports/sales_by_category_view_model.rb +2 -5
  115. data/app/view_models/workarea/admin/reports/sales_by_discount_view_model.rb +2 -5
  116. data/app/view_models/workarea/admin/reports/sales_by_product_view_model.rb +2 -5
  117. data/app/view_models/workarea/admin/reports/sales_by_tender_view_model.rb +13 -0
  118. data/app/view_models/workarea/admin/reports/timeline_view_model.rb +74 -0
  119. data/app/view_models/workarea/admin/search_customization_product_rules_view_model.rb +1 -1
  120. data/app/view_models/workarea/admin/segment_view_model.rb +19 -0
  121. data/app/view_models/workarea/admin/user_view_model.rb +6 -9
  122. data/app/view_models/workarea/admin/variant_view_model.rb +8 -0
  123. data/app/views/layouts/workarea/admin/application.html.haml +1 -1
  124. data/app/views/layouts/workarea/admin/email.html.haml +35 -41
  125. data/app/views/workarea/admin/activities/_configuration_admin_update.html.haml +10 -0
  126. data/app/views/workarea/admin/activities/_fulfillment_sku_create.html.haml +12 -0
  127. data/app/views/workarea/admin/activities/_fulfillment_sku_destroy.html.haml +10 -0
  128. data/app/views/workarea/admin/activities/_fulfillment_sku_update.html.haml +10 -0
  129. data/app/views/workarea/admin/activities/_segment_create.html.haml +12 -0
  130. data/app/views/workarea/admin/activities/_segment_destroy.html.haml +10 -0
  131. data/app/views/workarea/admin/activities/_segment_update.html.haml +10 -0
  132. data/app/views/workarea/admin/activities/show.html.haml +18 -11
  133. data/app/views/workarea/admin/bulk_action_product_edits/edit.html.haml +4 -0
  134. data/app/views/workarea/admin/bulk_action_product_edits/review.html.haml +11 -4
  135. data/app/views/workarea/admin/bulk_action_sequential_product_edits/product.html.haml +1 -1
  136. data/app/views/workarea/admin/catalog_categories/_cards.html.haml +3 -1
  137. data/app/views/workarea/admin/catalog_categories/edit.html.haml +1 -4
  138. data/app/views/workarea/admin/catalog_categories/index.html.haml +1 -0
  139. data/app/views/workarea/admin/catalog_product_images/edit.html.haml +1 -1
  140. data/app/views/workarea/admin/catalog_products/_cards.html.haml +2 -4
  141. data/app/views/workarea/admin/catalog_products/edit.html.haml +2 -1
  142. data/app/views/workarea/admin/catalog_products/index.html.haml +4 -2
  143. data/app/views/workarea/admin/catalog_products/insights.html.haml +2 -0
  144. data/app/views/workarea/admin/catalog_variants/edit.html.haml +6 -1
  145. data/app/views/workarea/admin/catalog_variants/index.html.haml +2 -0
  146. data/app/views/workarea/admin/catalog_variants/new.html.haml +5 -0
  147. data/app/views/workarea/admin/changesets/fields/_active_segment_ids.html.haml +4 -0
  148. data/app/views/workarea/admin/comment_mailer/notify.html.haml +27 -19
  149. data/app/views/workarea/admin/comments/index.html.haml +18 -12
  150. data/app/views/workarea/admin/configurations/_overridden.html.haml +2 -0
  151. data/app/views/workarea/admin/configurations/show.html.haml +49 -0
  152. data/app/views/workarea/admin/configurations/types/_array.html.haml +3 -0
  153. data/app/views/workarea/admin/configurations/types/_boolean.html.haml +1 -0
  154. data/app/views/workarea/admin/configurations/types/_duration.html.haml +2 -0
  155. data/app/views/workarea/admin/configurations/types/_encrypted.html.haml +1 -0
  156. data/app/views/workarea/admin/configurations/types/_float.html.haml +1 -0
  157. data/app/views/workarea/admin/configurations/types/_hash.html.haml +17 -0
  158. data/app/views/workarea/admin/configurations/types/_integer.html.haml +1 -0
  159. data/app/views/workarea/admin/configurations/types/_select.html.haml +1 -0
  160. data/app/views/workarea/admin/configurations/types/_string.html.haml +1 -0
  161. data/app/views/workarea/admin/configurations/types/_symbol.html.haml +1 -0
  162. data/app/views/workarea/admin/content/_edit.html.haml +8 -1
  163. data/app/views/workarea/admin/content/_form.html.haml +13 -7
  164. data/app/views/workarea/admin/content/advanced.html.haml +18 -10
  165. data/app/views/workarea/admin/content_assets/_cards.html.haml +3 -0
  166. data/app/views/workarea/admin/content_assets/_summary.html.haml +1 -1
  167. data/app/views/workarea/admin/content_assets/edit.html.haml +6 -0
  168. data/app/views/workarea/admin/content_assets/index.html.haml +7 -2
  169. data/app/views/workarea/admin/content_assets/new.html.haml +10 -3
  170. data/app/views/workarea/admin/content_blocks/_asset.html.haml +8 -1
  171. data/app/views/workarea/admin/content_pages/_cards.html.haml +1 -0
  172. data/app/views/workarea/admin/content_pages/edit.html.haml +1 -1
  173. data/app/views/workarea/admin/content_pages/index.html.haml +1 -0
  174. data/app/views/workarea/admin/create_catalog_categories/publish.html.haml +1 -0
  175. data/app/views/workarea/admin/create_catalog_products/content.html.haml +1 -1
  176. data/app/views/workarea/admin/create_catalog_products/publish.html.haml +1 -0
  177. data/app/views/workarea/admin/create_content_pages/publish.html.haml +1 -0
  178. data/app/views/workarea/admin/create_pricing_discounts/publish.html.haml +1 -0
  179. data/app/views/workarea/admin/create_release_undos/new.html.haml +45 -0
  180. data/app/views/workarea/admin/create_release_undos/review.html.haml +51 -0
  181. data/app/views/workarea/admin/create_releases/plan.html.haml +4 -3
  182. data/app/views/workarea/admin/create_releases/setup.html.haml +8 -12
  183. data/app/views/workarea/admin/create_segments/rules.html.haml +55 -0
  184. data/app/views/workarea/admin/create_segments/setup.html.haml +42 -0
  185. data/app/views/workarea/admin/create_users/admin.html.haml +0 -2
  186. data/app/views/workarea/admin/dashboards/catalog.html.haml +1 -0
  187. data/app/views/workarea/admin/dashboards/people.html.haml +1 -1
  188. data/app/views/workarea/admin/dashboards/reports.html.haml +31 -0
  189. data/app/views/workarea/admin/dashboards/settings.html.haml +23 -3
  190. data/app/views/workarea/admin/data_file_imports/new.html.haml +4 -2
  191. data/app/views/workarea/admin/data_file_mailer/export.html.haml +2 -0
  192. data/app/views/workarea/admin/data_file_mailer/import.html.haml +2 -0
  193. data/app/views/workarea/admin/data_file_mailer/import_failure.html.haml +2 -0
  194. data/app/views/workarea/admin/facets/_applied.html.haml +1 -1
  195. data/app/views/workarea/admin/featured_products/_selected.html.haml +3 -2
  196. data/app/views/workarea/admin/featured_products/_unselected.html.haml +3 -1
  197. data/app/views/workarea/admin/featured_products/edit.html.haml +3 -3
  198. data/app/views/workarea/admin/featured_products/select.html.haml +0 -1
  199. data/app/views/workarea/admin/fulfillment_skus/_aux_navigation.html.haml +3 -0
  200. data/app/views/workarea/admin/fulfillment_skus/_cards.html.haml +57 -0
  201. data/app/views/workarea/admin/fulfillment_skus/_summary.html.haml +6 -0
  202. data/app/views/workarea/admin/fulfillment_skus/edit.html.haml +53 -0
  203. data/app/views/workarea/admin/fulfillment_skus/index.html.haml +75 -0
  204. data/app/views/workarea/admin/fulfillment_skus/new.html.haml +41 -0
  205. data/app/views/workarea/admin/fulfillment_skus/show.html.haml +17 -0
  206. data/app/views/workarea/admin/fulfillment_tokens/index.html.haml +73 -0
  207. data/app/views/workarea/admin/fulfillments/show.html.haml +41 -6
  208. data/app/views/workarea/admin/insights/_most_discounted_products.html.haml +4 -4
  209. data/app/views/workarea/admin/inventory_skus/show.html.haml +1 -1
  210. data/app/views/workarea/admin/navigation_menus/_summary.html.haml +1 -1
  211. data/app/views/workarea/admin/navigation_menus/edit.html.haml +1 -1
  212. data/app/views/workarea/admin/navigation_menus/index.html.haml +3 -1
  213. data/app/views/workarea/admin/navigation_redirects/index.html.haml +0 -5
  214. data/app/views/workarea/admin/navigation_taxons/index.html.haml +20 -4
  215. data/app/views/workarea/admin/orders/_cards.html.haml +23 -5
  216. data/app/views/workarea/admin/orders/attributes.html.haml +4 -1
  217. data/app/views/workarea/admin/orders/fraud.html.haml +43 -0
  218. data/app/views/workarea/admin/orders/index.html.haml +1 -0
  219. data/app/views/workarea/admin/orders/timeline.html.haml +1 -1
  220. data/app/views/workarea/admin/pricing_discount_code_lists/_cards.html.haml +1 -1
  221. data/app/views/workarea/admin/pricing_discount_code_lists/promo_codes.html.haml +1 -1
  222. data/app/views/workarea/admin/pricing_discount_redemptions/index.html.haml +44 -0
  223. data/app/views/workarea/admin/pricing_discounts/_cards.html.haml +22 -0
  224. data/app/views/workarea/admin/pricing_discounts/conditions/_segments.html.haml +5 -0
  225. data/app/views/workarea/admin/pricing_discounts/edit.html.haml +5 -15
  226. data/app/views/workarea/admin/pricing_discounts/index.html.haml +1 -0
  227. data/app/views/workarea/admin/pricing_discounts/properties/_buy_some_get_some.html.haml +1 -0
  228. data/app/views/workarea/admin/pricing_discounts/properties/_category.html.haml +1 -0
  229. data/app/views/workarea/admin/pricing_discounts/properties/_free_gift.html.haml +1 -0
  230. data/app/views/workarea/admin/pricing_discounts/properties/_order_total.html.haml +1 -0
  231. data/app/views/workarea/admin/pricing_discounts/properties/_product.html.haml +1 -0
  232. data/app/views/workarea/admin/pricing_discounts/properties/_product_attribute.html.haml +2 -1
  233. data/app/views/workarea/admin/pricing_discounts/properties/_quantity_fixed_price.html.haml +1 -0
  234. data/app/views/workarea/admin/pricing_discounts/properties/_shipping.html.haml +1 -0
  235. data/app/views/workarea/admin/pricing_skus/_cards.html.haml +7 -7
  236. data/app/views/workarea/admin/pricing_skus/edit.html.haml +5 -5
  237. data/app/views/workarea/admin/pricing_skus/index.html.haml +4 -4
  238. data/app/views/workarea/admin/pricing_skus/new.html.haml +6 -9
  239. data/app/views/workarea/admin/product_rules/_card.html.haml +2 -2
  240. data/app/views/workarea/admin/product_rules/_form.html.haml +1 -0
  241. data/app/views/workarea/admin/product_rules/index.html.haml +2 -0
  242. data/app/views/workarea/admin/releases/_cards.html.haml +50 -12
  243. data/app/views/workarea/admin/releases/_publish.html.haml +1 -1
  244. data/app/views/workarea/admin/releases/edit.html.haml +33 -46
  245. data/app/views/workarea/admin/releases/index.html.haml +81 -90
  246. data/app/views/workarea/admin/releases/list.html.haml +107 -0
  247. data/app/views/workarea/admin/releases/original.html.haml +50 -0
  248. data/app/views/workarea/admin/releases/show.html.haml +3 -17
  249. data/app/views/workarea/admin/releases/undo.html.haml +64 -0
  250. data/app/views/workarea/admin/reports/average_order_value.html.haml +1 -1
  251. data/app/views/workarea/admin/reports/customers.html.haml +4 -0
  252. data/app/views/workarea/admin/reports/first_time_vs_returning_sales.html.haml +1 -1
  253. data/app/views/workarea/admin/reports/reference.html.haml +19 -60
  254. data/app/views/workarea/admin/reports/sales_by_country.html.haml +6 -0
  255. data/app/views/workarea/admin/reports/sales_by_product.html.haml +6 -0
  256. data/app/views/workarea/admin/reports/sales_by_sku.html.haml +6 -0
  257. data/app/views/workarea/admin/reports/sales_by_tender.html.haml +30 -0
  258. data/app/views/workarea/admin/reports/sales_over_time.html.haml +5 -1
  259. data/app/views/workarea/admin/reports/timeline.html.haml +20 -0
  260. data/app/views/workarea/admin/search_customizations/_cards.html.haml +1 -0
  261. data/app/views/workarea/admin/search_customizations/edit.html.haml +1 -1
  262. data/app/views/workarea/admin/search_customizations/index.html.haml +1 -0
  263. data/app/views/workarea/admin/searches/show.html.haml +6 -5
  264. data/app/views/workarea/admin/segment_overrides/show.html.haml +29 -0
  265. data/app/views/workarea/admin/segment_rules/_form.html.haml +13 -0
  266. data/app/views/workarea/admin/segment_rules/fields/_browser_info.html.haml +13 -0
  267. data/app/views/workarea/admin/segment_rules/fields/_geolocation.html.haml +4 -0
  268. data/app/views/workarea/admin/segment_rules/fields/_last_order.html.haml +3 -0
  269. data/app/views/workarea/admin/segment_rules/fields/_logged_in.html.haml +2 -0
  270. data/app/views/workarea/admin/segment_rules/fields/_orders.html.haml +5 -0
  271. data/app/views/workarea/admin/segment_rules/fields/_revenue.html.haml +9 -0
  272. data/app/views/workarea/admin/segment_rules/fields/_sessions.html.haml +5 -0
  273. data/app/views/workarea/admin/segment_rules/fields/_tags.html.haml +4 -0
  274. data/app/views/workarea/admin/segment_rules/fields/_traffic_referrer.html.haml +13 -0
  275. data/app/views/workarea/admin/segment_rules/geolocation_options.json.jbuilder +4 -0
  276. data/app/views/workarea/admin/segment_rules/index.html.haml +25 -0
  277. data/app/views/workarea/admin/segment_rules/summaries/_browser_info.html.haml +11 -0
  278. data/app/views/workarea/admin/segment_rules/summaries/_geolocation.html.haml +2 -0
  279. data/app/views/workarea/admin/segment_rules/summaries/_last_order.html.haml +2 -0
  280. data/app/views/workarea/admin/segment_rules/summaries/_logged_in.html.haml +5 -0
  281. data/app/views/workarea/admin/segment_rules/summaries/_orders.html.haml +6 -0
  282. data/app/views/workarea/admin/segment_rules/summaries/_revenue.html.haml +7 -0
  283. data/app/views/workarea/admin/segment_rules/summaries/_sessions.html.haml +6 -0
  284. data/app/views/workarea/admin/segment_rules/summaries/_tags.html.haml +2 -0
  285. data/app/views/workarea/admin/segment_rules/summaries/_traffic_referrer.html.haml +10 -0
  286. data/app/views/workarea/admin/segments/_cards.html.haml +81 -0
  287. data/app/views/workarea/admin/segments/_publish.html.haml +10 -0
  288. data/app/views/workarea/admin/segments/edit.html.haml +41 -0
  289. data/app/views/workarea/admin/segments/index.html.haml +64 -0
  290. data/app/views/workarea/admin/segments/insights.html.haml +52 -0
  291. data/app/views/workarea/admin/segments/show.html.haml +20 -0
  292. data/app/views/workarea/admin/shared/_active_field.html.haml +17 -0
  293. data/app/views/workarea/admin/shared/_bulk_actions.html.haml +10 -8
  294. data/app/views/workarea/admin/shared/_primary_nav.html.haml +5 -2
  295. data/app/views/workarea/admin/shared/_toggle_button.html.haml +1 -1
  296. data/app/views/workarea/admin/shipping_services/edit.html.haml +0 -4
  297. data/app/views/workarea/admin/shipping_services/new.html.haml +0 -4
  298. data/app/views/workarea/admin/status_report_mailer/report.html.haml +83 -86
  299. data/app/views/workarea/admin/style_guides/components/_activity.html.haml +3 -5
  300. data/app/views/workarea/admin/style_guides/components/_activity_group.html.haml +9 -15
  301. data/app/views/workarea/admin/style_guides/components/_box.html.haml +12 -7
  302. data/app/views/workarea/admin/style_guides/components/_checkbox.html.haml +21 -2
  303. data/app/views/workarea/admin/style_guides/components/_release_changeset.html.haml +3 -5
  304. data/app/views/workarea/admin/tax_rates/edit.html.haml +64 -0
  305. data/app/views/workarea/admin/tax_rates/index.html.haml +59 -20
  306. data/app/views/workarea/admin/tax_rates/new.html.haml +62 -0
  307. data/app/views/workarea/admin/timeline/show.html.haml +34 -41
  308. data/app/views/workarea/admin/toolbar/show.html.haml +11 -1
  309. data/app/views/workarea/admin/trash/index.html.haml +1 -1
  310. data/app/views/workarea/admin/users/edit.html.haml +60 -57
  311. data/app/views/workarea/admin/users/index.html.haml +1 -3
  312. data/app/views/workarea/admin/users/index.json.jbuilder +8 -0
  313. data/app/views/workarea/admin/users/insights.html.haml +31 -23
  314. data/app/views/workarea/admin/users/permissions.html.haml +10 -1
  315. data/app/views/workarea/admin/users/show.html.haml +7 -0
  316. data/config/locales/en.yml +569 -124
  317. data/config/routes.rb +57 -5
  318. data/lib/workarea/mailer_previews/admin/status_report_mailer_preview.rb +3 -1
  319. data/public/workarea/import_samples/tax_rates.csv +3 -3
  320. data/test/dummy/config/initializers/session_store.rb +1 -1
  321. data/test/helpers/workarea/admin/application_helper_test.rb +0 -16
  322. data/test/helpers/workarea/admin/icons_helper_test.rb +9 -0
  323. data/test/helpers/workarea/admin/products_helper_test.rb +73 -0
  324. data/test/helpers/workarea/admin/releases_helper_test.rb +0 -49
  325. data/test/helpers/workarea/admin/settings_helper_test.rb +22 -1
  326. data/test/integration/workarea/admin/assets_integration_test.rb +2 -5
  327. data/test/integration/workarea/admin/comments_integration_test.rb +27 -7
  328. data/test/integration/workarea/admin/configurations_integration_test.rb +21 -0
  329. data/test/integration/workarea/admin/create_release_undos_integration_test.rb +29 -0
  330. data/test/integration/workarea/admin/create_segments_integration_test.rb +26 -0
  331. data/test/integration/workarea/admin/data_file_imports_integration_test.rb +34 -8
  332. data/test/integration/workarea/admin/fulfillment_skus_integration_test.rb +55 -0
  333. data/test/integration/workarea/admin/fulfillment_tokens_integration_test.rb +43 -0
  334. data/test/integration/workarea/admin/guest_browsings_integration_test.rb +8 -32
  335. data/test/integration/workarea/admin/impersonations_integration_test.rb +13 -57
  336. data/test/integration/workarea/admin/jump_to_integration_test.rb +0 -29
  337. data/test/integration/workarea/admin/pricing_overrides_integration_test.rb +11 -0
  338. data/test/integration/workarea/admin/products_integration_test.rb +0 -13
  339. data/test/integration/workarea/admin/releases_integration_test.rb +71 -87
  340. data/test/integration/workarea/admin/segment_overrides_integration_test.rb +28 -0
  341. data/test/integration/workarea/admin/segment_rules_integration_test.rb +49 -0
  342. data/test/integration/workarea/admin/segments_integration_test.rb +31 -0
  343. data/test/integration/workarea/admin/shipping_service_integration_test.rb +1 -3
  344. data/test/integration/workarea/admin/tax_categories_integration_test.rb +1 -1
  345. data/test/integration/workarea/admin/unsubscribes_integration_test.rb +32 -0
  346. data/test/integration/workarea/admin/users_integration_test.rb +32 -0
  347. data/test/javascripts/fixtures/release_reminder.html.haml +3 -3
  348. data/test/javascripts/new_navigation_taxons_spec.js +1 -12
  349. data/test/mailers/workarea/admin/comment_mailer_test.rb +35 -0
  350. data/test/mailers/workarea/admin/status_report_mailer_test.rb +30 -25
  351. data/test/system/workarea/admin/alerts_system_test.rb +2 -1
  352. data/test/system/workarea/admin/bulk_actions_system_test.rb +1 -1
  353. data/test/system/workarea/admin/comments_system_test.rb +43 -0
  354. data/test/system/workarea/admin/content_system_test.rb +6 -0
  355. data/test/system/workarea/admin/dashboard_system_test.rb +8 -9
  356. data/test/system/workarea/admin/data_files_system_test.rb +1 -1
  357. data/test/system/workarea/admin/discounts_system_test.rb +18 -0
  358. data/test/system/workarea/admin/featured_products_system_test.rb +3 -0
  359. data/test/system/workarea/admin/fulfillment_skus_system_test.rb +48 -0
  360. data/test/system/workarea/admin/impersonation_system_test.rb +5 -2
  361. data/test/system/workarea/admin/orders_system_test.rb +32 -21
  362. data/test/system/workarea/admin/payment_transactions_system_test.rb +34 -32
  363. data/test/system/workarea/admin/releases_system_test.rb +151 -37
  364. data/test/system/workarea/admin/reports_system_test.rb +29 -0
  365. data/test/system/workarea/admin/segments_system_test.rb +124 -0
  366. data/test/system/workarea/admin/tax_categories_system_test.rb +166 -16
  367. data/test/system/workarea/admin/users_system_test.rb +15 -0
  368. data/test/view_models/workarea/admin/changeset_view_model_test.rb +59 -9
  369. data/test/view_models/workarea/admin/code_list_view_model_test.rb +0 -5
  370. data/test/view_models/workarea/admin/content_view_model_test.rb +13 -11
  371. data/test/view_models/workarea/admin/insights/product_view_model_test.rb +4 -4
  372. data/test/view_models/workarea/admin/insights/segment_view_model_test.rb +73 -0
  373. data/test/view_models/workarea/admin/product_rules_preview_view_model_test.rb +37 -0
  374. data/test/view_models/workarea/admin/product_view_model_test.rb +13 -19
  375. data/test/view_models/workarea/admin/release_calendar_view_model_test.rb +16 -0
  376. data/test/view_models/workarea/admin/release_view_model_test.rb +13 -56
  377. data/test/view_models/workarea/admin/releases_feed_view_model_test.rb +8 -21
  378. data/test/view_models/workarea/admin/reports/timeline_view_model_test.rb +76 -0
  379. data/test/view_models/workarea/admin/search_analysis_view_model_test.rb +14 -16
  380. data/test/view_models/workarea/admin/timeline_view_model_test.rb +1 -1
  381. metadata +128 -17
  382. data/app/views/workarea/admin/featured_products/_release_preview_warning.html.haml +0 -4
  383. data/app/views/workarea/admin/releases/calendar.html.haml +0 -54
  384. data/test/dummy/tmp/screenshots/.keep +0 -0
  385. data/test/helpers/workarea/admin/content_helper_test.rb +0 -17
  386. data/test/integration/workarea/admin/index_tracking_integration_test.rb +0 -21
  387. data/test/javascripts/fixtures/existing_navigation_taxon.html.haml +0 -10
  388. data/test/view_models/workarea/admin/pricing_sku_view_model_test.rb +0 -84
@@ -64,21 +64,19 @@ module Workarea
64
64
  end
65
65
 
66
66
  def set_details
67
- @product.details = HashUpdate.new(
68
- original: @product.details,
67
+ HashUpdate.new(
69
68
  adds: params[:new_details],
70
69
  updates: params[:details],
71
70
  removes: params[:details_to_remove]
72
- ).result
71
+ ).apply(@product.details)
73
72
  end
74
73
 
75
74
  def set_filters
76
- @product.filters = HashUpdate.new(
77
- original: @product.filters,
75
+ HashUpdate.new(
78
76
  adds: params[:new_filters],
79
77
  updates: params[:filters],
80
78
  removes: params[:filters_to_remove]
81
- ).result
79
+ ).apply(@product.filters)
82
80
  end
83
81
  end
84
82
  end
@@ -83,12 +83,11 @@ module Workarea
83
83
  end
84
84
 
85
85
  def set_details
86
- @variant.details = HashUpdate.new(
87
- original: @variant.details,
86
+ HashUpdate.new(
88
87
  adds: params[:new_details],
89
88
  updates: params[:details],
90
89
  removes: params[:details_to_remove]
91
- ).result
90
+ ).apply(@variant.details)
92
91
  end
93
92
  end
94
93
  end
@@ -48,6 +48,15 @@ module Workarea
48
48
  redirect_to commentable_comments_path(@commentable.to_global_id)
49
49
  end
50
50
 
51
+ def subscribe
52
+ @commentable.add_subscription(current_user.id)
53
+ flash[:success] = t(
54
+ 'workarea.admin.comments.flash_messages.comment_subscribed',
55
+ commentable: @commentable.name
56
+ )
57
+ redirect_to commentable_comments_path(@commentable.to_global_id)
58
+ end
59
+
51
60
  def unsubscribe
52
61
  @commentable.remove_subscription(current_user.id)
53
62
  flash[:success] = t(
@@ -0,0 +1,29 @@
1
+ module Workarea
2
+ module Admin
3
+ class ConfigurationsController < Admin::ApplicationController
4
+ before_action :find_configuration
5
+
6
+ def show; end
7
+
8
+ def update
9
+ if @configuration.update(configuration_params)
10
+ flash[:success] = t('workarea.admin.configurations.flash_messages.configuration_updated')
11
+ redirect_to configuration_path
12
+ else
13
+ flash[:error] = t('workarea.admin.configurations.flash_messages.configuration_error')
14
+ render :show
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def find_configuration
21
+ @configuration = Configuration::Admin.instance
22
+ end
23
+
24
+ def configuration_params
25
+ Configuration::Params.new(params[:configuration].to_unsafe_h).to_h
26
+ end
27
+ end
28
+ end
29
+ end
@@ -7,7 +7,9 @@ module Workarea
7
7
  after_action :track_index_filters, only: :index
8
8
 
9
9
  def index
10
- DirectUpload.ensure_cors!(request.url) if Configuration::S3.configured?
10
+ if Configuration::S3.configured? && !request.xhr?
11
+ DirectUpload.ensure_cors!(request.url)
12
+ end
11
13
 
12
14
  search = Search::AdminAssets.new(params)
13
15
  @search = Admin::SearchViewModel.new(search, view_model_options)
@@ -53,13 +53,7 @@ module Workarea
53
53
  end
54
54
 
55
55
  def destroy
56
- if current_release.present?
57
- @block.active = false
58
- @block.save
59
- else
60
- @block.destroy
61
- end
62
-
56
+ @block.destroy
63
57
  flash[:success] = t('workarea.admin.content_blocks.flash_messages.removed')
64
58
  redirect_to return_to || edit_content_path(@content)
65
59
  end
@@ -74,14 +74,8 @@ module Workarea
74
74
  end
75
75
 
76
76
  def save_details
77
- @product.filters = HashUpdate
78
- .new(original: @product.filters, updates: params[:filters])
79
- .result
80
-
81
- @product.details = HashUpdate
82
- .new(original: @product.details, updates: params[:details])
83
- .result
84
-
77
+ HashUpdate.new(updates: params[:filters]).apply(@product.filters)
78
+ HashUpdate.new(updates: params[:details]).apply(@product.details)
85
79
  @product.save!
86
80
 
87
81
  flash[:success] = t('workarea.admin.create_catalog_products.flash_messages.saved')
@@ -0,0 +1,43 @@
1
+ module Workarea
2
+ module Admin
3
+ class CreateReleaseUndosController < Admin::ApplicationController
4
+ required_permissions :releases
5
+
6
+ before_action :find_release
7
+ before_action :find_undo_release
8
+
9
+ def new
10
+ end
11
+
12
+ def create
13
+ @undo_release.attributes = params[:release]
14
+
15
+ if @undo_release.save
16
+ @release.changesets.each do |changeset|
17
+ changeset.build_undo(release: @undo_release.model).save!
18
+ end
19
+
20
+ flash[:success] = t('workarea.admin.create_release_undos.flash_messages.saved')
21
+ redirect_to review_release_undo_path(@release)
22
+ else
23
+ render :new, status: :unprocessable_entity
24
+ end
25
+ end
26
+
27
+ def review
28
+ end
29
+
30
+ private
31
+
32
+ def find_release
33
+ model = Release.find(params[:release_id])
34
+ @release = ReleaseViewModel.new(model, view_model_options)
35
+ end
36
+
37
+ def find_undo_release
38
+ model = @release.model.undo || @release.build_undo(params[:release])
39
+ @undo_release = ReleaseViewModel.new(model, view_model_options)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,68 @@
1
+ module Workarea
2
+ module Admin
3
+ class CreateSegmentsController < Admin::ApplicationController
4
+ required_permissions :people
5
+
6
+ before_action :find_segment
7
+ before_action :find_rules, only: [:rules, :new_rule, :edit_rule]
8
+ before_action :find_rule, only: [:new_rule, :edit_rule]
9
+
10
+ def index
11
+ render :setup
12
+ end
13
+
14
+ def create
15
+ @segment.attributes = params[:segment]
16
+
17
+ if @segment.save
18
+ flash[:success] = t('workarea.admin.create_segments.flash_messages.saved')
19
+ redirect_to rules_create_segment_path(@segment)
20
+ else
21
+ render :setup, status: :unprocessable_entity
22
+ end
23
+ end
24
+
25
+ def edit
26
+ end
27
+
28
+ def rules
29
+ end
30
+
31
+ def new_rule
32
+ render :rules
33
+ end
34
+
35
+ def edit_rule
36
+ render :rules
37
+ end
38
+
39
+ def review
40
+ end
41
+
42
+ private
43
+
44
+ def find_segment
45
+ model = if params[:id].present?
46
+ Segment.find(params[:id])
47
+ else
48
+ Segment.new(params[:segment])
49
+ end
50
+
51
+ @segment = SegmentViewModel.wrap(model, view_model_options)
52
+ end
53
+
54
+ def find_rules
55
+ @rules = @segment.rules.select(&:persisted?)
56
+ end
57
+
58
+ def find_rule
59
+ @rule = if params[:rule_id].present?
60
+ @segment.rules.where(id: params[:rule_id]).first
61
+ else
62
+ klass = "Workarea::Segment::Rules::#{params[:rule_type].to_s.camelize}"
63
+ @segment.model.rules.build(params[:rule], klass.constantize)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -41,6 +41,8 @@ module Workarea
41
41
  @settings = configuration.reject do |key, _value|
42
42
  Workarea.config.hide_from_settings.include?(key)
43
43
  end
44
+
45
+ @configuration = Configuration::Admin.instance
44
46
  end
45
47
 
46
48
  # Override to provide permissions per-dashboard
@@ -1,6 +1,7 @@
1
1
  module Workarea
2
2
  module Admin
3
3
  class DataFileImportsController < Admin::ApplicationController
4
+ before_action :check_publishing_authorization
4
5
  before_action :set_import
5
6
 
6
7
  def new
@@ -8,7 +9,7 @@ module Workarea
8
9
 
9
10
  def sample
10
11
  filename = "#{@import.name.downcase.underscore}.#{@import.file_type}"
11
- send_data @import.sample_file_content, filename: filename, type: @import.mime_type, disposition: :attachment
12
+ send_data @import.sample_file_content, filename: filename, type: @import.file_type
12
13
  end
13
14
 
14
15
  def create
@@ -28,7 +29,11 @@ module Workarea
28
29
 
29
30
  def import_params
30
31
  base = params.select { |k, v| k.in?(DataFile::Import.fields.keys) }
31
- base.merge(params[:import] || {}).merge(created_by_id: current_user.id)
32
+ base.merge(params[:import] || {})
33
+ .merge(
34
+ created_by_id: current_user.id,
35
+ release_id: params[:publishing]
36
+ )
32
37
  end
33
38
  end
34
39
  end
@@ -0,0 +1,58 @@
1
+ module Workarea
2
+ module Admin
3
+ class FulfillmentSkusController < Admin::ApplicationController
4
+ required_permissions :catalog
5
+
6
+ before_action :find_sku, except: :index
7
+ after_action :track_index_filters, only: :index
8
+
9
+ def index
10
+ search = Search::AdminFulfillmentSkus.new(view_model_options)
11
+ @search = SearchViewModel.new(search, view_model_options)
12
+ end
13
+
14
+ def show; end
15
+
16
+ def create
17
+ if @sku.save
18
+ flash[:success] =
19
+ t('workarea.admin.fulfillment_skus.flash_messages.created', id: @sku.id)
20
+ redirect_to fulfillment_sku_path(@sku)
21
+ else
22
+ render :new, status: :unprocessable_entity
23
+ end
24
+ end
25
+
26
+ def edit; end
27
+
28
+ def update
29
+ if @sku.update(params[:sku])
30
+ flash[:success] = t('workarea.admin.fulfillment_skus.flash_messages.saved', id: @sku.id)
31
+ redirect_to fulfillment_sku_path(@sku)
32
+ else
33
+ render :edit, status: :unprocessable_entity
34
+ end
35
+ end
36
+
37
+ def destroy
38
+ @sku.destroy
39
+
40
+ flash[:success] = t('workarea.admin.fulfillment_skus.flash_messages.removed', id: @sku.id)
41
+ redirect_to fulfillment_skus_path
42
+ end
43
+
44
+ private
45
+
46
+ def find_sku
47
+ model =
48
+ if params[:id].present?
49
+ Fulfillment::Sku.find_or_create_by(id: params[:id])
50
+ else
51
+ Fulfillment::Sku.new(params[:sku])
52
+ end
53
+
54
+ @sku = FulfillmentSkuViewModel.new(model)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,56 @@
1
+ module Workarea
2
+ module Admin
3
+ class FulfillmentTokensController < Admin::ApplicationController
4
+ required_permissions :catalog
5
+
6
+ before_action :find_sku
7
+ before_action :find_token, only: :update
8
+
9
+ def index
10
+ @tokens =
11
+ Fulfillment::Token
12
+ .for_sku(@sku.id)
13
+ .page(params[:page])
14
+ .per(Workarea.config.per_page)
15
+ .order_by(find_sort(Fulfillment::Token))
16
+ end
17
+
18
+ def create
19
+ @token = Fulfillment::Token.new(sku: @sku.id)
20
+
21
+ if @token.save
22
+ flash[:success] = t('workarea.admin.fulfillment_tokens.flash_messages.created')
23
+ else
24
+ flash[:error] = t('workarea.admin.fulfillment_tokens.flash_messages.error')
25
+ end
26
+
27
+ redirect_to fulfillment_sku_tokens_path(@sku, new_token: @token.id)
28
+ end
29
+
30
+ def update
31
+ result = @token.update(params[:token])
32
+
33
+ if result && @token.enabled?
34
+ flash[:success] = t('workarea.admin.fulfillment_tokens.flash_messages.enabled')
35
+ elsif result
36
+ flash[:success] = t('workarea.admin.fulfillment_tokens.flash_messages.disabled')
37
+ else
38
+ flash[:error] = t('workarea.admin.fulfillment_tokens.flash_messages.update_failed')
39
+ end
40
+
41
+ redirect_back_or fulfillment_sku_tokens_path(@sku)
42
+ end
43
+
44
+ private
45
+
46
+ def find_sku
47
+ model = Fulfillment::Sku.find(params['fulfillment_sku_id'])
48
+ @sku = Admin::FulfillmentSkuViewModel.wrap(model, view_model_options)
49
+ end
50
+
51
+ def find_token
52
+ @token = Fulfillment::Token.find(params[:id])
53
+ end
54
+ end
55
+ end
56
+ end
@@ -6,7 +6,7 @@ module Workarea
6
6
 
7
7
  def create
8
8
  admin_browse_as_guest
9
- self.current_order = nil
9
+ clear_current_order
10
10
 
11
11
  flash[:success] =
12
12
  t('workarea.admin.guest_browsing.flash_messages.started')
@@ -15,7 +15,7 @@ module Workarea
15
15
 
16
16
  def destroy
17
17
  stop_admin_guest_browsing
18
- self.current_order = nil
18
+ clear_current_order
19
19
 
20
20
  flash[:success] = t('workarea.admin.guest_browsing.flash_messages.stopped')
21
21
  redirect_to users_path
@@ -22,13 +22,12 @@ module Workarea
22
22
  end
23
23
 
24
24
  def destroy
25
- previous_user_id = cookies.signed[:user_id]
25
+ previous_user_id = session[:user_id]
26
26
  stop_impersonation
27
- self.current_order = nil
27
+ clear_current_order
28
28
 
29
29
  flash[:success] = t('workarea.admin.users.flash_messages.stopped')
30
- referrer = URI.parse(request.referrer).request_uri rescue nil
31
- redirect_back_or(referrer.presence || user_path(previous_user_id))
30
+ redirect_to user_path(previous_user_id)
32
31
  end
33
32
  end
34
33
  end
@@ -19,6 +19,9 @@ module Workarea
19
19
  def timeline
20
20
  end
21
21
 
22
+ def fraud
23
+ end
24
+
22
25
  private
23
26
 
24
27
  def find_order
@@ -0,0 +1,13 @@
1
+ module Workarea
2
+ module Admin
3
+ class PricingDiscountRedemptionsController < Admin::ApplicationController
4
+ required_permissions :marketing
5
+
6
+ def index
7
+ model = Pricing::Discount.find(params[:pricing_discount_id])
8
+ @discount = DiscountViewModel.wrap(model, view_model_options)
9
+ @redemptions = model.redemptions.recent.page(params[:page])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,7 +1,7 @@
1
1
  module Workarea
2
2
  module Admin
3
3
  class PricingOverridesController < Admin::ApplicationController
4
- required_permissions :orders
4
+ required_permissions :orders_manager
5
5
 
6
6
  before_action :find_override
7
7
  before_action :find_order
@@ -54,7 +54,6 @@ module Workarea
54
54
 
55
55
  def destroy
56
56
  @product_rule.destroy
57
-
58
57
  flash[:success] = t('workarea.admin.product_rules.flash_messages.destroyed')
59
58
  redirect_back_or product_list_product_rules_path(@product_list.to_global_id)
60
59
  end
@@ -68,7 +67,7 @@ module Workarea
68
67
  end
69
68
 
70
69
  def find_product_rules
71
- @product_rules = @product_list.product_rules.select(&:persisted?)
70
+ @product_rules = @product_list.product_rules.usable.select(&:persisted?)
72
71
  end
73
72
 
74
73
  def find_product_rule
@@ -6,14 +6,12 @@ module Workarea
6
6
  required_permissions :releases
7
7
 
8
8
  before_action :find_release, except: :changes
9
- before_action :find_calendar, only: [:calendar, :update]
9
+ before_action :find_calendar, only: [:index, :update]
10
10
  before_action :authenticate_user_by_token, only: :calendar_feed
11
11
  skip_before_action :require_login, :require_admin, only: :calendar_feed
12
- around_action :set_time_zone, only: :calendar
12
+ around_action :set_time_zone, only: :index
13
13
 
14
14
  def index
15
- search = Search::AdminReleases.new(params)
16
- @search = Admin::ReleaseSearchViewModel.new(search, view_model_options)
17
15
  end
18
16
 
19
17
  def show
@@ -28,7 +26,9 @@ module Workarea
28
26
  render json: { release: @release.model }
29
27
  end
30
28
 
31
- def calendar
29
+ def list
30
+ search = Search::AdminReleases.new(params)
31
+ @search = Admin::ReleaseSearchViewModel.new(search, view_model_options)
32
32
  end
33
33
 
34
34
  def new
@@ -44,6 +44,9 @@ module Workarea
44
44
  end
45
45
  end
46
46
 
47
+ def original
48
+ end
49
+
47
50
  def publish
48
51
  self.current_release = nil
49
52
  PublishRelease.perform_async(@release.id)
@@ -52,14 +55,6 @@ module Workarea
52
55
  redirect_to return_to || release_path(@release)
53
56
  end
54
57
 
55
- def undo
56
- self.current_release = nil
57
- @release.undo!
58
-
59
- flash[:success] = t('workarea.admin.releases.flash_messages.reverted')
60
- redirect_to return_to || release_path(@release)
61
- end
62
-
63
58
  def destroy
64
59
  self.current_release = nil
65
60
  @release.destroy
@@ -29,6 +29,10 @@ module Workarea
29
29
  end
30
30
 
31
31
  def reference
32
+ @terms =
33
+ t('workarea.admin.reports.reference.terms')
34
+ .sort_by(&:first)
35
+ .map { |_key, term| OpenStruct.new(term) }
32
36
  end
33
37
 
34
38
  def sales_by_category
@@ -73,6 +77,13 @@ module Workarea
73
77
  )
74
78
  end
75
79
 
80
+ def sales_by_tender
81
+ @report = Reports::SalesByTenderViewModel.wrap(
82
+ Workarea::Reports::SalesByTender.new(params),
83
+ view_model_options
84
+ )
85
+ end
86
+
76
87
  def sales_over_time
77
88
  @report = Reports::SalesOverTimeViewModel.wrap(
78
89
  Workarea::Reports::SalesOverTime.new(params),
@@ -87,6 +98,13 @@ module Workarea
87
98
  )
88
99
  end
89
100
 
101
+ def timeline
102
+ @report = Reports::TimelineViewModel.wrap(
103
+ Workarea::Reports::SalesOverTime.new(params.merge(group_by: 'day')),
104
+ view_model_options
105
+ )
106
+ end
107
+
90
108
  def low_inventory
91
109
  @report = Reports::LowInventoryViewModel.wrap(
92
110
  Workarea::Reports::LowInventory.new(params),
@@ -0,0 +1,19 @@
1
+ module Workarea
2
+ module Admin
3
+ class SegmentOverridesController < Admin::ApplicationController
4
+ def show
5
+ end
6
+
7
+ def create
8
+ segment_ids = params[:segment_ids].to_h.select { |_, v| v =~ /true/ }.keys
9
+ self.override_segments = Segment.in(id: segment_ids)
10
+
11
+ if params[:return_to].present?
12
+ redirect_to URI.parse(params[:return_to]).request_uri
13
+ else
14
+ redirect_back fallback_location: storefront.root_path
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,62 @@
1
+ module Workarea
2
+ module Admin
3
+ class SegmentRulesController < Admin::ApplicationController
4
+ before_action :find_segment, except: :geolocation_options
5
+ before_action :find_rules, except: :geolocation_options
6
+ before_action :find_rule, except: [:index, :geolocation_options]
7
+
8
+ def index
9
+ end
10
+
11
+ def geolocation_options
12
+ @results = Segment::Rules::GeolocationOption.search(params[:q])
13
+ end
14
+
15
+ def create
16
+ if @rule.save
17
+ flash[:success] = t('workarea.admin.segment_rules.flash_messages.saved')
18
+ redirect_to return_to || segment_rules_path(@segment)
19
+ else
20
+ flash[:error] = t('workarea.admin.segment_rules.flash_messages.error')
21
+ render :index, status: :unprocessable_entity
22
+ end
23
+ end
24
+
25
+ def update
26
+ if @rule.update_attributes(params[:rule])
27
+ flash[:success] = t('workarea.admin.segment_rules.flash_messages.saved')
28
+ redirect_to return_to || segment_rules_path(@segment)
29
+ else
30
+ flash[:error] = t('workarea.admin.segment_rules.flash_messages.error')
31
+ render :edit, status: :unprocessable_entity
32
+ end
33
+ end
34
+
35
+ def destroy
36
+ @rule.destroy
37
+ flash[:success] = t('workarea.admin.segment_rules.flash_messages.destroyed')
38
+ redirect_to return_to || segment_rules_path(@segment)
39
+ end
40
+
41
+ private
42
+
43
+ def find_segment
44
+ model = Segment.find(params[:segment_id])
45
+ @segment = SegmentViewModel.wrap(model, view_model_options)
46
+ end
47
+
48
+ def find_rules
49
+ @segment_rules = @segment.rules.select(&:persisted?)
50
+ end
51
+
52
+ def find_rule
53
+ @rule = if params[:id].present?
54
+ @segment.rules.where(id: params[:id]).first
55
+ else
56
+ klass = "Workarea::Segment::Rules::#{params[:rule_type].to_s.camelize}"
57
+ @segment.model.rules.build(params[:rule], klass.constantize)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end