gemgento 2.8.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 (429) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +8 -0
  5. data/README.md +9 -0
  6. data/Rakefile +21 -0
  7. data/app/adapters/gemgento/magento/address_adapter.rb +37 -0
  8. data/app/adapters/gemgento/magento/customer_adapter.rb +24 -0
  9. data/app/adapters/gemgento/magento/line_item_adapter.rb +41 -0
  10. data/app/adapters/gemgento/magento/order_adapter.rb +97 -0
  11. data/app/adapters/gemgento/magento/order_status_adapter.rb +24 -0
  12. data/app/adapters/gemgento/magento/payment_adapter.rb +38 -0
  13. data/app/adapters/gemgento/magento/product_adapater.rb +24 -0
  14. data/app/adapters/gemgento/magento/quote_adapter.rb +17 -0
  15. data/app/adapters/gemgento/magento/shipment_adapter.rb +74 -0
  16. data/app/adapters/gemgento/magento/shipment_item_adapter.rb +39 -0
  17. data/app/adapters/gemgento/magento/shipment_track_adapter.rb +31 -0
  18. data/app/adapters/gemgento/magento_adapter.rb +17 -0
  19. data/app/assets/fonts/FuturaStd-Bold.otf +0 -0
  20. data/app/assets/fonts/FuturaStd-Book.otf +0 -0
  21. data/app/assets/fonts/FuturaStd-Light.otf +0 -0
  22. data/app/assets/fonts/FuturaStd-Medium.otf +0 -0
  23. data/app/assets/fonts/Verlag-Black.otf +0 -0
  24. data/app/assets/fonts/Verlag-BlackItalic.otf +0 -0
  25. data/app/assets/fonts/Verlag-Bold.otf +0 -0
  26. data/app/assets/fonts/Verlag-BoldItalic.otf +0 -0
  27. data/app/assets/fonts/Verlag-Book.otf +0 -0
  28. data/app/assets/fonts/Verlag-BookItalic-2.otf +0 -0
  29. data/app/assets/fonts/Verlag-BookItalic-3.otf +0 -0
  30. data/app/assets/fonts/Verlag-BookItalic.otf +0 -0
  31. data/app/assets/fonts/Verlag-Light.otf +0 -0
  32. data/app/assets/fonts/Verlag-LightItalic.otf +0 -0
  33. data/app/assets/fonts/Verlag-XLight.otf +0 -0
  34. data/app/assets/fonts/Verlag-XLightItalic.otf +0 -0
  35. data/app/assets/images/about_store.jpg +0 -0
  36. data/app/assets/images/gemgento-icon-bolt.png +0 -0
  37. data/app/assets/javascripts/gemgento/active_admin.js.coffee +42 -0
  38. data/app/assets/javascripts/gemgento/checkout/address.coffee +23 -0
  39. data/app/assets/javascripts/gemgento/gemgento.js +1 -0
  40. data/app/assets/javascripts/gemgento/global.js.coffee +31 -0
  41. data/app/assets/stylesheets/gemgento/active_admin.css.scss +549 -0
  42. data/app/assets/stylesheets/gemgento/default-views/_address.scss +11 -0
  43. data/app/assets/stylesheets/gemgento/default-views/_category.scss +54 -0
  44. data/app/assets/stylesheets/gemgento/default-views/_checkout.scss +28 -0
  45. data/app/assets/stylesheets/gemgento/default-views/_footer.scss +13 -0
  46. data/app/assets/stylesheets/gemgento/default-views/_form.scss +127 -0
  47. data/app/assets/stylesheets/gemgento/default-views/_header.scss +32 -0
  48. data/app/assets/stylesheets/gemgento/default-views/_layout.css.scss +157 -0
  49. data/app/assets/stylesheets/gemgento/default-views/_pages.css.scss +83 -0
  50. data/app/assets/stylesheets/gemgento/default-views/_product.scss +57 -0
  51. data/app/assets/stylesheets/gemgento/default-views/_shopping_bag.scss +87 -0
  52. data/app/assets/stylesheets/gemgento/default-views/_subheader.css.scss +30 -0
  53. data/app/assets/stylesheets/gemgento/default-views/application.css.scss +1 -0
  54. data/app/controllers/concerns/gemgento/api/v1/base.rb +15 -0
  55. data/app/controllers/concerns/gemgento/api/v1/product_filters.rb +33 -0
  56. data/app/controllers/gemgento/addresses_controller.rb +14 -0
  57. data/app/controllers/gemgento/api/v1/categories_controller.rb +13 -0
  58. data/app/controllers/gemgento/api/v1/products_controller.rb +23 -0
  59. data/app/controllers/gemgento/api/v1/search_controller.rb +14 -0
  60. data/app/controllers/gemgento/application_controller.rb +5 -0
  61. data/app/controllers/gemgento/cart_controller.rb +99 -0
  62. data/app/controllers/gemgento/categories_controller.rb +37 -0
  63. data/app/controllers/gemgento/checkout/address_controller.rb +48 -0
  64. data/app/controllers/gemgento/checkout/confirm_controller.rb +72 -0
  65. data/app/controllers/gemgento/checkout/coupons_controller.rb +42 -0
  66. data/app/controllers/gemgento/checkout/gift_card_controller.rb +39 -0
  67. data/app/controllers/gemgento/checkout/gift_controller.rb +32 -0
  68. data/app/controllers/gemgento/checkout/login_controller.rb +123 -0
  69. data/app/controllers/gemgento/checkout/payment_controller.rb +70 -0
  70. data/app/controllers/gemgento/checkout/paypal_controller.rb +23 -0
  71. data/app/controllers/gemgento/checkout/shipping_controller.rb +46 -0
  72. data/app/controllers/gemgento/checkout/shipping_payment_controller.rb +58 -0
  73. data/app/controllers/gemgento/checkout/thank_you_controller.rb +45 -0
  74. data/app/controllers/gemgento/checkout_controller.rb +120 -0
  75. data/app/controllers/gemgento/countries_controller.rb +17 -0
  76. data/app/controllers/gemgento/errors_controller.rb +7 -0
  77. data/app/controllers/gemgento/footer_items_controller.rb +16 -0
  78. data/app/controllers/gemgento/home_controller.rb +7 -0
  79. data/app/controllers/gemgento/magento/addresses_controller.rb +61 -0
  80. data/app/controllers/gemgento/magento/base_controller.rb +18 -0
  81. data/app/controllers/gemgento/magento/categories_controller.rb +103 -0
  82. data/app/controllers/gemgento/magento/email/sales/credit_memos_controller.rb +21 -0
  83. data/app/controllers/gemgento/magento/email/sales/invoices_controller.rb +21 -0
  84. data/app/controllers/gemgento/magento/email/sales/orders_controller.rb +20 -0
  85. data/app/controllers/gemgento/magento/email/sales/shipments_controller.rb +25 -0
  86. data/app/controllers/gemgento/magento/emails_controller.rb +11 -0
  87. data/app/controllers/gemgento/magento/inventory_controller.rb +30 -0
  88. data/app/controllers/gemgento/magento/orders_controller.rb +12 -0
  89. data/app/controllers/gemgento/magento/price_rules_controller.rb +22 -0
  90. data/app/controllers/gemgento/magento/product_attribute_sets_controller.rb +37 -0
  91. data/app/controllers/gemgento/magento/product_attributes_controller.rb +70 -0
  92. data/app/controllers/gemgento/magento/products_controller.rb +240 -0
  93. data/app/controllers/gemgento/magento/recurring_profiles_controller.rb +42 -0
  94. data/app/controllers/gemgento/magento/stores_controller.rb +21 -0
  95. data/app/controllers/gemgento/magento/user_groups_controller.rb +23 -0
  96. data/app/controllers/gemgento/magento/users_controller.rb +63 -0
  97. data/app/controllers/gemgento/order_export_controller.rb +21 -0
  98. data/app/controllers/gemgento/orders_controller.rb +12 -0
  99. data/app/controllers/gemgento/products_controller.rb +12 -0
  100. data/app/controllers/gemgento/regions_controller.rb +18 -0
  101. data/app/controllers/gemgento/search_controller.rb +16 -0
  102. data/app/controllers/gemgento/shipments_controller.rb +5 -0
  103. data/app/controllers/gemgento/stock_notifications_controller.rb +22 -0
  104. data/app/controllers/gemgento/subscribers_controller.rb +35 -0
  105. data/app/controllers/gemgento/sync_controller.rb +50 -0
  106. data/app/controllers/gemgento/user/addresses_controller.rb +79 -0
  107. data/app/controllers/gemgento/user/base_controller.rb +14 -0
  108. data/app/controllers/gemgento/user/home_controller.rb +9 -0
  109. data/app/controllers/gemgento/user/orders_controller.rb +17 -0
  110. data/app/controllers/gemgento/user/passwords_controller.rb +18 -0
  111. data/app/controllers/gemgento/user/recurring_profiles_controller.rb +31 -0
  112. data/app/controllers/gemgento/user/registration_session_controller.rb +103 -0
  113. data/app/controllers/gemgento/user/registrations_controller.rb +28 -0
  114. data/app/controllers/gemgento/user/saved_credit_cards_controller.rb +56 -0
  115. data/app/controllers/gemgento/user/sessions_controller.rb +50 -0
  116. data/app/controllers/gemgento/user/wishlist_items_controller.rb +55 -0
  117. data/app/controllers/gemgento/users_controller.rb +36 -0
  118. data/app/helpers/gemgento/application_helper.rb +125 -0
  119. data/app/helpers/gemgento/categories_helper.rb +39 -0
  120. data/app/helpers/gemgento/checkout/payment_helper.rb +5 -0
  121. data/app/helpers/gemgento/products_helper.rb +23 -0
  122. data/app/jobs/gemgento/import_job.rb +12 -0
  123. data/app/mailers/gemgento/sales_mailer.rb +80 -0
  124. data/app/models/admin_user.rb +7 -0
  125. data/app/models/concerns/gemgento/product_touches.rb +26 -0
  126. data/app/models/gemgento.rb +5 -0
  127. data/app/models/gemgento/adapter/sellect/customer.rb +34 -0
  128. data/app/models/gemgento/adapter/sellect/order.rb +378 -0
  129. data/app/models/gemgento/adapter/sellect/product.rb +250 -0
  130. data/app/models/gemgento/adapter/sellect_adapter.rb +16 -0
  131. data/app/models/gemgento/adapter/shopify/address.rb +40 -0
  132. data/app/models/gemgento/adapter/shopify/category.rb +51 -0
  133. data/app/models/gemgento/adapter/shopify/customer.rb +66 -0
  134. data/app/models/gemgento/adapter/shopify/order.rb +334 -0
  135. data/app/models/gemgento/adapter/shopify/product.rb +377 -0
  136. data/app/models/gemgento/adapter/shopify/product_category_position.rb +58 -0
  137. data/app/models/gemgento/adapter/shopify_adapter.rb +63 -0
  138. data/app/models/gemgento/address.rb +206 -0
  139. data/app/models/gemgento/api_job.rb +68 -0
  140. data/app/models/gemgento/asset.rb +185 -0
  141. data/app/models/gemgento/asset_file.rb +57 -0
  142. data/app/models/gemgento/asset_type.rb +8 -0
  143. data/app/models/gemgento/bundle.rb +5 -0
  144. data/app/models/gemgento/bundle/item.rb +17 -0
  145. data/app/models/gemgento/bundle/option.rb +20 -0
  146. data/app/models/gemgento/category.rb +235 -0
  147. data/app/models/gemgento/country.rb +21 -0
  148. data/app/models/gemgento/gift_message.rb +8 -0
  149. data/app/models/gemgento/image_import.rb +141 -0
  150. data/app/models/gemgento/import.rb +125 -0
  151. data/app/models/gemgento/inventory.rb +60 -0
  152. data/app/models/gemgento/inventory_import.rb +51 -0
  153. data/app/models/gemgento/line_item.rb +142 -0
  154. data/app/models/gemgento/line_item_option.rb +10 -0
  155. data/app/models/gemgento/magento_db.rb +35 -0
  156. data/app/models/gemgento/magento_response.rb +10 -0
  157. data/app/models/gemgento/order.rb +56 -0
  158. data/app/models/gemgento/order_status.rb +7 -0
  159. data/app/models/gemgento/payment.rb +50 -0
  160. data/app/models/gemgento/price_rule.rb +258 -0
  161. data/app/models/gemgento/price_tier.rb +36 -0
  162. data/app/models/gemgento/product.rb +607 -0
  163. data/app/models/gemgento/product_attribute.rb +48 -0
  164. data/app/models/gemgento/product_attribute_option.rb +39 -0
  165. data/app/models/gemgento/product_attribute_set.rb +22 -0
  166. data/app/models/gemgento/product_attribute_value.rb +26 -0
  167. data/app/models/gemgento/product_category.rb +34 -0
  168. data/app/models/gemgento/product_import.rb +359 -0
  169. data/app/models/gemgento/quote.rb +586 -0
  170. data/app/models/gemgento/recurring_profile.rb +28 -0
  171. data/app/models/gemgento/region.rb +14 -0
  172. data/app/models/gemgento/relation.rb +10 -0
  173. data/app/models/gemgento/relation_type.rb +7 -0
  174. data/app/models/gemgento/saved_credit_card.rb +45 -0
  175. data/app/models/gemgento/search.rb +14 -0
  176. data/app/models/gemgento/session.rb +49 -0
  177. data/app/models/gemgento/shipment.rb +38 -0
  178. data/app/models/gemgento/shipment_comment.rb +19 -0
  179. data/app/models/gemgento/shipment_item.rb +11 -0
  180. data/app/models/gemgento/shipment_track.rb +21 -0
  181. data/app/models/gemgento/stock_notification.rb +17 -0
  182. data/app/models/gemgento/store.rb +31 -0
  183. data/app/models/gemgento/store_tag.rb +8 -0
  184. data/app/models/gemgento/subscriber.rb +30 -0
  185. data/app/models/gemgento/swatch.rb +9 -0
  186. data/app/models/gemgento/sync.rb +134 -0
  187. data/app/models/gemgento/tag.rb +64 -0
  188. data/app/models/gemgento/user.rb +161 -0
  189. data/app/models/gemgento/user_group.rb +13 -0
  190. data/app/models/gemgento/wishlist_item.rb +11 -0
  191. data/app/services/gemgento/magento_api.rb +173 -0
  192. data/app/services/gemgento/price.rb +67 -0
  193. data/app/validators/gemgento/credit_card_validator.rb +50 -0
  194. data/app/validators/gemgento/image_import_validator.rb +100 -0
  195. data/app/validators/gemgento/inventory_import_validator.rb +73 -0
  196. data/app/validators/gemgento/inventory_validator.rb +14 -0
  197. data/app/validators/gemgento/product_import_validator.rb +163 -0
  198. data/app/views/admin/product_positions/_index.html.haml +14 -0
  199. data/app/views/devise/registrations/edit.haml +37 -0
  200. data/app/views/gemgento/addresses/_address.json.jbuilder +6 -0
  201. data/app/views/gemgento/addresses/region_options.html.haml +1 -0
  202. data/app/views/gemgento/api/v1/categories/_category.json.jbuilder +52 -0
  203. data/app/views/gemgento/api/v1/categories/index.json.jbuilder +8 -0
  204. data/app/views/gemgento/api/v1/categories/show.json.jbuilder +7 -0
  205. data/app/views/gemgento/api/v1/products/_attributes.json.jbuilder +9 -0
  206. data/app/views/gemgento/api/v1/products/_product.json.jbuilder +18 -0
  207. data/app/views/gemgento/api/v1/products/_relationships.json.jbuilder +48 -0
  208. data/app/views/gemgento/api/v1/products/index.json.jbuilder +8 -0
  209. data/app/views/gemgento/api/v1/products/show.json.jbuilder +7 -0
  210. data/app/views/gemgento/api/v1/search/index.json.jbuilder +8 -0
  211. data/app/views/gemgento/api/v1/search/show.json.jbuilder +8 -0
  212. data/app/views/gemgento/assets/_asset.json.jbuilder +13 -0
  213. data/app/views/gemgento/cart/show.html.haml +67 -0
  214. data/app/views/gemgento/categories/_category.json.jbuilder +9 -0
  215. data/app/views/gemgento/categories/_product_tile.html.haml +16 -0
  216. data/app/views/gemgento/categories/index.html.haml +10 -0
  217. data/app/views/gemgento/categories/index.json.jbuilder +1 -0
  218. data/app/views/gemgento/categories/show.html.haml +16 -0
  219. data/app/views/gemgento/categories/show.json.jbuilder +1 -0
  220. data/app/views/gemgento/checkout/_checkout_header.html.haml +17 -0
  221. data/app/views/gemgento/checkout/address/error.js.erb +1 -0
  222. data/app/views/gemgento/checkout/address/show.html.haml +88 -0
  223. data/app/views/gemgento/checkout/address/success.js.erb +1 -0
  224. data/app/views/gemgento/checkout/confirm/error.js.erb +0 -0
  225. data/app/views/gemgento/checkout/confirm/show.html.haml +60 -0
  226. data/app/views/gemgento/checkout/confirm/success.js.erb +1 -0
  227. data/app/views/gemgento/checkout/login/login_fail.js.erb +1 -0
  228. data/app/views/gemgento/checkout/login/login_guest_fail.js.erb +1 -0
  229. data/app/views/gemgento/checkout/login/login_guest_success.js.erb +1 -0
  230. data/app/views/gemgento/checkout/login/login_success.js.erb +1 -0
  231. data/app/views/gemgento/checkout/login/registration_fail.js.erb +1 -0
  232. data/app/views/gemgento/checkout/login/registration_success.js.erb +1 -0
  233. data/app/views/gemgento/checkout/login/show.html.haml +50 -0
  234. data/app/views/gemgento/checkout/payment/error.js.erb +1 -0
  235. data/app/views/gemgento/checkout/payment/show.html.haml +56 -0
  236. data/app/views/gemgento/checkout/payment/success.js.erb +1 -0
  237. data/app/views/gemgento/checkout/shipping/error.js.erb +0 -0
  238. data/app/views/gemgento/checkout/shipping/show.html.haml +26 -0
  239. data/app/views/gemgento/checkout/shipping/success.js.erb +1 -0
  240. data/app/views/gemgento/checkout/shipping_payment/show.haml +52 -0
  241. data/app/views/gemgento/checkout/thank_you/show.html.haml +6 -0
  242. data/app/views/gemgento/countries/_country.json.jbuilder +4 -0
  243. data/app/views/gemgento/countries/index.json.jbuilder +3 -0
  244. data/app/views/gemgento/countries/show.json.jbuilder +1 -0
  245. data/app/views/gemgento/home/index.html.haml +1 -0
  246. data/app/views/gemgento/order/add_item.js.erb +0 -0
  247. data/app/views/gemgento/order/no_inventory.js.erb +1 -0
  248. data/app/views/gemgento/order/remove_item.js.erb +0 -0
  249. data/app/views/gemgento/order/update_item.js.erb +0 -0
  250. data/app/views/gemgento/order_export/index.html.haml +2 -0
  251. data/app/views/gemgento/order_items/_order_item.json.jbuilder +7 -0
  252. data/app/views/gemgento/orders/_order.json.jbuilder +29 -0
  253. data/app/views/gemgento/products/_product.json.jbuilder +40 -0
  254. data/app/views/gemgento/products/index.html.haml +19 -0
  255. data/app/views/gemgento/products/show.html.haml +67 -0
  256. data/app/views/gemgento/products/show.json.jbuilder +1 -0
  257. data/app/views/gemgento/sales_mailer/credit_memo_email.html.haml +1 -0
  258. data/app/views/gemgento/sales_mailer/invoice_email.html.haml +1 -0
  259. data/app/views/gemgento/sales_mailer/order_email.html.haml +1 -0
  260. data/app/views/gemgento/sales_mailer/shipment_email.html.haml +1 -0
  261. data/app/views/gemgento/search/index.html.haml +8 -0
  262. data/app/views/gemgento/shared/_asset.json.jbuilder +35 -0
  263. data/app/views/gemgento/shared/_asset_file.json.jbuilder +19 -0
  264. data/app/views/gemgento/shared/_asset_type.json.jbuilder +13 -0
  265. data/app/views/gemgento/shared/_error_messages.haml +7 -0
  266. data/app/views/gemgento/shared/_flash_messages.haml +4 -0
  267. data/app/views/gemgento/shared/_footer.haml +7 -0
  268. data/app/views/gemgento/shared/_header.haml +23 -0
  269. data/app/views/gemgento/shared/_mini_bag.haml +36 -0
  270. data/app/views/gemgento/shared/_product_image.haml +8 -0
  271. data/app/views/gemgento/shipments/_shipment.json.jbuilder +12 -0
  272. data/app/views/gemgento/subscribers/create.js.erb +2 -0
  273. data/app/views/gemgento/subscribers/errors.js.erb +1 -0
  274. data/app/views/gemgento/user/_user.json.jbuilder +2 -0
  275. data/app/views/gemgento/user/addresses/_form.haml +39 -0
  276. data/app/views/gemgento/user/addresses/errors.js.erb +1 -0
  277. data/app/views/gemgento/user/addresses/index.haml +33 -0
  278. data/app/views/gemgento/user/addresses/new.haml +11 -0
  279. data/app/views/gemgento/user/addresses/success.js.erb +1 -0
  280. data/app/views/gemgento/user/confirmations/new.haml +9 -0
  281. data/app/views/gemgento/user/home/index.haml +8 -0
  282. data/app/views/gemgento/user/mailer/confirmation_instructions.html.erb +5 -0
  283. data/app/views/gemgento/user/mailer/reset_password_instructions.html.erb +8 -0
  284. data/app/views/gemgento/user/mailer/unlock_instructions.html.erb +7 -0
  285. data/app/views/gemgento/user/orders/index.html.haml +29 -0
  286. data/app/views/gemgento/user/orders/show.html.haml +87 -0
  287. data/app/views/gemgento/user/passwords/edit.html.erb +18 -0
  288. data/app/views/gemgento/user/passwords/new.html.haml +21 -0
  289. data/app/views/gemgento/user/registration_session/new.haml +67 -0
  290. data/app/views/gemgento/user/registrations/new.html.haml +28 -0
  291. data/app/views/gemgento/user/saved_credit_cards/_form.haml +69 -0
  292. data/app/views/gemgento/user/saved_credit_cards/index.haml +25 -0
  293. data/app/views/gemgento/user/saved_credit_cards/new.haml +13 -0
  294. data/app/views/gemgento/user/sessions/new.html.haml +29 -0
  295. data/app/views/gemgento/user/shared/_links.erb +25 -0
  296. data/app/views/gemgento/user/shared/_user_header.haml +8 -0
  297. data/app/views/gemgento/user/wishlist_items/index.html.haml +20 -0
  298. data/app/views/kaminari/_first_page.html.haml +9 -0
  299. data/app/views/kaminari/_gap.html.haml +8 -0
  300. data/app/views/kaminari/_last_page.html.haml +9 -0
  301. data/app/views/kaminari/_next_page.html.haml +9 -0
  302. data/app/views/kaminari/_page.html.haml +10 -0
  303. data/app/views/kaminari/_paginator.html.haml +18 -0
  304. data/app/views/kaminari/_prev_page.html.haml +9 -0
  305. data/app/views/layouts/_footer.html.haml +5 -0
  306. data/app/views/layouts/_header.html.haml +39 -0
  307. data/app/views/layouts/gemgento.html.haml +22 -0
  308. data/app/workers/gemgento/apply_price_rule.rb +24 -0
  309. data/app/workers/gemgento/cart/add_item_worker.rb +23 -0
  310. data/app/workers/gemgento/cart/update_item_worker.rb +18 -0
  311. data/bin/rails +12 -0
  312. data/config/gemgento_config.yml +12 -0
  313. data/config/initializers/active_admin.rb +14 -0
  314. data/config/initializers/active_touch.rb +3 -0
  315. data/config/initializers/assets.rb +1 -0
  316. data/config/initializers/boolean_typecasting.rb +37 -0
  317. data/config/initializers/devise.rb +49 -0
  318. data/config/initializers/gemgento_config.rb +67 -0
  319. data/config/initializers/mime_types.rb +4 -0
  320. data/config/initializers/state_machine.rb +7 -0
  321. data/config/locales/en.yml +24 -0
  322. data/config/routes.rb +138 -0
  323. data/db/migrate/20151201231300_add_validation_indexes_to_gemgento_products.rb +22 -0
  324. data/db/migrate/20160122174450_gemgento2.rb +969 -0
  325. data/db/migrate/20160217142910_create_gemgento_imports.rb +15 -0
  326. data/db/migrate/20160219235858_add_timestamps_to_gemgento_asset_files.rb +6 -0
  327. data/gemgento.gemspec +44 -0
  328. data/lib/devise/models/validatable.rb +76 -0
  329. data/lib/gemgento.rb +24 -0
  330. data/lib/gemgento/admin/admin_user.rb +29 -0
  331. data/lib/gemgento/admin/api_jobs.rb +30 -0
  332. data/lib/gemgento/admin/image_import.rb +87 -0
  333. data/lib/gemgento/admin/inventory_import.rb +81 -0
  334. data/lib/gemgento/admin/product_import.rb +138 -0
  335. data/lib/gemgento/admin/product_positions.rb +49 -0
  336. data/lib/gemgento/admin/stores.rb +33 -0
  337. data/lib/gemgento/admin/subscribers.rb +31 -0
  338. data/lib/gemgento/admin/syncs.rb +26 -0
  339. data/lib/gemgento/api/soap/authnetcim/payment.rb +127 -0
  340. data/lib/gemgento/api/soap/catalog/category.rb +237 -0
  341. data/lib/gemgento/api/soap/catalog/product.rb +481 -0
  342. data/lib/gemgento/api/soap/catalog/product_attribute.rb +147 -0
  343. data/lib/gemgento/api/soap/catalog/product_attribute_media.rb +202 -0
  344. data/lib/gemgento/api/soap/catalog/product_attribute_set.rb +80 -0
  345. data/lib/gemgento/api/soap/catalog/product_tag.rb +146 -0
  346. data/lib/gemgento/api/soap/catalog/product_tier_price.rb +21 -0
  347. data/lib/gemgento/api/soap/catalog/search.rb +27 -0
  348. data/lib/gemgento/api/soap/catalog_inventory/stock_item.rb +87 -0
  349. data/lib/gemgento/api/soap/catalog_rule/rule.rb +54 -0
  350. data/lib/gemgento/api/soap/checkout/cart.rb +85 -0
  351. data/lib/gemgento/api/soap/checkout/coupon.rb +37 -0
  352. data/lib/gemgento/api/soap/checkout/customer.rb +87 -0
  353. data/lib/gemgento/api/soap/checkout/payment.rb +59 -0
  354. data/lib/gemgento/api/soap/checkout/product.rb +138 -0
  355. data/lib/gemgento/api/soap/checkout/shipping.rb +37 -0
  356. data/lib/gemgento/api/soap/customer/address.rb +143 -0
  357. data/lib/gemgento/api/soap/customer/customer.rb +200 -0
  358. data/lib/gemgento/api/soap/directory/country.rb +49 -0
  359. data/lib/gemgento/api/soap/directory/region.rb +50 -0
  360. data/lib/gemgento/api/soap/enterprise_gift_message/gift_message.rb +26 -0
  361. data/lib/gemgento/api/soap/gift_card.rb +35 -0
  362. data/lib/gemgento/api/soap/globalcollect/saved_cc.rb +58 -0
  363. data/lib/gemgento/api/soap/miscellaneous/store.rb +47 -0
  364. data/lib/gemgento/api/soap/sales/order.rb +249 -0
  365. data/lib/gemgento/api/soap/sales/order_shipment.rb +122 -0
  366. data/lib/gemgento/api/soap/sales/recurring_profile.rb +88 -0
  367. data/lib/gemgento/api/soap/stock_notification.rb +27 -0
  368. data/lib/gemgento/engine.rb +61 -0
  369. data/lib/gemgento/version.rb +3 -0
  370. data/lib/generators/gemgento/assets_generator.rb +11 -0
  371. data/lib/generators/gemgento/install_generator.rb +34 -0
  372. data/lib/generators/gemgento/templates/active_admin.css.scss +1 -0
  373. data/lib/generators/gemgento/templates/active_admin.js.coffee +1 -0
  374. data/lib/generators/gemgento/templates/active_admin.rb +3 -0
  375. data/lib/generators/gemgento/views_generator.rb +10 -0
  376. data/spec/dummy/README.rdoc +28 -0
  377. data/spec/dummy/Rakefile +6 -0
  378. data/spec/dummy/app/assets/images/.keep +0 -0
  379. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  380. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  381. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  382. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  383. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  384. data/spec/dummy/app/mailers/.keep +0 -0
  385. data/spec/dummy/app/models/.keep +0 -0
  386. data/spec/dummy/app/models/concerns/.keep +0 -0
  387. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  388. data/spec/dummy/bin/bundle +3 -0
  389. data/spec/dummy/bin/rails +4 -0
  390. data/spec/dummy/bin/rake +4 -0
  391. data/spec/dummy/bin/setup +29 -0
  392. data/spec/dummy/config.ru +4 -0
  393. data/spec/dummy/config/application.rb +32 -0
  394. data/spec/dummy/config/boot.rb +5 -0
  395. data/spec/dummy/config/database.yml +20 -0
  396. data/spec/dummy/config/environment.rb +5 -0
  397. data/spec/dummy/config/environments/development.rb +41 -0
  398. data/spec/dummy/config/environments/production.rb +79 -0
  399. data/spec/dummy/config/environments/test.rb +42 -0
  400. data/spec/dummy/config/gemgento_config.yml +22 -0
  401. data/spec/dummy/config/initializers/assets.rb +11 -0
  402. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  403. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  404. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  405. data/spec/dummy/config/initializers/inflections.rb +16 -0
  406. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  407. data/spec/dummy/config/initializers/session_store.rb +3 -0
  408. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  409. data/spec/dummy/config/locales/en.yml +23 -0
  410. data/spec/dummy/config/routes.rb +4 -0
  411. data/spec/dummy/config/secrets.yml +22 -0
  412. data/spec/dummy/lib/assets/.keep +0 -0
  413. data/spec/dummy/public/404.html +67 -0
  414. data/spec/dummy/public/422.html +67 -0
  415. data/spec/dummy/public/500.html +66 -0
  416. data/spec/dummy/public/favicon.ico +0 -0
  417. data/spec/factories/gemgento/price_tiers.rb +8 -0
  418. data/spec/factories/gemgento/product_attribute_sets.rb +22 -0
  419. data/spec/factories/gemgento/product_attributes.rb +5 -0
  420. data/spec/factories/gemgento/products.rb +14 -0
  421. data/spec/factories/gemgento/stores.rb +12 -0
  422. data/spec/factories/gemgento/user_groups.rb +6 -0
  423. data/spec/factories/gemgento/users.rb +13 -0
  424. data/spec/factories/gemgento_imports.rb +12 -0
  425. data/spec/model/gemgento/price_tier_spec.rb +45 -0
  426. data/spec/rails_helper.rb +55 -0
  427. data/spec/services/gemgento/price_spec.rb +152 -0
  428. data/spec/spec_helper.rb +87 -0
  429. metadata +919 -0
@@ -0,0 +1,39 @@
1
+ module Gemgento::CategoriesHelper
2
+
3
+ # Get a list of values for a given attribute. Values are based on all filters except the filter for the given
4
+ # attribute.
5
+ #
6
+ # @param attribute [Symbol] Gemgento::Attribute code
7
+ # @return [Array(String)]
8
+ def filter_options(attribute)
9
+ filters = @filters.select{ |f| (f[:attribute].is_a?(Array) ? f[:attribute].first[:code] : f[:attribute].code) != attribute.to_s }
10
+
11
+ products = Gemgento::Product.active.catalog_visible
12
+ .joins(:product_categories)
13
+ .where('gemgento_product_categories.category_id = ?', @current_category.id)
14
+ products = products.filter(filters) if filters.any?
15
+
16
+ options = products.map(&attribute)
17
+ options.uniq.reject(&:blank?).sort
18
+ end
19
+
20
+ # Cache key values for categories#show fragment cache.
21
+ #
22
+ # @return [Array]
23
+ def cache_key
24
+ cache_key = [@current_category]
25
+ cache_key << user_signed_in? ? current_user.user_group : nil
26
+ cache_key << @products.maximum(:cache_expires_at) if @products
27
+ cache_key += query_params_cache_keys
28
+
29
+ return cache_key
30
+ end
31
+
32
+ # Cache key values from query string.
33
+ #
34
+ # @return [Array(String)]
35
+ def query_params_cache_keys
36
+ [params[:page]]
37
+ end
38
+
39
+ end
@@ -0,0 +1,5 @@
1
+ module Gemgento
2
+ module Checkout::PaymentHelper
3
+
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ module Gemgento
2
+ module ProductsHelper
3
+
4
+ def next_product
5
+ @next_product ||= begin
6
+ current_index = current_category_products.index(@product)
7
+ current_index < current_category_products.length ? current_category_products[current_index + 1] : nil
8
+ end
9
+ end
10
+
11
+ def previous_product
12
+ @previous_product ||= begin
13
+ current_index = current_category_products.index(@product)
14
+ current_index > 0 ? current_category_products[current_index - 1] : nil
15
+ end
16
+ end
17
+
18
+ def current_category_products
19
+ @current_category_product_ids ||= @current_category.products.active.catalog_visible.to_a
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module Gemgento
2
+ class ImportJob < ActiveJob::Base
3
+
4
+ # Run import process
5
+ #
6
+ # @param import [Gemgento::Import]
7
+ def perform(import)
8
+ import.process
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,80 @@
1
+ module Gemgento
2
+ class SalesMailer < ActionMailer::Base
3
+ default from: 'sales@gemgento.com'
4
+
5
+ def order_email(recipients, from, order_source)
6
+ @order = Gemgento::Magento::OrderAdapter.find(order_source[:increment_id]).import
7
+ @order_source = order_source
8
+
9
+ mail(
10
+ to: recipients[:to],
11
+ cc: recipients[:cc],
12
+ bcc: recipients[:bcc],
13
+ from: from,
14
+ subject: order_email_subject
15
+ )
16
+ end
17
+
18
+ def invoice_email(recipients, from, order_source, invoice_source)
19
+ @order = Gemgento::Magento::OrderAdapter.find(order_source[:increment_id]).import
20
+ @order_source = order_source
21
+ @invoice_source = invoice_source
22
+
23
+ mail(
24
+ to: recipients[:to],
25
+ cc: recipients[:cc],
26
+ bcc: recipients[:bcc],
27
+ from: from,
28
+ subject: invoice_email_subject
29
+ )
30
+ end
31
+
32
+ # @param recipients [Hash(Array(String))]
33
+ # @param from [Array(String), String]
34
+ # @param order [Gemgento::Order]
35
+ # @param shipment [Gemgento::Shipment]
36
+ def shipment_email(recipients, from, order, shipment)
37
+ @order = order
38
+ @shipment = shipment
39
+
40
+ mail(
41
+ to: recipients[:to],
42
+ cc: recipients[:cc],
43
+ bcc: recipients[:bcc],
44
+ from: from,
45
+ subject: shipment_email_subject
46
+ )
47
+ end
48
+
49
+ def credit_memo_email(recipients, from, order_source, credit_memo_source)
50
+ @order = Gemgento::Magento::OrderAdapter.find(order_source[:increment_id]).import
51
+ @order_source = order_source
52
+ @credit_memo_source = credit_memo_source
53
+
54
+ mail(
55
+ to: recipients[:to],
56
+ cc: recipients[:cc],
57
+ bcc: recipients[:bcc],
58
+ from: from,
59
+ subject: credit_memo_email_subject
60
+ )
61
+ end
62
+
63
+ def order_email_subject
64
+ "Confirmation for Order #{@order.increment_id}"
65
+ end
66
+
67
+ def invoice_email_subject
68
+ "Invoice for Order #{@order.increment_id}"
69
+ end
70
+
71
+ def shipment_email_subject
72
+ "Shipment for Order #{@order.increment_id}"
73
+ end
74
+
75
+ def credit_memo_email_subject
76
+ "Credit Memo for Order #{@order.increment_id}"
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,7 @@
1
+ class AdminUser < ActiveRecord::Base
2
+ # Include default devise modules. Others available are:
3
+ # :confirmable, :lockable, :timeoutable and :omniauthable
4
+ devise :database_authenticatable,
5
+ :recoverable, :rememberable, :trackable, :validatable
6
+
7
+ end
@@ -0,0 +1,26 @@
1
+ module Gemgento
2
+ module ProductTouches
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_many :bundle_items, through: :product, class_name: 'Gemgento::Bundle::Item'
7
+ has_many :configurable_products, through: :product, class_name: 'Gemgento::Product'
8
+
9
+ touch :bundle_items, after_touch: :after_touch
10
+ touch :categories, if: Proc.new { |record| record.product.present? }, after_touch: :after_touch
11
+ touch :configurable_products, after_touch: :after_touch
12
+ touch :product, after_touch: :after_touch
13
+
14
+ # explicit association needed to avoid mysql error with a 'double through' association
15
+ # "Mysql2::Error: You can't specify target table 'gemgento_categories' for update in FROM clause"
16
+ def categories
17
+ self.product.categories if self.product
18
+ end
19
+
20
+ def after_touch
21
+ # do nothing, placeholder
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ module Gemgento
2
+ def self.table_name_prefix
3
+ 'gemgento_'
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ module Gemgento::Adapter::Sellect
2
+ class Customer < ActiveRecord::Base
3
+ establish_connection("sellect_#{Rails.env}".to_sym) if Gemgento::Config[:sellect]
4
+
5
+ def self.import
6
+ self.table_name = 'sellect_users'
7
+
8
+ stores = Gemgento::Store.all
9
+
10
+ self.all.each do |sellect_user|
11
+ user = Gemgento::User.find_or_initialize_by(email: sellect_user.email)
12
+ user.email = sellect_user.email
13
+ user.first_name = sellect_user.first_name
14
+ user.last_name = sellect_user.last_name
15
+ user.dob = sellect_user.bday
16
+ user.encrypted_password = sellect_user.encrypted_password
17
+ user.magento_password = (0...8).map { (65 + rand(26)).chr }.join
18
+ user.sign_in_count = sellect_user.sign_in_count
19
+ user.current_sign_in_at = sellect_user.current_sign_in_at
20
+ user.last_sign_in_at = sellect_user.last_sign_in_at
21
+ user.current_sign_in_ip = sellect_user.current_sign_in_ip
22
+ user.last_sign_in_ip = sellect_user.last_sign_in_ip
23
+ user.user_group = Gemgento::UserGroup.find_by(code: 'General')
24
+ user.sync_needed = false
25
+ user.save(validate: false)
26
+
27
+ user.stores = stores
28
+
29
+ user.sync_needed = true
30
+ user.save(validate: false)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,378 @@
1
+ require 'csv'
2
+
3
+ module Gemgento::Adapter::Sellect
4
+ class Order < ActiveRecord::Base
5
+ establish_connection("sellect_#{Rails.env}".to_sym) if Gemgento::Config[:sellect]
6
+
7
+ def self.export_to_csv
8
+ CSV.open("orders.csv", "wb") do |csv|
9
+ csv << order_export_headers
10
+ completed_orders.each_with_index do |order, index|
11
+ puts "Working on row #{index}"
12
+ csv << order_row(order)
13
+ end
14
+ end
15
+ end
16
+
17
+ def self.order_export_headers
18
+ %w[
19
+ order_id website email password group_id store_id payment_method shipping_method
20
+ billing_prefix billing_firstname billing_middlename billing_lastname billing_suffix
21
+ billing_street_full billing_city billing_region billing_country billing_postcode
22
+ billing_telephone billing_company billing_fax shipping_prefix shipping_firstname
23
+ shipping_middlename shipping_lastname shipping_suffix shipping_street_full shipping_city
24
+ shipping_region shipping_country shipping_postcode shipping_telephone shipping_company
25
+ shipping_fax created_in is_subscribed customer_id created_at updated_at tax_amount
26
+ shipping_amount discount_amount subtotal grand_total total_paid total_refunded
27
+ total_qty_ordered total_canceled total_invoiced total_online_refunded total_offline_refunded
28
+ base_tax_amount base_shipping_amount base_discount_amount base_subtotal base_grand_total
29
+ base_total_paid base_total_refunded base_total_qty_ordered base_total_canceled base_total_invoiced
30
+ base_total_online_refunded base_total_offline_refunded subtotal_refunded subtotal_canceled
31
+ discount_refunded discount_invoiced tax_refunded tax_canceled shipping_refunded shipping_canceled
32
+ base_subtotal_refunded base_subtotal_canceled base_discount_refunded base_discount_canceled
33
+ base_discount_invoiced base_tax_refunded base_tax_canceled base_shipping_refunded
34
+ base_shipping_canceled subtotal_invoiced tax_invoiced shipping_invoiced base_subtotal_invoiced
35
+ base_tax_invoiced base_shipping_invoiced shipping_tax_amount base_shipping_tax_amount
36
+ shipping_tax_refunded base_shipping_tax_refunded products_ordered order_status
37
+ ]
38
+ end
39
+
40
+ def self.completed_orders
41
+ self.table_name = 'sellect_orders'
42
+
43
+ return self.where(state: %w[complete returned challenged challenged_canceled]).order('created_at ASC')
44
+ end
45
+
46
+ def self.order_row(order)
47
+ user = Gemgento::User.find_by(email: order.email)
48
+ store = store(order.zone_member_id)
49
+ shipping_addres = address(order.ship_address_id)
50
+ billing_address = address(order.bill_address_id)
51
+ payment = payment(order.id)
52
+ totals = totals(order, payment)
53
+ line_items = line_items(order.id).reload
54
+
55
+ [
56
+ order.number.gsub('R', ''), # order_id
57
+ store.code, # website
58
+ email(order.email), # email
59
+ '', # password
60
+ user_group(user), # group_id
61
+ store.magento_id, # store_id
62
+ 'globalcollect_cc_merchant', # payment_method
63
+ 'flatrate_flatrate', # shipping_method
64
+ '', # billing_prefix
65
+ billing_address.firstname, # billing_firstname
66
+ '', # billing_middlename
67
+ billing_address.lastname, # billing_lastname
68
+ '', # billing_suffix
69
+ street(billing_address), # billing_street_full
70
+ billing_address.city, # billing_city
71
+ state(billing_address), # billing_region
72
+ country(billing_address), # billing_country
73
+ billing_address.zipcode, # billing_postcode
74
+ billing_address.phone, # billing_telephone
75
+ '', # billing_company
76
+ '', # billing_fax
77
+ '', # shipping_prefix
78
+ shipping_addres.firstname, # shipping_firstname
79
+ '', # shipping_middlename
80
+ shipping_addres.lastname, # shipping_lastname
81
+ '', # shipping_suffix
82
+ street(shipping_addres), # shipping_street_full
83
+ shipping_addres.city, # shipping_city
84
+ state(shipping_addres), # shipping_region
85
+ country(shipping_addres), # shipping_country
86
+ shipping_addres.zipcode, # shipping_postcode
87
+ shipping_addres.phone, # shipping_telephone
88
+ '', # shipping_company
89
+ '', # shipping_fax
90
+ store.name, # created_in
91
+ 0, # is_subscribed
92
+ nil, # customer_id
93
+ order.created_at, # created_at
94
+ order.updated_at, # updated_at
95
+ totals[:tax], # tax_amount
96
+ totals[:shipping], # shipping_amount
97
+ 0, # discount_amount
98
+ totals[:subtotal], # subtotal
99
+ totals[:grand], # grand_total
100
+ totals[:paid], # total_paid
101
+ totals[:refunded], # total_refunded
102
+ 0, # total_qty_ordered
103
+ totals[:canceled], # total_canceled
104
+ totals[:grand], # total_invoiced
105
+ totals[:refunded], # total_online_refunded
106
+ 0, # total_offline_refunded
107
+ totals[:tax], # base_tax_amount
108
+ totals[:shipping], # base_shipping_amount
109
+ 0, # base_discount_amount
110
+ totals[:subtotal], # base_subtotal
111
+ totals[:grand], # base_grand_total
112
+ totals[:paid], # base_total_paid
113
+ totals[:refunded], # base_total_refunded
114
+ 0, # base_total_qty_ordered
115
+ totals[:canceled], # base_total_canceled
116
+ totals[:grand], # base_total_invoiced
117
+ totals[:refunded], # base_total_online_refunded
118
+ 0, # base_total_offline_refunded
119
+ totals[:refunded], # subtotal_refunded
120
+ totals[:canceled], # subtotal_canceled
121
+ 0, # discount_refunded
122
+ 0, # discount_invoiced
123
+ 0, # tax_refunded
124
+ 0, # tax_canceled
125
+ 0, # shipping_refunded
126
+ 0, # shipping_canceled
127
+ totals[:refunded], # base_subtotal_refunded
128
+ totals[:canceled], # base_subtotal_canceled
129
+ 0, # base_discount_refunded
130
+ 0, # base_discount_canceled
131
+ 0, # base_discount_invoiced
132
+ 0, # base_tax_refunded
133
+ 0, # base_tax_canceled
134
+ 0, # base_shipping_refunded
135
+ 0, # base_shipping_canceled
136
+ totals[:subtotal], # subtotal_invoiced
137
+ totals[:tax], # tax_invoiced
138
+ totals[:shipping], # shipping_invoiced
139
+ totals[:subtotal], # base_subtotal_invoiced
140
+ totals[:tax], # base_tax_invoiced
141
+ totals[:shipping], # base_shipping_invoiced
142
+ 0, # shipping_tax_amount
143
+ 0, # base_shipping_tax_amount
144
+ 0, # shipping_tax_refunded
145
+ 0, # base_shipping_tax_refunded
146
+ products_ordered(line_items, store), # products_ordered
147
+ order_status(order.state) # order_status
148
+ ]
149
+ end
150
+
151
+ def self.store(zone_member_id)
152
+ self.table_name = 'sellect_zone_members'
153
+ zone_member = self.find(zone_member_id)
154
+
155
+ case zone_member.currency
156
+ when 'eur'
157
+ store = Gemgento::Store.find_by(code: 'eu')
158
+ when 'gbp'
159
+ store = Gemgento::Store.find_by(code: 'uk')
160
+ when 'usd'
161
+ store = Gemgento::Store.find_by(code: 'us')
162
+ else
163
+ store = Gemgento::Store.current
164
+ end
165
+
166
+ return store
167
+ end
168
+
169
+ def self.address(address_id)
170
+ self.table_name = 'sellect_addresses'
171
+ address = self.find_by(id: address_id)
172
+
173
+ if address.nil?
174
+ return address_not_provided
175
+ else
176
+ return address
177
+ end
178
+ end
179
+
180
+ def self.address_not_provided
181
+ self.table_name = 'sellect_addresses'
182
+ address = self.new
183
+ address.firstname = 'NOT PROVIDED'
184
+ address.lastname = 'NOT PROVIDED'
185
+ address.address1 = 'NOT PROVIDED'
186
+ address.city = 'NOT PROVIDED'
187
+ address.zipcode = 'NOT PROVIDED'
188
+ address.phone = 'NOT PROVIDED'
189
+
190
+ return address
191
+ end
192
+
193
+ def self.payment(order_id)
194
+ self.table_name = 'sellect_payments'
195
+
196
+ return self.find_by(order_id: order_id)
197
+ end
198
+
199
+ def self.shipment(order_id)
200
+ self.table_name = 'sellect_shipments'
201
+
202
+ return self.find_by(order_id: order_id)
203
+ end
204
+
205
+ def self.totals(order, payment)
206
+ totals = {}
207
+ totals[:grand] = order.payment_total
208
+ totals[:shipping] = shipping_cost(order)
209
+ totals[:tax] = tax(order)
210
+ totals[:subtotal] = order.item_total
211
+ totals[:paid] = order.payment_total
212
+ totals[:refunded] = total_refunded(order)
213
+ totals[:canceled] = total_canceled(order)
214
+
215
+ return totals
216
+ end
217
+
218
+ def self.shipping_cost(order)
219
+ self.inheritance_column = :_type_disabled
220
+ self.table_name = 'sellect_adjustments'
221
+ cost = self.find_by(
222
+ adjustable_type: 'Sellect::Order',
223
+ adjustable_id: order.id,
224
+ originator_type: 'Sellect::ShippingMethod'
225
+ )
226
+
227
+ if cost.nil?
228
+ return 0
229
+ else
230
+ return cost.amount.to_f
231
+ end
232
+ end
233
+
234
+ def self.tax(order)
235
+ self.inheritance_column = :_type_disabled
236
+ self.table_name = 'sellect_adjustments'
237
+ taxes = self.where(
238
+ adjustable_type: 'Sellect::Order',
239
+ adjustable_id: order.id,
240
+ originator_type: 'Sellect::TaxRate'
241
+ )
242
+
243
+ tax = 0
244
+ taxes.each { |t| tax+= t.amount.to_f }
245
+
246
+ return tax
247
+ end
248
+
249
+ def self.total_refunded(order)
250
+ self.inheritance_column = :_type_disabled
251
+ self.table_name = 'sellect_adjustments'
252
+ refunds = self.where(
253
+ adjustable_type: 'Sellect::Order',
254
+ adjustable_id: order.id,
255
+ source_type: 'Sellect::Refund'
256
+ )
257
+
258
+ refund = 0
259
+ refunds.each { |r| refund+= r.amount.to_f.abs }
260
+
261
+ return refund
262
+ end
263
+
264
+ def self.total_canceled(order)
265
+ if order.state == 'challenged_canceled'
266
+ order.payment_total
267
+ else
268
+ 0
269
+ end
270
+ end
271
+
272
+ def self.line_items(order_id)
273
+ self.table_name = 'sellect_line_items'
274
+
275
+ return self.where(order_id: order_id)
276
+ end
277
+
278
+ def self.email(email)
279
+ if email.nil? || email == ''
280
+ return 'unknown@sellect.com'
281
+ else
282
+ return email
283
+ end
284
+ end
285
+
286
+ def self.user_group(user)
287
+ if user.nil? || user.id.nil?
288
+ return Gemgento::UserGroup.find_by(magento_id: 0).code
289
+ else
290
+ return user.user_group.code
291
+ end
292
+ end
293
+
294
+ def self.street(address)
295
+ street = address.address1.nil? ? 'NOT PROVIDED' : address.address1
296
+
297
+ if !address.address2.nil? && address.address2 != ''
298
+ street+= "\n" + address.address2
299
+ end
300
+
301
+ return street
302
+ end
303
+
304
+ def self.state(address)
305
+ self.table_name = 'sellect_states'
306
+
307
+ if address.state_id.nil?
308
+ return nil
309
+ else
310
+ return self.find(address.state_id).name
311
+ end
312
+ end
313
+
314
+ def self.country(address)
315
+ self.table_name = 'sellect_countries'
316
+
317
+ if address.country_id.nil?
318
+ return nil
319
+ else
320
+ return self.find(address.country_id).iso
321
+ end
322
+ end
323
+
324
+ def self.user_id(user)
325
+ if user.nil?
326
+ return nil
327
+ else
328
+ return user.magento_id
329
+ end
330
+ end
331
+
332
+ def self.quantity(line_items)
333
+ quantity = 0
334
+
335
+ line_items.each { |li| quantity+= li.quantity }
336
+
337
+ return quantity
338
+ end
339
+
340
+ def self.products_ordered(line_items, store)
341
+ ordered = []
342
+
343
+ line_items.each do |li|
344
+ p = product(li.variant_id, store)
345
+ next if p.nil?
346
+ ordered << "#{p.sku}:#{li.quantity}:#{p.price}"
347
+ end
348
+
349
+ return ordered.join('|')
350
+ end
351
+
352
+ def self.product(variant_id, store)
353
+ self.table_name = 'sellect_variants'
354
+ variant = self.find_by(id: variant_id)
355
+ return nil if variant.nil?
356
+
357
+ upc = Gemgento::ProductAttribute.find_by(code: 'upc')
358
+
359
+ return Gemgento::Product.where(magento_type: 'simple').filter({ attribute: upc, value: variant.upc }, store).first
360
+ end
361
+
362
+ def self.order_status(state)
363
+ case state
364
+ when 'complete'
365
+ 'complete'
366
+ when 'returned'
367
+ 'complete'
368
+ when 'challenged'
369
+ 'fraud'
370
+ when 'challenged_canceled'
371
+ 'canceled'
372
+ else
373
+ 'complete'
374
+ end
375
+ end
376
+
377
+ end
378
+ end