forgeos_commerce 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (433) hide show
  1. data/COPYING +339 -0
  2. data/COPYING.LESSER +165 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +2 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.textile +27 -0
  7. data/app/assets/images/forgeos/admin/favicon.gif +0 -0
  8. data/app/assets/images/forgeos/jstree/themes/association_product/bubble-quantity-products.png +0 -0
  9. data/app/assets/images/forgeos/jstree/themes/association_product/check-checked.png +0 -0
  10. data/app/assets/images/forgeos/jstree/themes/association_product/check-unchecked.png +0 -0
  11. data/app/assets/images/forgeos/jstree/themes/association_product/context.gif +0 -0
  12. data/app/assets/images/forgeos/jstree/themes/association_product/create.png +0 -0
  13. data/app/assets/images/forgeos/jstree/themes/association_product/dark-blue-minus.png +0 -0
  14. data/app/assets/images/forgeos/jstree/themes/association_product/dark-blue-plus.png +0 -0
  15. data/app/assets/images/forgeos/jstree/themes/association_product/dot.gif +0 -0
  16. data/app/assets/images/forgeos/jstree/themes/association_product/f.png +0 -0
  17. data/app/assets/images/forgeos/jstree/themes/association_product/fminus.gif +0 -0
  18. data/app/assets/images/forgeos/jstree/themes/association_product/fminus_rtl.gif +0 -0
  19. data/app/assets/images/forgeos/jstree/themes/association_product/folder.png +0 -0
  20. data/app/assets/images/forgeos/jstree/themes/association_product/fplus.gif +0 -0
  21. data/app/assets/images/forgeos/jstree/themes/association_product/fplus_rtl.gif +0 -0
  22. data/app/assets/images/forgeos/jstree/themes/association_product/lastli.gif +0 -0
  23. data/app/assets/images/forgeos/jstree/themes/association_product/lastli_rtl.gif +0 -0
  24. data/app/assets/images/forgeos/jstree/themes/association_product/li.gif +0 -0
  25. data/app/assets/images/forgeos/jstree/themes/association_product/remove.png +0 -0
  26. data/app/assets/images/forgeos/jstree/themes/association_product/rename.png +0 -0
  27. data/app/assets/images/forgeos/jstree/themes/association_product/throbber.gif +0 -0
  28. data/app/assets/images/forgeos/jstree/themes/product-types/bubble-quantity-products.png +0 -0
  29. data/app/assets/images/forgeos/jstree/themes/product-types/check-checked.png +0 -0
  30. data/app/assets/images/forgeos/jstree/themes/product-types/check-unchecked.png +0 -0
  31. data/app/assets/images/forgeos/jstree/themes/product-types/context.gif +0 -0
  32. data/app/assets/images/forgeos/jstree/themes/product-types/create.png +0 -0
  33. data/app/assets/images/forgeos/jstree/themes/product-types/dark-blue-minus.png +0 -0
  34. data/app/assets/images/forgeos/jstree/themes/product-types/dark-blue-plus.png +0 -0
  35. data/app/assets/images/forgeos/jstree/themes/product-types/dot.gif +0 -0
  36. data/app/assets/images/forgeos/jstree/themes/product-types/drag-drop.png +0 -0
  37. data/app/assets/images/forgeos/jstree/themes/product-types/f.png +0 -0
  38. data/app/assets/images/forgeos/jstree/themes/product-types/fminus.gif +0 -0
  39. data/app/assets/images/forgeos/jstree/themes/product-types/fminus_rtl.gif +0 -0
  40. data/app/assets/images/forgeos/jstree/themes/product-types/folder.png +0 -0
  41. data/app/assets/images/forgeos/jstree/themes/product-types/fplus.gif +0 -0
  42. data/app/assets/images/forgeos/jstree/themes/product-types/fplus_rtl.gif +0 -0
  43. data/app/assets/images/forgeos/jstree/themes/product-types/grey-drag-drop.png +0 -0
  44. data/app/assets/images/forgeos/jstree/themes/product-types/lastli.gif +0 -0
  45. data/app/assets/images/forgeos/jstree/themes/product-types/lastli_rtl.gif +0 -0
  46. data/app/assets/images/forgeos/jstree/themes/product-types/li.gif +0 -0
  47. data/app/assets/images/forgeos/jstree/themes/product-types/remove.png +0 -0
  48. data/app/assets/images/forgeos/jstree/themes/product-types/rename.png +0 -0
  49. data/app/assets/images/forgeos/jstree/themes/product-types/throbber.gif +0 -0
  50. data/app/assets/images/forgeos/jstree/themes/product_category/brown-minus.png +0 -0
  51. data/app/assets/images/forgeos/jstree/themes/product_category/brown-plus.png +0 -0
  52. data/app/assets/images/forgeos/jstree/themes/product_category/bubble-quantity-products.png +0 -0
  53. data/app/assets/images/forgeos/jstree/themes/product_category/context.gif +0 -0
  54. data/app/assets/images/forgeos/jstree/themes/product_category/create.png +0 -0
  55. data/app/assets/images/forgeos/jstree/themes/product_category/dot.gif +0 -0
  56. data/app/assets/images/forgeos/jstree/themes/product_category/f.png +0 -0
  57. data/app/assets/images/forgeos/jstree/themes/product_category/fminus.gif +0 -0
  58. data/app/assets/images/forgeos/jstree/themes/product_category/fminus_rtl.gif +0 -0
  59. data/app/assets/images/forgeos/jstree/themes/product_category/fplus.gif +0 -0
  60. data/app/assets/images/forgeos/jstree/themes/product_category/fplus_rtl.gif +0 -0
  61. data/app/assets/images/forgeos/jstree/themes/product_category/lastli.gif +0 -0
  62. data/app/assets/images/forgeos/jstree/themes/product_category/lastli_rtl.gif +0 -0
  63. data/app/assets/images/forgeos/jstree/themes/product_category/li.gif +0 -0
  64. data/app/assets/images/forgeos/jstree/themes/product_category/remove.png +0 -0
  65. data/app/assets/images/forgeos/jstree/themes/product_category/rename.png +0 -0
  66. data/app/assets/images/forgeos/jstree/themes/product_category/throbber.gif +0 -0
  67. data/app/assets/images/forgeos/jstree/themes/zone-tree/bubble-quantity-products.png +0 -0
  68. data/app/assets/images/forgeos/jstree/themes/zone-tree/check-checked.png +0 -0
  69. data/app/assets/images/forgeos/jstree/themes/zone-tree/check-unchecked.png +0 -0
  70. data/app/assets/images/forgeos/jstree/themes/zone-tree/context.gif +0 -0
  71. data/app/assets/images/forgeos/jstree/themes/zone-tree/create.png +0 -0
  72. data/app/assets/images/forgeos/jstree/themes/zone-tree/dark-blue-minus.png +0 -0
  73. data/app/assets/images/forgeos/jstree/themes/zone-tree/dark-blue-plus.png +0 -0
  74. data/app/assets/images/forgeos/jstree/themes/zone-tree/dot.gif +0 -0
  75. data/app/assets/images/forgeos/jstree/themes/zone-tree/f.png +0 -0
  76. data/app/assets/images/forgeos/jstree/themes/zone-tree/fminus.gif +0 -0
  77. data/app/assets/images/forgeos/jstree/themes/zone-tree/fminus_rtl.gif +0 -0
  78. data/app/assets/images/forgeos/jstree/themes/zone-tree/folder.png +0 -0
  79. data/app/assets/images/forgeos/jstree/themes/zone-tree/fplus.gif +0 -0
  80. data/app/assets/images/forgeos/jstree/themes/zone-tree/fplus_rtl.gif +0 -0
  81. data/app/assets/images/forgeos/jstree/themes/zone-tree/lastli.gif +0 -0
  82. data/app/assets/images/forgeos/jstree/themes/zone-tree/lastli_rtl.gif +0 -0
  83. data/app/assets/images/forgeos/jstree/themes/zone-tree/li.gif +0 -0
  84. data/app/assets/images/forgeos/jstree/themes/zone-tree/remove.png +0 -0
  85. data/app/assets/images/forgeos/jstree/themes/zone-tree/rename.png +0 -0
  86. data/app/assets/images/forgeos/jstree/themes/zone-tree/throbber.gif +0 -0
  87. data/app/assets/javascripts/forgeos/admin/functions.js +3 -0
  88. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/all.js +1 -0
  89. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/attributes.js +18 -0
  90. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/cross-sellings.js +18 -0
  91. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/orders.js +88 -0
  92. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/products.js +46 -0
  93. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/rules.js +98 -0
  94. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/transporters.js +60 -0
  95. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/trees.js +35 -0
  96. data/app/assets/javascripts/forgeos/admin/functions/forgeos_commerce/uploads.js +10 -0
  97. data/app/assets/javascripts/forgeos/admin/inits.js +3 -0
  98. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/all.js +1 -0
  99. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/clicks.js +25 -0
  100. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/cross-sellings.js +69 -0
  101. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/customer.js +64 -0
  102. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/orders.js +83 -0
  103. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/overlays.js +45 -0
  104. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/products.js +103 -0
  105. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/settings.js +15 -0
  106. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/special-offers.js +23 -0
  107. data/app/assets/javascripts/forgeos/admin/inits/forgeos_commerce/trees.js +71 -0
  108. data/app/assets/stylesheets/forgeos/admin/base.css.sass +3 -0
  109. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_all.css.sass +9 -0
  110. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_attributes.css.sass +59 -0
  111. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_customer.css.sass +84 -0
  112. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_delivery.css.sass +81 -0
  113. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_dropdowns.css.sass +171 -0
  114. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_order.css.sass +208 -0
  115. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_payment.css.sass +34 -0
  116. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_products.css.sass +341 -0
  117. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_special_offers.css.sass +198 -0
  118. data/app/assets/stylesheets/forgeos/admin/forgeos_commerce/_transporters.css.sass +5 -0
  119. data/app/assets/stylesheets/forgeos/jstree/themes/association_product/style.css.sass +50 -0
  120. data/app/assets/stylesheets/forgeos/jstree/themes/product-types/style.css.sass +129 -0
  121. data/app/assets/stylesheets/forgeos/jstree/themes/product_category/style.css.sass +109 -0
  122. data/app/assets/stylesheets/forgeos/jstree/themes/zone-tree/style.css.sass +103 -0
  123. data/app/controllers/addresses_controller.rb +51 -0
  124. data/app/controllers/admin/attributes_controller.rb +161 -0
  125. data/app/controllers/admin/base_controller.rb +5 -0
  126. data/app/controllers/admin/brands_controller.rb +119 -0
  127. data/app/controllers/admin/forms_controller.rb +66 -0
  128. data/app/controllers/admin/geo_zones_controller.rb +74 -0
  129. data/app/controllers/admin/import_controller.rb +50 -0
  130. data/app/controllers/admin/orders_controller.rb +248 -0
  131. data/app/controllers/admin/product_types_controller.rb +122 -0
  132. data/app/controllers/admin/products_controller.rb +204 -0
  133. data/app/controllers/admin/special_offers_controller.rb +236 -0
  134. data/app/controllers/admin/statistics_controller.rb +64 -0
  135. data/app/controllers/admin/transporter_rules_controller.rb +307 -0
  136. data/app/controllers/admin/users_controller.rb +100 -0
  137. data/app/controllers/admin/vouchers_controller.rb +207 -0
  138. data/app/controllers/application_controller.rb +75 -0
  139. data/app/controllers/order_controller.rb +229 -0
  140. data/app/helpers/admin/payment_fields_helper.rb +31 -0
  141. data/app/helpers/application_helper.rb +7 -0
  142. data/app/helpers/cart_helper.rb +40 -0
  143. data/app/helpers/category_helper.rb +36 -0
  144. data/app/helpers/product_helper.rb +118 -0
  145. data/app/helpers/routes_helper.rb +60 -0
  146. data/app/helpers/wishlist_helper.rb +142 -0
  147. data/app/models/address_delivery.rb +2 -0
  148. data/app/models/address_invoice.rb +2 -0
  149. data/app/models/attribute.rb +38 -0
  150. data/app/models/attribute_category.rb +3 -0
  151. data/app/models/attribute_value.rb +10 -0
  152. data/app/models/brand.rb +22 -0
  153. data/app/models/brand_category.rb +3 -0
  154. data/app/models/cart.rb +190 -0
  155. data/app/models/cart_item.rb +21 -0
  156. data/app/models/checkbox_attribute.rb +2 -0
  157. data/app/models/country.rb +4 -0
  158. data/app/models/cross_sellings_product.rb +4 -0
  159. data/app/models/currencies_exchanges_rate.rb +2 -0
  160. data/app/models/currency.rb +13 -0
  161. data/app/models/date_attribute.rb +2 -0
  162. data/app/models/dynamic_attribute.rb +6 -0
  163. data/app/models/dynamic_attribute_value.rb +5 -0
  164. data/app/models/form.rb +7 -0
  165. data/app/models/form_attribute.rb +3 -0
  166. data/app/models/geo_zone.rb +6 -0
  167. data/app/models/longtext_attribute.rb +2 -0
  168. data/app/models/number_attribute.rb +2 -0
  169. data/app/models/order.rb +483 -0
  170. data/app/models/order_detail.rb +129 -0
  171. data/app/models/order_shipping.rb +25 -0
  172. data/app/models/pack.rb +9 -0
  173. data/app/models/picklist_attribute.rb +2 -0
  174. data/app/models/product.rb +294 -0
  175. data/app/models/product_attribute.rb +4 -0
  176. data/app/models/product_category.rb +9 -0
  177. data/app/models/product_link.rb +9 -0
  178. data/app/models/product_price_variation.rb +3 -0
  179. data/app/models/product_sold_counter.rb +2 -0
  180. data/app/models/product_sweeper.rb +30 -0
  181. data/app/models/product_type.rb +27 -0
  182. data/app/models/product_type_category.rb +3 -0
  183. data/app/models/product_viewed_counter.rb +2 -0
  184. data/app/models/products_wishlist.rb +25 -0
  185. data/app/models/radio_attribute.rb +2 -0
  186. data/app/models/radiobutton_attribute.rb +2 -0
  187. data/app/models/setting.rb +46 -0
  188. data/app/models/size.rb +5 -0
  189. data/app/models/special_offer_category.rb +3 -0
  190. data/app/models/special_offer_rule.rb +21 -0
  191. data/app/models/text_attribute.rb +2 -0
  192. data/app/models/text_field_attribute.rb +2 -0
  193. data/app/models/transporter_category.rb +3 -0
  194. data/app/models/transporter_rule.rb +3 -0
  195. data/app/models/url_attribute.rb +2 -0
  196. data/app/models/user.rb +45 -0
  197. data/app/models/user_address.rb +6 -0
  198. data/app/models/voucher_category.rb +3 -0
  199. data/app/models/voucher_rule.rb +3 -0
  200. data/app/models/wishlist.rb +134 -0
  201. data/app/views/admin/addresses/_form.html.haml +42 -0
  202. data/app/views/admin/attributes/_categories.html.haml +7 -0
  203. data/app/views/admin/attributes/_choice.html.haml +24 -0
  204. data/app/views/admin/attributes/_date.html.haml +5 -0
  205. data/app/views/admin/attributes/_form.html.haml +36 -0
  206. data/app/views/admin/attributes/_longtext.html.haml +5 -0
  207. data/app/views/admin/attributes/_number.html.haml +5 -0
  208. data/app/views/admin/attributes/_tabs.html.haml +6 -0
  209. data/app/views/admin/attributes/_text.html.haml +5 -0
  210. data/app/views/admin/attributes/_url.html.haml +5 -0
  211. data/app/views/admin/attributes/destroy.js.erb +1 -0
  212. data/app/views/admin/attributes/edit.html.haml +2 -0
  213. data/app/views/admin/attributes/index.html.haml +33 -0
  214. data/app/views/admin/attributes/index.json.erb +24 -0
  215. data/app/views/admin/attributes/new.html.haml +2 -0
  216. data/app/views/admin/attributes/show.html.haml +51 -0
  217. data/app/views/admin/brands/_form.html.haml +29 -0
  218. data/app/views/admin/brands/_tabs.html.haml +6 -0
  219. data/app/views/admin/brands/destroy.js.erb +1 -0
  220. data/app/views/admin/brands/edit.html.haml +2 -0
  221. data/app/views/admin/brands/index.html.haml +15 -0
  222. data/app/views/admin/brands/index.json.erb +23 -0
  223. data/app/views/admin/brands/new.html.haml +2 -0
  224. data/app/views/admin/dashboard/index.html.haml +230 -0
  225. data/app/views/admin/forms/_form.html.haml +38 -0
  226. data/app/views/admin/forms/_tabs.html.haml +6 -0
  227. data/app/views/admin/forms/destroy.js.erb +1 -0
  228. data/app/views/admin/forms/edit.html.haml +2 -0
  229. data/app/views/admin/forms/index.html.haml +11 -0
  230. data/app/views/admin/forms/index.json.erb +20 -0
  231. data/app/views/admin/forms/new.html.haml +2 -0
  232. data/app/views/admin/geo_zones/_form.html.haml +20 -0
  233. data/app/views/admin/geo_zones/_list.html.haml +9 -0
  234. data/app/views/admin/geo_zones/edit.html.haml +3 -0
  235. data/app/views/admin/geo_zones/index.html.haml +49 -0
  236. data/app/views/admin/geo_zones/new.html.haml +3 -0
  237. data/app/views/admin/geo_zones/show.html.haml +4 -0
  238. data/app/views/admin/import/create_product.html.haml +2 -0
  239. data/app/views/admin/menus/_types_popups.html.haml +22 -0
  240. data/app/views/admin/orders/_address_form.html.haml +29 -0
  241. data/app/views/admin/orders/_form.html.haml +198 -0
  242. data/app/views/admin/orders/_list.html.haml +29 -0
  243. data/app/views/admin/orders/_products_popup.html.haml +15 -0
  244. data/app/views/admin/orders/create.html.haml +1 -0
  245. data/app/views/admin/orders/destroy.js.erb +1 -0
  246. data/app/views/admin/orders/edit.html.haml +1 -0
  247. data/app/views/admin/orders/index.html.haml +24 -0
  248. data/app/views/admin/orders/index.json.erb +48 -0
  249. data/app/views/admin/orders/show.html.haml +130 -0
  250. data/app/views/admin/product_types/_form.html.haml +46 -0
  251. data/app/views/admin/product_types/_list.html.haml +6 -0
  252. data/app/views/admin/product_types/_options_categories.html.haml +19 -0
  253. data/app/views/admin/product_types/_tabs.html.haml +6 -0
  254. data/app/views/admin/product_types/destroy.js.erb +1 -0
  255. data/app/views/admin/product_types/edit.html.haml +3 -0
  256. data/app/views/admin/product_types/index.html.haml +14 -0
  257. data/app/views/admin/product_types/index.json.erb +24 -0
  258. data/app/views/admin/product_types/new.html.haml +3 -0
  259. data/app/views/admin/product_types/show.html.haml +23 -0
  260. data/app/views/admin/products/_attributes.html.haml +37 -0
  261. data/app/views/admin/products/_cross_popup.html.haml +56 -0
  262. data/app/views/admin/products/_cross_sell_tr.html.haml +13 -0
  263. data/app/views/admin/products/_cross_sells.html.haml +1 -0
  264. data/app/views/admin/products/_form.html.haml +26 -0
  265. data/app/views/admin/products/_general.html.haml +153 -0
  266. data/app/views/admin/products/_list.html.haml +18 -0
  267. data/app/views/admin/products/_prices.html.haml +17 -0
  268. data/app/views/admin/products/_products_popup.html.haml +41 -0
  269. data/app/views/admin/products/_seo.html.haml +75 -0
  270. data/app/views/admin/products/_shippings.html.haml +0 -0
  271. data/app/views/admin/products/_sizes.html.haml +23 -0
  272. data/app/views/admin/products/_tabs.html.haml +2 -0
  273. data/app/views/admin/products/activate.js.erb +1 -0
  274. data/app/views/admin/products/destroy.js.erb +1 -0
  275. data/app/views/admin/products/edit.html.haml +1 -0
  276. data/app/views/admin/products/index.html.haml +20 -0
  277. data/app/views/admin/products/index.json.erb +65 -0
  278. data/app/views/admin/products/new.html.haml +1 -0
  279. data/app/views/admin/products/show.html.haml +158 -0
  280. data/app/views/admin/settings/_colissimo.html.haml +7 -0
  281. data/app/views/admin/settings/_godfather.html.haml +11 -0
  282. data/app/views/admin/settings/_google_shopping.html.haml +5 -0
  283. data/app/views/admin/settings/_payment.html.haml +63 -0
  284. data/app/views/admin/settings/_tabs.html.haml +5 -0
  285. data/app/views/admin/settings/edit.html.haml +33 -0
  286. data/app/views/admin/special_offers/_form.html.haml +88 -0
  287. data/app/views/admin/special_offers/_patterns.html.haml +151 -0
  288. data/app/views/admin/special_offers/_tabs.html.haml +5 -0
  289. data/app/views/admin/special_offers/_top_links.html.haml +6 -0
  290. data/app/views/admin/special_offers/activate.js.erb +1 -0
  291. data/app/views/admin/special_offers/destroy.js.erb +1 -0
  292. data/app/views/admin/special_offers/edit.html.haml +4 -0
  293. data/app/views/admin/special_offers/index.html.haml +15 -0
  294. data/app/views/admin/special_offers/index.json.erb +28 -0
  295. data/app/views/admin/special_offers/new.html.haml +2 -0
  296. data/app/views/admin/special_offers/show.html.haml +28 -0
  297. data/app/views/admin/special_offers/special_offer.html.haml +166 -0
  298. data/app/views/admin/statistics/index.html.haml +158 -0
  299. data/app/views/admin/transporter_rules/_delivery_rules.html.haml +83 -0
  300. data/app/views/admin/transporter_rules/_form.html.haml +90 -0
  301. data/app/views/admin/transporter_rules/_left_sidebar.html.haml +9 -0
  302. data/app/views/admin/transporter_rules/_sidebar.html.haml +10 -0
  303. data/app/views/admin/transporter_rules/_tabs.html.haml +8 -0
  304. data/app/views/admin/transporter_rules/activate.js.erb +1 -0
  305. data/app/views/admin/transporter_rules/destroy.js.erb +1 -0
  306. data/app/views/admin/transporter_rules/edit.html.haml +1 -0
  307. data/app/views/admin/transporter_rules/index.html.haml +13 -0
  308. data/app/views/admin/transporter_rules/index.json.erb +30 -0
  309. data/app/views/admin/transporter_rules/new.html.haml +1 -0
  310. data/app/views/admin/transporter_rules/show.html.haml +30 -0
  311. data/app/views/admin/users/_fields_for_addresses_deliveries.html.haml +38 -0
  312. data/app/views/admin/users/_fields_for_addresses_invoices.html.haml +34 -0
  313. data/app/views/admin/users/_form.html.haml +88 -0
  314. data/app/views/admin/users/edit.json.erb +35 -0
  315. data/app/views/admin/users/index.html.haml +12 -0
  316. data/app/views/admin/users/index.json.erb +32 -0
  317. data/app/views/admin/users/index2.html.haml +33 -0
  318. data/app/views/admin/users/show.html.haml +72 -0
  319. data/app/views/admin/vouchers/_form.html.haml +92 -0
  320. data/app/views/admin/vouchers/_tabs.html.haml +3 -0
  321. data/app/views/admin/vouchers/activate.js.erb +1 -0
  322. data/app/views/admin/vouchers/destroy.js.erb +1 -0
  323. data/app/views/admin/vouchers/index.html.haml +15 -0
  324. data/app/views/admin/vouchers/index.json.erb +28 -0
  325. data/app/views/admin/vouchers/new.html.haml +2 -0
  326. data/config/locales/activerecord/en.yml +6 -0
  327. data/config/locales/activerecord/fr.yml +18 -0
  328. data/config/locales/admin/address/en.yml +3 -0
  329. data/config/locales/admin/address/fr.yml +3 -0
  330. data/config/locales/admin/attribute/en.yml +76 -0
  331. data/config/locales/admin/attribute/fr.yml +75 -0
  332. data/config/locales/admin/brands/en.yml +24 -0
  333. data/config/locales/admin/brands/fr.yml +27 -0
  334. data/config/locales/admin/dashboard/en.yml +6 -0
  335. data/config/locales/admin/dashboard/fr.yml +6 -0
  336. data/config/locales/admin/order/en.yml +54 -0
  337. data/config/locales/admin/order/fr.yml +54 -0
  338. data/config/locales/admin/product/en.yml +105 -0
  339. data/config/locales/admin/product/fr.yml +106 -0
  340. data/config/locales/admin/settings/en.yml +90 -0
  341. data/config/locales/admin/settings/fr.yml +87 -0
  342. data/config/locales/admin/special_offer/en.yml +59 -0
  343. data/config/locales/admin/special_offer/fr.yml +60 -0
  344. data/config/locales/admin/transporter/en.yml +36 -0
  345. data/config/locales/admin/transporter/fr.yml +36 -0
  346. data/config/locales/admin/voucher/en.yml +3 -0
  347. data/config/locales/admin/voucher/fr.yml +3 -0
  348. data/config/locales/admin/wishlist/en.yml +89 -0
  349. data/config/locales/admin/wishlist/fr.yml +89 -0
  350. data/config/locales/common/en.yml +424 -0
  351. data/config/locales/common/fr.yml +422 -0
  352. data/config/routes.rb +109 -0
  353. data/config/search.example.yml +8 -0
  354. data/db/fixtures/currencies.yml +10 -0
  355. data/db/fixtures/currencies_exchanges_rates.yml +9 -0
  356. data/db/fixtures/page_translations.yml +11 -0
  357. data/db/fixtures/pages.yml +5 -0
  358. data/db/fixtures/people.yml +11 -0
  359. data/db/fixtures/product_type_translations.yml +11 -0
  360. data/db/fixtures/product_types.yml +2 -0
  361. data/db/migrate/20091009134433_create_attribute_values.rb +15 -0
  362. data/db/migrate/20091009134440_create_attribute_values_products.rb +14 -0
  363. data/db/migrate/20091009134448_create_attributes.rb +17 -0
  364. data/db/migrate/20091009134455_create_attributes_product_types.rb +14 -0
  365. data/db/migrate/20091009134525_create_carts.rb +15 -0
  366. data/db/migrate/20091009134532_create_cart_items.rb +14 -0
  367. data/db/migrate/20091009134609_create_cross_sellings_products.rb +11 -0
  368. data/db/migrate/20091009134616_create_currencies.rb +15 -0
  369. data/db/migrate/20091009134624_create_currencies_exchanges_rates.rb +13 -0
  370. data/db/migrate/20091009134631_create_dynamic_attribute_values.rb +17 -0
  371. data/db/migrate/20091009134659_create_order_details.rb +24 -0
  372. data/db/migrate/20091009134706_create_order_shippings.rb +16 -0
  373. data/db/migrate/20091009134714_create_orders.rb +21 -0
  374. data/db/migrate/20091009134721_create_packs_products.rb +13 -0
  375. data/db/migrate/20091009134805_create_product_types.rb +11 -0
  376. data/db/migrate/20091009134813_create_products.rb +37 -0
  377. data/db/migrate/20091009134821_create_products_wishlists.rb +13 -0
  378. data/db/migrate/20091009134947_create_wishlists.rb +12 -0
  379. data/db/migrate/20100323143123_create_geo_zones_transporter_rules.rb +12 -0
  380. data/db/migrate/20100414090950_create_brands.rb +15 -0
  381. data/db/migrate/20100414091706_create_sizes.rb +15 -0
  382. data/db/migrate/20100928123009_add_patronage_to_people.rb +20 -0
  383. data/db/migrate/20101007074306_create_product_price_variations.rb +13 -0
  384. data/db/migrate/20110311111210_create_forms.rb +13 -0
  385. data/db/migrate/20110311112646_attributes_forms.rb +13 -0
  386. data/db/migrate/20110322165950_add_payment_methods_to_settings.rb +13 -0
  387. data/db/migrate/20110405084454_add_colissimo_methods_to_settings.rb +13 -0
  388. data/db/migrate/20110516075553_add_google_infos_to_settings.rb +11 -0
  389. data/db/migrate/20110831164213_add_order_fields_to_addresses.rb +9 -0
  390. data/lib/CMCIC_Config.rb +16 -0
  391. data/lib/CMCIC_Tpe.rb +227 -0
  392. data/lib/forgeos/commerce.rb +9 -0
  393. data/lib/forgeos/commerce/admin_menu.rb +28 -0
  394. data/lib/forgeos/commerce/engine.rb +11 -0
  395. data/lib/forgeos/commerce/float.rb +10 -0
  396. data/lib/forgeos/commerce/statistics.rb +62 -0
  397. data/lib/forgeos/commerce/version.rb +5 -0
  398. data/lib/forgeos_commerce.rb +1 -0
  399. data/lib/special_offer.rb +61 -0
  400. data/lib/tasks/install.rake +9 -0
  401. data/lib/transporter.rb +26 -0
  402. data/lib/voucher.rb +41 -0
  403. data/recipes/deploy.rb +15 -0
  404. data/test/dummy/Rakefile +7 -0
  405. data/test/dummy/app/assets/javascripts/application.js +9 -0
  406. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  407. data/test/dummy/app/controllers/application_controller.rb +3 -0
  408. data/test/dummy/app/helpers/application_helper.rb +2 -0
  409. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  410. data/test/dummy/config.ru +4 -0
  411. data/test/dummy/config/application.rb +42 -0
  412. data/test/dummy/config/boot.rb +10 -0
  413. data/test/dummy/config/database.yml +25 -0
  414. data/test/dummy/config/environment.rb +5 -0
  415. data/test/dummy/config/environments/development.rb +27 -0
  416. data/test/dummy/config/environments/production.rb +51 -0
  417. data/test/dummy/config/environments/test.rb +39 -0
  418. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  419. data/test/dummy/config/initializers/inflections.rb +10 -0
  420. data/test/dummy/config/initializers/mime_types.rb +5 -0
  421. data/test/dummy/config/initializers/secret_token.rb +7 -0
  422. data/test/dummy/config/initializers/session_store.rb +8 -0
  423. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  424. data/test/dummy/config/locales/en.yml +5 -0
  425. data/test/dummy/config/routes.rb +58 -0
  426. data/test/dummy/public/404.html +26 -0
  427. data/test/dummy/public/422.html +26 -0
  428. data/test/dummy/public/500.html +26 -0
  429. data/test/dummy/public/favicon.ico +0 -0
  430. data/test/dummy/script/rails +6 -0
  431. data/test/forgeos_commerce_test.rb +7 -0
  432. data/test/test_helper.rb +10 -0
  433. metadata +539 -0
@@ -0,0 +1,151 @@
1
+ %div.end-conditions{ :style => 'display : none'}
2
+ %p.end-condition.pattern
3
+ %span= select_tag 'end[targets][]', options_for_select(@end)
4
+ %span= select_tag 'end[conds][]', options_for_select(@conditions)
5
+ = text_field_tag 'end[values][]'
6
+ = link_to_function '', "add_rule('end-condition')", :class => 'small-icons green-add-icon'
7
+ = link_to_function '', "remove_rule(this,'end-condition')", :class => 'small-icons red-delete-icon'
8
+ .clear
9
+
10
+ %div.action-conditions{ :style => 'display: none' }
11
+ - @actions = [[t(:discount,:scope=>[:special_offer,:action]),0],[t(:product,:scope=>[:special_offer,:action]),1],[t(:shipping,:scope=>[:special_offer,:action]),2]]
12
+ - @product_options = options_from_collection_for_select(@products, :id, :name)
13
+
14
+ %p.action-1-cart.pattern
15
+ %span= select_tag 'act[targets][]', options_for_select([[t(:product,:scope=>[:special_offer,:action]),1],[t(:shipping,:scope=>[:special_offer,:action]),2],[t(:cart,:scope=>[:special_offer,:action]),3]],1), {:onchange => "change_action(this,'action-condition','cart')"}
16
+ %span= select_tag 'act[values][]', @product_options
17
+ = link_to_function '', "add_action('action-1-cart')", :class => 'small-icons green-add-icon'
18
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
19
+ %br
20
+ .clear
21
+
22
+ %p.action-2-cart.pattern
23
+ %span= select_tag 'act[targets][]', options_for_select([[t(:product,:scope=>[:special_offer,:action]),1],[t(:shipping,:scope=>[:special_offer,:action]),2],[t(:cart,:scope=>[:special_offer,:action]),3]],2), {:onchange => "change_action(this,'action-condition','cart')"}
24
+ %span= hidden_field_tag 'act[values][]'
25
+ = link_to_function '', "add_action('action-2-cart')", :class => 'small-icons green-add-icon'
26
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
27
+ %br
28
+ .clear
29
+
30
+ %p.action-3-cart.pattern
31
+ %span= select_tag 'act[targets][]', options_for_select([[t(:product,:scope=>[:special_offer,:action]),1],[t(:shipping,:scope=>[:special_offer,:action]),2],[t(:cart,:scope=>[:special_offer,:action]),3]],3), {:onchange => "change_action(this,'action-condition','cart')"}
32
+ %span= select_tag 'act[conds][]', options_for_select(@discount_type)
33
+ = text_field_tag 'act[values][]'
34
+ = link_to_function '', "add_action('action-1-cart')", :class => 'small-icons green-add-icon'
35
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
36
+ %br
37
+ .clear
38
+
39
+
40
+ %p.action-1-productincart.pattern
41
+ %span= select_tag 'act[targets][]', options_for_select(@actions, 1), {:onchange => "change_action(this,'action-condition','productincart')"}
42
+ %span= select_tag 'act[values][]', @product_options
43
+ = link_to_function '', "add_action('action-1-productincart')", :class => 'small-icons green-add-icon'
44
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
45
+ %br
46
+ .clear
47
+
48
+ %p.action-2-productincart.pattern
49
+ %span= select_tag 'act[targets][]', options_for_select(@actions, 2), {:onchange => "change_action(this,'action-condition','productincart')"}
50
+ = link_to_function '', "add_action('action-2-productincart')", :class => 'small-icons green-add-icon'
51
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
52
+ %br
53
+ .clear
54
+
55
+ %p.action-0-productincart.pattern
56
+ %span= select_tag 'act[targets][]', options_for_select(@actions, 0), {:onchange => "change_action(this,'action-condition','productincart')"}
57
+ %span= select_tag 'act[conds][]', options_for_select(@discount_type)
58
+ = text_field_tag 'act[values][]'
59
+ = link_to_function '', "add_action('action-2-productincart')", :class => 'small-icons green-add-icon'
60
+ = link_to_function '', "remove_rule(this,'action-condition')", :class => 'small-icons red-delete-icon'
61
+ .clear
62
+
63
+ %p.action-0-productinshop.pattern
64
+ %span= select_tag 'act[targets][]', options_for_select([[t(:discount,:scope=>[:special_offer,:action]),0]], 0)
65
+ %span= select_tag 'act[conds][]', options_for_select(@discount_type)
66
+ = text_field_tag 'act[values][]'
67
+ .clear
68
+
69
+ %p.action-0-category.pattern
70
+ %span= select_tag 'act[targets][]', options_for_select([[t(:discount,:scope=>[:special_offer,:action]),0]], 0)
71
+ %span= select_tag 'act[conds][]', options_for_select(@discount_type)
72
+ = text_field_tag 'act[values][]'
73
+ .clear
74
+
75
+
76
+ %div.rule-conditions{ :style => 'display: none'}
77
+
78
+ %p.rule-condition.pattern
79
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes}),{ :onchange => "change_rule(this,'rule-condition')" }
80
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
81
+ = text_field_tag 'rule[values][]'
82
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
83
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
84
+ .clear
85
+
86
+ %p.rule-Title.pattern
87
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes, :selected => 'Title'}),{ :onchange => "change_rule(this,'rule-condition')" }
88
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
89
+ %span= select_tag 'rule[values][]', options_from_collection_for_select(@products, :name, :name)
90
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
91
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
92
+ %br
93
+ .clear
94
+
95
+ %p.rule-product_type_id.pattern
96
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes, :selected => 'product_type_id'}),{ :onchange => "change_rule(this,'rule-condition')" }
97
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
98
+ %span= select_tag 'rule[values][]', options_from_collection_for_select(ProductType.all(:select => 'product_types.id,name', :group => 'product_type_id',:joins => :translations, :order => 'name' ),:id,:name)
99
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
100
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
101
+ %br
102
+ .clear
103
+
104
+ %p.rule-brand_id.pattern
105
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes, :selected => 'brand_id'}),{ :onchange => "change_rule(this,'rule-condition')" }
106
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
107
+ %span= select_tag 'rule[values][]', options_from_collection_for_select(Brand.all(:select => 'brands.id,name', :order => 'name' ),:id,:name)
108
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
109
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
110
+ %br
111
+ .clear
112
+
113
+ - @default_attributes.each do |name,attribute|
114
+ - next if %(brand_id product_type_id).include?(attribute)
115
+ %p{:class => "rule-#{attribute} pattern"}
116
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes, :selected => attribute}),{ :onchange => "change_rule(this,'rule-condition')" }
117
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
118
+ = text_field_tag 'rule[values][]'
119
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
120
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
121
+ .clear
122
+
123
+
124
+ -@attributes.each do |name, access_method|
125
+ %p{:class => "rule-#{access_method.delete(' ')} pattern"}
126
+ %span= select_tag 'rule[targets][]', options_for_select(@product_attributes,{:disabled => @disable_attributes, :selected => access_method}),{ :onchange => "change_rule(this,'rule-condition')" }
127
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
128
+ - current_attribute = Attribute.find_by_access_method(access_method)
129
+ -if current_attribute && current_attribute.dynamic
130
+ = text_field_tag 'rule[values][]'
131
+ -else
132
+ %span= select_tag 'rule[values][]', options_for_select(current_attribute.attribute_values(:joins=>[:translations],:select => 'name').collect(&:name))
133
+ = link_to_function '', "add_rule('rule-condition')", :class => 'small-icons green-add-icon'
134
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
135
+ -if !current_attribute.dynamic
136
+ %br
137
+ .clear
138
+
139
+ -@cart_attributes.each do |name,attribute|
140
+ %p{:class => "rule-#{attribute.delete " "} pattern"}
141
+ %span= select_tag 'rule[targets][]', options_for_select(@cart_attributes, attribute),{ :onchange => "change_rule(this,'rule-condition')" }
142
+ %span= select_tag 'rule[conds][]', options_for_select(@conditions)
143
+ - if attribute == 'Shipping method'
144
+ %span= select_tag 'rule[values][]', options_from_collection_for_select(TransporterRule.all( :select => 'id, name', :order => 'name', :conditions => { :parent_id => nil } ), :id, :name)
145
+ - else
146
+ = text_field_tag 'rule[values][]'
147
+ = link_to_function '', "add_cart_rule()", :class => 'small-icons green-add-icon'
148
+ = link_to_function '', "remove_rule(this,'rule-condition')", :class => 'small-icons red-delete-icon'
149
+ - if attribute == 'Shipping method'
150
+ %br
151
+ .clear
@@ -0,0 +1,5 @@
1
+ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
2
+ %li.ui-state-default.ui-corner-top.ui-tabs-selected.ui-state-active= link_to I18n.t('special_offer', :count => 2).capitalize, '#content'
3
+ %li.ui-state-default.ui-corner-top= link_to I18n.t('voucher', :count => 2).capitalize, [forgeos_commerce, :admin, :vouchers]
4
+
5
+
@@ -0,0 +1,6 @@
1
+ - content_for :tools, link_to(I18n.t('list').capitalize, url_for(:action => :index), :class => 'house' )
2
+ - if price_cut && !(price_cut.new_record?)
3
+ - content_for :tools do
4
+ = link_to(I18n.t('show').capitalize, [forgeos_commerce, :admin, price_cut])
5
+ = link_to(I18n.t('edit').capitalize, [forgeos_commerce, :edit, :admin, price_cut])
6
+ = link_to(I18n.t('destroy').capitalize, [forgeos_commerce, :admin, price_cut], :confirm => I18n.t('price_cut.destroy.confirm').capitalize, :method => :delete)
@@ -0,0 +1 @@
1
+ toggleActivate('#<%= polymorphic_html_id @special_offer, 'show' -%>');
@@ -0,0 +1 @@
1
+ removedataTablesRow('#<%= polymorphic_html_id @special_offer, 'destroy' -%>');
@@ -0,0 +1,4 @@
1
+ %h1
2
+ = I18n.t('price_cut.update.action').capitalize
3
+ - if @price_cut
4
+ = render :partial => 'form', :locals => { :price_cut => @price_cut }
@@ -0,0 +1,15 @@
1
+ = render :partial => 'tabs'
2
+ = render :partial => 'admin/sidebars/left_sidebar', :locals => { :icon_class => 'offers', :sidebar_title => 'special_offer.all', :tree_id => 'special-offer-tree' }
3
+
4
+ #content.grid_12.alpha.omega
5
+ .backgrounds.header
6
+ = link_to content_tag(:span,I18n.t('special_offer.create.action').capitalize, :class=>'big-icons create-product'), [forgeos_commerce, :new, :admin, :special_offer], :class=>'backgrounds action-button'
7
+ #search.right
8
+ = link_to content_tag(:span, I18n.t('search').capitalize, :class => 'small-icons search-span'), '#', :class => 'small-icons left search-link'
9
+ .backgrounds.search-form
10
+ .content-background
11
+ %table#table.datatable.draggable_rows
12
+
13
+
14
+ = dataTables_tag :url => forgeos_commerce.admin_special_offers_path(:format => :json), :columns => ["{'sClass': 'image_product_td', 'bSearchable':false}","{'sTitle':'#{I18n.t :name}'}","{'sTitle':'Status'}","{'sTitle':'Used'}","{'sClass':'actions-td','bSearchable':false}"]
15
+
@@ -0,0 +1,28 @@
1
+ <%
2
+ output = {
3
+ :sEcho => params[:sEcho],
4
+ :iTotalRecords => @special_offers.total_entries || 0,
5
+ :iTotalDisplayRecords => @special_offers.size,
6
+ :aaData => @special_offers.collect do |special_offer|
7
+ klass = special_offer.active? ? 'see-on' : 'see-off'
8
+ [
9
+ content_tag(:div, content_tag(:div, '', :class => 'handler') + content_tag(:div, '', :class => 'small-icons offers'), :id => polymorphic_html_id(special_offer), :class => 'handler_container'),
10
+ link_to(special_offer.name, [forgeos_commerce, :admin, special_offer]),
11
+ link_to('', [forgeos_commerce, :activate, :admin, special_offer],
12
+ :remote => true,
13
+ :class => "small-icons #{klass}",
14
+ :id => polymorphic_html_id(special_offer, 'show')
15
+ ),
16
+ special_offer.use,
17
+ link_to('', [forgeos_commerce, :admin, special_offer],
18
+ :remote => true,
19
+ :method => :delete,
20
+ :confirm => I18n.t('special_offer.destroy.confirm').capitalize,
21
+ :class => 'small-icons destroy-link',
22
+ :id => polymorphic_html_id(special_offer, 'destroy')
23
+ )
24
+ ]
25
+ end
26
+ }
27
+ -%>
28
+ <%= raw output.to_json -%>
@@ -0,0 +1,2 @@
1
+ = render :partial => 'tabs'
2
+ = render :partial => 'form'
@@ -0,0 +1,28 @@
1
+ .backgrounds.big-header
2
+ %h1= @special_offer.name
3
+ .interact-links
4
+ = link_to I18n.t('back_to_special_offer').capitalize, [forgeos_commerce, :admin, :special_offers], :class => 'backgrounds interact-button'
5
+ /= I18n.t('or')
6
+ /= link_to I18n.t('back_to_special_offer').capitalize,admin_special_offers_path, :class => 'back-link'
7
+
8
+ #content.grid_16.alpha.omega
9
+ .special_offers.grid_12.alpha.omega
10
+ .grid_8.omega
11
+ .description= @special_offer.description
12
+ .description= "#{I18n.t('offer_used', :count => @special_offer.use).capitalize}"
13
+ .inner-content
14
+
15
+ .specialOffers_products
16
+ .specialOffers_products_header
17
+ = "#{I18n.t('apply', :count => @selected_products.size).capitalize}"
18
+ #specialOffers_products_table
19
+ .thead
20
+ .tr
21
+ .th
22
+ .tbody
23
+ -@selected_products.each do |product|
24
+ -product = Product.find_by_id(product, :joins => :translations, :select => 'name, products.id')
25
+ .tr
26
+ .td
27
+ =image_tag(product.pictures.first.public_filename(:thumb)) unless product.pictures.empty?
28
+ =link_to product.name, [forgeos_commerce, :admin, product]
@@ -0,0 +1,166 @@
1
+ - @default_attributes = ['Price','Title','Description', 'Weight', 'SKU', 'Stock']
2
+ - @attributes = Attribute.all.collect(&:name)
3
+ - @cart_attributes = ['Total items quantity', 'Total weight', 'Total amount', 'Shipping method']
4
+ - @disable_attributes = ['MAIN SETTINGS','ATTRIBUTES']
5
+
6
+ - @for = Hash["Product in Shop", "Product", "Product in Cart", "Product", "Cart", "Cart"]
7
+
8
+ - @condition_is = Hash["Is", "=="]
9
+ - @conditions = Hash["Is not", "not==","Equals or greater than",">=","Equals or less than","<=", "Greater than", ">", "Less than","<"]
10
+
11
+
12
+ %h1 Create a special offer
13
+ - form_tag [forgeos_commerce, :admin, :special_offers] do
14
+ %p
15
+ = label 'rule_builder', 'name'
16
+ = text_field 'rule_builder', 'name'
17
+ %p
18
+ = label 'rule_builder', 'description'
19
+ = text_area 'rule_builder', 'description', :rows => 2
20
+ %div{:style => 'margin : 1em; padding: 3em; border : 1px solid #000000', :class => 'ui-corner-all'}
21
+ %h3 For
22
+ = select_tag 'rule_builder[for]', options_for_select(Hash['Category', "Category"].collect{|c| [c[0], c[1]]}+@for.collect{|c| [c[0], c[1]] }), {:onchange => "change_select_for(this)"}
23
+ = select 'rule_builder', 'target', Category.all.collect(&:name)
24
+ %div{:style => 'margin : 1em; padding: 3em; border : 1px solid #000000', :class => 'ui-corner-all'}
25
+ %h3 If
26
+ = select 'rule_builder', 'if', %w(All Any)
27
+ of these conditions are true
28
+ #rule-conditions
29
+ %p.rule-condition
30
+ = select_tag 'rule[targets][]', options_for_select(['MAIN SETTINGS']+@default_attributes+['ATTRIBUTES']+@attributes,{:disabled => @disable_attributes}),{ :onchange => "change_rule(this,'rule-condition')" }
31
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
32
+ = text_field_tag 'rule[values][]'
33
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins disabled'
34
+ = link_to_function ' ', "add_rule('rule-condition')", :class => 'icon1 plus'
35
+
36
+ %div{:style => 'margin : 1em; padding: 3em; border : 1px solid #000000', :class => 'ui-corner-all'}
37
+ %h3 Then
38
+ #action-conditions
39
+ %p.action-condition
40
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product'], 'Discount price this product')
41
+ = select_tag 'act[conds][]', options_for_select(['By percent','By fixed amount'])
42
+ = text_field_tag 'act[values][]'
43
+
44
+ %div{:style => 'margin : 1em; padding: 3em; border : 1px solid #000000', :class => 'ui-corner-all'}
45
+ = check_box_tag 'end_offer'
46
+ End offer if
47
+ = select_tag 'end_offer_if', options_for_select(%w(Any All))
48
+ of these conditions are true
49
+ #end-conditions
50
+ %p.end-condition
51
+ = select_tag 'end[targets][]', options_for_select(['Date','Total number of offer use','Customer number of offer use'])
52
+ = select_tag 'end[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
53
+ = text_field_tag 'end[values][]'
54
+ = link_to_function ' ', "remove_rule(this,'end-condition')", :class => 'icon1 moins disabled'
55
+ = link_to_function ' ', "add_rule('end-condition')", :class => 'icon1 plus'
56
+
57
+ %p
58
+ = check_box 'rule_builder', 'stop'
59
+ Stop futher rules processing
60
+ %p
61
+ = submit_tag I18n.t(:save).capitalize
62
+ = I18n.t(:or)
63
+ = link_to I18n.t(:cancel).capitalize, :back
64
+
65
+
66
+ %div.end-conditions{ :style => 'display : none'}
67
+ %p.end-condition.pattern
68
+ = select_tag 'end[targets][]', options_for_select(['Date','Total number of offer use','Customer number of offer use'])
69
+ = select_tag 'end[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
70
+ = text_field_tag 'end[values][]'
71
+ = link_to_function ' ', "remove_rule(this,'end-condition')", :class => 'icon1 moins'
72
+ = link_to_function ' ', "add_rule('end-condition')", :class => 'icon1 plus'
73
+
74
+ %div.action-conditions{ :style => 'display: none' }
75
+ - @actions = ['Discount price this product','Offer a product','Offer free delivery']
76
+
77
+ %p.action-Offeraproduct-cart.pattern
78
+ = select_tag 'act[targets][]', options_for_select(['Offer a product', 'Offer free delivery'], 'Offer a product'), {:onchange => "change_action(this,'action-condition','cart')"}
79
+ = select_tag 'act[values][]', options_from_collection_for_select(Product.all, :id, :name)
80
+ = link_to_function ' ', "remove_rule(this,'action-condition')", :class => 'icon1 moins'
81
+ = link_to_function ' ', "add_action('action-Offeraproduct-cart')", :class => 'icon1 plus'
82
+
83
+ %p.action-Offerfreedelivery-cart.pattern
84
+ = select_tag 'act[targets][]', options_for_select(['Offer a product', 'Offer free delivery'],'Offer free delivery'), {:onchange => "change_action(this,'action-condition','cart')"}
85
+ = link_to_function ' ', "remove_rule(this,'action-condition')", :class => 'icon1 moins'
86
+ = link_to_function ' ', "add_action('action-Offeraproduct-cart')", :class => 'icon1 plus'
87
+
88
+
89
+ %p.action-Offeraproduct-productincart.pattern
90
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product','Offer a product', 'Offer free delivery'], 'Offer a product'), {:onchange => "change_action(this,'action-condition','productincart')"}
91
+ = select_tag 'act[values][]', options_from_collection_for_select(Product.all, :id, :name)
92
+ = link_to_function ' ', "remove_rule(this,'action-condition')", :class => 'icon1 moins'
93
+ = link_to_function ' ', "add_action('action-Offeraproduct-productincart')", :class => 'icon1 plus'
94
+
95
+ %p.action-Offerfreedelivery-productincart.pattern
96
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product','Offer a product', 'Offer free delivery'], 'Offer free delivery'), {:onchange => "change_action(this,'action-condition','productincart')"}
97
+ = link_to_function ' ', "remove_rule(this,'action-condition')", :class => 'icon1 moins'
98
+ = link_to_function ' ', "add_action('action-Offerfreedelivery-productincart')", :class => 'icon1 plus'
99
+
100
+ %p.action-Discountpricethisproduct-productincart.pattern
101
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product','Offer a product', 'Offer free delivery'], 'Discount price this product'), {:onchange => "change_action(this,'action-condition','productincart')"}
102
+ = select_tag 'act[conds][]', options_for_select(['By percent','By fixed amount'])
103
+ = text_field_tag 'act[values][]'
104
+ = link_to_function ' ', "remove_rule(this,'action-condition')", :class => 'icon1 moins'
105
+ = link_to_function ' ', "add_action('action-Offerfreedelivery-productincart')", :class => 'icon1 plus'
106
+
107
+ %p.action-Discountpricethisproduct-productinshop.pattern
108
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product'], 'Discount price this product')
109
+ = select_tag 'act[conds][]', options_for_select(['By percent','By fixed amount'])
110
+ = text_field_tag 'act[values][]'
111
+
112
+ %p.action-Discountpricethisproduct-category.pattern
113
+ = select_tag 'act[targets][]', options_for_select(['Discount price this product'], 'Discount price this product')
114
+ = select_tag 'act[conds][]', options_for_select(['By percent','By fixed amount'])
115
+ = text_field_tag 'act[values][]'
116
+
117
+
118
+ %div.rule-conditions{ :style => 'display: none'}
119
+
120
+ %p.rule-condition.pattern
121
+ = select_tag 'rule[targets][]', options_for_select(['MAIN SETTINGS']+@default_attributes+['ATTRIBUTES']+@attributes,{:disabled => @disable_attributes}),{ :onchange => "change_rule(this,'rule-condition')" }
122
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
123
+ = text_field_tag 'rule[values][]'
124
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins'
125
+ = link_to_function ' ', "add_rule('rule-condition')", :class => 'icon1 plus'
126
+
127
+ - ['Price','Description', 'Weight', 'SKU', 'Stock'].each do |attribute|
128
+ %p{:class => "rule-#{attribute} pattern"}
129
+ = select_tag 'rule[targets][]', options_for_select(['MAIN SETTINGS']+@default_attributes+['ATTRIBUTES']+@attributes,{:disabled => @disable_attributes, :selected => attribute}),{ :onchange => "change_rule(this,'rule-condition')" }
130
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
131
+ = text_field_tag 'rule[values][]'
132
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins'
133
+ = link_to_function ' ', "add_rule('rule-condition')", :class => 'icon1 plus'
134
+
135
+ %p.rule-Title.pattern
136
+ = select_tag 'rule[targets][]', options_for_select(['MAIN SETTINGS']+@default_attributes+['ATTRIBUTES']+@attributes,{:disabled => @disable_attributes, :selected => 'Title'}),{ :onchange => "change_rule(this,'rule-condition')" }
137
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
138
+ = select_tag 'rule[values][]', options_for_select(Product.all.collect {|p| [p.name, p.name]})
139
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins'
140
+ = link_to_function ' ', "add_rule('rule-condition')", :class => 'icon1 plus'
141
+
142
+ -@attributes.each do |attribute|
143
+ %p{:class => "rule-#{attribute.delete " "} pattern"}
144
+ = select_tag 'rule[targets][]', options_for_select(['MAIN SETTINGS']+@default_attributes+['ATTRIBUTES']+@attributes,{:disabled => @disable_attributes, :selected => attribute}),{ :onchange => "change_rule(this,'rule-condition')" }
145
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
146
+ -if Attribute.find_by_name(attribute).dynamic
147
+ = text_field_tag 'rule[values][]'
148
+ -else
149
+ = select_tag 'rule[values][]', options_for_select(Attribute.find_by_name(attribute).attribute_values.collect(&:name))
150
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins'
151
+ = link_to_function ' ', "add_rule('rule-condition')", :class => 'icon1 plus'
152
+
153
+ -@cart_attributes.each do |attribute|
154
+ %p{:class => "rule-#{attribute.delete " "} pattern"}
155
+ = select_tag 'rule[targets][]', options_for_select(@cart_attributes, attribute),{ :onchange => "change_rule(this,'rule-condition')" }
156
+ = select_tag 'rule[conds][]', options_for_select(@condition_is.collect{|c| [c[0], c[1]] }+ @conditions.collect{|c| [c[0], c[1]] })
157
+ - if attribute == 'Shipping method'
158
+ = select_tag 'rule[values][]', options_for_select(ShippingMethodDetail.all.collect(&:name))
159
+ - else
160
+ = text_field_tag 'rule[values][]'
161
+ = link_to_function ' ', "remove_rule(this,'rule-condition')", :class => 'icon1 moins'
162
+ = link_to_function ' ', "add_cart_rule()", :class => 'icon1 plus'
163
+
164
+
165
+ = javascript_include_tag 'special_offer'
166
+
@@ -0,0 +1,158 @@
1
+ = javascript_include_tag 'swfobject'
2
+
3
+ #dashboard.statistics.grtid_12.alpha.omega
4
+ .left-dashboard.grid_12.omega.alpha
5
+ .padding-wrap
6
+ %h2.small-icons.see-stats= t('statistic.trends').capitalize
7
+ .trend_filter
8
+ - form_tag [forgeos_core, :admin, :statistics], :id => 'form_stats' do |f|
9
+ %label
10
+ = "#{t('statistic.show.for').capitalize} :"
11
+ = select_tag :timestamp, options_for_select([[t('please_select'), nil], [t('statistic.last.month'), 'month'], [t('statistic.last.week'), 'week']], params[:timestamp]), :onchange => "$('#form_stats').submit()"
12
+ .chart
13
+ = @graph
14
+ .clear
15
+
16
+ %h2.small-icons.products= t('product', :count => 2).capitalize
17
+ .to-tab.ui-tabs.ui-widget.ui-widget-content.ui-corner-all
18
+ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
19
+ %li.ui-state-default.ui-corner-top.ui-tabs-selected.ui-state-active= link_to t('product.best_seller', :count => @products_most_sold.size), '#best-sellers'
20
+ %li.ui-state-default.ui-corner-top= link_to t('product.most_viewed', :count => @products_most_viewed.size), '#most-viewed'
21
+ #best-sellers.ui-tabs-panel.ui-widget-content.ui-corner-bottom
22
+ - @products_most_sold.each do |product_id, counter|
23
+ - if product = Product.find_by_id(product_id)
24
+ .stat-product-container
25
+ - if picture = product.pictures.first
26
+ = image_tag(picture.public_filename(:thumb))
27
+ - else
28
+ = image_tag('forgeos/admin/no-image.png')
29
+ %span.stat-product-sells
30
+ = t('product.sold', :count => counter)
31
+ = link_to product.name, [forgeos_commerce, :admin, product], :class => 'product-name truncate', :title => product.name
32
+ %span.stat-prodcut-title
33
+ = price_with_currency product.price
34
+ .clear
35
+ %a.see-all-orders{ :href => "#" }
36
+ = t('product.show.all').capitalize
37
+ #most-viewed.ui-tabs-panel.ui-widget-content.ui-corner-bottom.ui-tabs-hide
38
+ - @products_most_viewed.each do |product_id,counter|
39
+ - if product = Product.find_by_id(product_id)
40
+ .stat-product-container
41
+ - if picture = product.pictures.first
42
+ = image_tag(picture.public_filename(:thumb))
43
+ - else
44
+ = image_tag('forgeos/admin/no-image.png')
45
+ %span.stat-product-sells
46
+ = t('product.viewed', :count => counter)
47
+ = link_to product.name, [forgeos_commerce, :admin, product], :class => 'product-name truncate', :title => product.name
48
+ %span.stat-product-title
49
+ = price_with_currency product.price
50
+ .clear
51
+ %a.see-all-orders{ :href => "#" }
52
+ = t('product.show.all').capitalize
53
+ %h2.small-icons.page= t('page', :count => 2).capitalize
54
+ .to-tab.ui-tabs.ui-widget.ui-widget-content.ui-corner-all
55
+ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
56
+ %li.ui-state-default.ui-corner-top.ui-tabs-selected.ui-state-active= link_to t('page.most_viewed', :count => 2), '#most-viewed-pages'
57
+ /%li.ui-state-default.ui-corner-top= link_to t('page.most_commented', :count => 2), '#most-commented'
58
+ #most-viewed-pages.ui-tabs-panel.ui-widget-content.ui-corner-bottom
59
+ %table
60
+ %tbody
61
+ - @pages_most_viewed.each do |page_id, counter|
62
+ - if page = Page.find_by_id(page_id)
63
+ %tr{ :class => cycle('odd','even') }
64
+ %td.table-product= link_to page.title, [forgeos_cms, :admin, page]
65
+ %td= t('page.viewed', :count => counter)
66
+ .clear
67
+ %a.see-all-orders{ :href => "#" }
68
+ = t('page.show.all').capitalize
69
+ #most-commented.ui-tabs-panel.ui-widget-content.ui-corner-bottom.ui-tabs-hide
70
+ %table
71
+ %tbody
72
+ %tr
73
+ %td.table-product
74
+ Page "About us" created
75
+ %td
76
+ by Quentin Tousart
77
+ %tr.even
78
+ %td.table-product
79
+ Page "About us" created
80
+ %td
81
+ by Quentin Tousart
82
+ .clear
83
+ %a.see-all-orders{ :href => "#" }
84
+ = t('page.show.all').capitalize
85
+ %h2.small-icons.customer= t('customer', :count => 2).capitalize
86
+ .to-tab.ui-tabs.ui-widget.ui-widget-content.ui-corner-all
87
+ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
88
+ %li.ui-state-default.ui-corner-top.ui-tabs-selected.ui-state-active= link_to t('user.best_customer', :count => 2).capitalize, '#best-customers'
89
+ %li.ui-state-default.ui-corner-top= link_to t('user.new_customer', :count => 2).capitalize, '#new-customers'
90
+ #best-customers.ui-tabs-panel.ui-widget-content.ui-corner-bottom
91
+ %table
92
+ %tbody
93
+ - @best_buyers.each do |user_id, total|
94
+ - if user = User.find_by_id(user_id)
95
+ %tr{:class => cycle('odd','even')}
96
+ %td.customer-bought-amount= price_with_currency total
97
+ %td= user ? link_to(h(user.fullname), [forgeos_core, :admin, user]) : ''
98
+ .clear
99
+ = link_to t('user.show.all').capitalize, [forgeos_core, :admin, :users], :class => 'see-all-orders'
100
+
101
+ #new-customers.ui-tabs-panel.ui-widget-content.ui-corner-bottom.ui-tabs-hide
102
+ %table
103
+ %tbody
104
+ - @customers_new.each do |customer|
105
+ %tr{ :class => cycle('odd','even') }
106
+ %td
107
+ = link_to h(customer.fullname), [forgeos_core, :admin, customer]
108
+ %td
109
+ = t('user.joined_on').capitalize
110
+ = customer.created_at.to_s(:short)
111
+ %td.email
112
+ = mail_to h(customer.email), customer.email
113
+
114
+ .clear
115
+ = link_to t('user.show.all').capitalize, [forgeos_core, :admin, :users], :class => 'see-all-orders'
116
+
117
+ %h2.small-icons.search= t('search').capitalize
118
+ .to-tab.ui-tabs.ui-widget.ui-widget-content.ui-corner-all
119
+ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all
120
+ %li.ui-state-default.ui-corner-top.ui-tabs-selected.ui-state-active= link_to t('top_5_items').capitalize, '#top-search'
121
+ #top-search.ui-tabs-panel.ui-widget-content.ui-corner-bottom
122
+ %table
123
+ %tbody
124
+ - @keywords.each do |keyword_id, count|
125
+ - if search_keyword = SearchKeyword.find_by_id(keyword_id)
126
+ %tr{ :class => cycle('odd','even')}
127
+ %td= search_keyword.keyword
128
+ %td= t('seen', :count => count, :scope => :search_keyword)
129
+
130
+ .right-dahsboard.grid_4.alpha
131
+ %h2.small-icons.see-stats= t('statistic.keyfacts').capitalize
132
+ .live-stats-content
133
+ %span
134
+ %span.keyfacts-name= t('visitor', :count => 2).capitalize
135
+ %span.keyfacts-value= Forgeos::Statistics.total_of_visitors(@date)
136
+ %span.clear
137
+ %span.disabled
138
+ %span.keyfacts-name= t('statistic.average_order').capitalize
139
+ %span.keyfacts-value
140
+ %span.clear
141
+ %span.disabled
142
+ %span.keyfacts-name= t('statistic.products_sold').capitalize
143
+ %span.keyfacts-value
144
+ %span.clear
145
+ %span.disabled
146
+ %span.keyfacts-name= t('statistic.revenue').capitalize
147
+ %span.keyfacts-value
148
+ %span.clear
149
+ %span.disabled
150
+ %span.keyfacts-name= t('statistic.conversion_rate').capitalize
151
+ %span.keyfacts-value
152
+ %span.clear
153
+ %span.disabled
154
+ %span.keyfacts-name= t('statistic.average_customer').capitalize
155
+ %span.keyfacts-value
156
+ %span.clear
157
+ .clear
158
+