goca-spree-backend 3.1.14.rails.5.0

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 (439) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/Rakefile +15 -0
  4. data/app/assets/images/admin/payment_banner.png +0 -0
  5. data/app/assets/images/admin/progress.gif +0 -0
  6. data/app/assets/images/credit_cards/credit_card.gif +0 -0
  7. data/app/assets/javascripts/spree/backend/address_states.js +33 -0
  8. data/app/assets/javascripts/spree/backend/adjustments.js.coffee +17 -0
  9. data/app/assets/javascripts/spree/backend/admin.js +402 -0
  10. data/app/assets/javascripts/spree/backend/calculator.js +16 -0
  11. data/app/assets/javascripts/spree/backend/checkouts/edit.js +89 -0
  12. data/app/assets/javascripts/spree/backend/gateway.js +13 -0
  13. data/app/assets/javascripts/spree/backend/general_settings.js.coffee +13 -0
  14. data/app/assets/javascripts/spree/backend/handlebar_extensions.js +7 -0
  15. data/app/assets/javascripts/spree/backend/line_items.js.coffee +64 -0
  16. data/app/assets/javascripts/spree/backend/line_items_on_order_edit.js +49 -0
  17. data/app/assets/javascripts/spree/backend/nested-attribute.js +27 -0
  18. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +43 -0
  19. data/app/assets/javascripts/spree/backend/option_value_picker.js +45 -0
  20. data/app/assets/javascripts/spree/backend/orders/edit.js +5 -0
  21. data/app/assets/javascripts/spree/backend/orders/edit_form.js +21 -0
  22. data/app/assets/javascripts/spree/backend/payments/edit.js.coffee +145 -0
  23. data/app/assets/javascripts/spree/backend/payments/new.js +50 -0
  24. data/app/assets/javascripts/spree/backend/product_picker.js +49 -0
  25. data/app/assets/javascripts/spree/backend/progress.js.coffee +6 -0
  26. data/app/assets/javascripts/spree/backend/promotions.js +170 -0
  27. data/app/assets/javascripts/spree/backend/returns/expedited_exchanges_warning.coffee +4 -0
  28. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +35 -0
  29. data/app/assets/javascripts/spree/backend/shipments.js.erb +334 -0
  30. data/app/assets/javascripts/spree/backend/spree-select2.js +7 -0
  31. data/app/assets/javascripts/spree/backend/states.js +11 -0
  32. data/app/assets/javascripts/spree/backend/stock_management.js.coffee +9 -0
  33. data/app/assets/javascripts/spree/backend/stock_movement.js.coffee +19 -0
  34. data/app/assets/javascripts/spree/backend/stock_transfer.js.coffee +198 -0
  35. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +52 -0
  36. data/app/assets/javascripts/spree/backend/taxon_tree_menu.js.coffee +22 -0
  37. data/app/assets/javascripts/spree/backend/taxonomy.js.coffee +149 -0
  38. data/app/assets/javascripts/spree/backend/taxons.js.coffee +87 -0
  39. data/app/assets/javascripts/spree/backend/user_picker.js +40 -0
  40. data/app/assets/javascripts/spree/backend/variant_autocomplete.js.coffee +38 -0
  41. data/app/assets/javascripts/spree/backend/variant_management.js.coffee +10 -0
  42. data/app/assets/javascripts/spree/backend/zone.js.coffee +43 -0
  43. data/app/assets/javascripts/spree/backend.js +79 -0
  44. data/app/assets/javascripts/spree/frontend/backend.js +1 -0
  45. data/app/assets/stylesheets/spree/backend/components/_buttons.scss +37 -0
  46. data/app/assets/stylesheets/spree/backend/components/_filters.scss +26 -0
  47. data/app/assets/stylesheets/spree/backend/components/_icons.scss +257 -0
  48. data/app/assets/stylesheets/spree/backend/components/_labels.scss +53 -0
  49. data/app/assets/stylesheets/spree/backend/components/_main.scss +11 -0
  50. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +14 -0
  51. data/app/assets/stylesheets/spree/backend/components/_page_header.scss +32 -0
  52. data/app/assets/stylesheets/spree/backend/components/_panels.scss +3 -0
  53. data/app/assets/stylesheets/spree/backend/components/_progress.scss +22 -0
  54. data/app/assets/stylesheets/spree/backend/components/_sidebar.scss +122 -0
  55. data/app/assets/stylesheets/spree/backend/components/_spinner.scss +95 -0
  56. data/app/assets/stylesheets/spree/backend/components/_tables.scss +56 -0
  57. data/app/assets/stylesheets/spree/backend/components/_taxon_products_view.scss +70 -0
  58. data/app/assets/stylesheets/spree/backend/components/_variables.scss +12 -0
  59. data/app/assets/stylesheets/spree/backend/components/_wells.scss +3 -0
  60. data/app/assets/stylesheets/spree/backend/global/_variables.scss +37 -0
  61. data/app/assets/stylesheets/spree/backend/plugins/_jquery_ui.scss +109 -0
  62. data/app/assets/stylesheets/spree/backend/plugins/_js_tree.scss +0 -0
  63. data/app/assets/stylesheets/spree/backend/plugins/_select2.scss +127 -0
  64. data/app/assets/stylesheets/spree/backend/sections/_account.scss +16 -0
  65. data/app/assets/stylesheets/spree/backend/shared/_base.scss +25 -0
  66. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +59 -0
  67. data/app/assets/stylesheets/spree/backend/shared/_typography.scss +5 -0
  68. data/app/assets/stylesheets/spree/backend/spree_admin.css.scss +28 -0
  69. data/app/assets/stylesheets/spree/backend.css +11 -0
  70. data/app/assets/stylesheets/spree/frontend/backend.css +1 -0
  71. data/app/controllers/spree/admin/adjustments_controller.rb +38 -0
  72. data/app/controllers/spree/admin/base_controller.rb +67 -0
  73. data/app/controllers/spree/admin/countries_controller.rb +11 -0
  74. data/app/controllers/spree/admin/customer_returns_controller.rb +68 -0
  75. data/app/controllers/spree/admin/general_settings_controller.rb +40 -0
  76. data/app/controllers/spree/admin/images_controller.rb +50 -0
  77. data/app/controllers/spree/admin/log_entries_controller.rb +19 -0
  78. data/app/controllers/spree/admin/option_types_controller.rb +48 -0
  79. data/app/controllers/spree/admin/option_values_controller.rb +11 -0
  80. data/app/controllers/spree/admin/orders/customer_details_controller.rb +74 -0
  81. data/app/controllers/spree/admin/orders_controller.rb +147 -0
  82. data/app/controllers/spree/admin/payment_methods_controller.rb +72 -0
  83. data/app/controllers/spree/admin/payments_controller.rb +103 -0
  84. data/app/controllers/spree/admin/product_properties_controller.rb +18 -0
  85. data/app/controllers/spree/admin/products_controller.rb +156 -0
  86. data/app/controllers/spree/admin/promotion_actions_controller.rb +45 -0
  87. data/app/controllers/spree/admin/promotion_categories_controller.rb +6 -0
  88. data/app/controllers/spree/admin/promotion_rules_controller.rb +50 -0
  89. data/app/controllers/spree/admin/promotions_controller.rb +36 -0
  90. data/app/controllers/spree/admin/properties_controller.rb +23 -0
  91. data/app/controllers/spree/admin/prototypes_controller.rb +27 -0
  92. data/app/controllers/spree/admin/refund_reasons_controller.rb +6 -0
  93. data/app/controllers/spree/admin/refunds_controller.rb +38 -0
  94. data/app/controllers/spree/admin/reimbursement_types_controller.rb +6 -0
  95. data/app/controllers/spree/admin/reimbursements_controller.rb +45 -0
  96. data/app/controllers/spree/admin/reports_controller.rb +65 -0
  97. data/app/controllers/spree/admin/resource_controller.rb +260 -0
  98. data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +6 -0
  99. data/app/controllers/spree/admin/return_authorizations_controller.rb +51 -0
  100. data/app/controllers/spree/admin/return_index_controller.rb +28 -0
  101. data/app/controllers/spree/admin/return_items_controller.rb +9 -0
  102. data/app/controllers/spree/admin/roles_controller.rb +6 -0
  103. data/app/controllers/spree/admin/root_controller.rb +18 -0
  104. data/app/controllers/spree/admin/search_controller.rb +41 -0
  105. data/app/controllers/spree/admin/shipping_categories_controller.rb +6 -0
  106. data/app/controllers/spree/admin/shipping_methods_controller.rb +46 -0
  107. data/app/controllers/spree/admin/state_changes_controller.rb +18 -0
  108. data/app/controllers/spree/admin/states_controller.rb +29 -0
  109. data/app/controllers/spree/admin/stock_items_controller.rb +51 -0
  110. data/app/controllers/spree/admin/stock_locations_controller.rb +16 -0
  111. data/app/controllers/spree/admin/stock_movements_controller.rb +39 -0
  112. data/app/controllers/spree/admin/stock_transfers_controller.rb +51 -0
  113. data/app/controllers/spree/admin/store_credit_categories_controller.rb +6 -0
  114. data/app/controllers/spree/admin/store_credits_controller.rb +94 -0
  115. data/app/controllers/spree/admin/tax_categories_controller.rb +6 -0
  116. data/app/controllers/spree/admin/tax_rates_controller.rb +15 -0
  117. data/app/controllers/spree/admin/taxonomies_controller.rb +15 -0
  118. data/app/controllers/spree/admin/taxons_controller.rb +126 -0
  119. data/app/controllers/spree/admin/trackers_controller.rb +6 -0
  120. data/app/controllers/spree/admin/users_controller.rb +145 -0
  121. data/app/controllers/spree/admin/variants_controller.rb +57 -0
  122. data/app/controllers/spree/admin/variants_including_master_controller.rb +16 -0
  123. data/app/controllers/spree/admin/zones_controller.rb +26 -0
  124. data/app/helpers/spree/admin/adjustments_helper.rb +37 -0
  125. data/app/helpers/spree/admin/base_helper.rb +157 -0
  126. data/app/helpers/spree/admin/customer_returns_helper.rb +9 -0
  127. data/app/helpers/spree/admin/general_settings_helper.rb +13 -0
  128. data/app/helpers/spree/admin/images_helper.rb +18 -0
  129. data/app/helpers/spree/admin/inventory_settings_helper.rb +9 -0
  130. data/app/helpers/spree/admin/navigation_helper.rb +248 -0
  131. data/app/helpers/spree/admin/orders_helper.rb +69 -0
  132. data/app/helpers/spree/admin/payments_helper.rb +11 -0
  133. data/app/helpers/spree/admin/products_helper.rb +29 -0
  134. data/app/helpers/spree/admin/reimbursement_type_helper.rb +9 -0
  135. data/app/helpers/spree/admin/reimbursements_helper.rb +14 -0
  136. data/app/helpers/spree/admin/stock_locations_helper.rb +15 -0
  137. data/app/helpers/spree/admin/stock_movements_helper.rb +24 -0
  138. data/app/helpers/spree/admin/tables_helper.rb +15 -0
  139. data/app/helpers/spree/admin/taxons_helper.rb +9 -0
  140. data/app/helpers/spree/promotion_rules_helper.rb +13 -0
  141. data/app/models/spree/admin/resource.rb +35 -0
  142. data/app/models/spree/backend_configuration.rb +21 -0
  143. data/app/views/kaminari/_first_page.html.erb +11 -0
  144. data/app/views/kaminari/_gap.html.erb +8 -0
  145. data/app/views/kaminari/_last_page.html.erb +11 -0
  146. data/app/views/kaminari/_next_page.html.erb +15 -0
  147. data/app/views/kaminari/_page.html.erb +12 -0
  148. data/app/views/kaminari/_paginator.html.erb +23 -0
  149. data/app/views/kaminari/_prev_page.html.erb +15 -0
  150. data/app/views/spree/admin/adjustments/_adjustment.html.erb +17 -0
  151. data/app/views/spree/admin/adjustments/_adjustments_table.html.erb +31 -0
  152. data/app/views/spree/admin/adjustments/_form.html.erb +12 -0
  153. data/app/views/spree/admin/adjustments/edit.html.erb +19 -0
  154. data/app/views/spree/admin/adjustments/index.html.erb +34 -0
  155. data/app/views/spree/admin/adjustments/new.html.erb +19 -0
  156. data/app/views/spree/admin/countries/_form.html.erb +20 -0
  157. data/app/views/spree/admin/countries/edit.html.erb +14 -0
  158. data/app/views/spree/admin/countries/index.html.erb +31 -0
  159. data/app/views/spree/admin/countries/new.html.erb +13 -0
  160. data/app/views/spree/admin/customer_returns/_reimbursements_table.html.erb +36 -0
  161. data/app/views/spree/admin/customer_returns/_return_item_decision.html.erb +50 -0
  162. data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +45 -0
  163. data/app/views/spree/admin/customer_returns/edit.html.erb +61 -0
  164. data/app/views/spree/admin/customer_returns/index.html.erb +56 -0
  165. data/app/views/spree/admin/customer_returns/new.html.erb +47 -0
  166. data/app/views/spree/admin/general_settings/edit.html.erb +143 -0
  167. data/app/views/spree/admin/images/_form.html.erb +18 -0
  168. data/app/views/spree/admin/images/edit.html.erb +30 -0
  169. data/app/views/spree/admin/images/index.html.erb +55 -0
  170. data/app/views/spree/admin/images/new.html.erb +19 -0
  171. data/app/views/spree/admin/inventory_units/adjust.html.erb +29 -0
  172. data/app/views/spree/admin/log_entries/index.html.erb +33 -0
  173. data/app/views/spree/admin/option_types/_form.html.erb +17 -0
  174. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +9 -0
  175. data/app/views/spree/admin/option_types/edit.html.erb +49 -0
  176. data/app/views/spree/admin/option_types/index.html.erb +44 -0
  177. data/app/views/spree/admin/option_types/new.html.erb +13 -0
  178. data/app/views/spree/admin/orders/_add_line_item.html.erb +17 -0
  179. data/app/views/spree/admin/orders/_add_product.html.erb +18 -0
  180. data/app/views/spree/admin/orders/_adjustments.html.erb +33 -0
  181. data/app/views/spree/admin/orders/_form.html.erb +56 -0
  182. data/app/views/spree/admin/orders/_line_item.html.erb +21 -0
  183. data/app/views/spree/admin/orders/_line_items.html.erb +46 -0
  184. data/app/views/spree/admin/orders/_line_items_edit_form.html.erb +39 -0
  185. data/app/views/spree/admin/orders/_order_actions.html.erb +12 -0
  186. data/app/views/spree/admin/orders/_risk_analysis.html.erb +47 -0
  187. data/app/views/spree/admin/orders/_shipment.html.erb +108 -0
  188. data/app/views/spree/admin/orders/_shipment_manifest.html.erb +42 -0
  189. data/app/views/spree/admin/orders/cart.html.erb +31 -0
  190. data/app/views/spree/admin/orders/customer_details/_form.html.erb +106 -0
  191. data/app/views/spree/admin/orders/customer_details/edit.html.erb +29 -0
  192. data/app/views/spree/admin/orders/edit.html.erb +35 -0
  193. data/app/views/spree/admin/orders/index.html.erb +226 -0
  194. data/app/views/spree/admin/payment_methods/_form.html.erb +56 -0
  195. data/app/views/spree/admin/payment_methods/edit.html.erb +13 -0
  196. data/app/views/spree/admin/payment_methods/index.html.erb +46 -0
  197. data/app/views/spree/admin/payment_methods/new.html.erb +13 -0
  198. data/app/views/spree/admin/payments/_capture_events.html.erb +19 -0
  199. data/app/views/spree/admin/payments/_form.html.erb +33 -0
  200. data/app/views/spree/admin/payments/_list.html.erb +38 -0
  201. data/app/views/spree/admin/payments/credit.html.erb +18 -0
  202. data/app/views/spree/admin/payments/index.html.erb +38 -0
  203. data/app/views/spree/admin/payments/new.html.erb +25 -0
  204. data/app/views/spree/admin/payments/show.html.erb +28 -0
  205. data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +56 -0
  206. data/app/views/spree/admin/payments/source_forms/_storecredit.html.erb +9 -0
  207. data/app/views/spree/admin/payments/source_views/_check.html.erb +0 -0
  208. data/app/views/spree/admin/payments/source_views/_gateway.html.erb +21 -0
  209. data/app/views/spree/admin/payments/source_views/_storecredit.html.erb +29 -0
  210. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +19 -0
  211. data/app/views/spree/admin/product_properties/index.html.erb +43 -0
  212. data/app/views/spree/admin/products/_add_stock_form.html.erb +42 -0
  213. data/app/views/spree/admin/products/_autocomplete.js.erb +25 -0
  214. data/app/views/spree/admin/products/_form.html.erb +224 -0
  215. data/app/views/spree/admin/products/_properties_form.erb +10 -0
  216. data/app/views/spree/admin/products/edit.html.erb +15 -0
  217. data/app/views/spree/admin/products/index.html.erb +91 -0
  218. data/app/views/spree/admin/products/new.html.erb +89 -0
  219. data/app/views/spree/admin/products/stock.html.erb +78 -0
  220. data/app/views/spree/admin/promotion_actions/create.js.erb +12 -0
  221. data/app/views/spree/admin/promotion_actions/destroy.js.erb +1 -0
  222. data/app/views/spree/admin/promotion_categories/_form.html.erb +11 -0
  223. data/app/views/spree/admin/promotion_categories/edit.html.erb +11 -0
  224. data/app/views/spree/admin/promotion_categories/index.html.erb +34 -0
  225. data/app/views/spree/admin/promotion_categories/new.html.erb +11 -0
  226. data/app/views/spree/admin/promotion_rules/create.js.erb +10 -0
  227. data/app/views/spree/admin/promotion_rules/destroy.js.erb +3 -0
  228. data/app/views/spree/admin/promotions/_actions.html.erb +35 -0
  229. data/app/views/spree/admin/promotions/_form.html.erb +60 -0
  230. data/app/views/spree/admin/promotions/_promotion_action.html.erb +12 -0
  231. data/app/views/spree/admin/promotions/_promotion_rule.html.erb +11 -0
  232. data/app/views/spree/admin/promotions/_rules.html.erb +46 -0
  233. data/app/views/spree/admin/promotions/actions/_create_adjustment.html.erb +30 -0
  234. data/app/views/spree/admin/promotions/actions/_create_item_adjustments.html.erb +28 -0
  235. data/app/views/spree/admin/promotions/actions/_create_line_items.html.erb +25 -0
  236. data/app/views/spree/admin/promotions/calculators/_default_fields.html.erb +10 -0
  237. data/app/views/spree/admin/promotions/calculators/tiered_flat_rate/_fields.html.erb +42 -0
  238. data/app/views/spree/admin/promotions/calculators/tiered_percent/_fields.html.erb +42 -0
  239. data/app/views/spree/admin/promotions/edit.html.erb +30 -0
  240. data/app/views/spree/admin/promotions/index.html.erb +82 -0
  241. data/app/views/spree/admin/promotions/new.html.erb +11 -0
  242. data/app/views/spree/admin/promotions/rules/_item_total.html.erb +12 -0
  243. data/app/views/spree/admin/promotions/rules/_landing_page.html.erb +9 -0
  244. data/app/views/spree/admin/promotions/rules/_option_value.html.erb +42 -0
  245. data/app/views/spree/admin/promotions/rules/_product.html.erb +10 -0
  246. data/app/views/spree/admin/promotions/rules/_taxon.html.erb +10 -0
  247. data/app/views/spree/admin/promotions/rules/_user.html.erb +6 -0
  248. data/app/views/spree/admin/properties/_form.html.erb +16 -0
  249. data/app/views/spree/admin/properties/edit.html.erb +13 -0
  250. data/app/views/spree/admin/properties/index.html.erb +68 -0
  251. data/app/views/spree/admin/properties/new.html.erb +15 -0
  252. data/app/views/spree/admin/prototypes/_form.html.erb +28 -0
  253. data/app/views/spree/admin/prototypes/_prototypes.html.erb +21 -0
  254. data/app/views/spree/admin/prototypes/available.js.erb +2 -0
  255. data/app/views/spree/admin/prototypes/edit.html.erb +13 -0
  256. data/app/views/spree/admin/prototypes/index.html.erb +34 -0
  257. data/app/views/spree/admin/prototypes/new.html.erb +13 -0
  258. data/app/views/spree/admin/prototypes/select.js.erb +4 -0
  259. data/app/views/spree/admin/prototypes/show.html.erb +39 -0
  260. data/app/views/spree/admin/refund_reasons/destroy.js.erb +1 -0
  261. data/app/views/spree/admin/refund_reasons/edit.html.erb +3 -0
  262. data/app/views/spree/admin/refund_reasons/index.html.erb +6 -0
  263. data/app/views/spree/admin/refund_reasons/new.html.erb +4 -0
  264. data/app/views/spree/admin/refunds/edit.html.erb +27 -0
  265. data/app/views/spree/admin/refunds/new.html.erb +35 -0
  266. data/app/views/spree/admin/reimbursement_types/index.html.erb +30 -0
  267. data/app/views/spree/admin/reimbursements/edit.html.erb +102 -0
  268. data/app/views/spree/admin/reimbursements/index.html.erb +28 -0
  269. data/app/views/spree/admin/reimbursements/show.html.erb +90 -0
  270. data/app/views/spree/admin/reports/index.html.erb +20 -0
  271. data/app/views/spree/admin/reports/sales_total.html.erb +29 -0
  272. data/app/views/spree/admin/return_authorization_reasons/destroy.js.erb +1 -0
  273. data/app/views/spree/admin/return_authorization_reasons/edit.html.erb +3 -0
  274. data/app/views/spree/admin/return_authorization_reasons/index.html.erb +6 -0
  275. data/app/views/spree/admin/return_authorization_reasons/new.html.erb +4 -0
  276. data/app/views/spree/admin/return_authorizations/_form.html.erb +91 -0
  277. data/app/views/spree/admin/return_authorizations/edit.html.erb +26 -0
  278. data/app/views/spree/admin/return_authorizations/index.html.erb +53 -0
  279. data/app/views/spree/admin/return_authorizations/new.html.erb +18 -0
  280. data/app/views/spree/admin/return_index/customer_returns.html.erb +64 -0
  281. data/app/views/spree/admin/return_index/return_authorizations.html.erb +76 -0
  282. data/app/views/spree/admin/roles/_form.html.erb +9 -0
  283. data/app/views/spree/admin/roles/edit.html.erb +13 -0
  284. data/app/views/spree/admin/roles/index.html.erb +34 -0
  285. data/app/views/spree/admin/roles/new.html.erb +13 -0
  286. data/app/views/spree/admin/search/products.rabl +9 -0
  287. data/app/views/spree/admin/search/users.rabl +30 -0
  288. data/app/views/spree/admin/shared/_address.html.erb +38 -0
  289. data/app/views/spree/admin/shared/_address_form.html.erb +78 -0
  290. data/app/views/spree/admin/shared/_calculator_fields.html.erb +27 -0
  291. data/app/views/spree/admin/shared/_content_header.html.erb +26 -0
  292. data/app/views/spree/admin/shared/_destroy.js.erb +9 -0
  293. data/app/views/spree/admin/shared/_edit_resource_links.html.erb +5 -0
  294. data/app/views/spree/admin/shared/_error_messages.html.erb +12 -0
  295. data/app/views/spree/admin/shared/_head.html.erb +26 -0
  296. data/app/views/spree/admin/shared/_header.html.erb +32 -0
  297. data/app/views/spree/admin/shared/_index_table_options.html.erb +19 -0
  298. data/app/views/spree/admin/shared/_main_menu.html.erb +41 -0
  299. data/app/views/spree/admin/shared/_new_resource_links.html.erb +5 -0
  300. data/app/views/spree/admin/shared/_order_summary.html.erb +121 -0
  301. data/app/views/spree/admin/shared/_order_tabs.html.erb +60 -0
  302. data/app/views/spree/admin/shared/_product_tabs.html.erb +24 -0
  303. data/app/views/spree/admin/shared/_refunds.html.erb +32 -0
  304. data/app/views/spree/admin/shared/_report_order_criteria.html.erb +17 -0
  305. data/app/views/spree/admin/shared/_sidebar.html.erb +5 -0
  306. data/app/views/spree/admin/shared/_table_filter.html.erb +24 -0
  307. data/app/views/spree/admin/shared/_translations.html.erb +48 -0
  308. data/app/views/spree/admin/shared/_update_order_state.js +7 -0
  309. data/app/views/spree/admin/shared/named_types/_edit.html.erb +13 -0
  310. data/app/views/spree/admin/shared/named_types/_form.html.erb +13 -0
  311. data/app/views/spree/admin/shared/named_types/_index.html.erb +42 -0
  312. data/app/views/spree/admin/shared/named_types/_new.html.erb +13 -0
  313. data/app/views/spree/admin/shared/sub_menu/_configuration.html.erb +23 -0
  314. data/app/views/spree/admin/shared/sub_menu/_product.html.erb +8 -0
  315. data/app/views/spree/admin/shared/sub_menu/_promotion.html.erb +4 -0
  316. data/app/views/spree/admin/shared/sub_menu/_returns.html.erb +4 -0
  317. data/app/views/spree/admin/shipping_categories/_form.html.erb +9 -0
  318. data/app/views/spree/admin/shipping_categories/edit.html.erb +11 -0
  319. data/app/views/spree/admin/shipping_categories/index.html.erb +34 -0
  320. data/app/views/spree/admin/shipping_categories/new.html.erb +13 -0
  321. data/app/views/spree/admin/shipping_methods/_form.html.erb +119 -0
  322. data/app/views/spree/admin/shipping_methods/edit.html.erb +17 -0
  323. data/app/views/spree/admin/shipping_methods/index.html.erb +40 -0
  324. data/app/views/spree/admin/shipping_methods/new.html.erb +20 -0
  325. data/app/views/spree/admin/state_changes/index.html.erb +42 -0
  326. data/app/views/spree/admin/states/_form.html.erb +15 -0
  327. data/app/views/spree/admin/states/_state_list.html.erb +26 -0
  328. data/app/views/spree/admin/states/edit.html.erb +13 -0
  329. data/app/views/spree/admin/states/index.html.erb +18 -0
  330. data/app/views/spree/admin/states/new.html.erb +13 -0
  331. data/app/views/spree/admin/states/new.js.erb +2 -0
  332. data/app/views/spree/admin/stock_items/destroy.js.erb +1 -0
  333. data/app/views/spree/admin/stock_locations/_form.html.erb +95 -0
  334. data/app/views/spree/admin/stock_locations/_transfer_stock_form.html.erb +39 -0
  335. data/app/views/spree/admin/stock_locations/edit.html.erb +13 -0
  336. data/app/views/spree/admin/stock_locations/index.html.erb +41 -0
  337. data/app/views/spree/admin/stock_locations/new.html.erb +13 -0
  338. data/app/views/spree/admin/stock_movements/_form.html.erb +12 -0
  339. data/app/views/spree/admin/stock_movements/edit.html.erb +17 -0
  340. data/app/views/spree/admin/stock_movements/index.html.erb +43 -0
  341. data/app/views/spree/admin/stock_movements/new.html.erb +14 -0
  342. data/app/views/spree/admin/stock_transfers/_stock_movements.html.erb +22 -0
  343. data/app/views/spree/admin/stock_transfers/index.html.erb +82 -0
  344. data/app/views/spree/admin/stock_transfers/new.html.erb +107 -0
  345. data/app/views/spree/admin/stock_transfers/show.html.erb +44 -0
  346. data/app/views/spree/admin/store_credit_categories/_form.html.erb +9 -0
  347. data/app/views/spree/admin/store_credit_categories/edit.html.erb +13 -0
  348. data/app/views/spree/admin/store_credit_categories/index.html.erb +34 -0
  349. data/app/views/spree/admin/store_credit_categories/new.html.erb +13 -0
  350. data/app/views/spree/admin/store_credits/_form.html.erb +18 -0
  351. data/app/views/spree/admin/store_credits/edit.html.erb +14 -0
  352. data/app/views/spree/admin/store_credits/index.html.erb +46 -0
  353. data/app/views/spree/admin/store_credits/new.html.erb +14 -0
  354. data/app/views/spree/admin/tax_categories/_form.html.erb +24 -0
  355. data/app/views/spree/admin/tax_categories/edit.html.erb +13 -0
  356. data/app/views/spree/admin/tax_categories/index.html.erb +42 -0
  357. data/app/views/spree/admin/tax_categories/new.html.erb +13 -0
  358. data/app/views/spree/admin/tax_categories/show.html.erb +1 -0
  359. data/app/views/spree/admin/tax_rates/_form.html.erb +54 -0
  360. data/app/views/spree/admin/tax_rates/edit.html.erb +11 -0
  361. data/app/views/spree/admin/tax_rates/index.html.erb +46 -0
  362. data/app/views/spree/admin/tax_rates/new.html.erb +14 -0
  363. data/app/views/spree/admin/taxonomies/_form.html.erb +7 -0
  364. data/app/views/spree/admin/taxonomies/_js_head.html.erb +13 -0
  365. data/app/views/spree/admin/taxonomies/_list.html.erb +23 -0
  366. data/app/views/spree/admin/taxonomies/edit.erb +37 -0
  367. data/app/views/spree/admin/taxonomies/index.html.erb +18 -0
  368. data/app/views/spree/admin/taxonomies/new.html.erb +12 -0
  369. data/app/views/spree/admin/taxons/_form.html.erb +46 -0
  370. data/app/views/spree/admin/taxons/_taxon_table.html.erb +23 -0
  371. data/app/views/spree/admin/taxons/edit.html.erb +32 -0
  372. data/app/views/spree/admin/taxons/index.html.erb +13 -0
  373. data/app/views/spree/admin/trackers/_form.html.erb +29 -0
  374. data/app/views/spree/admin/trackers/edit.html.erb +13 -0
  375. data/app/views/spree/admin/trackers/index.html.erb +42 -0
  376. data/app/views/spree/admin/trackers/new.html.erb +13 -0
  377. data/app/views/spree/admin/users/_addresses_form.html.erb +35 -0
  378. data/app/views/spree/admin/users/_form.html.erb +36 -0
  379. data/app/views/spree/admin/users/_lifetime_stats.html.erb +30 -0
  380. data/app/views/spree/admin/users/_sidebar.html.erb +23 -0
  381. data/app/views/spree/admin/users/_user_page_actions.html.erb +3 -0
  382. data/app/views/spree/admin/users/addresses.html.erb +26 -0
  383. data/app/views/spree/admin/users/edit.html.erb +72 -0
  384. data/app/views/spree/admin/users/index.html.erb +67 -0
  385. data/app/views/spree/admin/users/items.html.erb +64 -0
  386. data/app/views/spree/admin/users/new.html.erb +18 -0
  387. data/app/views/spree/admin/users/orders.html.erb +52 -0
  388. data/app/views/spree/admin/variants/_autocomplete.js.erb +21 -0
  389. data/app/views/spree/admin/variants/_autocomplete_line_items_stock.js.erb +46 -0
  390. data/app/views/spree/admin/variants/_autocomplete_stock.js.erb +48 -0
  391. data/app/views/spree/admin/variants/_form.html.erb +49 -0
  392. data/app/views/spree/admin/variants/_split.js.erb +33 -0
  393. data/app/views/spree/admin/variants/edit.html.erb +13 -0
  394. data/app/views/spree/admin/variants/index.html.erb +65 -0
  395. data/app/views/spree/admin/variants/new.html.erb +11 -0
  396. data/app/views/spree/admin/variants/new.js.erb +3 -0
  397. data/app/views/spree/admin/variants/update.js.erb +1 -0
  398. data/app/views/spree/admin/zones/_country_members.html.erb +16 -0
  399. data/app/views/spree/admin/zones/_form.html.erb +49 -0
  400. data/app/views/spree/admin/zones/_state_members.html.erb +16 -0
  401. data/app/views/spree/admin/zones/edit.html.erb +12 -0
  402. data/app/views/spree/admin/zones/index.html.erb +44 -0
  403. data/app/views/spree/admin/zones/new.html.erb +11 -0
  404. data/app/views/spree/layouts/admin.html.erb +81 -0
  405. data/config/initializers/assets.rb +1 -0
  406. data/config/initializers/form_builder.rb +15 -0
  407. data/config/routes.rb +185 -0
  408. data/lib/spree/backend/action_callbacks.rb +26 -0
  409. data/lib/spree/backend/callbacks.rb +48 -0
  410. data/lib/spree/backend/engine.rb +34 -0
  411. data/lib/spree/backend.rb +13 -0
  412. data/lib/spree_backend.rb +3 -0
  413. data/script/rails +9 -0
  414. data/spree_backend.gemspec +28 -0
  415. data/vendor/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  416. data/vendor/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  417. data/vendor/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
  418. data/vendor/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  419. data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  420. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  421. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  422. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  423. data/vendor/assets/images/jquery-ui/ui-icons_0073ea_256x240.png +0 -0
  424. data/vendor/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  425. data/vendor/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
  426. data/vendor/assets/images/jquery-ui/ui-icons_ff0084_256x240.png +0 -0
  427. data/vendor/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  428. data/vendor/assets/javascripts/handlebars.js +2746 -0
  429. data/vendor/assets/javascripts/jquery.cookie.js +117 -0
  430. data/vendor/assets/javascripts/jquery.jstree/jquery.jstree.js +4564 -0
  431. data/vendor/assets/javascripts/modernizr.js +4 -0
  432. data/vendor/assets/javascripts/underscore-min.js +6 -0
  433. data/vendor/assets/javascripts/underscore-min.map +1 -0
  434. data/vendor/assets/javascripts/velocity.js +3831 -0
  435. data/vendor/assets/stylesheets/animate.css +3158 -0
  436. data/vendor/assets/stylesheets/jquery-ui.datepicker.css.erb +357 -0
  437. data/vendor/assets/stylesheets/jquery.jstree/themes/spree/style.scss +216 -0
  438. data/vendor/assets/stylesheets/jquery.jstree/themes/spree/throbber.gif +0 -0
  439. metadata +565 -0
@@ -0,0 +1,157 @@
1
+ module Spree
2
+ module Admin
3
+ module BaseHelper
4
+ def flash_alert flash
5
+ if flash.present?
6
+ close_button = button_tag(class: 'close', 'data-dismiss' => 'alert', 'aria-label' => Spree.t(:close)) do
7
+ content_tag('span', '×'.html_safe, 'aria-hidden' => true)
8
+ end
9
+ message = flash[:error] || flash[:notice] || flash[:success]
10
+ flash_class = "danger" if flash[:error]
11
+ flash_class = "info" if flash[:notice]
12
+ flash_class = "success" if flash[:success]
13
+ flash_div = content_tag(:div, (close_button + message), class: "alert alert-#{flash_class} alert-auto-disappear")
14
+ content_tag(:div, flash_div, class: 'col-md-12')
15
+ end
16
+ end
17
+
18
+ def field_container(model, method, options = {}, &block)
19
+ css_classes = options[:class].to_a
20
+ css_classes << 'field'
21
+ if error_message_on(model, method).present?
22
+ css_classes << 'withError'
23
+ end
24
+ content_tag(:div, capture(&block), class: css_classes.join(' '), id: "#{model}_#{method}_field")
25
+ end
26
+
27
+ def error_message_on(object, method, options = {})
28
+ object = convert_to_model(object)
29
+ obj = object.respond_to?(:errors) ? object : instance_variable_get("@#{object}")
30
+
31
+ if obj && obj.errors[method].present?
32
+ errors = safe_join(obj.errors[method], '<br />'.html_safe)
33
+ content_tag(:span, errors, class: 'formError')
34
+ else
35
+ ''
36
+ end
37
+ end
38
+
39
+ def datepicker_field_value(date)
40
+ unless date.blank?
41
+ l(date, format: Spree.t('date_picker.format', default: '%Y/%m/%d'))
42
+ else
43
+ nil
44
+ end
45
+ end
46
+
47
+ def preference_field_tag(name, value, options)
48
+ case options[:type]
49
+ when :integer
50
+ text_field_tag(name, value, preference_field_options(options))
51
+ when :boolean
52
+ hidden_field_tag(name, 0, id: "#{name}_hidden") +
53
+ check_box_tag(name, 1, value, preference_field_options(options))
54
+ when :string
55
+ text_field_tag(name, value, preference_field_options(options))
56
+ when :password
57
+ password_field_tag(name, value, preference_field_options(options))
58
+ when :text
59
+ text_area_tag(name, value, preference_field_options(options))
60
+ else
61
+ text_field_tag(name, value, preference_field_options(options))
62
+ end
63
+ end
64
+
65
+ def preference_field_for(form, field, options)
66
+ case options[:type]
67
+ when :integer
68
+ form.text_field(field, preference_field_options(options))
69
+ when :boolean
70
+ form.check_box(field, preference_field_options(options))
71
+ when :string
72
+ form.text_field(field, preference_field_options(options))
73
+ when :password
74
+ form.password_field(field, preference_field_options(options))
75
+ when :text
76
+ form.text_area(field, preference_field_options(options))
77
+ else
78
+ form.text_field(field, preference_field_options(options))
79
+ end
80
+ end
81
+
82
+ def preference_field_options(options)
83
+ field_options = case options[:type]
84
+ when :integer
85
+ {
86
+ size: 10,
87
+ class: 'input_integer form-control'
88
+ }
89
+ when :boolean
90
+ {}
91
+ when :string
92
+ {
93
+ size: 10,
94
+ class: 'input_string form-control'
95
+ }
96
+ when :password
97
+ {
98
+ size: 10,
99
+ class: 'password_string form-control'
100
+ }
101
+ when :text
102
+ {
103
+ rows: 15,
104
+ cols: 85,
105
+ class: 'form-control'
106
+ }
107
+ else
108
+ {
109
+ size: 10,
110
+ class: 'input_string form-control'
111
+ }
112
+ end
113
+
114
+ field_options.merge!({
115
+ readonly: options[:readonly],
116
+ disabled: options[:disabled],
117
+ size: options[:size]
118
+ })
119
+ end
120
+
121
+ def preference_fields(object, form)
122
+ return unless object.respond_to?(:preferences)
123
+ fields = object.preferences.keys.map { |key|
124
+ if object.has_preference?(key)
125
+ form.label("preferred_#{key}", Spree.t(key) + ": ") +
126
+ preference_field_for(form, "preferred_#{key}", type: object.preference_type(key))
127
+ end
128
+ }
129
+ safe_join(fields, '<br />'.html_safe)
130
+ end
131
+
132
+ # renders hidden field and link to remove record using nested_attributes
133
+ def link_to_icon_remove_fields(f)
134
+ url = f.object.persisted? ? [:admin, f.object] : '#'
135
+ link_to_with_icon('delete', '', url, class: "spree_remove_fields btn btn-sm btn-danger", data: {action: 'remove'}, title: Spree.t(:remove)) + f.hidden_field(:_destroy)
136
+ end
137
+
138
+ def spree_dom_id(record)
139
+ dom_id(record, 'spree')
140
+ end
141
+
142
+ I18N_PLURAL_MANY_COUNT = 2.1
143
+ def plural_resource_name(resource_class)
144
+ resource_class.model_name.human(count: I18N_PLURAL_MANY_COUNT)
145
+ end
146
+
147
+ def order_time(time)
148
+ [I18n.l(time.to_date), time.strftime("%l:%M %p")].join('')
149
+ end
150
+
151
+ private
152
+ def attribute_name_for(field_name)
153
+ field_name.gsub(' ', '_').downcase
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module Admin
3
+ module CustomerReturnsHelper
4
+ def reimbursement_types
5
+ @reimbursement_types ||= Spree::ReimbursementType.accessible_by(current_ability, :read).active
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Admin
3
+ module GeneralSettingsHelper
4
+ def currency_options
5
+ currencies = ::Money::Currency.table.map do |code, details|
6
+ iso = details[:iso_code]
7
+ [iso, "#{details[:name]} (#{iso})"]
8
+ end
9
+ options_from_collection_for_select(currencies, :first, :last, Spree::Config[:currency])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module Admin
3
+ module ImagesHelper
4
+ def options_text_for(image)
5
+ if image.viewable.is_a?(Spree::Variant)
6
+ if image.viewable.is_master?
7
+ Spree.t(:all)
8
+ else
9
+ image.viewable.sku_and_options_text
10
+ end
11
+ else
12
+ Spree.t(:all)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module Admin
3
+ module InventorySettingsHelper
4
+ def show_not(true_or_false)
5
+ true_or_false ? '' : Spree.t(:not)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,248 @@
1
+ module Spree
2
+ module Admin
3
+ module NavigationHelper
4
+ # Makes an admin navigation tab (<li> tag) that links to a routing resource under /admin.
5
+ # The arguments should be a list of symbolized controller names that will cause this tab to
6
+ # be highlighted, with the first being the name of the resouce to link (uses URL helpers).
7
+ #
8
+ # Option hash may follow. Valid options are
9
+ # * :label to override link text, otherwise based on the first resource name (translated)
10
+ # * :route to override automatically determining the default route
11
+ # * :match_path as an alternative way to control when the tab is active, /products would
12
+ # match /admin/products, /admin/products/5/variants etc. Can be a String or a Regexp.
13
+ # Controller names are ignored if :match_path is provided.
14
+ #
15
+ # Example:
16
+ # # Link to /admin/orders, also highlight tab for ProductsController and ShipmentsController
17
+ # tab :orders, :products, :shipments
18
+ def tab(*args)
19
+ options = { label: args.first.to_s }
20
+
21
+ # Return if resource is found and user is not allowed to :admin
22
+ return '' if klass = klass_for(options[:label]) and cannot?(:admin, klass)
23
+
24
+ if args.last.is_a?(Hash)
25
+ options = options.merge(args.pop)
26
+ end
27
+ options[:route] ||= "admin_#{args.first}"
28
+
29
+ destination_url = options[:url] || spree.send("#{options[:route]}_path")
30
+ titleized_label = Spree.t(options[:label], default: options[:label], scope: [:admin, :tab]).titleize
31
+
32
+ css_classes = ['sidebar-menu-item']
33
+
34
+ if options[:icon]
35
+ link = link_to_with_icon(options[:icon], titleized_label, destination_url)
36
+ else
37
+ link = link_to(titleized_label, destination_url)
38
+ end
39
+
40
+ selected = if options[:match_path].is_a? Regexp
41
+ request.fullpath =~ options[:match_path]
42
+ elsif options[:match_path]
43
+ request.fullpath.starts_with?("#{spree.admin_path}#{options[:match_path]}")
44
+ else
45
+ args.include?(controller.controller_name.to_sym)
46
+ end
47
+ css_classes << 'selected' if selected
48
+
49
+ if options[:css_class]
50
+ css_classes << options[:css_class]
51
+ end
52
+ content_tag('li', link, class: css_classes.join(' '))
53
+ end
54
+
55
+ # Single main menu item
56
+ def main_menu_item text, url: nil, icon: nil
57
+ link_to url, :'data-toggle' => "collapse", :'data-parent' => '#sidebar' do
58
+ content_tag(:span, nil, class: "icon icon-#{icon}") +
59
+ content_tag(:span, " #{text}", class: 'text') +
60
+ content_tag(:span, nil, class: "icon icon-chevron-left pull-right")
61
+ end
62
+ end
63
+
64
+ # Main menu tree menu
65
+ def main_menu_tree text, icon: nil, sub_menu: nil, url: '#'
66
+ content_tag :li, class: 'sidebar-menu-item' do
67
+ main_menu_item(text, url: url, icon: icon) +
68
+ render(partial: "spree/admin/shared/sub_menu/#{sub_menu}")
69
+ end
70
+ end
71
+
72
+ # sidebar are used on order edit, product edit, user overview etc.
73
+ # this link is shown so a user can collapse the sidebar
74
+ def collapse_sidebar_link
75
+ content_tag :div, class: "collapse-sidebar" do
76
+ link_to "javascript:;", class: "js-collapse-sidebar" do
77
+ content_tag(:span, nil, class: "icon icon-chevron-right") +
78
+ content_tag(:span, "Collapse sidebar", class: "text")
79
+ end
80
+ end
81
+ end
82
+
83
+ # the per_page_dropdown is used on index pages like orders, products, promotions etc.
84
+ # this method generates the select_tag
85
+ def per_page_dropdown
86
+ # there is a config setting for admin_products_per_page, only for the orders page
87
+ if @products && per_page_default = Spree::Config.admin_products_per_page
88
+ per_page_options = []
89
+ 5.times do |amount|
90
+ per_page_options << (amount + 1) * Spree::Config.admin_products_per_page
91
+ end
92
+ else
93
+ per_page_default = 15
94
+ per_page_options = %w{5 15 30 45 60}
95
+ end
96
+
97
+ select_tag(:per_page,
98
+ options_for_select(per_page_options, params['per_page'] || per_page_default),
99
+ { class: "form-control pull-right js-per-page-select" })
100
+ end
101
+
102
+ # helper method to create proper url to apply per page filtering
103
+ # fixes https://github.com/spree/spree/issues/6888
104
+ def per_page_dropdown_params(args = nil)
105
+ args ||= params.clone
106
+ args.delete(:page)
107
+ args.delete(:per_page)
108
+ args
109
+ end
110
+
111
+ # finds class for a given symbol / string
112
+ #
113
+ # Example :
114
+ # :products returns Spree::Product
115
+ # :my_products returns MyProduct if MyProduct is defined
116
+ # :my_products returns My::Product if My::Product is defined
117
+ # if cannot constantize it returns nil
118
+ # This will allow us to use cancan abilities on tab
119
+ def klass_for(name)
120
+ model_name = name.to_s
121
+
122
+ ["Spree::#{model_name.classify}", model_name.classify, model_name.gsub('_', '/').classify].find do |t|
123
+ t.safe_constantize
124
+ end.try(:safe_constantize)
125
+ end
126
+
127
+ def link_to_clone(resource, options={})
128
+ options[:data] = { action: 'clone', :'original-title' => Spree.t(:clone) }
129
+ options[:class] = "btn btn-primary btn-sm with-tip"
130
+ options[:method] = :post
131
+ options[:icon] = :clone
132
+ button_link_to '', clone_object_url(resource), options
133
+ end
134
+
135
+ def link_to_new(resource)
136
+ options[:data] = { action: 'new' }
137
+ options[:class] = "btn btn-success btn-sm"
138
+ link_to_with_icon('plus', Spree.t(:new), edit_object_url(resource))
139
+ end
140
+
141
+ def link_to_edit(resource, options={})
142
+ url = options[:url] || edit_object_url(resource)
143
+ options[:data] = { action: 'edit' }
144
+ options[:class] = "btn btn-primary btn-sm"
145
+ link_to_with_icon('edit', Spree.t(:edit), url, options)
146
+ end
147
+
148
+ def link_to_edit_url(url, options={})
149
+ options[:data] = { action: 'edit' }
150
+ options[:class] = "btn btn-primary btn-sm"
151
+ link_to_with_icon('edit', Spree.t(:edit), url, options)
152
+ end
153
+
154
+ def link_to_delete(resource, options={})
155
+ url = options[:url] || object_url(resource)
156
+ name = options[:name] || Spree.t(:delete)
157
+ options[:class] = "btn btn-danger btn-sm delete-resource"
158
+ options[:data] = { confirm: Spree.t(:are_you_sure), action: 'remove' }
159
+ link_to_with_icon 'delete', name, url, options
160
+ end
161
+
162
+ def link_to_with_icon(icon_name, text, url, options = {})
163
+ options[:class] = (options[:class].to_s + " icon-link with-tip action-#{icon_name}").strip
164
+ options[:class] += ' no-text' if options[:no_text]
165
+ options[:title] = text if options[:no_text]
166
+ text = options[:no_text] ? '' : content_tag(:span, text, class: 'text')
167
+ options.delete(:no_text)
168
+ if icon_name
169
+ icon = content_tag(:span, '', class: "icon icon-#{icon_name}")
170
+ text.insert(0, icon + ' ')
171
+ end
172
+ link_to(text.html_safe, url, options)
173
+ end
174
+
175
+ def icon(icon_name)
176
+ icon_name ? content_tag(:i, '', class: icon_name) : ''
177
+ end
178
+
179
+ def button(text, icon_name = nil, button_type = 'submit', options={})
180
+ if icon_name
181
+ icon = content_tag(:span, '', class: "icon icon-#{icon_name}")
182
+ text.insert(0, icon + ' ')
183
+ end
184
+ button_tag(text.html_safe, options.merge(type: button_type, class: "btn btn-primary #{options[:class]}"))
185
+ end
186
+
187
+ def button_link_to(text, url, html_options = {})
188
+ if (html_options[:method] &&
189
+ html_options[:method].to_s.downcase != 'get' &&
190
+ !html_options[:remote])
191
+ form_tag(url, method: html_options.delete(:method), class: 'display-inline') do
192
+ button(text, html_options.delete(:icon), nil, html_options)
193
+ end
194
+ else
195
+ if html_options['data-update'].nil? && html_options[:remote]
196
+ object_name, action = url.split('/')[-2..-1]
197
+ html_options['data-update'] = [action, object_name.singularize].join('_')
198
+ end
199
+
200
+ html_options.delete('data-update') unless html_options['data-update']
201
+
202
+ html_options[:class] = html_options[:class] ? "btn #{html_options[:class]}" : "btn btn-default"
203
+
204
+ if html_options[:icon]
205
+ icon = content_tag(:span, '', class: "icon icon-#{html_options[:icon]}")
206
+ text.insert(0, icon + ' ')
207
+ end
208
+
209
+ link_to(text.html_safe, url, html_options)
210
+ end
211
+ end
212
+
213
+ def configurations_menu_item(link_text, url, description = '')
214
+ %(<tr>
215
+ <td>#{link_to(link_text, url)}</td>
216
+ <td>#{description}</td>
217
+ </tr>
218
+ ).html_safe
219
+ end
220
+
221
+ def configurations_sidebar_menu_item(link_text, url, options = {})
222
+ is_selected = url.ends_with?(controller.controller_name) ||
223
+ url.ends_with?("#{controller.controller_name}/edit") ||
224
+ url.ends_with?("#{controller.controller_name.singularize}/edit")
225
+
226
+ options[:class] = 'sidebar-menu-item'
227
+ options[:class] << ' selected' if is_selected
228
+ content_tag(:li, options) do
229
+ link_to(link_text, url)
230
+ end
231
+ end
232
+
233
+ def main_part_classes
234
+ if cookies['sidebar-minimized'] == 'true'
235
+ return 'col-sm-12 col-md-12 sidebar-collapsed'
236
+ else
237
+ return 'col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2'
238
+ end
239
+ end
240
+
241
+ def wrapper_classes
242
+ if cookies['sidebar-minimized'] == 'true'
243
+ return 'sidebar-minimized'
244
+ end
245
+ end
246
+ end
247
+ end
248
+ end
@@ -0,0 +1,69 @@
1
+ module Spree
2
+ module Admin
3
+ module OrdersHelper
4
+ # Renders all the extension partials that may have been specified in the extensions
5
+ def event_links(order, events)
6
+ links = []
7
+ events.sort.each do |event|
8
+ if order.send("can_#{event}?")
9
+ label = Spree.t(event, scope: 'admin.order.events', default: Spree.t(event))
10
+ links << button_link_to(
11
+ label.capitalize,
12
+ [event, :admin, order],
13
+ method: :put,
14
+ icon: "#{event}",
15
+ data: { confirm: Spree.t(:order_sure_want_to, event: label) }
16
+ )
17
+ end
18
+ end
19
+ safe_join(links, '&nbsp;'.html_safe)
20
+ end
21
+
22
+ def line_item_shipment_price(line_item, quantity)
23
+ Spree::Money.new(line_item.price * quantity, { currency: line_item.currency })
24
+ end
25
+
26
+ def avs_response_code
27
+ {
28
+ "A" => "Street address matches, but 5-digit and 9-digit postal code do not match.",
29
+ "B" => "Street address matches, but postal code not verified.",
30
+ "C" => "Street address and postal code do not match.",
31
+ "D" => "Street address and postal code match. ",
32
+ "E" => "AVS data is invalid or AVS is not allowed for this card type.",
33
+ "F" => "Card member's name does not match, but billing postal code matches.",
34
+ "G" => "Non-U.S. issuing bank does not support AVS.",
35
+ "H" => "Card member's name does not match. Street address and postal code match.",
36
+ "I" => "Address not verified.",
37
+ "J" => "Card member's name, billing address, and postal code match.",
38
+ "K" => "Card member's name matches but billing address and billing postal code do not match.",
39
+ "L" => "Card member's name and billing postal code match, but billing address does not match.",
40
+ "M" => "Street address and postal code match. ",
41
+ "N" => "Street address and postal code do not match.",
42
+ "O" => "Card member's name and billing address match, but billing postal code does not match.",
43
+ "P" => "Postal code matches, but street address not verified.",
44
+ "Q" => "Card member's name, billing address, and postal code match.",
45
+ "R" => "System unavailable.",
46
+ "S" => "Bank does not support AVS.",
47
+ "T" => "Card member's name does not match, but street address matches.",
48
+ "U" => "Address information unavailable. Returned if the U.S. bank does not support non-U.S. AVS or if the AVS in a U.S. bank is not functioning properly.",
49
+ "V" => "Card member's name, billing address, and billing postal code match.",
50
+ "W" => "Street address does not match, but 9-digit postal code matches.",
51
+ "X" => "Street address and 9-digit postal code match.",
52
+ "Y" => "Street address and 5-digit postal code match.",
53
+ "Z" => "Street address does not match, but 5-digit postal code matches."
54
+ }
55
+ end
56
+
57
+ def cvv_response_code
58
+ {
59
+ "M" => "CVV2 Match",
60
+ "N" => "CVV2 No Match",
61
+ "P" => "Not Processed",
62
+ "S" => "Issuer indicates that CVV2 data should be present on the card, but the merchant has indicated data is not present on the card",
63
+ "U" => "Issuer has not certified for CVV2 or Issuer has not provided Visa with the CVV2 encryption keys",
64
+ "" => "Transaction failed because wrong CVV2 number was entered or no CVV2 number was entered"
65
+ }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Admin
3
+ module PaymentsHelper
4
+ def payment_method_name(payment)
5
+ # hack to allow us to retrieve the name of a "deleted" payment method
6
+ id = payment.payment_method_id
7
+ Spree::PaymentMethod.find_with_destroyed(id).name
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module Admin
3
+ module ProductsHelper
4
+ def taxon_options_for(product)
5
+ options = @taxons.map do |taxon|
6
+ selected = product.taxons.include?(taxon)
7
+ content_tag(:option,
8
+ :value => taxon.id,
9
+ :selected => ('selected' if selected)) do
10
+ (taxon.ancestors.pluck(:name) + [taxon.name]).join(" -> ")
11
+ end
12
+ end
13
+ safe_join(options)
14
+ end
15
+
16
+ def option_types_options_for(product)
17
+ options = @option_types.map do |option_type|
18
+ selected = product.option_types.include?(option_type)
19
+ content_tag(:option,
20
+ :value => option_type.id,
21
+ :selected => ('selected' if selected)) do
22
+ option_type.name
23
+ end
24
+ end
25
+ safe_join(options)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module Admin
3
+ module ReimbursementTypeHelper
4
+ def reimbursement_type_name(reimbursement_type)
5
+ reimbursement_type.present? ? reimbursement_type.name.humanize : ''
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module Admin
3
+ module ReimbursementsHelper
4
+ def reimbursement_status_color(reimbursement)
5
+ case reimbursement.reimbursement_status
6
+ when 'reimbursed' then 'success'
7
+ when 'pending' then 'notice'
8
+ when 'errored' then 'error'
9
+ else raise "unknown reimbursement status: #{reimbursement.reimbursement_status}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Admin
3
+ module StockLocationsHelper
4
+ def display_name(stock_location)
5
+ name_parts = [stock_location.admin_name, stock_location.name]
6
+ name_parts.delete_if(&:blank?)
7
+ name_parts.join(' / ')
8
+ end
9
+
10
+ def state(stock_location)
11
+ stock_location.active? ? 'active' : 'inactive'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Admin
3
+ module StockMovementsHelper
4
+ def pretty_originator(stock_movement)
5
+ if stock_movement.originator.respond_to?(:number)
6
+ if stock_movement.originator.respond_to?(:order)
7
+ link_to stock_movement.originator.number, [:edit, :admin, stock_movement.originator.order]
8
+ else
9
+ stock_movement.originator.number
10
+ end
11
+ else
12
+ ""
13
+ end
14
+ end
15
+
16
+ def display_variant(stock_movement)
17
+ variant = stock_movement.stock_item.variant
18
+ output = [variant.name]
19
+ output << variant.options_text unless variant.options_text.blank?
20
+ safe_join(output, '<br />'.html_safe)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Admin
3
+ module TablesHelper
4
+
5
+ # Adds class 'active' to <th> & <td> tags
6
+ # for better tables styling
7
+ def sort_by_active_class(row)
8
+ if params[:q][:s] && params[:q][:s].include?(row)
9
+ return "sort-active"
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module Admin
3
+ module TaxonsHelper
4
+ def taxon_path(taxon)
5
+ taxon.ancestors.reverse.collect { |ancestor| ancestor.name }.join( " >> ")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module PromotionRulesHelper
3
+
4
+ def options_for_promotion_rule_types(promotion)
5
+ existing = promotion.rules.map { |rule| rule.class.name }
6
+ rule_names = Rails.application.config.spree.promotions.rules.map(&:name).reject{ |r| existing.include? r }
7
+ options = rule_names.map { |name| [ Spree.t("promotion_rule_types.#{name.demodulize.underscore}.name"), name] }
8
+ options_for_select(options)
9
+ end
10
+
11
+ end
12
+ end
13
+