shoppy 0.9.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 (352) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/app/.DS_Store +0 -0
  6. data/app/api/apihelpers/api_auth.rb +50 -0
  7. data/app/api/base.rb +7 -0
  8. data/app/api/v1/auth.rb +57 -0
  9. data/app/api/v1/test.rb +15 -0
  10. data/app/api/v1/users.rb +50 -0
  11. data/app/api/v1/v1_api.rb +15 -0
  12. data/app/api/vo/user_vo.rb +7 -0
  13. data/app/assets/fonts/.DS_Store +0 -0
  14. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  15. data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  16. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  17. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  18. data/app/assets/images/.DS_Store +0 -0
  19. data/app/assets/images/Sorting icons.psd +0 -0
  20. data/app/assets/images/back_disabled.png +0 -0
  21. data/app/assets/images/back_enabled.png +0 -0
  22. data/app/assets/images/back_enabled_hover.png +0 -0
  23. data/app/assets/images/favicon.ico +0 -0
  24. data/app/assets/images/forward_disabled.png +0 -0
  25. data/app/assets/images/forward_enabled.png +0 -0
  26. data/app/assets/images/forward_enabled_hover.png +0 -0
  27. data/app/assets/images/shoppy.svg +34 -0
  28. data/app/assets/images/sort_asc.png +0 -0
  29. data/app/assets/images/sort_asc_disabled.png +0 -0
  30. data/app/assets/images/sort_both.png +0 -0
  31. data/app/assets/images/sort_desc.png +0 -0
  32. data/app/assets/images/sort_desc_disabled.png +0 -0
  33. data/app/assets/images/spritemap.png +0 -0
  34. data/app/assets/images/spritemap@2x.png +0 -0
  35. data/app/assets/javascripts/.DS_Store +0 -0
  36. data/app/assets/javascripts/bootstrap.js +2114 -0
  37. data/app/assets/javascripts/bootstrap.min.js +6 -0
  38. data/app/assets/javascripts/jasny-bootstrap.min.js +6 -0
  39. data/app/assets/javascripts/jquery.dataTables.min.js +155 -0
  40. data/app/assets/javascripts/main.js +29 -0
  41. data/app/assets/javascripts/shoppy.js +31 -0
  42. data/app/assets/stylesheets/.DS_Store +0 -0
  43. data/app/assets/stylesheets/bootstrap.css +6203 -0
  44. data/app/assets/stylesheets/jasny-bootstrap.css +621 -0
  45. data/app/assets/stylesheets/jquery.dataTables.min.css +1 -0
  46. data/app/assets/stylesheets/jquery.dataTables_themeroller.css +330 -0
  47. data/app/assets/stylesheets/shoppy.css +23 -0
  48. data/app/assets/stylesheets/style.sass +79 -0
  49. data/app/controllers/.DS_Store +0 -0
  50. data/app/controllers/shoppy/accounts_controller.rb +102 -0
  51. data/app/controllers/shoppy/application_controller.rb +23 -0
  52. data/app/controllers/shoppy/brands_controller.rb +60 -0
  53. data/app/controllers/shoppy/cart_controller.rb +46 -0
  54. data/app/controllers/shoppy/categories_controller.rb +72 -0
  55. data/app/controllers/shoppy/concerns/.keep +0 -0
  56. data/app/controllers/shoppy/customer_addresses_controller.rb +90 -0
  57. data/app/controllers/shoppy/home_controller.rb +9 -0
  58. data/app/controllers/shoppy/inventories_controller.rb +62 -0
  59. data/app/controllers/shoppy/locations_controller.rb +80 -0
  60. data/app/controllers/shoppy/logs_controller.rb +9 -0
  61. data/app/controllers/shoppy/manufacturers_controller.rb +77 -0
  62. data/app/controllers/shoppy/options_controller.rb +63 -0
  63. data/app/controllers/shoppy/orders_controller.rb +130 -0
  64. data/app/controllers/shoppy/products_controller.rb +98 -0
  65. data/app/controllers/shoppy/reviews_controller.rb +70 -0
  66. data/app/controllers/shoppy/sessions_controller.rb +5 -0
  67. data/app/controllers/shoppy/settings_controller.rb +26 -0
  68. data/app/controllers/shoppy/shipments_controller.rb +125 -0
  69. data/app/controllers/shoppy/variants_controller.rb +104 -0
  70. data/app/helpers/shoppy/accounts_helper.rb +5 -0
  71. data/app/helpers/shoppy/application_helper.rb +19 -0
  72. data/app/helpers/shoppy/brands_helper.rb +4 -0
  73. data/app/helpers/shoppy/cart_helper.rb +66 -0
  74. data/app/helpers/shoppy/categories_helper.rb +4 -0
  75. data/app/helpers/shoppy/customer_addresses_helper.rb +4 -0
  76. data/app/helpers/shoppy/home_helper.rb +5 -0
  77. data/app/helpers/shoppy/inventories_helper.rb +53 -0
  78. data/app/helpers/shoppy/locations_helper.rb +4 -0
  79. data/app/helpers/shoppy/logs_helper.rb +4 -0
  80. data/app/helpers/shoppy/manufacturers_helper.rb +4 -0
  81. data/app/helpers/shoppy/options_helper.rb +43 -0
  82. data/app/helpers/shoppy/orders_helper.rb +61 -0
  83. data/app/helpers/shoppy/products_helper.rb +65 -0
  84. data/app/helpers/shoppy/reviews_helper.rb +4 -0
  85. data/app/helpers/shoppy/settings_helper.rb +5 -0
  86. data/app/helpers/shoppy/shipments_helper.rb +43 -0
  87. data/app/helpers/shoppy/variants_helper.rb +4 -0
  88. data/app/models/shoppy/.DS_Store +0 -0
  89. data/app/models/shoppy/admin.rb +5 -0
  90. data/app/models/shoppy/brand.rb +23 -0
  91. data/app/models/shoppy/cart_item.rb +13 -0
  92. data/app/models/shoppy/category.rb +50 -0
  93. data/app/models/shoppy/concerns/.DS_Store +0 -0
  94. data/app/models/shoppy/concerns/models/api_token_authenticatable.rb +36 -0
  95. data/app/models/shoppy/concerns/models/hashable.rb +60 -0
  96. data/app/models/shoppy/concerns/models/optionable.rb +60 -0
  97. data/app/models/shoppy/concerns/models/promotional.rb +36 -0
  98. data/app/models/shoppy/concerns/models/taggable.rb +44 -0
  99. data/app/models/shoppy/customer.rb +10 -0
  100. data/app/models/shoppy/customer_address.rb +44 -0
  101. data/app/models/shoppy/inventory.rb +18 -0
  102. data/app/models/shoppy/log.rb +8 -0
  103. data/app/models/shoppy/manufacturer.rb +35 -0
  104. data/app/models/shoppy/options_group.rb +57 -0
  105. data/app/models/shoppy/options_item.rb +18 -0
  106. data/app/models/shoppy/order.rb +15 -0
  107. data/app/models/shoppy/order_line.rb +16 -0
  108. data/app/models/shoppy/payment_method.rb +19 -0
  109. data/app/models/shoppy/product.rb +43 -0
  110. data/app/models/shoppy/review.rb +12 -0
  111. data/app/models/shoppy/setting.rb +11 -0
  112. data/app/models/shoppy/shipment.rb +11 -0
  113. data/app/models/shoppy/stock_location.rb +47 -0
  114. data/app/models/shoppy/user.rb +37 -0
  115. data/app/models/shoppy/variant.rb +48 -0
  116. data/app/views/.DS_Store +0 -0
  117. data/app/views/accounts/admins.html.erb +104 -0
  118. data/app/views/accounts/customers.html.erb +106 -0
  119. data/app/views/accounts/show.html.erb +50 -0
  120. data/app/views/brands/index.html.erb +85 -0
  121. data/app/views/brands/show.html.erb +31 -0
  122. data/app/views/cart/index.html.erb +52 -0
  123. data/app/views/categories/index.html.erb +84 -0
  124. data/app/views/categories/show.html.erb +29 -0
  125. data/app/views/customer_addresses/index.html.erb +112 -0
  126. data/app/views/customer_addresses/show.html.erb +50 -0
  127. data/app/views/devise/confirmations/new.html.erb +12 -0
  128. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  129. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  130. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  131. data/app/views/devise/passwords/edit.html.erb +16 -0
  132. data/app/views/devise/passwords/new.html.erb +12 -0
  133. data/app/views/devise/registrations/edit.html.erb +29 -0
  134. data/app/views/devise/registrations/new.html.erb +23 -0
  135. data/app/views/devise/sessions/new.html.erb +33 -0
  136. data/app/views/devise/shared/_links.erb +25 -0
  137. data/app/views/devise/unlocks/new.html.erb +12 -0
  138. data/app/views/home/index.html.erb +4 -0
  139. data/app/views/inventories/.DS_Store +0 -0
  140. data/app/views/inventories/index.html.erb +119 -0
  141. data/app/views/layouts/.DS_Store +0 -0
  142. data/app/views/layouts/shoppy.html.erb +27 -0
  143. data/app/views/locations/index.html.erb +120 -0
  144. data/app/views/locations/show.html.erb +58 -0
  145. data/app/views/logs/index.html.erb +49 -0
  146. data/app/views/manufacturers/index.html.erb +119 -0
  147. data/app/views/manufacturers/show.html.erb +62 -0
  148. data/app/views/options/index.html.erb +90 -0
  149. data/app/views/options/show.html.erb +32 -0
  150. data/app/views/orders/index.html.erb +174 -0
  151. data/app/views/orders/show.html.erb +74 -0
  152. data/app/views/products/index.html.erb +102 -0
  153. data/app/views/products/show.html.erb +112 -0
  154. data/app/views/reviews/index.html.erb +58 -0
  155. data/app/views/reviews/show.html.erb +46 -0
  156. data/app/views/settings/show.html.erb +50 -0
  157. data/app/views/shared/_custom_file_input.html.erb +12 -0
  158. data/app/views/shared/_flashes.html.erb +21 -0
  159. data/app/views/shared/_navigation.html.erb +66 -0
  160. data/app/views/shipments/index.html.erb +97 -0
  161. data/app/views/shipments/show.html.erb +84 -0
  162. data/app/views/variants/index.html.erb +119 -0
  163. data/app/views/variants/show.html.erb +114 -0
  164. data/bin/shoppy +183 -0
  165. data/config/routes.rb +124 -0
  166. data/db/.DS_Store +0 -0
  167. data/db/migrate/001__setup_hstore.rb +9 -0
  168. data/db/migrate/002__create_logs.rb +11 -0
  169. data/db/migrate/003__devise_create_users.rb +49 -0
  170. data/db/migrate/004__add_personal_info_to_user.rb +8 -0
  171. data/db/migrate/005__create_user_addresses.rb +16 -0
  172. data/db/migrate/006__create_categories.rb +11 -0
  173. data/db/migrate/007__create_brands.rb +10 -0
  174. data/db/migrate/008__create_manufacturers.rb +19 -0
  175. data/db/migrate/009__create_options_groups.rb +10 -0
  176. data/db/migrate/010__create_options_items.rb +10 -0
  177. data/db/migrate/011__create_products.rb +14 -0
  178. data/db/migrate/012__create_product_options_joint_table.rb +9 -0
  179. data/db/migrate/013__create_stock_locations.rb +18 -0
  180. data/db/migrate/014__create_variants.rb +12 -0
  181. data/db/migrate/015__add_promotional_to_variant.rb +8 -0
  182. data/db/migrate/016__create_inventories.rb +12 -0
  183. data/db/migrate/017__create_payment_methods.rb +9 -0
  184. data/db/migrate/018__create_cart_items.rb +12 -0
  185. data/db/migrate/019__create_orders.rb +11 -0
  186. data/db/migrate/020__create_order_lines.rb +14 -0
  187. data/db/migrate/021__add_type_to_user.rb +5 -0
  188. data/db/migrate/022__rename_user_address_to_customer_address.rb +5 -0
  189. data/db/migrate/023__create_shipments.rb +12 -0
  190. data/db/migrate/024__add_shipment_id_to_order_line.rb +5 -0
  191. data/db/migrate/025__change_user_gender_to_not_nullable.rb +5 -0
  192. data/db/migrate/026__add_category_id_to_product.rb +5 -0
  193. data/db/migrate/027__add_attachment_brand_image_to_brands.rb +11 -0
  194. data/db/migrate/028__add_delivery_date_to_shipment.rb +5 -0
  195. data/db/migrate/029__add_customer_info_to_order.rb +13 -0
  196. data/db/migrate/030__add_status_to_order.rb +5 -0
  197. data/db/migrate/031__add_default_address_to_user.rb +5 -0
  198. data/db/migrate/032__add_options_to_variant.rb +5 -0
  199. data/db/migrate/033__add_display_to_options_groups.rb +5 -0
  200. data/db/migrate/034__add_points_to_variant.rb +5 -0
  201. data/db/migrate/035__add_points_to_user.rb +5 -0
  202. data/db/migrate/036__define_ids.rb +25 -0
  203. data/db/migrate/037__create_seed_users.rb +13 -0
  204. data/db/migrate/038__add_name_to_customer_address.rb +5 -0
  205. data/db/migrate/039__create_reviews.rb +14 -0
  206. data/db/migrate/040__alter_table_customer_address.rb +5 -0
  207. data/db/migrate/041__create_settings.rb +23 -0
  208. data/lib/.DS_Store +0 -0
  209. data/lib/shoppy.rb +13 -0
  210. data/lib/shoppy/client.rb +53 -0
  211. data/lib/shoppy/engine.rb +4 -0
  212. data/lib/shoppy/version.rb +3 -0
  213. data/lib/tasks/shoppy_tasks.rake +4 -0
  214. data/lib/template/.gitignore +20 -0
  215. data/lib/template/Gemfile +46 -0
  216. data/lib/template/Gemfile.lock +218 -0
  217. data/lib/template/Rakefile +6 -0
  218. data/lib/template/app/assets/images/.keep +0 -0
  219. data/lib/template/app/assets/javascripts/application.js +13 -0
  220. data/lib/template/app/assets/stylesheets/application.css +15 -0
  221. data/lib/template/app/controllers/accounts_controller.rb +3 -0
  222. data/lib/template/app/controllers/application_controller.rb +3 -0
  223. data/lib/template/app/controllers/brands_controller.rb +3 -0
  224. data/lib/template/app/controllers/cart_controller.rb +3 -0
  225. data/lib/template/app/controllers/categories_controller.rb +3 -0
  226. data/lib/template/app/controllers/concerns/.keep +0 -0
  227. data/lib/template/app/controllers/customer_addresses_controller.rb +3 -0
  228. data/lib/template/app/controllers/home_controller.rb +3 -0
  229. data/lib/template/app/controllers/inventories_controller.rb +3 -0
  230. data/lib/template/app/controllers/locations_controller.rb +3 -0
  231. data/lib/template/app/controllers/logs_controller.rb +3 -0
  232. data/lib/template/app/controllers/manufacturers_controller.rb +3 -0
  233. data/lib/template/app/controllers/options_controller.rb +3 -0
  234. data/lib/template/app/controllers/orders_controller.rb +3 -0
  235. data/lib/template/app/controllers/products_controller.rb +3 -0
  236. data/lib/template/app/controllers/reviews_controller.rb +3 -0
  237. data/lib/template/app/controllers/sessions_controller.rb +3 -0
  238. data/lib/template/app/controllers/settings_controller.rb +3 -0
  239. data/lib/template/app/controllers/shipments_controller.rb +3 -0
  240. data/lib/template/app/controllers/variants_controller.rb +3 -0
  241. data/lib/template/app/helpers/.keep +0 -0
  242. data/lib/template/app/helpers/orders_helper.rb +4 -0
  243. data/lib/template/app/mailers/.keep +0 -0
  244. data/lib/template/app/models/.keep +0 -0
  245. data/lib/template/app/models/account.rb +4 -0
  246. data/lib/template/app/models/admin.rb +4 -0
  247. data/lib/template/app/models/brand.rb +3 -0
  248. data/lib/template/app/models/cart_item.rb +3 -0
  249. data/lib/template/app/models/category.rb +3 -0
  250. data/lib/template/app/models/concerns/.keep +0 -0
  251. data/lib/template/app/models/concerns/hashable.rb +4 -0
  252. data/lib/template/app/models/customer.rb +4 -0
  253. data/lib/template/app/models/customer_address.rb +3 -0
  254. data/lib/template/app/models/inventory.rb +3 -0
  255. data/lib/template/app/models/log.rb +3 -0
  256. data/lib/template/app/models/manufacturer.rb +3 -0
  257. data/lib/template/app/models/option_item.rb +3 -0
  258. data/lib/template/app/models/options_group.rb +3 -0
  259. data/lib/template/app/models/order.rb +3 -0
  260. data/lib/template/app/models/order_line.rb +3 -0
  261. data/lib/template/app/models/payment_method.rb +3 -0
  262. data/lib/template/app/models/product.rb +3 -0
  263. data/lib/template/app/models/review.rb +3 -0
  264. data/lib/template/app/models/setting.rb +3 -0
  265. data/lib/template/app/models/shipment.rb +3 -0
  266. data/lib/template/app/models/stock_location.rb +3 -0
  267. data/lib/template/app/models/variant.rb +3 -0
  268. data/lib/template/app/views/layouts/.keep +0 -0
  269. data/lib/template/bin/bundle +3 -0
  270. data/lib/template/bin/rails +8 -0
  271. data/lib/template/bin/rake +8 -0
  272. data/lib/template/bin/spring +18 -0
  273. data/lib/template/config.ru +4 -0
  274. data/lib/template/config/application.rb +23 -0
  275. data/lib/template/config/boot.rb +4 -0
  276. data/lib/template/config/database.yml +86 -0
  277. data/lib/template/config/environment.rb +5 -0
  278. data/lib/template/config/environments/development.rb +37 -0
  279. data/lib/template/config/environments/production.rb +78 -0
  280. data/lib/template/config/environments/test.rb +39 -0
  281. data/lib/template/config/initializers/assets.rb +8 -0
  282. data/lib/template/config/initializers/backtrace_silencers.rb +7 -0
  283. data/lib/template/config/initializers/cookies_serializer.rb +3 -0
  284. data/lib/template/config/initializers/devise.rb +256 -0
  285. data/lib/template/config/initializers/filter_parameter_logging.rb +4 -0
  286. data/lib/template/config/initializers/inflections.rb +16 -0
  287. data/lib/template/config/initializers/mime_types.rb +4 -0
  288. data/lib/template/config/initializers/session_store.rb +3 -0
  289. data/lib/template/config/initializers/wrap_parameters.rb +14 -0
  290. data/lib/template/config/locales/devise.en.yml +59 -0
  291. data/lib/template/config/locales/en.yml +23 -0
  292. data/lib/template/config/routes.rb +3 -0
  293. data/lib/template/config/secrets.yml +22 -0
  294. data/lib/template/db/migrate/.keep +0 -0
  295. data/lib/template/db/seeds.rb +7 -0
  296. data/lib/template/lib/assets/.keep +0 -0
  297. data/lib/template/lib/tasks/.keep +0 -0
  298. data/lib/template/log/.keep +0 -0
  299. data/lib/template/public/404.html +67 -0
  300. data/lib/template/public/422.html +67 -0
  301. data/lib/template/public/500.html +66 -0
  302. data/lib/template/public/favicon.ico +0 -0
  303. data/lib/template/public/robots.txt +5 -0
  304. data/lib/template/test/controllers/.keep +0 -0
  305. data/lib/template/test/fixtures/.keep +0 -0
  306. data/lib/template/test/helpers/.keep +0 -0
  307. data/lib/template/test/integration/.keep +0 -0
  308. data/lib/template/test/mailers/.keep +0 -0
  309. data/lib/template/test/models/.keep +0 -0
  310. data/lib/template/test/test_helper.rb +10 -0
  311. data/lib/template/vendor/assets/javascripts/.keep +0 -0
  312. data/lib/template/vendor/assets/stylesheets/.keep +0 -0
  313. data/test/dummy/README.rdoc +28 -0
  314. data/test/dummy/Rakefile +6 -0
  315. data/test/dummy/app/assets/javascripts/application.js +13 -0
  316. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  317. data/test/dummy/app/controllers/application_controller.rb +5 -0
  318. data/test/dummy/app/helpers/application_helper.rb +2 -0
  319. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  320. data/test/dummy/bin/bundle +3 -0
  321. data/test/dummy/bin/rails +4 -0
  322. data/test/dummy/bin/rake +4 -0
  323. data/test/dummy/config.ru +4 -0
  324. data/test/dummy/config/application.rb +23 -0
  325. data/test/dummy/config/boot.rb +5 -0
  326. data/test/dummy/config/database.yml +25 -0
  327. data/test/dummy/config/environment.rb +5 -0
  328. data/test/dummy/config/environments/development.rb +37 -0
  329. data/test/dummy/config/environments/production.rb +78 -0
  330. data/test/dummy/config/environments/test.rb +39 -0
  331. data/test/dummy/config/initializers/assets.rb +8 -0
  332. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  333. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  334. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  335. data/test/dummy/config/initializers/inflections.rb +16 -0
  336. data/test/dummy/config/initializers/mime_types.rb +4 -0
  337. data/test/dummy/config/initializers/session_store.rb +3 -0
  338. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  339. data/test/dummy/config/locales/en.yml +23 -0
  340. data/test/dummy/config/routes.rb +56 -0
  341. data/test/dummy/config/secrets.yml +22 -0
  342. data/test/dummy/public/404.html +67 -0
  343. data/test/dummy/public/422.html +67 -0
  344. data/test/dummy/public/500.html +66 -0
  345. data/test/dummy/public/favicon.ico +0 -0
  346. data/test/integration/navigation_test.rb +10 -0
  347. data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/Gemfile.lock +217 -0
  348. data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/README.rdoc +28 -0
  349. data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/config.ru +4 -0
  350. data/test/shoppy_test.rb +7 -0
  351. data/test/test_helper.rb +15 -0
  352. metadata +495 -0
@@ -0,0 +1,23 @@
1
+ module Shoppy
2
+ class ApplicationController < ActionController::Base
3
+ # Prevent CSRF attacks by raising an exception.
4
+ # For APIs, you may want to use :null_session instead.
5
+ protect_from_forgery with: :exception
6
+
7
+ before_filter :configure_permitted_parameters, if: :devise_controller?
8
+
9
+ layout "shoppy"
10
+
11
+ protected
12
+
13
+ def configure_permitted_parameters
14
+ devise_parameter_sanitizer.for(:sign_up) << :name
15
+ end
16
+
17
+
18
+ def page_not_found
19
+ raise ActionController::RoutingError.new('Not Found')
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,60 @@
1
+ module Shoppy
2
+ class BrandsController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+ @brands = Brand.all
7
+ @brand = Brand.new
8
+ end
9
+
10
+ def new
11
+ @brand = Brand.new(brand_params)
12
+ @brand.name = @brand.name
13
+ if @brand.save
14
+ Log.newEvent("Brands", "New brand named '#{@brand.name}' was created", current_admin.name)
15
+ flash[:notice] = "Brand has been created."
16
+ else
17
+ flash[:error] = @brand.errors.messages
18
+ end
19
+ redirect_to '/products/brands'
20
+ end
21
+
22
+ def show
23
+ b = Brand.find_by(id: params[:brand_id])
24
+ if b
25
+ @brand = b
26
+ else
27
+ page_not_found
28
+ end
29
+ end
30
+
31
+ def edit
32
+ @brand = Brand.find_by(id: params[:brand_id])
33
+ if @brand
34
+ @brand.update_attributes(brand_params)
35
+ Log.newEvent("Brands", "Brand named '#{@brand.name}' was updated", current_admin.name)
36
+ redirect_to '/products/brands/' + @brand.id.to_s
37
+ flash[:notice] = "Brand has been updated."
38
+ else
39
+ page_not_found
40
+ end
41
+ end
42
+
43
+ def delete
44
+ @brand = Brand.find_by(id: params[:brand_id])
45
+ if @brand
46
+ @brand.destroy
47
+ Log.newEvent("Brands", "Brand named '#{@brand.name}' was deleted", current_admin.name)
48
+ flash[:notice] = "Brand has been deleted."
49
+ redirect_to '/products/brands'
50
+ else
51
+ page_not_found
52
+ end
53
+ end
54
+
55
+ private
56
+ def brand_params
57
+ params.require(:brand).permit! # Permits all
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,46 @@
1
+ module Shoppy
2
+ class CartController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+ @customer = Customer.find_by(id: params[:customer_id])
7
+ if @customer
8
+ @cart_items = @customer.cart_items
9
+ else
10
+ redirect_to "404.html"
11
+ end
12
+ end
13
+
14
+ def delete
15
+ customer = Customer.find_by(id: params[:customer_id])
16
+ cart_item = CartItem.find_by(id: params[:cart_item_id])
17
+ if customer && cart_item && cart_item.customer == customer
18
+ cart_item.destroy
19
+ Log.newEvent("User Cart", "An Item has been deleted from '#{customer.name}' cart", current_admin.name)
20
+ flash[:notice] = "Cart Item has been deleted."
21
+ redirect_to "/accounts/#{customer.id}/cart"
22
+ else
23
+ page_not_found
24
+ end
25
+ end
26
+
27
+ def empty
28
+ customer = Customer.find_by(id: params[:customer_id])
29
+ if customer
30
+ if customer.cart_items.count > 0
31
+ if CartHelper::empty_cart_for_customer(customer) == true
32
+ Log.newEvent("User Cart", "The cart for '#{customer.name}' was emptied", current_admin.name)
33
+ flash[:notice] = "Cart has been emptied"
34
+ else
35
+ flash[:warning] = "Something wrong happend. Try again later"
36
+ end
37
+ else
38
+ flash[:warning] = "Cart is already empty for this customer and can't be re-emptied. Kill the customer instead? 🔫"
39
+ end
40
+ redirect_to "/accounts/#{customer.id}/cart"
41
+ else
42
+ page_not_found
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,72 @@
1
+ module Shoppy
2
+ class CategoriesController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ include ERB::Util
6
+
7
+ def index
8
+ @categories = Category.all_sorted
9
+ end
10
+
11
+ def new
12
+ @category = Category.new
13
+ @category.name = params[:name]
14
+ if params[:parent_category_id][:id].to_i != 0
15
+ @category.parent_category = Category.find((params[:parent_category_id][:id]).to_i)
16
+ end
17
+ if @category.save
18
+ Log.newEvent("Categories", "a new category named '#{@category.name}' was created", current_admin.name)
19
+ flash[:notice] = "Category has been created."
20
+ else
21
+ ## TODO: Handle Errors
22
+ flash[:error] = @category.errors.messages
23
+ end
24
+ redirect_to '/products/categories'
25
+ end
26
+
27
+ def show
28
+ c = Category.find_by(id: params[:category_id])
29
+ if c
30
+ @category = c
31
+ else
32
+ page_not_found
33
+ end
34
+ end
35
+
36
+
37
+ def edit
38
+ @category = Category.find_by(id: params[:category_id])
39
+ if @category
40
+ if @category.update_attributes(category_params)
41
+ Log.newEvent("Categories", "Category named '#{@category.name}' was updated", current_admin.name)
42
+ flash[:notice] = "Category has been updated."
43
+ else
44
+ flash[:error] = @category.errors.messages
45
+ end
46
+ redirect_to '/products/categories/' + @category.id.to_s
47
+ else
48
+ page_not_found
49
+ end
50
+ end
51
+
52
+
53
+
54
+ def delete
55
+ @category = Category.find_by(id: params[:category_id])
56
+ if @category
57
+ @category.destroy
58
+ Log.newEvent("Categories", "Category named '#{@category.name}' was deleted", current_admin.name)
59
+ flash[:notice] = "Catgory has been deleted."
60
+ redirect_to '/products/categories'
61
+ else
62
+ page_not_found
63
+ end
64
+ end
65
+
66
+ private
67
+ def category_params
68
+ params.require(:category).permit(:name, :parent_category_id)
69
+ end
70
+
71
+ end
72
+ end
File without changes
@@ -0,0 +1,90 @@
1
+ module Shoppy
2
+ class CustomerAddressesController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+ @customer = Customer.find_by(id: params[:customer_id])
7
+ if @customer
8
+ @addresses = @customer.customer_addresses
9
+ respond_to do |format|
10
+ format.html # show.html.erb
11
+ format.xml { render :xml => @addresses.map { |address| address.as_json(:only => :id, :methods => [:name, :add_line1, :add_line2, :city, :state, :country, :zip, :customer_id]) } }
12
+ format.json { render :json => @addresses.map { |address| address.as_json(:only => :id, :methods => [:name, :add_line1, :add_line2, :city, :state, :country, :zip, :customer_id]) } }
13
+ end
14
+ else
15
+ redirect_to "404.html"
16
+ end
17
+ end
18
+
19
+ def new
20
+ @customer = Customer.find_by(id: params[:customer_id])
21
+ if @customer
22
+ @address = CustomerAddress.new
23
+ @address.customer = @customer
24
+ @address.name = params[:name]
25
+ @address.add_line1 = params[:add_line1]
26
+ @address.add_line2 = params[:add_line2]
27
+ @address.city = params[:city]
28
+ @address.state = params[:state]
29
+ @address.country = params[:country]
30
+ @address.zip = params[:zip]
31
+ if @address.save
32
+ Log.newEvent("Customr Addresses", "A new address for customer '#{@customer.name}' was created", current_admin.name)
33
+ flash[:notice] = "Address has been created successfully."
34
+ else
35
+ flash[:error] = @address.errors.messages
36
+ end
37
+ redirect_to "/accounts/" + @customer.id.to_s + "/addresses"
38
+ else
39
+ page_not_found
40
+ end
41
+ end
42
+
43
+ def show
44
+ customer = Customer.find_by(id: params[:customer_id])
45
+ address = CustomerAddress.find_by(id: params[:address_id])
46
+ if customer && address && address.customer == customer
47
+ @customer = customer
48
+ @address = address
49
+ else
50
+ page_not_found
51
+ end
52
+ end
53
+
54
+ def edit
55
+ customer = Customer.find_by(id: params[:customer_id])
56
+ address = CustomerAddress.find_by(id: params[:address_id])
57
+ if customer && address && address.customer == customer
58
+ @customer = customer
59
+ @address = address
60
+ if @address.update_attributes(address_params)
61
+ Log.newEvent("Customr Addresses", "An address for customer '#{@customer.name}' was updated", current_admin.name)
62
+ flash[:notice] = "Address updated successfully."
63
+ else
64
+ flash[:error] = @address.errors.messages
65
+ end
66
+ redirect_to "/accounts/" + @customer.id.to_s + "/addresses/" + address.id.to_s
67
+ else
68
+ page_not_found
69
+ end
70
+ end
71
+
72
+ def delete
73
+ customer = Customer.find_by(id: params[:customer_id])
74
+ address = CustomerAddress.find_by(id: params[:address_id])
75
+ if customer && address && address.customer == customer
76
+ address.destroy
77
+ Log.newEvent("Customr Addresses", "An address for customer '#{@customer.name}' was deleted", current_admin.name)
78
+ flash[:notice] = "Address has been deleted."
79
+ redirect_to "/accounts/"+ @customer.id + "/addresses"
80
+ else
81
+ page_not_found
82
+ end
83
+ end
84
+
85
+ private
86
+ def address_params
87
+ params.require(:customer_address).permit(:name, :add_line1, :add_line2, :city, :state, :country, :zip)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,9 @@
1
+ module Shoppy
2
+ class HomeController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,62 @@
1
+ module Shoppy
2
+ class InventoriesController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+ @stock_location = StockLocation.find_by(id: params[:location_id])
7
+ if @stock_location
8
+ @inventories = @stock_location.inventories
9
+ else
10
+ redirect_to "404.html"
11
+ end
12
+ end
13
+
14
+ def new
15
+ stock_location = StockLocation.find_by(id: params[:location_id])
16
+ variant = Variant.find_by(id: params[:variant][:id])
17
+ if stock_location
18
+ if variant
19
+ if params[:quantity] && params[:quantity].to_i > 0
20
+ if InventoriesHelper::add_variant_to_stock_location(Variant.find_by(id: params[:variant][:id]), params[:quantity].to_i, stock_location)
21
+ Log.newEvent("Inventory", "'#{params[:quantity].to_s}' of variant '#{Variant.find_by(id: params[:variant][:id]).name}' was added to stock location '#{stock_location.name}'", current_admin.name)
22
+ flash[:notice] = "Inventory has been added successfully"
23
+ else
24
+ flash[:warning] = "Something wrong happend. please try again later"
25
+ end
26
+ else
27
+ flash[:warning] = "Wrong quantity selected."
28
+ end
29
+ else
30
+ flash[:warning] = "You didn't select a variant to transfer"
31
+ end
32
+ redirect_to "/locations/#{stock_location.id}/inventories"
33
+ else
34
+ page_not_found
35
+ end
36
+ end
37
+
38
+ def transfer
39
+ from_stock_location = StockLocation.find_by(id: params[:location_id].to_i)
40
+ to_stock_location = StockLocation.find_by(id: params[:stock_location][:id])
41
+ inventory = Inventory.find_by(id: params[:inventory][:id])
42
+ if from_stock_location && inventory && to_stock_location && inventory.stock_location_id == from_stock_location.id
43
+ if from_stock_location == to_stock_location
44
+ flash[:warning] = "You can't transfer inventory to the same location"
45
+ elsif params[:quantity].to_i > inventory.quantity
46
+ flash[:warning] = "Wrong quantity. maximum is #{inventory.quantity.to_s}"
47
+ elsif params[:quantity].to_i <= 0
48
+ flash[:warning] = "Wrong quantity."
49
+ else
50
+ InventoriesHelper::transfer_inventory(from_stock_location, to_stock_location, inventory.variant, params[:quantity].to_i)
51
+ Log.newEvent("Inventory", "'#{params[:quantity]}' of variant '#{inventory.variant.name}' was transfered from '#{from_stock_location.name}' to '#{to_stock_location.name}'", current_admin.name)
52
+ flash[:notice] = "A number of '#{params[:quantity]}' of variant '#{inventory.variant.name}' was transfered from '#{from_stock_location.name}' to '#{to_stock_location.name}'"
53
+ end
54
+
55
+ else
56
+ flash[:warning] = "Please make sure you selected the stock location for transfering to, the variant to transfer, and the quantity."
57
+ end
58
+ redirect_to "/locations/#{from_stock_location.id}/inventories"
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,80 @@
1
+ module Shoppy
2
+ class LocationsController < ApplicationController
3
+ before_action :authenticate_admin!
4
+
5
+ def index
6
+ @stock_locations = StockLocation.all.order("name ASC")
7
+ end
8
+
9
+ def new
10
+ @stock_location = StockLocation.new
11
+ @stock_location.name = params[:name]
12
+ @stock_location.phone = params[:phone]
13
+ @stock_location.email = params[:email]
14
+ @stock_location.add_line1 = params[:add_line1]
15
+ @stock_location.add_line2 = params[:add_line2]
16
+ @stock_location.city = params[:city]
17
+ @stock_location.state = params[:state]
18
+ @stock_location.zip = params[:zip]
19
+ if @stock_location.save
20
+ Log.newEvent("Stock Locations", "A new stock Location named '#{@stock_location.name}' was created", current_admin.name)
21
+ flash[:notice] = "Stock Location has been created."
22
+ else
23
+ ## TODO: Handle Errors
24
+ flash[:error] = @stock_location.errors.messages
25
+ end
26
+ redirect_to '/locations'
27
+ end
28
+
29
+
30
+ def show
31
+ sl = StockLocation.find_by(id: params[:location_id])
32
+ if sl
33
+ @stock_location = sl
34
+ else
35
+ page_not_found
36
+ end
37
+ end
38
+
39
+ def edit
40
+ @stock_location = StockLocation.find_by(id: params[:location_id])
41
+ if @stock_location
42
+ if @stock_location.update_attributes(stock_location_params)
43
+ Log.newEvent("Stock Locations", "Stock Location named '#{@stock_location.name}' was updated", current_admin.name)
44
+ flash[:notice] = "Stock Location has been updated."
45
+ else
46
+ flash[:error] = @stock_location.errors.messages
47
+ end
48
+ redirect_to '/locations/' + @stock_location.id.to_s
49
+ else
50
+ page_not_found
51
+ end
52
+ end
53
+
54
+ def delete
55
+ stock_location = StockLocation.find_by(id: params[:location_id])
56
+ if stock_location
57
+ if stock_location.check_inventory
58
+ stock_location.destroy
59
+ Log.newEvent("Stock Locations", "Stock Location named '#{stock_location.name}' was deleted", current_admin.name)
60
+ flash[:notice] = "Stock Location has been deleted."
61
+ else
62
+ flash[:warning] = "You can't delete stock location that has inventory"
63
+ end
64
+ if params[:view] == "show"
65
+ redirect_to '/locations/#{@location.id}'
66
+ else
67
+ redirect_to '/locations'
68
+ end
69
+ else
70
+ page_not_found
71
+ end
72
+ end
73
+
74
+
75
+ private
76
+ def stock_location_params
77
+ params.require(:stock_location).permit(:name, :email, :phone, :add_line1, :add_line2, :city, :state, :country, :zip)
78
+ end
79
+ end
80
+ end