workarea-admin 3.4.45 → 3.5.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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