From b7dc991c7c8ed5ab64e0c2379e6453a7020344d8 Mon Sep 17 00:00:00 2001 From: Nicolas Bally Date: Tue, 19 Sep 2017 11:33:15 +0200 Subject: [PATCH] reseaux products --- app/assets/javascripts/manager.js | 11 + app/assets/stylesheets/public.scss | 41 +- .../stylesheets/public/boutique.css.scss | 225 ++++++++ .../admin/product_categories_controller.rb | 177 +++++++ .../admin/product_collections_controller.rb | 174 ++++++ .../admin/product_images_controller.rb | 82 +++ .../product_order_payments_controller.rb | 82 +++ .../admin/product_orders_controller.rb | 179 +++++++ .../admin/product_sizes_controller.rb | 142 +++++ app/controllers/admin/products_controller.rb | 190 +++++++ app/controllers/application_controller.rb | 22 + .../public/product_categories_controller.rb | 22 + .../product_customers_auths_controller.rb | 77 +++ .../public/product_customers_controller.rb | 119 +++++ .../product_order_products_controller.rb | 72 +++ .../public/product_orders_controller.rb | 498 ++++++++++++++++++ app/controllers/public/products_controller.rb | 27 + .../public/reseauxes_controller.rb | 11 +- app/helpers/document_line_helper.rb | 17 +- app/inputs/qi_image_select_input.rb | 8 +- app/models/lang_site.rb | 4 + app/models/product.rb | 182 +++++++ app/models/product_category.rb | 34 ++ app/models/product_category_lang.rb | 26 + app/models/product_collection.rb | 22 + app/models/product_collection_lang.rb | 25 + app/models/product_customer.rb | 47 ++ app/models/product_fdp.rb | 9 + app/models/product_image.rb | 11 + app/models/product_lang.rb | 16 + app/models/product_option.rb | 13 + app/models/product_option_lang.rb | 3 + app/models/product_order.rb | 294 +++++++++++ app/models/product_order_payment.rb | 21 + app/models/product_order_product.rb | 74 +++ app/models/product_product_size.rb | 4 + app/models/product_size.rb | 5 + app/models/product_stock.rb | 5 + app/models/reseaux.rb | 3 + .../admin/product_categories/_form.html.haml | 25 + .../product_categories/_index_block.html.haml | 46 ++ .../_product_category.html.haml | 31 ++ .../admin/product_categories/cible.html.haml | 6 + .../admin/product_categories/create.js.erb | 4 + .../admin/product_categories/destroy.js.erb | 4 + .../admin/product_categories/edit.js.erb | 1 + .../admin/product_categories/index.html.haml | 13 + .../admin/product_categories/index.js.erb | 13 + app/views/admin/product_categories/new.js.erb | 1 + .../admin/product_categories/reorder.js.erb | 4 + .../admin/product_categories/show.html.haml | 25 + .../admin/product_categories/update.js.erb | 4 + .../product_categories/update_row.js.erb | 2 + .../admin/product_collections/_form.html.haml | 23 + .../_index_block.html.haml | 53 ++ .../_product_collection.html.haml | 15 + .../admin/product_collections/cible.html.haml | 6 + .../admin/product_collections/create.js.erb | 5 + .../admin/product_collections/destroy.js.erb | 2 + .../admin/product_collections/edit.js.erb | 1 + .../admin/product_collections/index.html.haml | 6 + .../admin/product_collections/index.js.erb | 13 + .../admin/product_collections/new.js.erb | 1 + .../admin/product_collections/reorder.js.erb | 4 + .../admin/product_collections/show.html.haml | 2 + .../admin/product_collections/update.js.erb | 4 + .../product_collections/update_row.js.erb | 2 + .../admin/product_images/_form.html.haml | 19 + .../product_images/_product_image.html.haml | 9 + app/views/admin/product_images/create.js.erb | 1 + app/views/admin/product_images/destroy.js.erb | 4 + app/views/admin/product_images/edit.js.erb | 1 + app/views/admin/product_images/reorder.js.erb | 0 app/views/admin/product_images/update.js.erb | 5 + .../admin/product_options/_form.html.haml | 15 + .../product_order_payments/_form.html.haml | 11 + .../_product_order_payment.html.haml | 20 + .../product_order_payments/create.js.erb | 4 + .../admin/product_order_payments/edit.js.erb | 1 + .../admin/product_order_payments/new.js.erb | 1 + .../product_order_payments/update.js.erb | 4 + .../_product_order_product.html.haml | 21 + .../admin/product_orders/_form.html.haml | 10 + .../product_orders/_index_block.html.haml | 17 + .../product_orders/_product_order.html.haml | 46 ++ app/views/admin/product_orders/bill.html.haml | 232 ++++++++ app/views/admin/product_orders/create.js.erb | 4 + app/views/admin/product_orders/destroy.js.erb | 2 + app/views/admin/product_orders/edit.js.erb | 1 + .../admin/product_orders/index.html.haml | 13 + app/views/admin/product_orders/index.js.erb | 13 + app/views/admin/product_orders/new.js.erb | 1 + app/views/admin/product_orders/show.html.haml | 104 ++++ app/views/admin/product_orders/update.js.erb | 4 + .../admin/product_orders/update_row.js.erb | 2 + app/views/admin/product_sizes/_form.html.haml | 7 + .../product_sizes/_product_size.html.haml | 12 + app/views/admin/product_sizes/create.js.erb | 4 + app/views/admin/product_sizes/destroy.js.erb | 5 + app/views/admin/product_sizes/edit.js.erb | 1 + app/views/admin/product_sizes/index.html.haml | 18 + app/views/admin/product_sizes/new.js.erb | 1 + .../admin/product_sizes/update_row.js.erb | 2 + app/views/admin/products/_form.html.haml | 42 ++ .../admin/products/_index_block.html.haml | 35 ++ app/views/admin/products/_product.html.haml | 19 + .../admin/products/_stock_form.html.haml | 26 + app/views/admin/products/cible.html.haml | 6 + app/views/admin/products/create.js.erb | 4 + app/views/admin/products/destroy.js.erb | 2 + app/views/admin/products/edit.js.erb | 1 + app/views/admin/products/index.html.haml | 15 + app/views/admin/products/index.js.erb | 13 + app/views/admin/products/new.js.erb | 1 + app/views/admin/products/reorder.js.erb | 4 + app/views/admin/products/show.html.haml | 49 ++ app/views/admin/products/stock.js.erb | 1 + app/views/admin/products/update.js.erb | 4 + app/views/admin/products/update_row.js.erb | 2 + app/views/admin/reseauxes/_form.html.haml | 6 +- app/views/layouts/admin.html.haml | 14 +- app/views/layouts/public.html.haml | 23 +- .../product_categories/_bandeau.html.haml | 5 + .../_product_category.html.haml | 5 + .../public/product_categories/index.html.haml | 21 + .../public/product_categories/show.html.haml | 52 ++ .../_product_collection.html.haml | 32 ++ .../public/product_customers/_new_form.haml | 22 + app/views/public/product_customers/new.haml | 2 + .../public/product_customers_auths/new.haml | 42 ++ .../product_images/_product_image.html.haml | 3 + .../_product_order_product.html.haml | 29 + .../product_order_products/create.js.erb | 10 + .../product_orders/_mail_recap.html.haml | 61 +++ .../product_orders/_particular_form.html.haml | 26 + .../public/product_orders/my_cart.html.haml | 61 +++ .../product_orders/paid_by_ogone.html.haml | 10 + .../paid_by_ogone_confirm.html.haml | 13 + .../paid_by_payplug_confirm.html.haml | 4 + .../product_orders/particulars.html.haml | 58 ++ .../payment_instructions.html.haml | 24 + .../product_orders/select_fdp.html.haml | 22 + .../product_orders/select_payment.html.haml | 86 +++ app/views/public/products/_product.html.haml | 23 + .../public/products/_product_index.html.haml | 11 + app/views/public/products/index.html.haml | 6 + app/views/public/products/show.html.haml | 108 ++++ app/views/public/shared/_cart.html.haml | 2 + app/views/public/shared/_menu.html.haml | 5 + config/routes.rb | 113 +++- db/migrate/0000_create_lang_sites.rb | 15 + ...0160209225738_create_product_categories.rb | 9 + ...209230130_create_product_category_langs.rb | 13 + ...160209230957_create_product_collections.rb | 10 + ...9231058_create_product_collection_langs.rb | 13 + ...2420_add_position_to_product_categories.rb | 6 + db/migrate/20160214154854_create_products.rb | 13 + .../20160214155054_create_product_langs.rb | 17 + .../20160214173635_create_product_options.rb | 10 + ...60214173944_create_product_option_langs.rb | 12 + .../20160214183718_create_product_images.rb | 14 + .../20160214204019_add_cats_to_products.rb | 8 + .../20160216174039_create_product_sizes.rb | 9 + ...0216174106_create_product_product_sizes.rb | 13 + .../20160229230155_create_product_orders.rb | 23 + ...229231722_create_product_order_products.rb | 19 + ...20160229231818_add_archived_to_products.rb | 5 + ...20160302205347_create_product_customers.rb | 28 + ...03749_add_remote_ip_to_product_customer.rb | 6 + ...30_add_particulars_to_product_customers.rb | 7 + ...chived_options_to_product_order_product.rb | 6 + ...ge_product_order_product_attribute_name.rb | 5 + ...28_add_image_file_to_product_categories.rb | 5 + ...dd_descriptio_to_product_category_langs.rb | 5 + ..._descriptio_to_product_collection_langs.rb | 5 + .../20160305180845_add_image_to_collection.rb | 5 + .../20160306133908_create_product_stocks.rb | 19 + .../20160309104918_create_product_fdps.rb | 19 + ...111107_add_product_fdp_to_product_order.rb | 5 + ...309193926_create_product_order_payments.rb | 24 + ...34817_add_archive_fdp_to_product_orders.rb | 7 + ...2131410_add_archived_to_product_options.rb | 10 + ...0160312234811_add_cgv_to_product_orders.rb | 5 + ...8212528_add_color_to_product_categories.rb | 7 + ...212556_add_color_to_product_collections.rb | 5 + ...631_add_top_image_to_product_categories.rb | 5 + .../20170912112150_add_images_to_reseauxes.rb | 8 + .../20170912122525_add_reseaux_to_products.rb | 5 + ...12164519_add_customer_to_product_orders.rb | 5 + db/schema.rb | 276 +++++++++- public/logo-mb.png | Bin 0 -> 285509 bytes 191 files changed, 5682 insertions(+), 27 deletions(-) create mode 100644 app/assets/stylesheets/public/boutique.css.scss create mode 100755 app/controllers/admin/product_categories_controller.rb create mode 100755 app/controllers/admin/product_collections_controller.rb create mode 100755 app/controllers/admin/product_images_controller.rb create mode 100755 app/controllers/admin/product_order_payments_controller.rb create mode 100755 app/controllers/admin/product_orders_controller.rb create mode 100755 app/controllers/admin/product_sizes_controller.rb create mode 100755 app/controllers/admin/products_controller.rb create mode 100755 app/controllers/public/product_categories_controller.rb create mode 100755 app/controllers/public/product_customers_auths_controller.rb create mode 100755 app/controllers/public/product_customers_controller.rb create mode 100755 app/controllers/public/product_order_products_controller.rb create mode 100755 app/controllers/public/product_orders_controller.rb create mode 100755 app/controllers/public/products_controller.rb mode change 100755 => 100644 app/helpers/document_line_helper.rb mode change 100755 => 100644 app/inputs/qi_image_select_input.rb create mode 100644 app/models/lang_site.rb create mode 100755 app/models/product.rb create mode 100755 app/models/product_category.rb create mode 100755 app/models/product_category_lang.rb create mode 100755 app/models/product_collection.rb create mode 100755 app/models/product_collection_lang.rb create mode 100755 app/models/product_customer.rb create mode 100644 app/models/product_fdp.rb create mode 100755 app/models/product_image.rb create mode 100755 app/models/product_lang.rb create mode 100755 app/models/product_option.rb create mode 100755 app/models/product_option_lang.rb create mode 100755 app/models/product_order.rb create mode 100644 app/models/product_order_payment.rb create mode 100755 app/models/product_order_product.rb create mode 100755 app/models/product_product_size.rb create mode 100755 app/models/product_size.rb create mode 100644 app/models/product_stock.rb create mode 100755 app/views/admin/product_categories/_form.html.haml create mode 100755 app/views/admin/product_categories/_index_block.html.haml create mode 100755 app/views/admin/product_categories/_product_category.html.haml create mode 100755 app/views/admin/product_categories/cible.html.haml create mode 100755 app/views/admin/product_categories/create.js.erb create mode 100755 app/views/admin/product_categories/destroy.js.erb create mode 100755 app/views/admin/product_categories/edit.js.erb create mode 100755 app/views/admin/product_categories/index.html.haml create mode 100755 app/views/admin/product_categories/index.js.erb create mode 100755 app/views/admin/product_categories/new.js.erb create mode 100755 app/views/admin/product_categories/reorder.js.erb create mode 100755 app/views/admin/product_categories/show.html.haml create mode 100755 app/views/admin/product_categories/update.js.erb create mode 100755 app/views/admin/product_categories/update_row.js.erb create mode 100755 app/views/admin/product_collections/_form.html.haml create mode 100755 app/views/admin/product_collections/_index_block.html.haml create mode 100755 app/views/admin/product_collections/_product_collection.html.haml create mode 100755 app/views/admin/product_collections/cible.html.haml create mode 100755 app/views/admin/product_collections/create.js.erb create mode 100755 app/views/admin/product_collections/destroy.js.erb create mode 100755 app/views/admin/product_collections/edit.js.erb create mode 100755 app/views/admin/product_collections/index.html.haml create mode 100755 app/views/admin/product_collections/index.js.erb create mode 100755 app/views/admin/product_collections/new.js.erb create mode 100755 app/views/admin/product_collections/reorder.js.erb create mode 100755 app/views/admin/product_collections/show.html.haml create mode 100755 app/views/admin/product_collections/update.js.erb create mode 100755 app/views/admin/product_collections/update_row.js.erb create mode 100755 app/views/admin/product_images/_form.html.haml create mode 100755 app/views/admin/product_images/_product_image.html.haml create mode 100755 app/views/admin/product_images/create.js.erb create mode 100755 app/views/admin/product_images/destroy.js.erb create mode 100755 app/views/admin/product_images/edit.js.erb create mode 100755 app/views/admin/product_images/reorder.js.erb create mode 100755 app/views/admin/product_images/update.js.erb create mode 100755 app/views/admin/product_options/_form.html.haml create mode 100755 app/views/admin/product_order_payments/_form.html.haml create mode 100644 app/views/admin/product_order_payments/_product_order_payment.html.haml create mode 100755 app/views/admin/product_order_payments/create.js.erb create mode 100755 app/views/admin/product_order_payments/edit.js.erb create mode 100755 app/views/admin/product_order_payments/new.js.erb create mode 100755 app/views/admin/product_order_payments/update.js.erb create mode 100755 app/views/admin/product_order_products/_product_order_product.html.haml create mode 100755 app/views/admin/product_orders/_form.html.haml create mode 100755 app/views/admin/product_orders/_index_block.html.haml create mode 100755 app/views/admin/product_orders/_product_order.html.haml create mode 100644 app/views/admin/product_orders/bill.html.haml create mode 100755 app/views/admin/product_orders/create.js.erb create mode 100755 app/views/admin/product_orders/destroy.js.erb create mode 100755 app/views/admin/product_orders/edit.js.erb create mode 100755 app/views/admin/product_orders/index.html.haml create mode 100755 app/views/admin/product_orders/index.js.erb create mode 100755 app/views/admin/product_orders/new.js.erb create mode 100755 app/views/admin/product_orders/show.html.haml create mode 100755 app/views/admin/product_orders/update.js.erb create mode 100755 app/views/admin/product_orders/update_row.js.erb create mode 100755 app/views/admin/product_sizes/_form.html.haml create mode 100755 app/views/admin/product_sizes/_product_size.html.haml create mode 100755 app/views/admin/product_sizes/create.js.erb create mode 100755 app/views/admin/product_sizes/destroy.js.erb create mode 100755 app/views/admin/product_sizes/edit.js.erb create mode 100755 app/views/admin/product_sizes/index.html.haml create mode 100755 app/views/admin/product_sizes/new.js.erb create mode 100755 app/views/admin/product_sizes/update_row.js.erb create mode 100755 app/views/admin/products/_form.html.haml create mode 100755 app/views/admin/products/_index_block.html.haml create mode 100755 app/views/admin/products/_product.html.haml create mode 100755 app/views/admin/products/_stock_form.html.haml create mode 100755 app/views/admin/products/cible.html.haml create mode 100755 app/views/admin/products/create.js.erb create mode 100755 app/views/admin/products/destroy.js.erb create mode 100755 app/views/admin/products/edit.js.erb create mode 100755 app/views/admin/products/index.html.haml create mode 100755 app/views/admin/products/index.js.erb create mode 100755 app/views/admin/products/new.js.erb create mode 100755 app/views/admin/products/reorder.js.erb create mode 100755 app/views/admin/products/show.html.haml create mode 100755 app/views/admin/products/stock.js.erb create mode 100755 app/views/admin/products/update.js.erb create mode 100755 app/views/admin/products/update_row.js.erb create mode 100644 app/views/public/product_categories/_bandeau.html.haml create mode 100755 app/views/public/product_categories/_product_category.html.haml create mode 100644 app/views/public/product_categories/index.html.haml create mode 100755 app/views/public/product_categories/show.html.haml create mode 100755 app/views/public/product_collections/_product_collection.html.haml create mode 100755 app/views/public/product_customers/_new_form.haml create mode 100755 app/views/public/product_customers/new.haml create mode 100755 app/views/public/product_customers_auths/new.haml create mode 100755 app/views/public/product_images/_product_image.html.haml create mode 100755 app/views/public/product_order_products/_product_order_product.html.haml create mode 100644 app/views/public/product_order_products/create.js.erb create mode 100644 app/views/public/product_orders/_mail_recap.html.haml create mode 100755 app/views/public/product_orders/_particular_form.html.haml create mode 100755 app/views/public/product_orders/my_cart.html.haml create mode 100644 app/views/public/product_orders/paid_by_ogone.html.haml create mode 100644 app/views/public/product_orders/paid_by_ogone_confirm.html.haml create mode 100644 app/views/public/product_orders/paid_by_payplug_confirm.html.haml create mode 100755 app/views/public/product_orders/particulars.html.haml create mode 100644 app/views/public/product_orders/payment_instructions.html.haml create mode 100755 app/views/public/product_orders/select_fdp.html.haml create mode 100755 app/views/public/product_orders/select_payment.html.haml create mode 100755 app/views/public/products/_product.html.haml create mode 100644 app/views/public/products/_product_index.html.haml create mode 100644 app/views/public/products/index.html.haml create mode 100755 app/views/public/products/show.html.haml create mode 100644 app/views/public/shared/_cart.html.haml create mode 100644 db/migrate/0000_create_lang_sites.rb create mode 100755 db/migrate/20160209225738_create_product_categories.rb create mode 100755 db/migrate/20160209230130_create_product_category_langs.rb create mode 100755 db/migrate/20160209230957_create_product_collections.rb create mode 100755 db/migrate/20160209231058_create_product_collection_langs.rb create mode 100755 db/migrate/20160209232420_add_position_to_product_categories.rb create mode 100755 db/migrate/20160214154854_create_products.rb create mode 100755 db/migrate/20160214155054_create_product_langs.rb create mode 100755 db/migrate/20160214173635_create_product_options.rb create mode 100755 db/migrate/20160214173944_create_product_option_langs.rb create mode 100755 db/migrate/20160214183718_create_product_images.rb create mode 100755 db/migrate/20160214204019_add_cats_to_products.rb create mode 100755 db/migrate/20160216174039_create_product_sizes.rb create mode 100755 db/migrate/20160216174106_create_product_product_sizes.rb create mode 100755 db/migrate/20160229230155_create_product_orders.rb create mode 100755 db/migrate/20160229231722_create_product_order_products.rb create mode 100755 db/migrate/20160229231818_add_archived_to_products.rb create mode 100755 db/migrate/20160302205347_create_product_customers.rb create mode 100755 db/migrate/20160303203749_add_remote_ip_to_product_customer.rb create mode 100755 db/migrate/20160303214530_add_particulars_to_product_customers.rb create mode 100644 db/migrate/20160304111746_add_archived_options_to_product_order_product.rb create mode 100644 db/migrate/20160304115835_change_product_order_product_attribute_name.rb create mode 100644 db/migrate/20160304132328_add_image_file_to_product_categories.rb create mode 100644 db/migrate/20160304215405_add_descriptio_to_product_category_langs.rb create mode 100644 db/migrate/20160304215502_add_descriptio_to_product_collection_langs.rb create mode 100644 db/migrate/20160305180845_add_image_to_collection.rb create mode 100644 db/migrate/20160306133908_create_product_stocks.rb create mode 100644 db/migrate/20160309104918_create_product_fdps.rb create mode 100644 db/migrate/20160309111107_add_product_fdp_to_product_order.rb create mode 100644 db/migrate/20160309193926_create_product_order_payments.rb create mode 100644 db/migrate/20160309234817_add_archive_fdp_to_product_orders.rb create mode 100644 db/migrate/20160312131410_add_archived_to_product_options.rb create mode 100644 db/migrate/20160312234811_add_cgv_to_product_orders.rb create mode 100644 db/migrate/20160328212528_add_color_to_product_categories.rb create mode 100644 db/migrate/20160328212556_add_color_to_product_collections.rb create mode 100644 db/migrate/20160330180631_add_top_image_to_product_categories.rb create mode 100644 db/migrate/20170912112150_add_images_to_reseauxes.rb create mode 100644 db/migrate/20170912122525_add_reseaux_to_products.rb create mode 100644 db/migrate/20170912164519_add_customer_to_product_orders.rb create mode 100644 public/logo-mb.png diff --git a/app/assets/javascripts/manager.js b/app/assets/javascripts/manager.js index 2cc2489..14e60b3 100755 --- a/app/assets/javascripts/manager.js +++ b/app/assets/javascripts/manager.js @@ -156,6 +156,17 @@ function select_cible_from_manager(input_id){ +function select_product_images_from_manager(product_id){ + + manager_prompt("/admin/image_files/?manager=true&multiple=true",function(m_return){ + + $.ajax({url:"/admin/product_images/", type: "POST", data : { image_file_ids : m_return, product_id : product_id }}); + + + }); + +} + function initialize_manager(){ diff --git a/app/assets/stylesheets/public.scss b/app/assets/stylesheets/public.scss index da4f2b5..8e296b4 100755 --- a/app/assets/stylesheets/public.scss +++ b/app/assets/stylesheets/public.scss @@ -12,11 +12,48 @@ @import "public/account"; @import "public/affiliation"; @import "public/need"; +@import "public/boutique"; @import "vendor/flipclock"; - - +.reseaux_body{ + + .top{ + + #menu{ + padding-right:110px; + + } + + + #logo-mb{ + position:absolute; + right:0px; + top:0px; + width:120px; + z-index:2; + } + } + #main .body-container{ + padding-top:10px; + } + h1{ + font-size:1.3em; + text-transform:uppercase; + } +} +.reseaux_top{ + + + background:center center; + background-size:cover; + position:relative; + .logo_reseaux{ + margin:30px 40px; + width:300px; + } + +} #main{ diff --git a/app/assets/stylesheets/public/boutique.css.scss b/app/assets/stylesheets/public/boutique.css.scss new file mode 100644 index 0000000..0be8d28 --- /dev/null +++ b/app/assets/stylesheets/public/boutique.css.scss @@ -0,0 +1,225 @@ +$orange:black; +$dark_orange:#206e95; +.boutique_body{ + .product_description{ + h1{ + margin-top:0; + } + } + .col_image{ + background:white; + text-align:center; + } + + .table{ + th{ + background:transparent; + color:black; + border-bottom:1px solid gray; + } + } + h1{ + text-align:center; + font-size:2em; + + } + .btn{ + padding:6px 12px; + padding-top:4px; + color:white; + background:$dark_orange; + font-size:1em; + cursor:pointer; + } + + .formtastic{ + .btn{ + background:$orange; + } + } + .product-item{ + box-sizing:border-box; + width:24%; + display:inline-block; + padding:10px; + + .product-price{ + color:rgba(0,0,0,0.8); + + .strip{ + text-decoration: line-through; + } + } + + + .inner{ + .description{ + padding:20px; + } + max-width:270px; + position:relative; + margin:10px auto; + background:white; + .special{ + position:absolute; + top:-20px; + right:-20px; + width:60px; + } + h3{ + font-size: 1.2em; + //line-height: 0.8em; + color:$dark_orange; + margin-top:0px; + min-height:2.2em; + margin-bottom:10px; + } + + .stock{ + height:6px; + width:6px; + background:green; + border-radius:50%; + position:relative; + top:-10px; + display:inline-block; + } + + } + } + + .products_grid{ + text-align:center; + } + +} + + +.product_show{ + .price{ + font-weight:bold; + margin-top:2em; + //font-size:1.5em; + } + h1{ + font-size:1.8em; + padding-top:20px; + color:$dark_orange; + text-align:left; + } + .add_to_cart{ + margin:1em 0; + } + .row{ + + .col_image{ + float:left; + width:40%; + box-sizing:border-box; + + .product_images{ + img{ + width:20%; + + } + } + + } + + .col_description{ + box-sizing:border-box; + margin-left:40%; + padding:0 40px; + } + + + } + + +} + +#my_cart{ + + td{ + vertical-align:top; + padding:5px; + a{ + color:black; + } + } + + + .choice, .radio{ + input{ + display:inline-block; + width:auto; + margin-right:5px; + } + + } +} + + +.product_sizes{ + margin:2em 0; + + a{ + display:inline-block; + text-align:center; + border: 1px solid $orange; + line-height:1.9em; + padding-top:0.2em; + width:2.2em; + border-radius:50%; + color:black; + text-decoration:none; + font-weight:bold; + + &.active, &:hover{ + + background : $orange; + color:white !important; + } + } +} + +.size_guide{ + margin-top:2em; +} + + +.product_options{ + margin:2em 0; + a{ + display:inline-block; + text-align:center; + border: 1px solid $orange; + line-height:1.9em; + padding-top:0.2em; + padding-left:10px; + padding-right:10px; + margin:0 10px; + margin-left:0; + + color:black; + text-decoration:none; + font-weight:bold; + + &.active, &:hover{ + + background : $orange; + color:white !important; + } + } +} + +.boutique-right{ + text-align:right; + width:100px; +} + +.particular_form{ + td{ + padding:0 !important; + } +} \ No newline at end of file diff --git a/app/controllers/admin/product_categories_controller.rb b/app/controllers/admin/product_categories_controller.rb new file mode 100755 index 0000000..b4f1b41 --- /dev/null +++ b/app/controllers/admin/product_categories_controller.rb @@ -0,0 +1,177 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductCategoriesController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + before_filter :find_product_categories + + + def index + + end + + + def reorder + + i = 1 + + + params[:product_categories_ids].each do |id| + + + product_category = ProductCategory.find(id) + product_category.position = i + puts i + product_category.update_attributes :position => i + + i = i + 1 + + + end + + if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id]) + + find_product_categories + end + + flash[:success] = "Menus réorganisés avec succcès." + + + + end + + + def cible + @product_categories = ProductCategory.all + + render :layout => false + end + + + def new + @product_category = ProductCategory.new(:parent_id => params[:parent_id]) + + @product_category.product_category_langs << ProductCategoryLang.new(:lang => LangSite.first.slug, :parent_id => params[:parent_id]) + + + end + + def edit + @product_category = ProductCategory.find(params[:id]) + end + + def show + @product_category = ProductCategory.find(params[:id]) + end + + + def create + @product_category = ProductCategory.new(params.require(:product_category).permit!) + + + if @product_category.save + params[:parent_id] =@product_category.parent_id + + self.find_product_categories + flash[:notice] = "La catégorie à été ajouté avec succès." + + + else + render :action => "new" + + end + + end + + + def update + @product_category = ProductCategory.find(params[:id]) + + + + + if request.xhr? + @product_category_parent = @product_category.parent if @product_category.parent + @product_categories = ProductCategory.where(:parent_id => @product_category.parent_id).order(:position) + end + + if params[:product_category][:parent_id] and params[:product_category][:parent_id] == "no-menu-selected" + params[:product_category][:parent_id] = nil + end + + @reorder = true if params[:reorder] + + + + + + + + respond_to do |format| + if @product_category.update_attributes(params.require(:product_category).permit!) + + #ProductCategory.all.each do |mi| + # mi.set_permalink + + #end + + flash[:notice] = "Le menu à été modifié avec succès." + format.html { redirect_to(admin_product_categories_path(:parent_id => @product_category.parent_id)) } + if @reorder + format.js { + + render :action => "update" } + else + format.js { + @product_category = ProductCategory.find(@product_category.id) + render :action => "update_row" } + end + else + + + if @reorder + format.js { render :action => "update_reorder_failled" } + else + format.html { render :action => "edit" } + format.js { render :action => "edit" } + end + + + end + end + + + + + + end + + + def destroy + @product_category = ProductCategory.find(params[:id]) + params[:parent_id] = @product_category.parent_id + @product_category.destroy + find_product_categories + + flash[:notice] = "La catégorie à bien été supprimée." + end + + + protected + + def find_product_categories + params[:parent_id] = nil if !params[:parent_id] or params[:parent_id] == "" + + @product_category_parent = ProductCategory.find(params[:parent_id]) if params[:parent_id] + + + @product_categories = ProductCategory.where(:parent_id => params[:parent_id]).order("position ASC") + + + + end + +end diff --git a/app/controllers/admin/product_collections_controller.rb b/app/controllers/admin/product_collections_controller.rb new file mode 100755 index 0000000..048f6e2 --- /dev/null +++ b/app/controllers/admin/product_collections_controller.rb @@ -0,0 +1,174 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductCollectionsController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + before_filter :find_product_collections + + + def index + + end + + + def reorder + + i = 1 + + + params[:product_collections_ids].each do |id| + + + product_collection = ProductCollection.find(id) + product_collection.position = i + puts i + product_collection.update_attributes :position => i + + i = i + 1 + + + end + + if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id]) + + find_product_collections + end + + flash[:success] = "Collections réorganisées avec succcès." + + + + end + + + def cible + @product_collections = ProductCollection.all + + render :layout => false + end + + + def new + + @product_category = ProductCategory.find(params[:product_category_id]) + @product_collection = ProductCollection.new(:product_category_id => @product_category.id) + + + LangSite.all.each do |ls| + @product_collection.product_collection_langs << ProductCollectionLang.new(:lang => ls.slug) + end + + end + + def edit + @product_category = ProductCategory.find(params[:product_category_id]) + @product_collection = ProductCollection.find(params[:id]) + end + + def show + @product_collection = ProductCollection.find(params[:id]) + end + + + def create + @product_category = ProductCategory.find(params[:product_category_id]) + @product_collection = ProductCollection.new(params.require(:product_collection).permit!) + + + if @product_collection.save + @product_collections = @product_collection.product_category.product_collections.order(:position) + flash[:notice] = "La collection à bien été créée." + + + else + render :action => "new" + + end + + end + + + def update + @product_category = ProductCategory.find(params[:product_category_id]) + @product_collection = ProductCollection.find(params[:id]) + + + + + + + @reorder = true if params[:reorder] + + + + + + + + respond_to do |format| + if @product_collection.update_attributes(params.require(:product_collection).permit!) + + #ProductCollection.all.each do |mi| + # mi.set_permalink + + #end + + flash[:notice] = "La collection à été modifié avec succès." + format.html { redirect_to(admin_product_collections_path(:parent_id => @product_collection.parent_id)) } + if @reorder + format.js { + + render :action => "update" } + else + format.js { + @product_collection = ProductCollection.find(@product_collection.id) + render :action => "update_row" } + end + else + + flash[:error] = "Cette collection n'a pas pu être déplacée. Vérifiez que son lien permanent n'éxiste pas déjà dans l'élément cible." + if @reorder + format.js { render :action => "update_reorder_failled" } + else + format.html { render :action => "edit" } + format.js { render :action => "edit" } + end + + + end + end + + + + + + end + + + def destroy + @product_collection = ProductCollection.find(params[:id]) + + @product_collection.destroy + + flash[:notice] = "La collection à bien été supprimée." + end + + + protected + + def find_product_collections + params[:parent_id] = nil if !params[:parent_id] or params[:parent_id] == "" + + @product_collection_parent = ProductCollection.find(params[:parent_id]) if params[:parent_id] + + + @product_collections = ProductCollection.where(:parent_id => params[:parent_id]).order("position ASC") + + + + end + +end diff --git a/app/controllers/admin/product_images_controller.rb b/app/controllers/admin/product_images_controller.rb new file mode 100755 index 0000000..d9b9ab7 --- /dev/null +++ b/app/controllers/admin/product_images_controller.rb @@ -0,0 +1,82 @@ +# -*- encoding : utf-8 -*- +class Admin::ProductImagesController < ApplicationController + layout "admin" + + + def reorder + i = 0 + params[:order].each do |product_image_id| + i += 1 + product_image = ProductImage.find(product_image_id) + product_image.position = i + product_image.save + end + + end + + def create + + @product = Product.find(params[:product_id]) + @product_images = [] + if params[:image_file_ids].kind_of?(Array) + params[:image_file_ids].each do |image_file_id| + image_file = ImageFile.find(image_file_id) + product_image = ProductImage.create(:image_file_id => image_file.id, :title => image_file.name, :description => image_file.description, :product_id => @product.id ) + + @product_images << product_image + end + end + + + + respond_to do |format| + + format.js + + end + end + + + + def edit + @product_image = ProductImage.find(params[:id]) + + if request.xhr? + render :layout => false + end + + end + + + + + + def show + + + end + + def update + @product_image = ProductImage.find(params[:id]) + respond_to do |format| + if @product_image.update_attributes(params.require(:product_image).permit!) + + format.js + else + format.html { render :action => "edit", :layout => false} + format.js { render :action => "edit" } + end + + end + end + + def destroy + + @product_image = ProductImage.find(params[:id]) + @product_image.destroy + + + end + + +end diff --git a/app/controllers/admin/product_order_payments_controller.rb b/app/controllers/admin/product_order_payments_controller.rb new file mode 100755 index 0000000..703e178 --- /dev/null +++ b/app/controllers/admin/product_order_payments_controller.rb @@ -0,0 +1,82 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductOrderPaymentsController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + + def new + @product_order_payment = ProductOrderPayment.new() + + + @product_order_payment.product_order_payment_langs << ProductOrderPaymentLang.new(:lang => LangSite.first.slug) + + + end + + def edit + @product_order_payment = ProductOrderPayment.find(params[:id]) + end + + + + def create + @product_order_payment = ProductOrderPayment.new(params.require(:product_order_payment).permit!) + + + if @product_order_payment.save + self.find_product_order_payments + flash[:notice] = "Le paiement a été ajouté." + + + else + render :action => "new" + + end + + end + + + def update + @product_order_payment = ProductOrderPayment.find(params[:id]) + + + + + + + respond_to do |format| + if @product_order_payment.update_attributes(params.require(:product_order_payment).permit!) + + @product_order_payment.product_order.verify_paid_status + + flash[:notice] = "Le paiement a été mis à jour" + + format.js { + render :action => "update" + } + + else + + flash[:error] = "Le paiement n'a pas pu être mis à jour" + + format.html { render :action => "edit" } + format.js { render :action => "edit" } + + + + end + end + + + + + + end + + + + +end diff --git a/app/controllers/admin/product_orders_controller.rb b/app/controllers/admin/product_orders_controller.rb new file mode 100755 index 0000000..7f86e45 --- /dev/null +++ b/app/controllers/admin/product_orders_controller.rb @@ -0,0 +1,179 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductOrdersController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + before_filter :find_product_orders + + + + def ship + @product_order = ProductOrder.find(params[:id]) + @product_order.after_ship + + redirect_to :back + end + + def index + + end + + + def edit + @product_order = ProductOrder.find(params[:id]) + end + + + def show + @product_order = ProductOrder.find(params[:id]) + end + + + + def bill + @product_order = ProductOrder.find(params[:id]) + + if @product_order.bill_number? + + + + @temp_file = "#{Rails.root}/pdf/donator_transactions_recus/FACTURE_#{@product_order.id}_temp.pdf" + @final_file = "#{Rails.root}/pdf/donator_transactions_recus/FACTURE_#{@product_order.id}.pdf" + + + view = ActionView::Base.new(Rails.root.join('app/views')) + view.class.include ApplicationHelper + view.class.include Rails.application.routes.url_helpers + + pdf = view.render( + :pdf => "#{@product_order.id}", + :template => "admin/product_orders/bill.html.haml", + + :locals => {:@product_order => @product_order}) + + # then save to a file + pdf = WickedPdf.new.pdf_from_string(pdf, :margin => { top: 0, # default 10 (mm) + bottom: 0, + left: 0, + right: 0 }) + + save_path = @temp_file + File.open(save_path, 'wb') do |file| + file << pdf + end + + + + + require 'posix/spawn' + + ::POSIX::Spawn::Child.new 'pdftk', @temp_file, 'background', Rails.root.join('pdf_stamp', 'facture.pdf').to_s, 'output', @final_file + + #pdftk /Users/nico/Dev/sideplace_app.old/pdf/order_bills/SP20150700003.pdf background fond.pdf output sortie.pdf + + + + + + @data_to_send = File.open( @final_file).read + + send_data @data_to_send, :filename =>"facture.pdf" , :type => 'application/pdf',:disposition => (params[:inline] ? 'inline' : "attachment") + + + + + + + + else + render :inline => "Aucune facture disponnible" + end + + + end + + + + def create + @product_order = ProductOrder.new(params.require(:product_order).permit!) + + + if @product_order.save + self.find_product_orders + flash[:notice] = "La catégorie à été ajouté avec succès." + + + else + render :action => "new" + + end + + end + + + def update + @product_order = ProductOrder.find(params[:id]) + + + + + respond_to do |format| + if @product_order.update_attributes(params.require(:product_order).permit!) + + #ProductOrder.all.each do |mi| + # mi.set_permalink + + #end + + flash[:notice] = "Le menu à été modifié avec succès." + format.html { redirect_to(admin_product_orders_path(:parent_id => @product_order.parent_id)) } + if @reorder + format.js { + + render :action => "update" } + else + format.js { + @product_order = ProductOrder.find(@product_order.id) + render :action => "update_row" } + end + else + + + format.html { render :action => "edit" } + format.js { render :action => "edit" } + + + + end + end + + + + + + end + + + def destroy + @product_order = ProductOrder.find(params[:id]) + + @product_order.destroy + + + flash[:notice] = "La commande à bien été supprimée." + end + + + protected + + def find_product_orders + @product_orders = ProductOrder.where(:completed_finish => true).order("created_at DESC") + + + + end + +end diff --git a/app/controllers/admin/product_sizes_controller.rb b/app/controllers/admin/product_sizes_controller.rb new file mode 100755 index 0000000..b5be386 --- /dev/null +++ b/app/controllers/admin/product_sizes_controller.rb @@ -0,0 +1,142 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductSizesController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + before_filter :find_product_sizes + + + def index + + end + + + def reorder + + i = 1 + + + params[:product_sizes_ids].each do |id| + + + product_size = ProductSize.find(id) + product_size.position = i + puts i + product_size.update_attributes :position => i + + i = i + 1 + + + end + + if params[:menu_id] and params[:menu_id] != "" and @menu = Menu.find(params[:menu_id]) + + find_product_sizes + end + + flash[:success] = "Menus réorganisés avec succcès." + + + + end + + + def cible + @product_sizes = ProductSize.all + + render :layout => false + end + + + def new + @product_size = ProductSize.new() + + + + end + + def edit + @product_size = ProductSize.find(params[:id]) + end + + def show + @product_size = ProductSize.find(params[:id]) + end + + + def create + @product_size = ProductSize.new(params.require(:product_size).permit!) + + + if @product_size.save + + find_product_sizes + flash[:notice] = "La catégorie à été ajouté avec succès." + + + else + render :action => "new" + + end + + end + + + def update + @product_size = ProductSize.find(params[:id]) + + + + + + + respond_to do |format| + if @product_size.update_attributes(params.require(:product_size).permit!) + + + + flash[:notice] = "Le menu à été modifié avec succès." + + if @reorder + format.js { + + render :action => "update" } + else + format.js { + @product_size = ProductSize.find(@product_size.id) + render :action => "update_row" } + end + end + + end + + + + + + end + + + def destroy + @product_size = ProductSize.find(params[:id]) + @product_size.destroy + find_product_sizes + + flash[:notice] = "La catégorie à bien été supprimée." + end + + + protected + + def find_product_sizes + + @product_sizes = ProductSize.where("archived is null").order("position ASC") + + + + end + +end diff --git a/app/controllers/admin/products_controller.rb b/app/controllers/admin/products_controller.rb new file mode 100755 index 0000000..7fb8234 --- /dev/null +++ b/app/controllers/admin/products_controller.rb @@ -0,0 +1,190 @@ +# -*- encoding : utf-8 -*- + +class Admin::ProductsController < ApplicationController + before_filter :auth_admin + + layout "admin" + + + before_filter :find_products + + + before_filter :collection_for_parent_select, :except => [:index, :show] + + def collection_for_parent_select + @categories_select = [] + + ProductCategory.where("parent_id is null").each do |product_category| + ancestry_options product_category + + end + + + + #ancestry_options(ProductCategory.joins(:product_category_langs).order('product_category_langs.name').unscoped.all) {|i| "#{'-' * i.ancestors.size} #{i.lang('fr').name}" } + end + + def ancestry_options(item) + @categories_select << [('--' * item.ancestors.size).to_s+item.lang("fr").name,item.id] + + item.children.each do |product_category| + ancestry_options product_category + + end + + end + + + def index + + end + + + def reorder + + i = 1 + + + params[:products_ids].each do |id| + + + product = Product.find(id) + product.position = i + puts i + product.update_attributes :position => i + + i = i + 1 + + + end + + + flash[:success] = "Menus réorganisés avec succcès." + + + + end + + + def cible + @products = Product.all + + render :layout => false + end + + + def new + @product = Product.new() + + + @product.product_langs << ProductLang.new(:lang => LangSite.first.slug) + + + end + + def edit + @product = Product.find(params[:id]) + end + + def stock + @product = Product.find(params[:id]) + end + + def show + @product = Product.find(params[:id]) + end + + + def create + @product = Product.new(params.require(:product).permit!) + + + if @product.save + self.find_products + flash[:notice] = "La catégorie à été ajouté avec succès." + + + else + render :action => "new" + + end + + end + + + def update + @product = Product.find(params[:id]) + + + + + + + @reorder = true if params[:reorder] + + + + + + + + respond_to do |format| + if @product.update_attributes(params.require(:product).permit!) + + #Product.all.each do |mi| + # mi.set_permalink + + #end + + flash[:notice] = "Le menu à été modifié avec succès." + format.html { redirect_to(admin_products_path(:parent_id => @product.parent_id)) } + if @reorder + format.js { + + render :action => "update" } + else + format.js { + @product = Product.find(@product.id) + render :action => "update_row" } + end + else + + flash[:error] = "Cet élément de menu n'a pas pu être déplacé. Vérifiez que son lien permanent n'éxiste pas déjà dans l'élément cible." + if @reorder + format.js { render :action => "update_reorder_failled" } + else + format.html { render :action => "edit" } + format.js { render :action => "edit" } + end + + + end + end + + + + + + end + + + def destroy + @product = Product.find(params[:id]) + + @product.destroy + + + flash[:notice] = "Le produit à bien été supprimé." + end + + + protected + + def find_products + @products = Product.not_archived.order("position ASC") + + + + end + +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 13118ca..37cec7d 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,6 +4,28 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception + before_filter :set_order + + def set_order + if session[:product_order_id] && @product_order = ProductOrder.where(id: session[:product_order_id]).first + if @product_order.paid + @product_order = ProductOrder.new + @product_order.save + + session[:product_order_id] = @product_order.id + end + else + @product_order = ProductOrder.new + + @product_order.save + + session[:product_order_id] = @product_order.id + end + end + + + + def check_enabled if (!@current_customer and current_admin and params[:admin]) diff --git a/app/controllers/public/product_categories_controller.rb b/app/controllers/public/product_categories_controller.rb new file mode 100755 index 0000000..0c53aa5 --- /dev/null +++ b/app/controllers/public/product_categories_controller.rb @@ -0,0 +1,22 @@ +# -*- encoding : utf-8 -*- + +class Public::ProductCategoriesController < ApplicationController + + + layout "public" + + + def index + @products = Product.not_archived.where(:product_collection_id => nil) + + end + + def show + @product_category = ProductCategory.find(params[:id]) + @product_category_lang = @product_category.lang(I18n.locale) + + @image_bandeau = @product_category.image_file.file.url if @product_category.image_file + end + + +end diff --git a/app/controllers/public/product_customers_auths_controller.rb b/app/controllers/public/product_customers_auths_controller.rb new file mode 100755 index 0000000..8d64d48 --- /dev/null +++ b/app/controllers/public/product_customers_auths_controller.rb @@ -0,0 +1,77 @@ +# -*- encoding : utf-8 -*- +class Public::ProductCustomersAuthsController < ApplicationController + layout "public" + + def new + + if params[:r] and params[:r] != "" + session[:before_auth_url] = nil + end + + @no_search = true + params[:step] = "login" + if params[:for_annonce] and params[:for_annonce] != "" + session[:for_annonce] = true + + else + session[:for_annonce] = nil + params[:for_annonce] =nil + end + + @product_customer = ProductCustomer.new() + + end + + + + def create + params[:for_annonce] =nil if params[:for_annonce] == "" + params[:for_mail] =nil if params[:for_mail] == "" + @product_customer = ProductCustomer.new() + + + params[:step] = "login" + @no_search = true + user = ProductCustomer.find_by_email(params[:email]) + if user && user.authenticate(params[:password]) + #session[:forum_user_id] = user.id + + + if params[:remember_me] + cookies.permanent[:product_customer_auth_token] = user.token + else + cookies[:product_customer_auth_token] = user.token + end + user.last_sign_in_at = Time.now + user.last_sign_in_ip = user.current_sign_in_ip + user.current_sign_in_ip = request.remote_ip + + user.save(:validate => false) + + + + if session[:for_annonce] + session[:for_annonce] = nil + redirect_to new_public_annonce_path + elsif session[:before_auth_url] + url = session[:before_auth_url] + session[:before_auth_url] = nil + redirect_to url + else + redirect_to public_my_account_path + end + + + + else + flash.now.alert = "Email ou mot de passe incorect" + render "new" + end + end + + def logout + cookies.delete(:product_customer_auth_token) + session[:before_auth_url] = nil + redirect_to "/", notice: "Déconnecté." + end +end diff --git a/app/controllers/public/product_customers_controller.rb b/app/controllers/public/product_customers_controller.rb new file mode 100755 index 0000000..9036dff --- /dev/null +++ b/app/controllers/public/product_customers_controller.rb @@ -0,0 +1,119 @@ +class Public::ProductCustomersController < ApplicationController + layout "public" + + before_filter :auth_product_customer, :except => [:new, :create, :confirm] + + + def index + + @product_customers = ProductCustomer.all + end + + + + + def new + if params[:r] and params[:r] != "" + session[:before_auth_url] = nil + end + + + @no_search = true + if params[:for_annonce] and params[:for_annonce] != "" + session[:for_annonce] = true + params[:step] = "login" + else + session[:for_annonce] = nil + params[:for_annonce] = nil + end + + params[:for_mail] =nil if params[:for_mail] == "" + + @product_customer = ProductCustomer.new() + + + end + + + def edit + @product_customer = ProductCustomer.find(params[:id]) + + end + + + + def create + + + @product_customer = ProductCustomer.new(params.require(:product_customer).permit!) + @product_customer.remote_ip = request.remote_ip + + if @product_customer.save + #ProductCustomerMailer.confirm(@product_customer).deliver + + @product_customer.authenticate(params[:password]) + + cookies[:product_customer_auth_token] = @product_customer.token + + + redirect_to particulars_public_product_orders_path + + + else + render :template => "public/product_customers_auths/new" + end + end + + def confirm + @product_customer = ProductCustomer.find_by_token(params[:id]) + @product_customer.enabled = true + @product_customer.save(:validate => false) + + + cookies[:product_customer_auth_token] = @product_customer.token + + redirect_to public_my_account_path + #redirect_to "/" + end + + + def update + @product_customer = ProductCustomer.find(params[:id]) + + if params[:order] + + @product_customer.force_address = true + end + + if @product_customer == current_product_customer + + + if @product_customer.update_attributes(params.require(:product_customer).permit!) + + if params[:order] + + + @product_customer = current_product_customer + @order.product_customer = @product_customer + + render :template => "public/orders/new" + else + + redirect_to public_my_account_path + end + else + if params[:order] + @order = Order.new(session[:order]) + render :template => "public/orders/billing" + else + render :template => "public/my_account/edit_infos" + + end + end + end + end + + + + +end diff --git a/app/controllers/public/product_order_products_controller.rb b/app/controllers/public/product_order_products_controller.rb new file mode 100755 index 0000000..b1f13df --- /dev/null +++ b/app/controllers/public/product_order_products_controller.rb @@ -0,0 +1,72 @@ +class Public::ProductOrderProductsController < ApplicationController + + layout "public" + + def create + #clear params + params[:product_order_product][:product_size_id] = nil if params[:product_order_product][:product_size_id] == "" + params[:product_order_product][:product_option_id] = nil if params[:product_order_product][:product_option_id] == "" + + # Trying to retreive an existing pop in the current cart + existing_product_order_product = @product_order.product_order_products.where(:product_id => params[:product_order_product][:product_id], :product_size_id => params[:product_order_product][:product_size_id], :product_option_id => params[:product_order_product][:product_option_id]).first + + # if the pop exists in the current cart, just increase the quantity + if existing_product_order_product + existing_product_order_product.qty += 1 + existing_product_order_product.verify_qty + existing_product_order_product.save + else + + @product_order_product = ProductOrderProduct.new(params.require(:product_order_product).permit(:product_id, :product_size_id, :product_option_id)) + + @product_order_product.qty = 1 + + @product_order_product.save + + #@product_order_product.save + @product_order.product_order_products << @product_order_product + #@product_order_product.verify_qty + @product_order_product.save + end + + # Make back a redirection + + + respond_to do |format| + format.js + format.html{ + + redirect_to :back + + } + end + + + end + + + def delete + + end + + def update + + @product_order_product = ProductOrderProduct.find(params[:id]) + @product_order_product.qty = params[:product_order_product][:qty] + + @product_order_product.verify_qty + + @product_order_product.save + + if @product_order_product.qty == 0 + @product_order_product.destroy + + end + + # Make back a redirection + redirect_to :back + + end + + +end diff --git a/app/controllers/public/product_orders_controller.rb b/app/controllers/public/product_orders_controller.rb new file mode 100755 index 0000000..f4e91cb --- /dev/null +++ b/app/controllers/public/product_orders_controller.rb @@ -0,0 +1,498 @@ +class Public::ProductOrdersController < ApplicationController + + layout "public" + + + + before_filter :cart_not_empty, :only => [:particulars, :particulars_save, :select_payment ,:select_payment_save, :select_fdp, :select_fdp_save ] + + skip_before_filter :verify_authenticity_token, :only => [:payplug_ipn] + + def get_reseaux + if session[:reseaux_id] + @reseaux = current_customer.reseauxes.find(session[:reseaux_id]) + @reseaux_layout = true + end + end + + def my_cart + get_reseaux + end + + def vourcher + code = params[:vourcher_code] + if vc = VourcherCode.find_by_slug( code) + @product_order.vourcher_code = vc + @product_order.save + redirect_to :back + else + redirect_to :back, :notice => "Le code indiqué n'est pas valide" + + + end + + end + + def particulars + get_reseaux + @product_order = ProductOrder.find(session[:product_order_id]) + if @product_order.paid + redirect_to new_public_product_order_path(:paid => true) + else + @product_order.customer = current_customer + #@product_order.product_customer.particular_bill.skip_validation = true + #@product_order.product_customer.particular_send.skip_validation = true + + @product_order.save + + #@product_order.product_customer.particular_bill.skip_validation = false + @product_order.product_order_payment_type_ok_id = 3 if !@product_order.product_order_payment_type_ok_id? + + end + + end + + def particulars_save + @product_order = ProductOrder.find(session[:product_order_id]) + #@product_order.product_customer.particular_bill.skip_validation = false + #@product_order.product_customer.particular_bill.skip_email = true + + if !@product_order.particular_idem + @product_order.product_customer.particular_send.skip_validation = false + @product_order.product_customer.particular_send.skip_email = true + end + + if @product_order.update_attributes(params.require(:product_order).permit!) + + @product_order.particular_bill = @product_order.product_customer.particular_bill.dup + + @product_order.particular_idem = @product_order.product_customer.particular_idem + if @product_order.particular_idem + @product_order.particular_send = @product_order.product_customer.particular_bill.dup + else + + @product_order.product_customer.particular_send.skip_validation = false + @product_order.product_customer.particular_send.skip_email = true + + @product_order.particular_send = @product_order.product_customer.particular_send.dup + end + @product_order.save + + @product_order.archive_now + + + redirect_to select_fdp_public_product_orders_path() + + + + + + else + + render :action => :particulars + + end + + end + + + def select_fdp + @product_order = ProductOrder.find(session[:product_order_id]) + @product_order.force_fdp_validation = true + redirect_to select_fdp_save_public_product_orders_path + + end + + + def select_fdp_save + + @product_order = ProductOrder.find(session[:product_order_id]) + @product_order.force_fdp_validation = true + @product_order.product_fdp_id = 1 + if @product_order.save + #if @product_order.update_attributes(params.require(:product_order).permit!) + + + redirect_to select_payment_public_product_orders_path() + + + else + render :action => :select_fdp + end + + + + + + end + + def select_payment + if params[:orderID] + flash.now[:error] = "Votre tentative de paiement par carte bancaire a échouée, ou vous avez annulé votre paiement, merci de bien vouloir essayer de nouveau ou changer de mode de paiement." + end + @product_order = ProductOrder.find(session[:product_order_id]) + @product_order.archive_now + if !@product_order.product_order_payment_type_ok_id? + @product_order.product_order_payment_type_ok_id = 3 + end + @product_order.force_payment = true + + + end + + + + def cart_not_empty + @product_order = ProductOrder.find(session[:product_order_id]) + + if @product_order.product_order_products.count == 0 + redirect_to public_my_cart_path + end + + end + + def select_payment_save + + + @product_order = ProductOrder.find(session[:product_order_id]) + + + @product_order.archive_now + @product_order.force_payment + @product_order.force_fdp_validation = true + @product_order.force_cgv_validation = true + + + + if @product_order.update_attributes(params.require(:product_order).permit!) + + + if @product_order.product_order_payment_type_ok_id == 3 + redirect_to paid_by_ogone_public_product_orders_path() + else + if @product_order.product_order_payment_type_ok_id == 1 + @product_order_payment = ProductOrderPayment.create(:product_order_payment_type_id => @product_order.product_order_payment_type_ok_id) + @product_order.product_order_payments << @product_order_payment + @product_order.product_order_payment_ok = @product_order_payment + + end + + + + @product_order.completed_finish = true + + @product_order.save + @product_order.after_paid + ProductOrdersMails.confirmation_cheque(@product_order).deliver + session[:product_order_id] = nil + redirect_to payment_instructions_public_product_order_path(@product_order.token) + + end + else + render :action => :select_payment + end + + + + + + + end + + + def payment_instructions + @product_order_ar = ProductOrder.find_by_token(params[:id]) + end + + + + def payplug_ipn + + + payplug_retrieve_payement(params[:id]) + + + response = @response + + puts response["metadata"] + @product_order = ProductOrder.find_by_token(response["metadata"]["product_order_id"]) + @product_order_payment = ProductOrderPayment.find_by_token(response["metadata"]["product_order_payment_id"]) + + @product_order_payment.product_order_payment_type_id = 3 + @product_order_payment.amount = response["amount"].to_i*0.01 + @product_order_payment.payplug_payment_id = response["id"] + + if response["card"] + @product_order_payment.payplug_card_id = response["card"]["id"] + @product_order_payment.payplug_card_expiry_month = response["card"]["exp_month"] + @product_order_payment.payplug_card_expiry_year = response["card"]["exp_year"] + @product_order_payment.payplug_card_last_number = response["card"]["last4"] + + end + + if response["is_paid"] == true || response["is_paid"] == "true" + + @product_order_payment.paid_at = Time.now + + @product_order.paid = true + @product_order.after_paid + + ProductOrdersMails.confirmation_cb(@product_order).deliver + + + else + @product_order.paid = false + end + @product_order.product_order_payment_ok = @product_order_payment + @product_order.completed_finish = true + @product_order.save + @product_order_payment.save + + + + + render :inline => "ok" + end + + + + def paid_by_payplug + @product_order = ProductOrder.find(session[:product_order_id]) + + + + if @product_order.paid + redirect_to select_payment_public_order_products_path(@product_order.id) + else + + @product_order_payment = ProductOrderPayment.create(:product_order_payment_type_id => 3) + @product_order.product_order_payments << @product_order_payment + + session[:product_order_payment_token] = @product_order_payment.token + + puts "AAAAAAAAAAAAAA" + + puts @product_order.particular_bill + + puts "AAAAAAAAAAAAAA" + options = { + :amount => @product_order.total_ttc.to_i, + :email => @product_order.product_customer.email , + :first_name => @product_order.particular_bill.firstname, + :last_name => @product_order.particular_bill.name, + :return_url => "http://#{HOSTNAME}"+paid_by_payplug_confirm_public_product_orders_path(:token => @product_order_payment.token), + :cancel_url => "http://#{HOSTNAME}"+select_payment_public_product_orders_path(), + :notification_url => "http://#{HOSTNAME}"+payplug_ipn_public_product_orders_path(), + :product_order_id => @product_order.token, + :product_order_payment_id => @product_order_payment.token, + :save_card => false, + + } + + payplug_init_payement(options) + + response = @new_payplug_payment + + @product_order_payment.payplug_payment_id = response["id"] + @product_order_payment.save + @product_order.save + + redirect_to response["hosted_payment"]["payment_url"] + + + end + + end + + + + + def paid_by_ogone + + @product_order = ProductOrder.find(session[:product_order_id]) + + if @product_order.paid + redirect_to public_my_cart_path + else + + @product_order_payment = ProductOrderPayment.create(:product_order_payment_type_id => 3) + @product_order.product_order_payments << @product_order_payment + + session[:product_order_payment_token] = @product_order_payment.token + + + @ogone_options = { + :amount => @product_order.total_ttc, + :accept_url => "http://#{HOSTNAME}"+paid_by_ogone_confirm_public_product_orders_path(), + :decline_url => "http://#{HOSTNAME}"+select_payment_public_product_orders_path(), + :exception_url => "http://#{HOSTNAME}"+select_payment_public_product_orders_path(), + :cancel_url => "http://#{HOSTNAME}"+select_payment_public_product_orders_path(), + :orderid => @product_order_payment.token, + :PARAMVAR => "ogoneipnpo", + :PSPID => OgoneRails::pspid, + :currency => OgoneRails::currency, + :language => OgoneRails::language, + + } + + + + end + + end + + + def paid_by_payplug_confirm + + + @product_order_payment = ProductOrderPayment.find_by_token(params[:token]) + @product_order_ar = @product_order_payment.product_order + + payplug_retrieve_payement @product_order_payment.payplug_payment_id + + if @response and @response["is_paid"] == true# || response["is_paid"] == "true" + @paid = true + + @product_order = ProductOrder.new + session[:product_order_id] = nil + else + redirect_to select_payment_public_product_orders_path(:paid_fail => 1) + + end + + + end + + + + def paid_by_ogone_confirm + + @check = OgoneRails::CheckAuth.new( request ) + + if @check.valid? + + + @product_order_payment = ProductOrderPayment.find_by_token(params[:orderID]) + + @product_order = @product_order_payment.product_order + + end + + if !@product_order.paid + update_ogone_infos() + + end + + session[:product_order_id] = nil if @product_order.paid + + @past_product_order = @product_order + + @product_order = ProductOrder.new + + + + if !@past_product_order.paid + redirect_to select_payment_public_product_orders_path(:orderID => "fail") + end + + + end + + + def ogone_ipn + + update_ogone_infos() + + render :inline => "ok" + + end + + protected + + def update_ogone_infos + + @check = OgoneRails::CheckAuth.new( request ) + + if @check.valid? + + @product_order_payment = ProductOrderPayment.find_by_token(params[:orderID]) + + @product_order = @product_order_payment.product_order + + @product_order_payment.product_order_payment_type_id = 3 + @product_order_payment.amount = params[:amount].to_f + + @product_order_payment.ogone_payid = params[:PAYID] + @product_order_payment.ogone_pm = params[:PM] + @product_order_payment.ogone_status = params[:STATUS] + @product_order_payment.ogone_acceptance = params[:ACCEPTANCE] + @product_order_payment.ogone_cardno = params[:CARDNO] + @product_order_payment.ogone_ed = params[:ED] + @product_order_payment.ogone_cn = params[:CN] + @product_order_payment.ogone_trxdate = params[:TRXDATE] + @product_order_payment.ogone_ncerror = params[:NCERROR] + @product_order_payment.ogone_brand = params[:BRAND] + @product_order_payment.ogone_subbrand = params[:SUBBRAND] + @product_order_payment.ogone_eci = params[:ECI] + @product_order_payment.ogone_ip = params[:IP] + @product_order_payment.ogone_alias = params[:ALIAS] + @product_order_payment.ogone_cb_expiration = Date.parse(params[:ED][2..3].to_s+"/"+params[:ED][0..1].to_s+"/01") if params[:ED] + + + + + + + + if params["STATUS"].to_i == 9 + + if !@product_order.paid + + + @product_order_payment.paid_at = Time.now + + @product_order.paid_at = @product_order_payment.paid_at + + @product_order.paid = true + + + + #@gen_recu = true + ProductOrdersMails.confirmation_cb(@product_order).deliver + + #@product_order.check_newsletter + + end + + else + @product_order.paid = false + + end + @product_order.completed_finish = true + + @product_order_payment.save + @product_order.product_order_payment_ok = @product_order_payment if @product_order.paid + @product_order.product_customer.particular_bill.skip_email = true + @product_order.product_customer.particular_send.skip_email = true + @product_order.save(:validate => false) + + @product_order.after_paid + + + + + + if @gen_recu + #@product_order.generate_recu + end + + + + + end + + + end + + +end diff --git a/app/controllers/public/products_controller.rb b/app/controllers/public/products_controller.rb new file mode 100755 index 0000000..3eb1a6a --- /dev/null +++ b/app/controllers/public/products_controller.rb @@ -0,0 +1,27 @@ +# -*- encoding : utf-8 -*- + +class Public::ProductsController < ApplicationController + + + layout "public" + + def show + @product = Product.not_archived.find(params[:id]) + @product_lang = @product.lang(I18n.locale) + @product_category = @product.product_category + @image_bandeau = @product.product_category.image_file.file.url if @product.product_category and @product.product_category.image_file + + @image_bandeau = @product.product_collection.image_file.file.url if @product.product_collection and @product.product_collection.image_file + @reseaux = current_customer.reseauxes.find(@product.reseaux_id) + @reseaux_layout = true + session[:reseaux_id] =@reseaux.id + end + + + def index + @reseaux = current_customer.reseauxes.find(params[:reseaux_id]) + @reseaux_layout = true + session[:reseaux_id] =@reseaux.id + + end +end diff --git a/app/controllers/public/reseauxes_controller.rb b/app/controllers/public/reseauxes_controller.rb index b4d3ff9..d618fe0 100755 --- a/app/controllers/public/reseauxes_controller.rb +++ b/app/controllers/public/reseauxes_controller.rb @@ -11,8 +11,15 @@ class Public::ReseauxesController < ApplicationController def show - #@reseaux = current_customer.own_reseauxes.find(params[:id]) - @reseaux = Reseaux.find(params[:id]) + @reseaux = current_customer.own_reseauxes.find(params[:id]) + #@reseaux = Reseaux.find(params[:id]) + + end + + def products + + + #@reseaux = Reseaux.find(params[:id]) end diff --git a/app/helpers/document_line_helper.rb b/app/helpers/document_line_helper.rb old mode 100755 new mode 100644 index 0351312..0e4de6b --- a/app/helpers/document_line_helper.rb +++ b/app/helpers/document_line_helper.rb @@ -8,10 +8,23 @@ module DocumentLineHelper def link_to_add_fields(name, f, association) new_object = f.object.class.reflect_on_association(association).klass.new() + + + if association == :product_options + + + + new_object.product_option_langs << ProductOptionLang.new(:lang => LangSite.first.slug) + + + + + end fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| render("admin/"+association.to_s + "/form", :form => builder) end - link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\");") + + link_to name,"#", :onclick => "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\");return false;" end - + end diff --git a/app/inputs/qi_image_select_input.rb b/app/inputs/qi_image_select_input.rb old mode 100755 new mode 100644 index 66f168d..96118e3 --- a/app/inputs/qi_image_select_input.rb +++ b/app/inputs/qi_image_select_input.rb @@ -7,11 +7,15 @@ class QiImageSelectInput < Formtastic::Inputs::TextInput label_html + - template.content_tag(:fieldset, image_preview(method, options, r) + builder.hidden_field(method.to_s, input_html_options.merge!(:id => "input_"+r.to_s)) ) + template.content_tag(:fieldset, image_preview(method, options, r) + remove_image_link(method, options, r) + builder.hidden_field(method.to_s, input_html_options.merge!(:id => "input_"+r.to_s)) ) end + def remove_image_link(method, options, r) + template.content_tag(:a, "Supprimer", :href => "#", :onclick => "remove_image_cible('"+r.to_s+"');return false;") + + end def manager_select_link(method, options, r) template.content_tag(:a, "Modifier cette image", :href => "#", :onclick => "select_image_from_manager('"+r.to_s+"');return false;") @@ -19,7 +23,7 @@ class QiImageSelectInput < Formtastic::Inputs::TextInput def image_preview(method, options,r) if object.send("#{method}?") and ImageFile.exists?(object.send("#{method}")) - template.content_tag(:span, template.image_tag(object.image_file.file.large.medium.small.thumb.url, :id => "img_"+r.to_s, :onclick => "select_image_from_manager('"+r.to_s+"');return false;"), :class => "preview ") + template.content_tag(:span, template.image_tag(eval("object.#{method[0..-4]}.file.large.medium.small.thumb.url"), :id => "img_"+r.to_s, :onclick => "select_image_from_manager('"+r.to_s+"');return false;"), :class => "preview ") else template.content_tag(:span, template.image_tag("admin/default_image.png", :id => "img_"+r.to_s, :onclick => "select_image_from_manager('"+r.to_s+"');return false;"), :class => "preview ") end diff --git a/app/models/lang_site.rb b/app/models/lang_site.rb new file mode 100644 index 0000000..24172d2 --- /dev/null +++ b/app/models/lang_site.rb @@ -0,0 +1,4 @@ +class LangSite < ActiveRecord::Base + has_many :menu_item_langs + +end diff --git a/app/models/product.rb b/app/models/product.rb new file mode 100755 index 0000000..d5e955d --- /dev/null +++ b/app/models/product.rb @@ -0,0 +1,182 @@ +class Product < ActiveRecord::Base + + belongs_to :reseaux + + + has_many :product_product_sizes, :dependent => :destroy + has_many :product_sizes, :through => :product_product_sizes + has_many :product_stocks, :dependent => :destroy + accepts_nested_attributes_for :product_stocks + + has_many :product_langs, :dependent => :destroy + has_many :product_images, :dependent => :destroy + accepts_nested_attributes_for :product_langs + + scope :not_archived, -> { where(:archived => 0).order("position ASC") } + + validates :price_ht, :presence => true + + after_save do + self.generate_stock + end + def in_stock + product_stocks.where("stock_th > 0").count + end + def generate_stock + ids_saveds = [] + ids_new_saveds = [] + + if self.product_options.count > 0 + + self.product_options.each do |product_option| + if self.product_sizes.count > 0 + + self.product_sizes.each do |product_size| + + if !(product_stock = self.product_stocks.where(:product_size_id => product_size.id, :product_option_id => product_option.id).first) + + product_stock = self.product_stocks.create(:product_size_id => product_size.id, :product_option_id => product_option.id, :stock_th => 1, :stock => 1) + + ids_new_saveds << product_stock.id + end + + ids_saveds << product_stock.id + + end + + else + + + if !(product_stock = self.product_stocks.where(:product_size_id => nil, :product_option_id => product_option.id).first) + + product_stock = self.product_stocks.create(:product_option_id => product_option.id, :stock_th => 1, :stock => 1) + + ids_new_saveds << product_stock.id + end + + ids_saveds << product_stock.id + + end + + end + + else + + if self.product_sizes.count > 0 + + self.product_sizes.each do |product_size| + + if !(product_stock = self.product_stocks.where(:product_size_id => product_size.id, :product_option_id => nil).first) + + product_stock = self.product_stocks.create(:product_size_id => product_size.id, :stock_th => 1, :stock => 1) + + ids_new_saveds << product_stock.id + end + + ids_saveds << product_stock.id + + end + + + + else + + if !(product_stock = self.product_stocks.where(:product_size_id => nil, :product_option_id => nil).first) + + product_stock = self.product_stocks.create(:stock_th => 1, :stock => 1) + + ids_new_saveds << product_stock.id + end + + ids_saveds << product_stock.id + + + end + + + + end + + self.product_stocks.where("id not IN (?)", ids_saveds).destroy_all + + end + + def product_options_in_stock_id + + self.product_stocks.where("stock_th > 0").group(:product_option_id).map {|s| s.product_option_id} + end + + def product_options_in_stock + self.product_options.where(:id => self.product_options_in_stock_id) + end + + + def product_sizes_in_stock_id(product_option_id=nil) + + to_ids = self.product_stocks.where("stock_th > 0") + to_ids = to_ids.where(:product_option_id => product_option_id) if product_option_id != :all + to_ids.map {|s| s.product_size_id} + end + + def product_sizes_in_stock(product_option_id=nil) + self.product_sizes.where(:id => self.product_sizes_in_stock_id(product_option_id)) + end + + + def tva + 0.0 + end + + def price_ttc + price_ht+(price_ht*self.tva) + end + + def price_reduced_ttc + price_reduced_ht+(price_reduced_ht*self.tva) + end + + def final_price_ht + if price_reduced_ht? + price_reduced_ht + else + price_ht + end + end + + def final_price_ttc + final_price_ht+(final_price_ht*self.tva) + + + end + + + + + def lang(lang) + self.product_langs.find_by_lang(lang) + end + + has_many :product_options, :dependent => :destroy + + accepts_nested_attributes_for :product_options, :allow_destroy => true + + #belongs_to :default_image, :class_name => "ProductImage" + + + def default_image + self.product_images.order(:position).first + end + + belongs_to :product_collection + belongs_to :product_category + + before_validation do + if self.product_collection_id + + if !self.product_category or !self.product_category.product_collections.where(:id => self.product_collection_id) + + self.product_collection_id = nil + end + end + end +end diff --git a/app/models/product_category.rb b/app/models/product_category.rb new file mode 100755 index 0000000..8d6bd06 --- /dev/null +++ b/app/models/product_category.rb @@ -0,0 +1,34 @@ +class ProductCategory < ActiveRecord::Base + acts_as_tree + + has_many :product_category_langs, :dependent => :destroy + belongs_to :image_file + + belongs_to :image_file_left, :class_name => "ImageFile" + belongs_to :image_file_right, :class_name => "ImageFile" + + belongs_to :top_image, :class_name => "ImageFile" + + accepts_nested_attributes_for :product_category_langs + + has_many :product_collections, :dependent => :destroy + has_many :products, :dependent => :nullify + + def lang(lang) + self.product_category_langs.find_by_lang(lang) + end + + before_validation do + self.parent_id = nil if self.parent_id == 0 + errors.add(:parent_id, 'doit être différent de la page actuelle') if parent_id == id and id != nil + + if self.id + errors.add(:parent_id, 'attention la page parente à pour page parente celle-ci = boucle') if self.parent_id and self.id == ProductCategory.find(self.parent_id).parent_id + end + + + + end + + +end diff --git a/app/models/product_category_lang.rb b/app/models/product_category_lang.rb new file mode 100755 index 0000000..a71f61a --- /dev/null +++ b/app/models/product_category_lang.rb @@ -0,0 +1,26 @@ +class ProductCategoryLang < ActiveRecord::Base + belongs_to :product_category + + validates :name, :presence => true + + validates :slug, :presence => true#, :uniqueness => {:scope => :lang} + attr_accessor :parent_id + before_validation do + self.slug = self.name.to_slug + if self.id? + parent_id_test = self.product_category.parent_id + + else + parent_id_test = parent_id + end + + search_test = ProductCategoryLang.joins(:product_category).where("lang = ?", self.lang).where("product_categories.parent_id "+(parent_id_test ? "=" : "IS")+" ? and slug = ? ", parent_id_test, self.slug) + search_test = search_test.where("product_categories.id != ?", self.id) if self.id + if search_test.first + #errors.add(:slug, 'est déjà utilisé') + + end + + + end +end diff --git a/app/models/product_collection.rb b/app/models/product_collection.rb new file mode 100755 index 0000000..ca72e23 --- /dev/null +++ b/app/models/product_collection.rb @@ -0,0 +1,22 @@ +class ProductCollection < ActiveRecord::Base + belongs_to :product_category + + has_many :product_collection_langs, :dependent => :destroy + + accepts_nested_attributes_for :product_collection_langs + has_many :products, :dependent => :nullify + belongs_to :image_file + + before_validation do + self.product_collection_langs.each do |product_collection_lang| + product_collection_lang.product_category_id = self.product_category_id + + end + end + + + def lang(lang) + self.product_collection_langs.find_by_lang(lang) + end + +end diff --git a/app/models/product_collection_lang.rb b/app/models/product_collection_lang.rb new file mode 100755 index 0000000..281fae4 --- /dev/null +++ b/app/models/product_collection_lang.rb @@ -0,0 +1,25 @@ +class ProductCollectionLang < ActiveRecord::Base + belongs_to :product_collection + + + validates :name, :presence => true + + validates :slug, :presence => true#, :uniqueness => {:scope => [:lang]} + + attr_accessor :product_category_id + + before_validation do + self.slug = self.name.to_slug + + search_test = ProductCollectionLang.joins(:product_collection).where("lang = ?", self.lang).where("product_collections.product_category_id = ? and slug = ? ", self.product_category_id, self.slug) + search_test = search_test.where("product_collections.id != ?", self.id) if self.id + if search_test.first + #errors.add(:slug, 'est déjà utilisé') + + end + + + end + + +end diff --git a/app/models/product_customer.rb b/app/models/product_customer.rb new file mode 100755 index 0000000..0d3be3c --- /dev/null +++ b/app/models/product_customer.rb @@ -0,0 +1,47 @@ +class ProductCustomer < ActiveRecord::Base + + has_secure_password + validates :email, :presence => true, :uniqueness => true, :format => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i + validates_presence_of :password, :on => :create + + + belongs_to :particular_bill, :class_name => "Particular" + + accepts_nested_attributes_for :particular_bill + + belongs_to :particular_send, :class_name => "Particular" + + accepts_nested_attributes_for :particular_send + + + before_create do + self.generate_token + + self.particular_bill = Particular.create(:particular_type => "facturation", :skip_validation => true) + self.particular_idem = true + self.particular_send = Particular.create(:particular_type => "expedition", :skip_validation => true) + + + end + + def send_password_reset + + begin + self[:reset_password_token] = SecureRandom.urlsafe_base64 + end while ProductCustomer.exists?(:reset_password_token => self[:reset_password_token]) + + self.reset_password_sent_at = Time.now + self.save(:validate => false) + ProductCustomerMailer.password_reset(self).deliver + end + + + def generate_token + begin + self.token = SecureRandom.urlsafe_base64 + puts self.token + end while ProductCustomer.exists?(:token => self.token) + end + + +end diff --git a/app/models/product_fdp.rb b/app/models/product_fdp.rb new file mode 100644 index 0000000..d17463c --- /dev/null +++ b/app/models/product_fdp.rb @@ -0,0 +1,9 @@ +class ProductFdp < ActiveRecord::Base + + def name + self.fdp_description + + end + + +end diff --git a/app/models/product_image.rb b/app/models/product_image.rb new file mode 100755 index 0000000..c35fd0b --- /dev/null +++ b/app/models/product_image.rb @@ -0,0 +1,11 @@ +class ProductImage < ActiveRecord::Base + belongs_to :image_file + + belongs_to :product + + + + + + +end diff --git a/app/models/product_lang.rb b/app/models/product_lang.rb new file mode 100755 index 0000000..f57ae05 --- /dev/null +++ b/app/models/product_lang.rb @@ -0,0 +1,16 @@ +class ProductLang < ActiveRecord::Base + belongs_to :product_category + belongs_to :product_collection + + + + #validates :slug, :uniqueness => {:scope => :lang} + + before_validation do + self.slug = self.title.to_slug + + errors.add(:title, 'doit être présent') if !title? and self.lang == "fr" + errors.add(:title, 'doit être présent') if !slug? and self.lang == "fr" + + end +end diff --git a/app/models/product_option.rb b/app/models/product_option.rb new file mode 100755 index 0000000..3a4cd77 --- /dev/null +++ b/app/models/product_option.rb @@ -0,0 +1,13 @@ +class ProductOption < ActiveRecord::Base + belongs_to :product + + has_many :product_option_langs, :dependent => :destroy + + accepts_nested_attributes_for :product_option_langs + + def lang(lang) + self.product_option_langs.find_by_lang(lang) + end + + +end diff --git a/app/models/product_option_lang.rb b/app/models/product_option_lang.rb new file mode 100755 index 0000000..d28cc89 --- /dev/null +++ b/app/models/product_option_lang.rb @@ -0,0 +1,3 @@ +class ProductOptionLang < ActiveRecord::Base + belongs_to :product_option +end diff --git a/app/models/product_order.rb b/app/models/product_order.rb new file mode 100755 index 0000000..7371510 --- /dev/null +++ b/app/models/product_order.rb @@ -0,0 +1,294 @@ +class ProductOrder < ActiveRecord::Base + + belongs_to :customer + + has_many :product_order_products + + has_many :product_order_payments + belongs_to :product_order_payment_ok, :class_name => "ProductOrderPayment" + + belongs_to :particular_bill, :class_name => "Particular" + + accepts_nested_attributes_for :particular_bill + + belongs_to :particular_send, :class_name => "Particular" + + accepts_nested_attributes_for :particular_send + + belongs_to :product_customer + + accepts_nested_attributes_for :product_customer + + belongs_to :product_fdp + belongs_to :product_fdp_archived, :class_name => "ProductFdp" + + belongs_to :vourcher_code + belongs_to :vourcher_code_archived, :class_name => "VourcherCode" + + validates :product_fdp, :presence => true, :if => :force_fdp_validation? + + validates :cgv, :presence => {:message => "Vous devez accepter les conditions générales de vente."}, :if => :force_cgv_validation? + + attr_accessor :force_fdp_validation, :force_payment, :force_cgv_validation + + + + def prodons_country + countr = particular_bill.country + if countr.to_s == "FR" + + else + c = ISO3166::Country.new countr + c.translation('fr') + end + end + + + def prodons_date + if self.paid_at? + date = self.paid_at + else + date = self.created_at + end + + date.strftime("%d/%m/%Y") + + end + + + + def verify_paid_status + + product_order_payments_to_count = self.product_order_payments.where("paid_at IS NOT NULL").order("paid_at DESC") + amount_paid = product_order_payments_to_count.sum(:amount) + + if product_order_payments_to_count.first and amount_paid >= self.total_ttc + self.paid = true + self.paid_at = product_order_payments_to_count.first.paid_at + else + self.paid = nil + self.paid_at = nil + + + end + self.save + + end + + + def total_ttc + total_articles + total_fdp - vourcher_reduction + end + + def total_ttc_without_fdp + total_articles - vourcher_reduction + end + + def vourcher_reduction + if self.vourcher_code and 1==1 + (total_articles * (self.vourcher_code.percent / 100 )).round(2) + + else + 0.0 + end + end + + + def archived_vourcher_reduction + if self.vourcher_code_archived and 1==1 + (total_articles * (self.vourcher_code_archived.percent / 100 )).round(2) + + else + 0.0 + end + end + + + + def archived_total_ttc + archived_total_articles + archived_total_fdp - archived_vourcher_reduction + end + + + def archived_total_articles + archived_total = 0.0 + product_order_products.each do |p| + archived_total += p.archived_final_price_ttc_with_qty + end + archived_total + end + + def archived_total_fdp(fdp=self.product_fdp_archived) + if fdp + if self.archived_total_articles < fdp.price_max + fdp.price + else + 0.0 + end + else + 0.0 + end + + end + + def generate_bill_number + + + if !self.bill_number and self.paid and self.product_order_payment_type_ok_id == 3 + self.paid_at = self.product_order_payment_ok.paid_at + + self.bill_year = self.paid_at.year + + + + + last_number = 0 + last_number = ProductOrder.where("paid_at is not null").where(:bill_year => self.bill_year ).order("bill_index DESC").first.bill_index if ProductOrder.where("paid_at is not null").where(:bill_year => self.bill_year ).first + self.bill_index = last_number+1 + self.bill_number = "WEB"+self.bill_year.to_s+('%04d' % self.bill_index) + self.save(:validate => false) + + end + end + + def after_paid + + self.product_order_products.each do |p| + + p.update_stock_th + + end + + self.generate_bill_number + + end + + def after_ship + if !self.shiped + self.product_order_products.each do |p| + + p.update_stock + + end + + self.shiped = true + self.shiped_at = Time.now + self.save + end + end + + def archive_now + self.product_order_products.each do |p| + + # Archive the product + p.archived_product = p.product.dup + p.archived_product.archived = true + p.verify_qty + p.save + + # Archive product langs + + p.product.product_langs.each do |pl| + dup_pl = pl.dup + dup_pl.archived = true + p.archived_product.product_langs << dup_pl + p.save + end + + # Archive the pop size + + if p.product_size + dup_product_size = p.product_size.dup + dup_product_size.archived = true + p.archived_product_size = dup_product_size + end + + if p.product_option# Archive the pop option + + dup_product_option = p.product_option.dup + dup_product_option.product_id = nil + dup_product_option.archived = true + p.archived_product_option = dup_product_option + + p.product_option.product_option_langs.each do |pl| + p.archived_product_option.product_option_langs << pl.dup + p.save + end + end + + + + # save + p.save + + + end + + if self.product_fdp + a_product_fdp = self.product_fdp.dup + a_product_fdp.archived = true + a_product_fdp.save + self.product_fdp_archived_id = a_product_fdp.id + self.save + + end + + if self.vourcher_code + a_vourcher_code = self.vourcher_code.dup + a_vourcher_code.archived = true + a_vourcher_code.save + self.vourcher_code_archived_id = a_vourcher_code.id + self.save + + end + + end + + def total_articles + total = 0.0 + product_order_products.each do |p| + total += p.final_price_ttc_with_qty + end + total + end + + def total_fdp(fdp=self.product_fdp) + if fdp + if self.total_ttc_without_fdp < fdp.price_max + fdp.price + else + 0.0 + end + else + 0.0 + end + + end + + def force_fdp_validation? + true if self.force_fdp_validation + end + + def force_cgv_validation? + true if self.force_cgv_validation + end + + before_validation do + self.verify + + end + + + protected + + def verify(size=16) + if !self.token + s = "" + size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr } + self.token = s + end + end + + + +end diff --git a/app/models/product_order_payment.rb b/app/models/product_order_payment.rb new file mode 100644 index 0000000..b069ebc --- /dev/null +++ b/app/models/product_order_payment.rb @@ -0,0 +1,21 @@ +class ProductOrderPayment < ActiveRecord::Base + belongs_to :product_order + before_validation do + self.verify + + end + + + protected + + def verify(size=16) + if !self.token + s = "" + size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr } + self.token = s + end + end + + + +end diff --git a/app/models/product_order_product.rb b/app/models/product_order_product.rb new file mode 100755 index 0000000..0097cf4 --- /dev/null +++ b/app/models/product_order_product.rb @@ -0,0 +1,74 @@ +class ProductOrderProduct < ActiveRecord::Base + belongs_to :order + belongs_to :product + + + belongs_to :product_size + belongs_to :product_option + + belongs_to :archived_product, class_name: "Product" + belongs_to :archived_product_size, class_name: "ProductSize" + belongs_to :archived_product_option, class_name: "ProductOption" + + def price_ttc_with_qty + qty.to_f * product.price_ttc.to_f + end + + def final_price_ttc_with_qty + qty.to_f * product.final_price_ttc.to_f + end + + + + def archived_price_ttc_with_qty + if archived_product + qty.to_f * archived_product.price_ttc.to_f + else + 0 + end + end + + + def archived_final_price_ttc_with_qty + if archived_product + qty.to_f * archived_product.final_price_ttc.to_f + else + 0 + end + end + + + def verify_qty + + product_stock_t = self.product.product_stocks.where(:product_option_id => self.product_option_id,:product_size_id => self.product_size_id).first + + if product_stock_t and self.qty > product_stock_t.stock_th + self.qty = product_stock_t.stock_th + elsif !product_stock_t + + self.qty = 0 + end + end + + def update_stock_th + product_stock_t = self.product.product_stocks.where(:product_option_id => self.product_option_id,:product_size_id => self.product_size_id).first + + if product_stock_t + product_stock_t.stock_th = product_stock_t.stock_th - self.qty + product_stock_t.save + + end + end + + def update_stock + product_stock = self.product.product_stocks.where(:product_option_id => self.product_option_id,:product_size_id => self.product_size_id).first + + if product_stock + product_stock.stock = product_stock.stock - self.qty + product_stock.save + + end + end + + +end diff --git a/app/models/product_product_size.rb b/app/models/product_product_size.rb new file mode 100755 index 0000000..2fd19f7 --- /dev/null +++ b/app/models/product_product_size.rb @@ -0,0 +1,4 @@ +class ProductProductSize < ActiveRecord::Base + belongs_to :product + belongs_to :product_size +end diff --git a/app/models/product_size.rb b/app/models/product_size.rb new file mode 100755 index 0000000..5970733 --- /dev/null +++ b/app/models/product_size.rb @@ -0,0 +1,5 @@ +class ProductSize < ActiveRecord::Base + + has_many :product_product_sizes + has_many :products, :through => :product_product_sizes +end diff --git a/app/models/product_stock.rb b/app/models/product_stock.rb new file mode 100644 index 0000000..2c941da --- /dev/null +++ b/app/models/product_stock.rb @@ -0,0 +1,5 @@ +class ProductStock < ActiveRecord::Base + belongs_to :product + belongs_to :product_size + belongs_to :product_option +end diff --git a/app/models/reseaux.rb b/app/models/reseaux.rb index 1acd109..ee0449a 100644 --- a/app/models/reseaux.rb +++ b/app/models/reseaux.rb @@ -1,6 +1,9 @@ class Reseaux < ActiveRecord::Base belongs_to :chef_reseau, :class_name => "Customer" + belongs_to :logo_image_file, :class_name => "ImageFile" + belongs_to :background_image_file, :class_name => "ImageFile" + has_many :reseaux_customers has_many :customers, :through => :reseaux_customers diff --git a/app/views/admin/product_categories/_form.html.haml b/app/views/admin/product_categories/_form.html.haml new file mode 100755 index 0000000..c763cc2 --- /dev/null +++ b/app/views/admin/product_categories/_form.html.haml @@ -0,0 +1,25 @@ += semantic_form_for [:admin,@product_category], :remote => true do |form| + + = form.input :parent_id,:as => :hidden + + .content + = form.input :image_file_id, :label => "Image", :as => :qi_image_select + + =form.semantic_fields_for :product_category_langs do |product_category_lang| + + = product_category_lang.inputs do + + + + = product_category_lang.hidden_field :id + = product_category_lang.hidden_field :parent_id + = product_category_lang.hidden_field :lang + = product_category_lang.input :name, :as => :string, :label => "Nom (#{product_category_lang.object.lang}) :" + = product_category_lang.input :description, :label => "Description (#{product_category_lang.object.lang}) :" + = form.input :image_file_left_id, :label => "Image gauche :", :as => :qi_image_select + = form.input :image_file_right_id, :label => "Image droite :", :as => :qi_image_select + + = form.input :top_image_id, :label => "Grande image du haut :", :as => :qi_image_select + = form.input :color, :label => "Couleur :" + .actions + = form.submit "Sauvegarder" diff --git a/app/views/admin/product_categories/_index_block.html.haml b/app/views/admin/product_categories/_index_block.html.haml new file mode 100755 index 0000000..ddf2e95 --- /dev/null +++ b/app/views/admin/product_categories/_index_block.html.haml @@ -0,0 +1,46 @@ +#product_category_index + + %ul.breadcrumb + = link_to 'Ajouter une catégorie', new_admin_product_category_path(:parent_id => params[:parent_id]), :class => "btn btn-primary",:remote => true, :style => "float:right;" + %li + -if @product_category_parent + -@product_category_parent.ancestors.reverse.each do |product_category| + %li + =link_to product_category.lang("fr").name, admin_product_categories_path( :parent_id =>product_category.id), :remote => true + %span.divider / + + %li + =@product_category_parent.lang("fr").name + %span.divider / + %p{:style => "clear:both;"} + + + + -if @product_category_parent + .prevv_folder.receptable{:data => { :param_test => true, :parent_id => (@product_category_parent.parent ? @product_category_parent.parent.id : "no-menu-selected")} } + + + =ic(:"folder-o") + =link_to "...", admin_product_categories_path( :parent_id => (@product_category_parent.parent ? @product_category_parent.parent.id : nil)), :remote => true + + + + + #sortable_product_category{:data => {:parent_id => (@product_category_parent ? @product_category_parent.id : "")} } + + + + + + + + + -if @product_categories.size > 0 + =render @product_categories + -else + .no_product_categories + Il n'y a aucun éléments de menu actuellement. + + :javascript + + init_product_categories_list(); \ No newline at end of file diff --git a/app/views/admin/product_categories/_product_category.html.haml b/app/views/admin/product_categories/_product_category.html.haml new file mode 100755 index 0000000..690ad9e --- /dev/null +++ b/app/views/admin/product_categories/_product_category.html.haml @@ -0,0 +1,31 @@ + +#product_category_row.product_category_row.row{:id => product_category.id,:"data-menu-item-id" => product_category.id} + + .col-xs-2.receptable{:data => {:parent_id => product_category.id}} + .btn-group + %span.handle.btn=i(:arrows, :icon => false) + =link_to (product_category.children.size > 0 ? i(:"folder", :icon => false) : i(:"folder-o", :icon => false) )+(product_category.children.size if product_category.children.size > 0).to_s, admin_product_categories_path(:parent_id => product_category.id), :remote => true, :class => "btn" + + + .col-xs-4 + =product_category.lang("fr").name + ( + =product_category.product_collections.count + collections + ) + + + .col-xs-4 + =#link_to "/"+product_category.permalink+".html", product_category_path(:url => product_category.url) + + .col-xs-2.actions{:style => "text-align:right;"} + + = link_to i(:"trash-o"), [:admin, product_category], :data =>{:remote => true, :confirm => 'Voulez-vous vraiment supprimer cet élément de menu ?'}, :method => :delete #, if current_admin.super_admin? || !product_category.super_admin + + = link_to i(:eye), [:admin, product_category] + + = link_to i(:pencil), edit_admin_product_category_path(product_category), :data => {:remote => true} + + + + diff --git a/app/views/admin/product_categories/cible.html.haml b/app/views/admin/product_categories/cible.html.haml new file mode 100755 index 0000000..a034103 --- /dev/null +++ b/app/views/admin/product_categories/cible.html.haml @@ -0,0 +1,6 @@ + +-Event.all.each do |event| + + %h4 + =event.title + = link_to i(:check_alt, :gray_light,12), "#",:onclick => "manager_send_cible("+event.id.to_s+", 'Folder', '#{escape_javascript(event.cible_name)}');return false;" if params[:manager] diff --git a/app/views/admin/product_categories/create.js.erb b/app/views/admin/product_categories/create.js.erb new file mode 100755 index 0000000..ed2d594 --- /dev/null +++ b/app/views/admin/product_categories/create.js.erb @@ -0,0 +1,4 @@ +close_pane_hover(); + +$('#product_category_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + diff --git a/app/views/admin/product_categories/destroy.js.erb b/app/views/admin/product_categories/destroy.js.erb new file mode 100755 index 0000000..0084c50 --- /dev/null +++ b/app/views/admin/product_categories/destroy.js.erb @@ -0,0 +1,4 @@ +$('#product_category_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + + +<%= flash_js %> diff --git a/app/views/admin/product_categories/edit.js.erb b/app/views/admin/product_categories/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_categories/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_categories/index.html.haml b/app/views/admin/product_categories/index.html.haml new file mode 100755 index 0000000..ba3d38a --- /dev/null +++ b/app/views/admin/product_categories/index.html.haml @@ -0,0 +1,13 @@ + + +.qi_header + %h1 + Boutique + %span + Liste des catégories + + + +.qi_row + .qi_pannel.qi_plain.padding + =render :partial => "index_block" diff --git a/app/views/admin/product_categories/index.js.erb b/app/views/admin/product_categories/index.js.erb new file mode 100755 index 0000000..8f29080 --- /dev/null +++ b/app/views/admin/product_categories/index.js.erb @@ -0,0 +1,13 @@ + + +if($('#product_category_index').length > 0){ + $('#product_category_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +} +else{ + + + $('body').html("<%= escape_javascript(render(:template => 'admin/product_categories/index.html.haml')) %>"); + +} + diff --git a/app/views/admin/product_categories/new.js.erb b/app/views/admin/product_categories/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_categories/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_categories/reorder.js.erb b/app/views/admin/product_categories/reorder.js.erb new file mode 100755 index 0000000..0084c50 --- /dev/null +++ b/app/views/admin/product_categories/reorder.js.erb @@ -0,0 +1,4 @@ +$('#product_category_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + + +<%= flash_js %> diff --git a/app/views/admin/product_categories/show.html.haml b/app/views/admin/product_categories/show.html.haml new file mode 100755 index 0000000..87b6d7a --- /dev/null +++ b/app/views/admin/product_categories/show.html.haml @@ -0,0 +1,25 @@ + + +.qi_header + %h1 + + Boutique + %span + Détail de la catégorie : + =@product_category.lang("fr").name + + + +.qi_row + .qi_pannel.qi_plain.padding + + =simple_format @product_category.lang("fr").description + + .sub_header + .right= link_to 'Ajouter une collection', new_admin_product_category_product_collection_path(@product_category), :class => "btn btn-primary", :remote => true + %h2 Collections + + + + + %table.table#product_collection_index=render @product_category.product_collections diff --git a/app/views/admin/product_categories/update.js.erb b/app/views/admin/product_categories/update.js.erb new file mode 100755 index 0000000..b286dc4 --- /dev/null +++ b/app/views/admin/product_categories/update.js.erb @@ -0,0 +1,4 @@ +$('#product_category_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); +<%= flash_js %> diff --git a/app/views/admin/product_categories/update_row.js.erb b/app/views/admin/product_categories/update_row.js.erb new file mode 100755 index 0000000..d5231d2 --- /dev/null +++ b/app/views/admin/product_categories/update_row.js.erb @@ -0,0 +1,2 @@ +close_pane_hover(); +$('#product_category_row_<%= @product_category.id %>').replaceWith("<%= escape_javascript(render(@product_category))%>"); diff --git a/app/views/admin/product_collections/_form.html.haml b/app/views/admin/product_collections/_form.html.haml new file mode 100755 index 0000000..654142a --- /dev/null +++ b/app/views/admin/product_collections/_form.html.haml @@ -0,0 +1,23 @@ += semantic_form_for [:admin, @product_category,@product_collection], :remote => true do |form| + = form.input :product_category_id, :as => :hidden + .content + + + + =form.semantic_fields_for :product_collection_langs do |product_collection_lang| + + + + = product_collection_lang.inputs do + = product_collection_lang.hidden_field :id + = product_collection_lang.hidden_field :lang + + = product_collection_lang.input :name, :as => :string, :label => "Nom (#{product_collection_lang.object.lang}) :" + = product_collection_lang.input :description, :as => :string, :label => "Description (#{product_collection_lang.object.lang}) :" + + = form.input :color, :label => "Couleur :" + .actions + = form.submit "Sauvegarder" + + + \ No newline at end of file diff --git a/app/views/admin/product_collections/_index_block.html.haml b/app/views/admin/product_collections/_index_block.html.haml new file mode 100755 index 0000000..e092f31 --- /dev/null +++ b/app/views/admin/product_collections/_index_block.html.haml @@ -0,0 +1,53 @@ +#product_collection_index + + %ul.breadcrumb + = link_to 'Ajouter une catégorie', new_admin_product_collection_path(:parent_id => params[:parent_id]), :class => "btn btn-primary",:remote => true, :style => "float:right;" + %li + -if @product_collection_parent + -@product_collection_parent.ancestors.reverse.each do |product_collection| + %li + =link_to product_collection.lang("fr").name, admin_product_collections_path( :parent_id =>product_collection.id), :remote => true + %span.divider / + + %li + =@product_collection_parent.lang("fr").name + %span.divider / + %p{:style => "clear:both;"} + + + + -if @product_collection_parent + .prevv_folder.receptable{:data => { :param_test => true, :parent_id => (@product_collection_parent.parent ? @product_collection_parent.parent.id : "no-menu-selected")} } + .row-fluid + .span1 + =i(:"folder-close", :icon => false) + + + .span2=link_to "...", admin_product_collections_path( :parent_id => (@product_collection_parent.parent ? @product_collection_parent.parent.id : nil)), :remote => true + + .span3 + + .span4 + + + .span2.actions + + + #sortable_product_collection{:data => {:parent_id => (@product_collection_parent ? @product_collection_parent.id : "")} } + + + + + + + + + -if @product_collections.size > 0 + =render @product_collections + -else + .no_product_collections + Il n'y a aucun éléments de menu actuellement. + + :javascript + + init_product_collections_list(); \ No newline at end of file diff --git a/app/views/admin/product_collections/_product_collection.html.haml b/app/views/admin/product_collections/_product_collection.html.haml new file mode 100755 index 0000000..7fefa55 --- /dev/null +++ b/app/views/admin/product_collections/_product_collection.html.haml @@ -0,0 +1,15 @@ +%tr#product_collection_row.product_collection_row{:id => product_collection.id} + %td + =product_collection.lang("fr").name + + %td.actions + + = link_to i(:"trash-o"), [:admin, product_collection.product_category,product_collection], :data =>{:remote => true, :confirm => 'Voulez-vous vraiment supprimer cet élément de menu ?'}, :method => :delete #, if current_admin.super_admin? || !product_collection.super_admin + + = link_to i(:eye), [:admin, product_collection.product_category, product_collection] + + = link_to i(:pencil), edit_admin_product_category_product_collection_path(product_collection.product_category,product_collection), :data => {:remote => true} + + + + diff --git a/app/views/admin/product_collections/cible.html.haml b/app/views/admin/product_collections/cible.html.haml new file mode 100755 index 0000000..a034103 --- /dev/null +++ b/app/views/admin/product_collections/cible.html.haml @@ -0,0 +1,6 @@ + +-Event.all.each do |event| + + %h4 + =event.title + = link_to i(:check_alt, :gray_light,12), "#",:onclick => "manager_send_cible("+event.id.to_s+", 'Folder', '#{escape_javascript(event.cible_name)}');return false;" if params[:manager] diff --git a/app/views/admin/product_collections/create.js.erb b/app/views/admin/product_collections/create.js.erb new file mode 100755 index 0000000..9a936c3 --- /dev/null +++ b/app/views/admin/product_collections/create.js.erb @@ -0,0 +1,5 @@ + + +$('#product_collection_index').html("<%= escape_javascript(render(@product_category.product_collections)) %>"); + +close_pane_hover(); \ No newline at end of file diff --git a/app/views/admin/product_collections/destroy.js.erb b/app/views/admin/product_collections/destroy.js.erb new file mode 100755 index 0000000..1c10e06 --- /dev/null +++ b/app/views/admin/product_collections/destroy.js.erb @@ -0,0 +1,2 @@ +$('#product_collection_row_<%= @product_collection.id %>').remove(); +<%= flash_js %> diff --git a/app/views/admin/product_collections/edit.js.erb b/app/views/admin/product_collections/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_collections/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_collections/index.html.haml b/app/views/admin/product_collections/index.html.haml new file mode 100755 index 0000000..3bc1db6 --- /dev/null +++ b/app/views/admin/product_collections/index.html.haml @@ -0,0 +1,6 @@ +.header + .right= link_to 'Ajouter une collection', new_admin_product_category_product_collection_path(@product_category), :class => "btn", :remote => true + %h1 Liste des collections + +.grid_12 + =render :partial => "index_block" diff --git a/app/views/admin/product_collections/index.js.erb b/app/views/admin/product_collections/index.js.erb new file mode 100755 index 0000000..ef2ed51 --- /dev/null +++ b/app/views/admin/product_collections/index.js.erb @@ -0,0 +1,13 @@ + + +if($('#product_collection_index').length > 0){ + $('#product_collection_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +} +else{ + + + $('body').html("<%= escape_javascript(render(:template => 'admin/product_collections/index.html.haml')) %>"); + +} + diff --git a/app/views/admin/product_collections/new.js.erb b/app/views/admin/product_collections/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_collections/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_collections/reorder.js.erb b/app/views/admin/product_collections/reorder.js.erb new file mode 100755 index 0000000..bbafe32 --- /dev/null +++ b/app/views/admin/product_collections/reorder.js.erb @@ -0,0 +1,4 @@ +$('#product_collection_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + + +<%= flash_js %> diff --git a/app/views/admin/product_collections/show.html.haml b/app/views/admin/product_collections/show.html.haml new file mode 100755 index 0000000..1fa56b6 --- /dev/null +++ b/app/views/admin/product_collections/show.html.haml @@ -0,0 +1,2 @@ +%h1 + =@product_collection.lang("fr").name \ No newline at end of file diff --git a/app/views/admin/product_collections/update.js.erb b/app/views/admin/product_collections/update.js.erb new file mode 100755 index 0000000..895a6a7 --- /dev/null +++ b/app/views/admin/product_collections/update.js.erb @@ -0,0 +1,4 @@ +$('#product_collection_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); +<%= flash_js %> diff --git a/app/views/admin/product_collections/update_row.js.erb b/app/views/admin/product_collections/update_row.js.erb new file mode 100755 index 0000000..7fde0c8 --- /dev/null +++ b/app/views/admin/product_collections/update_row.js.erb @@ -0,0 +1,2 @@ +close_pane_hover(); +$('#product_collection_row_<%= @product_collection.id %>').replaceWith("<%= escape_javascript(render(@product_collection))%>"); diff --git a/app/views/admin/product_images/_form.html.haml b/app/views/admin/product_images/_form.html.haml new file mode 100755 index 0000000..e45ef8b --- /dev/null +++ b/app/views/admin/product_images/_form.html.haml @@ -0,0 +1,19 @@ += semantic_form_for [:portlet, @product_image], :remote => true do |form| + .content + + %h3 Modifier les infos + + = form.inputs do + = form.input :title, :label => "Titre :" + = form.input :tags, :label => "Tags :" + = form.input :description, :label => "Description :", :as => :text, :input_html => {:class => "text_editor"} + + + + + .actions + =form.submit "Sauvegarder", :class => "btn btn-primary" + + + + diff --git a/app/views/admin/product_images/_product_image.html.haml b/app/views/admin/product_images/_product_image.html.haml new file mode 100755 index 0000000..507ad76 --- /dev/null +++ b/app/views/admin/product_images/_product_image.html.haml @@ -0,0 +1,9 @@ +-if product_image.image_file + .product_image.image_square#product_image{:id => product_image.id, :data => { :title => product_image.title , :description => product_image.description, :id => product_image.id} } + .img{:style => "background-image : url('#{product_image.image_file.file.large.medium.small.thumb.url}');"} + + .actions + =link_to i(:"trash-o"), [:admin, product_image], :data => {:confirm => 'Voulez-vous vraiment supprimer cette image ?'}, :method => :delete, :remote => true + =#link_to i(:pencil), edit_admin_product_image_path(product_image), :remote => true + + \ No newline at end of file diff --git a/app/views/admin/product_images/create.js.erb b/app/views/admin/product_images/create.js.erb new file mode 100755 index 0000000..ab4926b --- /dev/null +++ b/app/views/admin/product_images/create.js.erb @@ -0,0 +1 @@ +$('#product_images').prepend("<%= escape_javascript(render(@product_images)) %>"); \ No newline at end of file diff --git a/app/views/admin/product_images/destroy.js.erb b/app/views/admin/product_images/destroy.js.erb new file mode 100755 index 0000000..6a6b8d7 --- /dev/null +++ b/app/views/admin/product_images/destroy.js.erb @@ -0,0 +1,4 @@ + +$("#product_image_<%= @product_image.id.to_s %>").fadeOut(500).delay(6000).remove(); + +<%= flash_js %> \ No newline at end of file diff --git a/app/views/admin/product_images/edit.js.erb b/app/views/admin/product_images/edit.js.erb new file mode 100755 index 0000000..3d94bc2 --- /dev/null +++ b/app/views/admin/product_images/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>"); \ No newline at end of file diff --git a/app/views/admin/product_images/reorder.js.erb b/app/views/admin/product_images/reorder.js.erb new file mode 100755 index 0000000..e69de29 diff --git a/app/views/admin/product_images/update.js.erb b/app/views/admin/product_images/update.js.erb new file mode 100755 index 0000000..0249891 --- /dev/null +++ b/app/views/admin/product_images/update.js.erb @@ -0,0 +1,5 @@ +close_pane_hover(); +$('#product_image_<%= @product_image.id %>').effect("highlight", 1000); + + +<%= flash_js %> \ No newline at end of file diff --git a/app/views/admin/product_options/_form.html.haml b/app/views/admin/product_options/_form.html.haml new file mode 100755 index 0000000..4c502b9 --- /dev/null +++ b/app/views/admin/product_options/_form.html.haml @@ -0,0 +1,15 @@ +.field + .product_option_form + %hr + .product_option + + + =form.semantic_fields_for :product_option_langs do |product_option_lang| + = product_option_lang.inputs do + + = product_option_lang.hidden_field :id + = product_option_lang.hidden_field :lang + = product_option_lang.input :name, :as => :string, :label => product_option_lang.object.lang + + = link_to_remove_fields i(:"trash-o"), form + \ No newline at end of file diff --git a/app/views/admin/product_order_payments/_form.html.haml b/app/views/admin/product_order_payments/_form.html.haml new file mode 100755 index 0000000..5192c0a --- /dev/null +++ b/app/views/admin/product_order_payments/_form.html.haml @@ -0,0 +1,11 @@ += semantic_form_for [:admin,@product_order_payment], :remote => true do |form| + + .content + + + =form.input :paid_at, :label => "Payée le ?", :as => :qi_date_picker + =form.input :amount, :label => "Montant : " + + .actions + = form.submit "Sauvegarder", :class => "btn btn-primary" + \ No newline at end of file diff --git a/app/views/admin/product_order_payments/_product_order_payment.html.haml b/app/views/admin/product_order_payments/_product_order_payment.html.haml new file mode 100644 index 0000000..d676fe6 --- /dev/null +++ b/app/views/admin/product_order_payments/_product_order_payment.html.haml @@ -0,0 +1,20 @@ +%tr + %td=product_order_payment.token + %td=l product_order_payment.paid_at if product_order_payment.paid_at? + %td + -if product_order_payment.product_order_payment_type_id == 3 + CB + -elsif product_order_payment.product_order_payment_type_id == 1 + Chèque + + %td=product_order_payment.ogone_payid + %td=product_order_payment.ogone_status + %td=product_order_payment.ogone_ncerror + + %td + =product_order_payment.ogone_cardno + %td= number_to_currency product_order_payment.amount if product_order_payment.amount + + %td.actions + -if product_order_payment.product_order_payment_type_id == 1 + =link_to i(:pencil), edit_admin_product_order_payment_path(product_order_payment), :remote => true \ No newline at end of file diff --git a/app/views/admin/product_order_payments/create.js.erb b/app/views/admin/product_order_payments/create.js.erb new file mode 100755 index 0000000..f759dc5 --- /dev/null +++ b/app/views/admin/product_order_payments/create.js.erb @@ -0,0 +1,4 @@ +$('#product_orders').html("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); + diff --git a/app/views/admin/product_order_payments/edit.js.erb b/app/views/admin/product_order_payments/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_order_payments/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_order_payments/new.js.erb b/app/views/admin/product_order_payments/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_order_payments/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_order_payments/update.js.erb b/app/views/admin/product_order_payments/update.js.erb new file mode 100755 index 0000000..0ecd70b --- /dev/null +++ b/app/views/admin/product_order_payments/update.js.erb @@ -0,0 +1,4 @@ +$('#product_order_payments').html("<%= escape_javascript(render(@product_order_payment.product_order.product_order_payments)) %>"); + +close_pane_hover(); +<%= flash_js %> diff --git a/app/views/admin/product_order_products/_product_order_product.html.haml b/app/views/admin/product_order_products/_product_order_product.html.haml new file mode 100755 index 0000000..dc977ac --- /dev/null +++ b/app/views/admin/product_order_products/_product_order_product.html.haml @@ -0,0 +1,21 @@ +%tr + %td{:style => "width:280px"} + =image_tag product_order_product.product.default_image.image_file.file.large.medium.small.thumb.url if product_order_product.product and product_order_product.product.default_image + %td + -if product_order_product.product + =link_to admin_product_path(product_order_product.product) do + = product_order_product.archived_product.lang(:fr).title + -else + = product_order_product.archived_product.lang(:fr).title + + %td + = product_order_product.archived_product_size.name if product_order_product.archived_product_size + %td + = product_order_product.archived_product_option.lang(I18n.locale).name if product_order_product.archived_product_option + + %td + = number_to_currency(product_order_product.archived_product.final_price_ttc.to_f, locale: :fr) if product_order_product.archived_product + %td + =product_order_product.qty + %td + = number_to_currency(product_order_product.archived_final_price_ttc_with_qty, locale: :fr) if product_order_product.archived_product diff --git a/app/views/admin/product_orders/_form.html.haml b/app/views/admin/product_orders/_form.html.haml new file mode 100755 index 0000000..1520642 --- /dev/null +++ b/app/views/admin/product_orders/_form.html.haml @@ -0,0 +1,10 @@ += semantic_form_for [:admin,@product_order], :remote => true do |form| + + .content + + =form.input :paid, :label => "Payée ?" + =form.input :paid_at, :label => "Payée le ?", :as => :qi_datepicker + + .actions + = form.submit "Sauvegarder", :class => "btn btn-primary" + \ No newline at end of file diff --git a/app/views/admin/product_orders/_index_block.html.haml b/app/views/admin/product_orders/_index_block.html.haml new file mode 100755 index 0000000..c68149f --- /dev/null +++ b/app/views/admin/product_orders/_index_block.html.haml @@ -0,0 +1,17 @@ +%table.table#product_orders + %tr + %th ID + %th + Nom + %th Pays d'exp. + %th + Paiement + %th + Payé ? + + %th + Total + %th + Numéro facture + %th + =render @product_orders diff --git a/app/views/admin/product_orders/_product_order.html.haml b/app/views/admin/product_orders/_product_order.html.haml new file mode 100755 index 0000000..765d579 --- /dev/null +++ b/app/views/admin/product_orders/_product_order.html.haml @@ -0,0 +1,46 @@ +%tr#product_order_row.product_order_row{:id => product_order.id, :class => ("success" if product_order.shiped)} + %td + =product_order.id + %td + -if product_order.particular_bill + =product_order.particular_bill.name + =product_order.particular_bill.firstname + %td + =product_order.particular_send.country + + %td + -if product_order.product_order_payment_type_ok_id == 3 + CB + -elsif product_order.product_order_payment_type_ok_id == 1 + Chèque + %td + ="oui" if product_order.paid + + + + + + + %td + =number_to_currency product_order.archived_total_ttc + + + %td + -if product_order.paid + =link_to product_order.bill_number, bill_admin_product_order_path(product_order), :target => "_blank" + + + + + + + %td.actions + + =# link_to i(:"trash-o"), [:admin, product_order], :data =>{:remote => true, :confirm => 'Voulez-vous vraiment supprimer cet élément de menu ?'}, :method => :delete #, if current_admin.super_admin? || !product_order.super_admin + = link_to i(:eye), [:admin, product_order] + =# link_to i(:pencil), edit_admin_product_order_path(product_order), :data => {:remote => true} + + + + + diff --git a/app/views/admin/product_orders/bill.html.haml b/app/views/admin/product_orders/bill.html.haml new file mode 100644 index 0000000..6cf86d8 --- /dev/null +++ b/app/views/admin/product_orders/bill.html.haml @@ -0,0 +1,232 @@ +!!! +%html + %head + + %meta{:"http-equiv" => "Content-Type", :content=>"text/html; charset=UTF-8"} + %meta{:name=>"viewport", :content=>"width=device-width,initial-scale=1"} + :css + body{ + font-size:11pt; + padding :0px; + margin:0px; + background-color: transparent; + + font-family:"Arial" ; + padding:1cm; + } + #main{ + //margin-left:4.2cm; + + } + td, th{ + //border:1px solid black; + padding:5px; + vertical-align:top; + + } + th{ + font-weight:normal; + border-bottom:1px solid gray; + text-align:left; + } + + table{ + border-collapse:collapse; + + + + } + + tr{ + page-break-inside:avoid; + + } + + #bottom{ + page-break-inside:avoid; + + } + .right{ + text-align:right; + + } + .line p{ + margin:0px; + } + .description{ + padding-top:2pt; + display:block; + + } + + .bot_separate{ + height:50pt; + + } + + .upcase{ + + text-transform:uppercase; + } + + h3{ + + font-size:1em; + margin-bottom:5px; + font-weight:normal; + } + + + + + + + + + + %body + #main + + %div{:style => "position:absolute;top:1cm;right:1cm;text-align:right;"} + Facture n° + =@product_order.bill_number + %br + =l @product_order.paid_at, :format => :date + + + %div{:style => "height:300px;"} + + + + %table.table{:style => "position:absolute;right:1cm;top:220px"} + %tr + %td{:style => "min-width:6cm;"} + %h3 Adresse de facturation + + %strong + =@product_order.particular_bill.firstname + + =@product_order.particular_bill.name + %br + =@product_order.particular_bill.address_2 + + -if @product_order.particular_bill.address_3? + %br + =@product_order.particular_bill.address_3 + %br + =@product_order.particular_bill.cp + + =@product_order.particular_bill.city + %br + =@product_order.particular_bill.country + + + %td + %h3 Adresse de livraison + + %strong + =@product_order.particular_send.firstname + + =@product_order.particular_send.name + %br + =@product_order.particular_send.address_2 + + -if @product_order.particular_send.address_3? + %br + =@product_order.particular_send.address_3 + %br + =@product_order.particular_send.cp + + =@product_order.particular_send.city + %br + =@product_order.particular_send.country + + %table.table{:style => "width:100%;margin:1cm 0;"} + %tr + %th + Description + %th + Taille + %th + Option + %th + Qté + %th + Unitaire + %th + Montant + -@product_order.product_order_products.order(:product_id).each do |product_order_product| + + %tr + + %td + = product_order_product.archived_product.lang(:fr).title + + %td + = product_order_product.archived_product_size.name if product_order_product.archived_product_size + %td + = product_order_product.archived_product_option.lang(I18n.locale).name if product_order_product.archived_product_option + + %td + = number_to_currency(product_order_product.archived_product.final_price_ttc.to_f, locale: :fr) if product_order_product.archived_product + %td + =product_order_product.qty + %td + = number_to_currency(product_order_product.archived_final_price_ttc_with_qty, locale: :fr) if product_order_product.archived_product + + + + + %tr + %td{:colspan => 4, :style => "border:0;"} + %td Total : + %td= number_to_currency(@product_order.archived_total_articles, locale: :fr) + + -if @product_order.vourcher_code_archived + %tr + %td{:colspan => 4, :style => "border:0;"} + %td + =qit "Code réduction tableau", "Code de réduction " + ="("+@product_order.vourcher_code_archived.slug+") :" + %td + ="-" + =number_to_currency @product_order.archived_vourcher_reduction, locale: :fr + + %tr + %td{:colspan => 4, :style => "border:0;"} + %td Frais de port : + %td= number_to_currency(@product_order.archived_total_fdp, locale: :fr) + %tr + %td{:colspan => 4, :style => "border:0;"} + %td + %strong Total : + %td + %strong + = number_to_currency(@product_order.archived_total_ttc, locale: :fr) + + + %p + Mode de paiment : + -if @product_order.product_order_payment_type_ok_id == 3 + CB + -elsif @product_order.product_order_payment_type_ok_id == 1 + Chèque + %br + %p + Association à but non lucratif, non soumise à la TVA + %br + TVA non applicable, article 293B du code général des impots + " + + + + + \ No newline at end of file diff --git a/app/views/admin/product_orders/create.js.erb b/app/views/admin/product_orders/create.js.erb new file mode 100755 index 0000000..f759dc5 --- /dev/null +++ b/app/views/admin/product_orders/create.js.erb @@ -0,0 +1,4 @@ +$('#product_orders').html("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); + diff --git a/app/views/admin/product_orders/destroy.js.erb b/app/views/admin/product_orders/destroy.js.erb new file mode 100755 index 0000000..8a8b7d4 --- /dev/null +++ b/app/views/admin/product_orders/destroy.js.erb @@ -0,0 +1,2 @@ +$('#product_order_row_<%= @product_order.id %>').remove(); +<%= flash_js %> diff --git a/app/views/admin/product_orders/edit.js.erb b/app/views/admin/product_orders/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_orders/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_orders/index.html.haml b/app/views/admin/product_orders/index.html.haml new file mode 100755 index 0000000..bef4dca --- /dev/null +++ b/app/views/admin/product_orders/index.html.haml @@ -0,0 +1,13 @@ +.qi_header + .right=# link_to 'Ajouter une taille', new_admin_product_size_path, :class => "btn btn-primary", :remote => true + %h1 + + Boutique + %span + Liste des commandes + + + +.qi_row + .qi_pannel.qi_plain.padding + =render :partial => "index_block" diff --git a/app/views/admin/product_orders/index.js.erb b/app/views/admin/product_orders/index.js.erb new file mode 100755 index 0000000..c412429 --- /dev/null +++ b/app/views/admin/product_orders/index.js.erb @@ -0,0 +1,13 @@ + + +if($('#product_order_index').length > 0){ + $('#product_order_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +} +else{ + + + $('body').html("<%= escape_javascript(render(:template => 'admin/product_orders/index.html.haml')) %>"); + +} + diff --git a/app/views/admin/product_orders/new.js.erb b/app/views/admin/product_orders/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_orders/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_orders/show.html.haml b/app/views/admin/product_orders/show.html.haml new file mode 100755 index 0000000..0df6979 --- /dev/null +++ b/app/views/admin/product_orders/show.html.haml @@ -0,0 +1,104 @@ +.qi_header + .right=# link_to 'Ajouter une taille', new_admin_product_size_path, :class => "btn btn-primary", :remote => true + %h1 + + Boutique + %span + Détail de la commande + ="#"+@product_order.id.to_s + + + +.qi_row + .qi_pannel.qi_plain.padding + + + %p + Payée ? + ="oui" if @product_order.paid + =link_to "Facture", bill_admin_product_order_path(@product_order) + + + -if @product_order.paid + -if !@product_order.shiped + %p + =link_to ic(:truck)+" Signaler comme expédiée", ship_admin_product_order_path(@product_order), :data => {:confirm => "Les stocks seront mis à jour"}, :class => "btn btn-success" + -else + %p + Envoyée le + =l @product_order.shiped_at if @product_order.shiped_at? + + + %p + Mode de paiment : + -if @product_order.product_order_payment_type_ok_id == 3 + CB + -elsif @product_order.product_order_payment_type_ok_id == 1 + Chèque + + + %table.table + %tr + %td + %h3 Adresse de facturation + =render @product_order.particular_bill if @product_order.particular_bill + %td + %h3 Adresse de livraison + =render @product_order.particular_send if @product_order.particular_send + + %table.table + =render @product_order.product_order_products.order(:product_id) + + + %tr + %td{:colspan => 5, :style => "border:0;"} + %td Total : + %td= number_to_currency(@product_order.archived_total_articles, locale: :fr) + + -if @product_order.vourcher_code_archived + %tr + %td{:colspan => 5, :style => "border:0;"} + %td + =qit "Code réduction tableau", "Code de réduction " + ="("+@product_order.vourcher_code_archived.slug+") :" + %td + ="-" + =number_to_currency @product_order.archived_vourcher_reduction, locale: :fr + + %tr + %td{:colspan => 5, :style => "border:0;"} + %td Frais de port : + %td= number_to_currency(@product_order.archived_total_fdp, locale: :fr) + %tr + %td{:colspan => 5, :style => "border:0;"} + %td + %strong Total : + %td + %strong + = number_to_currency(@product_order.archived_total_ttc, locale: :fr) + .fdp + %table.table + %tr + %td + =@product_order.product_fdp_archived.fdp_description + %td + =number_to_currency @product_order.product_fdp_archived.price + %br + %table.table + %thead + %tr + %th Identifiant paiement + %th Date de paiement + %th Type de paiement + + %th ID Ogone + %th Status Ogone + %th Erreur Ogone + %th N°Carte + %th Montant + %th + + + %tbody#product_order_payments + =render @product_order.product_order_payments.order("created_at DESC") + diff --git a/app/views/admin/product_orders/update.js.erb b/app/views/admin/product_orders/update.js.erb new file mode 100755 index 0000000..b87b342 --- /dev/null +++ b/app/views/admin/product_orders/update.js.erb @@ -0,0 +1,4 @@ +$('#product_order_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); +<%= flash_js %> diff --git a/app/views/admin/product_orders/update_row.js.erb b/app/views/admin/product_orders/update_row.js.erb new file mode 100755 index 0000000..ebf056e --- /dev/null +++ b/app/views/admin/product_orders/update_row.js.erb @@ -0,0 +1,2 @@ +$('#product_order_row_<%= @product_order.id %>').replaceWith("<%= escape_javascript(render(@product_order))%>"); +close_pane_hover(); \ No newline at end of file diff --git a/app/views/admin/product_sizes/_form.html.haml b/app/views/admin/product_sizes/_form.html.haml new file mode 100755 index 0000000..89a0d69 --- /dev/null +++ b/app/views/admin/product_sizes/_form.html.haml @@ -0,0 +1,7 @@ += semantic_form_for [:admin,@product_size], :remote => true do |form| + + .content + = form.input :name + .actions + = form.submit "Sauvegarder" + \ No newline at end of file diff --git a/app/views/admin/product_sizes/_product_size.html.haml b/app/views/admin/product_sizes/_product_size.html.haml new file mode 100755 index 0000000..235c3d4 --- /dev/null +++ b/app/views/admin/product_sizes/_product_size.html.haml @@ -0,0 +1,12 @@ + +%tr#product_size.product_size{:id => product_size.id} + %td=product_size.name + + %td.actions + = link_to i(:"trash-o"), [:admin, product_size], :data =>{:remote => true, :confirm => 'Voulez-vous vraiment supprimer cette taille ? Elle sera supprimée de tous les produits qui la contenait'}, :method => :delete + + = link_to i(:pencil), edit_admin_product_size_path(product_size), :data => {:remote => true} + + + + diff --git a/app/views/admin/product_sizes/create.js.erb b/app/views/admin/product_sizes/create.js.erb new file mode 100755 index 0000000..36a9dcf --- /dev/null +++ b/app/views/admin/product_sizes/create.js.erb @@ -0,0 +1,4 @@ +close_pane_hover(); + +$('#product_sizes').html("<%= escape_javascript(render(@product_sizes)) %>"); + diff --git a/app/views/admin/product_sizes/destroy.js.erb b/app/views/admin/product_sizes/destroy.js.erb new file mode 100755 index 0000000..c6f8409 --- /dev/null +++ b/app/views/admin/product_sizes/destroy.js.erb @@ -0,0 +1,5 @@ + +$('#product_size_<%= @product_size.id %>').remove(); + + +<%= flash_js %> diff --git a/app/views/admin/product_sizes/edit.js.erb b/app/views/admin/product_sizes/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_sizes/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_sizes/index.html.haml b/app/views/admin/product_sizes/index.html.haml new file mode 100755 index 0000000..2a8498f --- /dev/null +++ b/app/views/admin/product_sizes/index.html.haml @@ -0,0 +1,18 @@ +.qi_header + .right= link_to 'Ajouter une taille', new_admin_product_size_path, :class => "btn btn-primary", :remote => true + %h1 + + Boutique + %span + Liste des tailles + + + +.qi_row + .qi_pannel.qi_plain.padding + %table.table + %tr + %th + Nom + %th + %tbody#product_sizes=render @product_sizes diff --git a/app/views/admin/product_sizes/new.js.erb b/app/views/admin/product_sizes/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/product_sizes/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/product_sizes/update_row.js.erb b/app/views/admin/product_sizes/update_row.js.erb new file mode 100755 index 0000000..7092f40 --- /dev/null +++ b/app/views/admin/product_sizes/update_row.js.erb @@ -0,0 +1,2 @@ +close_pane_hover(); +$('#product_size_<%= @product_size.id %>').replaceWith("<%= escape_javascript(render(@product_size))%>"); diff --git a/app/views/admin/products/_form.html.haml b/app/views/admin/products/_form.html.haml new file mode 100755 index 0000000..67e2f17 --- /dev/null +++ b/app/views/admin/products/_form.html.haml @@ -0,0 +1,42 @@ += semantic_form_for [:admin,@product], :remote => true do |form| + + .content + =form.input :reseaux_id, :label => "Réseau :", :collection => Reseaux.where(:parent_id => nil).all, :as => :select, :include_blank => false + + =#form.input :product_category_id, :label => "Catégorie :", :collection => @categories_select, :as => :select, :include_blank => false + + -if @product.product_category_id + =form.input :product_collection_id, :label => "Collection :", :collection => ProductCollection.where(:product_category_id => @product.product_category_id).map{|i| [i.lang("fr").name, i.id]}, :as => :select, :include_blank => true + + =form.semantic_fields_for :product_langs do |product_lang| + + + + = product_lang.inputs do + = product_lang.hidden_field :id + = product_lang.hidden_field :lang + = product_lang.input :title, :as => :string, :label => "Nom (#{product_lang.object.lang}) :" + = product_lang.input :description, :label => "Descirption (#{product_lang.object.lang}) :" + + =form.input :price_ht, :label => "Prix (HT) :" + =form.input :price_reduced_ht, :label => "Prix (HT) avec réduction :" + + + + %hr + %h3 + Options + %p= link_to_add_fields "Ajouter une ligne", form, :product_options + + .product_options_form + =form.semantic_fields_for :product_options do |form| + =render :partial => "admin/product_options/form", :locals => {:form => form} + %hr + %h3 Tailles possibles : + =form.input :product_sizes, :collection => ProductSize.where("archived is null").order(:position).all, :as => :check_boxes, :label => "Tailles" + + + + .actions + = form.submit "Sauvegarder", :class => "btn btn-primary" + \ No newline at end of file diff --git a/app/views/admin/products/_index_block.html.haml b/app/views/admin/products/_index_block.html.haml new file mode 100755 index 0000000..26d61dd --- /dev/null +++ b/app/views/admin/products/_index_block.html.haml @@ -0,0 +1,35 @@ +%table.table#products + %thead + %tr + %th + %th + Catégorie + %th + Nom du produit + %th + %tbody.products_sortable=render @products + + +:coffeescript + + adjustment = "" + + $('.products_sortable').sortable({ + itemSelector:".gallery_image", + stop: (event, ui) -> + + result = [] + $(".product_row").each -> + result.push $(this).data("id") + + + $.ajax({ + url:"/admin/products/reorder.js", + type: "POST", + data: { + products_ids : result, + test: "jj" + } + + }) + }); \ No newline at end of file diff --git a/app/views/admin/products/_product.html.haml b/app/views/admin/products/_product.html.haml new file mode 100755 index 0000000..3d3c4bc --- /dev/null +++ b/app/views/admin/products/_product.html.haml @@ -0,0 +1,19 @@ +%tr#product_row.product_row{:id => product.id, :data => {:id => product.id}} + %td{:style => "width:200px;"} + =image_tag product.default_image.image_file.file.large.medium.small.thumb.url if product.default_image + %td + =product.product_category.lang("fr").name if product.product_category + %td + =product.lang("fr").title + + %td.actions + + = link_to i(:"trash-o"), [:admin, product], :data =>{:remote => true, :confirm => 'Voulez-vous vraiment supprimer cet élément de menu ?'}, :method => :delete #, if current_admin.super_admin? || !product.super_admin + = link_to i(:eye), [:admin, product] + = link_to i(:"shopping-cart"), stock_admin_product_path(product), :data => {:remote => true} + = link_to i(:pencil), edit_admin_product_path(product), :data => {:remote => true} + + + + + diff --git a/app/views/admin/products/_stock_form.html.haml b/app/views/admin/products/_stock_form.html.haml new file mode 100755 index 0000000..1cc6a99 --- /dev/null +++ b/app/views/admin/products/_stock_form.html.haml @@ -0,0 +1,26 @@ += semantic_form_for [:admin,@product], :remote => true do |form| + + .content + %table.table + %tr + %td Option + %td Taille + %td Stock théorique + %td Stock réél + + =form.semantic_fields_for :product_stocks do |product_stock| + + = product_stock.inputs do + %tr + %td + = product_stock.object.product_option.lang(I18n.locale).name if product_stock.object.product_option + %td + = product_stock.object.product_size.name if product_stock.object.product_size + + + %td=product_stock.text_field :stock_th + %td=product_stock.text_field :stock + + .actions + = form.submit "Sauvegarder", :class => "btn btn-primary" + \ No newline at end of file diff --git a/app/views/admin/products/cible.html.haml b/app/views/admin/products/cible.html.haml new file mode 100755 index 0000000..a034103 --- /dev/null +++ b/app/views/admin/products/cible.html.haml @@ -0,0 +1,6 @@ + +-Event.all.each do |event| + + %h4 + =event.title + = link_to i(:check_alt, :gray_light,12), "#",:onclick => "manager_send_cible("+event.id.to_s+", 'Folder', '#{escape_javascript(event.cible_name)}');return false;" if params[:manager] diff --git a/app/views/admin/products/create.js.erb b/app/views/admin/products/create.js.erb new file mode 100755 index 0000000..fca8275 --- /dev/null +++ b/app/views/admin/products/create.js.erb @@ -0,0 +1,4 @@ +$('#products').html("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); + diff --git a/app/views/admin/products/destroy.js.erb b/app/views/admin/products/destroy.js.erb new file mode 100755 index 0000000..3eb9aef --- /dev/null +++ b/app/views/admin/products/destroy.js.erb @@ -0,0 +1,2 @@ +$('#product_row_<%= @product.id %>').remove(); +<%= flash_js %> diff --git a/app/views/admin/products/edit.js.erb b/app/views/admin/products/edit.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/products/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/products/index.html.haml b/app/views/admin/products/index.html.haml new file mode 100755 index 0000000..9c0c499 --- /dev/null +++ b/app/views/admin/products/index.html.haml @@ -0,0 +1,15 @@ + + +.qi_header + .right= link_to 'Ajouter un produit', new_admin_product_path, :class => "btn btn-success", :remote => true + %h1 + + Boutique + %span + Liste des produits + + + +.qi_row + .qi_pannel.qi_plain.padding + =render :partial => "index_block" diff --git a/app/views/admin/products/index.js.erb b/app/views/admin/products/index.js.erb new file mode 100755 index 0000000..ac9e769 --- /dev/null +++ b/app/views/admin/products/index.js.erb @@ -0,0 +1,13 @@ + + +if($('#product_index').length > 0){ + $('#product_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +} +else{ + + + $('body').html("<%= escape_javascript(render(:template => 'admin/products/index.html.haml')) %>"); + +} + diff --git a/app/views/admin/products/new.js.erb b/app/views/admin/products/new.js.erb new file mode 100755 index 0000000..06a7cbc --- /dev/null +++ b/app/views/admin/products/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/products/reorder.js.erb b/app/views/admin/products/reorder.js.erb new file mode 100755 index 0000000..827e69c --- /dev/null +++ b/app/views/admin/products/reorder.js.erb @@ -0,0 +1,4 @@ +$('#product_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + + +<%= flash_js %> diff --git a/app/views/admin/products/show.html.haml b/app/views/admin/products/show.html.haml new file mode 100755 index 0000000..5b83bcc --- /dev/null +++ b/app/views/admin/products/show.html.haml @@ -0,0 +1,49 @@ +.qi_header + .right + = link_to i(:"shopping-cart"), stock_admin_product_path(@product), :data => {:remote => true} + = link_to i(:pencil), edit_admin_product_path(@product), :data => {:remote => true} + %h1 + + Boutique + %span + Détail d'un produit : + =@product.lang("fr").title + + + +.qi_row + + + + .qi_pannel.qi_plain.padding + =simple_format @product.lang("fr").description + .qi_sub_header + %h2 Images du produit + + %p + =link_to "Ajouter des images", "#", :onclick => "select_product_images_from_manager('#{@product.id.to_s}');return false;", :class => "btn btn-primary" + %br + #product_images + =render :collection => @product.product_images.order("position"), :partial => "admin/product_images/product_image" + %p{:style => "clear:both;"} + + :coffeescript + + adjustment = "" + + $('#product_images').sortable({ + + stop: () -> + result = [] + $(this).find(".product_image").each -> + result.push $(this).data("id") + + $.ajax({ + url:"/admin/product_images/reorder.js", + type: "GET", + data: { + order : result + } + + }) + }); \ No newline at end of file diff --git a/app/views/admin/products/stock.js.erb b/app/views/admin/products/stock.js.erb new file mode 100755 index 0000000..dbe1a88 --- /dev/null +++ b/app/views/admin/products/stock.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "stock_form"))%>",550,600); \ No newline at end of file diff --git a/app/views/admin/products/update.js.erb b/app/views/admin/products/update.js.erb new file mode 100755 index 0000000..d12b3e3 --- /dev/null +++ b/app/views/admin/products/update.js.erb @@ -0,0 +1,4 @@ +$('#product_index').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); + +close_pane_hover(); +<%= flash_js %> diff --git a/app/views/admin/products/update_row.js.erb b/app/views/admin/products/update_row.js.erb new file mode 100755 index 0000000..dc81b6c --- /dev/null +++ b/app/views/admin/products/update_row.js.erb @@ -0,0 +1,2 @@ +$('#product_row_<%= @product.id %>').replaceWith("<%= escape_javascript(render(@product))%>"); +close_pane_hover(); \ No newline at end of file diff --git a/app/views/admin/reseauxes/_form.html.haml b/app/views/admin/reseauxes/_form.html.haml index f9ff6ac..b3e0f31 100755 --- a/app/views/admin/reseauxes/_form.html.haml +++ b/app/views/admin/reseauxes/_form.html.haml @@ -12,5 +12,9 @@ -if !@reseaux.parent =f.input :chef_reseau, :label => "Chef réseau : ", :collection => Customer.where(:chef_reseau => true).pluck(Arel.sql("CONCAT(`firstname`, ' ', `name`)"), :id) - + + =f.input :logo_image_file_id, :label => "Logo :", :as => :qi_image_select + =f.input :background_image_file_id, :label => "Image de fond :", :as => :qi_image_select + + .actions= f.submit "Sauvegarder", :class => "btn btn-primary" diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index fa920b6..9c3e3c1 100755 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -58,7 +58,19 @@ %li= link_to " Contacts", admin_conversations_path %li= link_to "Moniteur d'activité", admin_connected_customers_path %li= link_to "Réseaux", admin_reseauxes_path - + + %li.dropdown + %a{:href => "#", :class => "dropdown-toggle", :data => {:toggle => "dropdown"}} + Boutique + %b.caret + %ul.dropdown-menu + %li= link_to "Catégories", admin_product_categories_path + %li= link_to "Produits", admin_products_path + %li= link_to "Tailles", admin_product_sizes_path + %li= link_to "Commandes", admin_product_orders_path + %li=# link_to "Codes de reduction", admin_vourcher_codes_path + + %ul.nav.navbar-nav.navbar-right %li.dropdown %a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"} diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index 27efb78..ee8c85d 100755 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -27,25 +27,32 @@ - %body + %body{:class => ("reseaux_body " if @reseaux_layout).to_s} .top - + #menu =render :partial => "public/shared/menu" .clear - - - - -if @biglogo - =link_to image_tag("/logo.png", :id => "big-logo"), "/" + + -if @reseaux_layout + =link_to image_tag("/logo-mb.png", :id => "logo-mb"), "/" + -if @reseaux_layout + .reseaux_top{:style => "background-image:url('"+(@reseaux.background_image_file.file.large.url if @reseaux.background_image_file).to_s+"');"} + =link_to "" do + =image_tag @reseaux.logo_image_file.file.large.url, :class => "logo_reseaux" if @reseaux.logo_image_file + + -else - =link_to image_tag("/logo.png", :id => "logo"), "/" + -if @biglogo + =link_to image_tag("/logo.png", :id => "big-logo"), "/" + -else + =link_to image_tag("/logo.png", :id => "logo"), "/" #main .body-container diff --git a/app/views/public/product_categories/_bandeau.html.haml b/app/views/public/product_categories/_bandeau.html.haml new file mode 100644 index 0000000..0b3e2aa --- /dev/null +++ b/app/views/public/product_categories/_bandeau.html.haml @@ -0,0 +1,5 @@ +=link_to public_product_category_path(:id => product_category.id, :slug => product_category.lang(I18n.locale).slug) do + .category-container + =image_tag product_category.image_file.file.url if product_category.image_file + .category-title + = product_category.lang(I18n.locale).name \ No newline at end of file diff --git a/app/views/public/product_categories/_product_category.html.haml b/app/views/public/product_categories/_product_category.html.haml new file mode 100755 index 0000000..74334c7 --- /dev/null +++ b/app/views/public/product_categories/_product_category.html.haml @@ -0,0 +1,5 @@ +%li + =link_to product_category.lang(I18n.locale).name, public_product_category_path(:id => product_category.id, :slug => product_category.lang(I18n.locale).slug), :class => ("active" if @product_category and product_category.id == @product_category.id) if product_category.lang(I18n.locale).slug? + + %ul + = render product_category.children.order(:position) \ No newline at end of file diff --git a/app/views/public/product_categories/index.html.haml b/app/views/public/product_categories/index.html.haml new file mode 100644 index 0000000..fdfdb8f --- /dev/null +++ b/app/views/public/product_categories/index.html.haml @@ -0,0 +1,21 @@ +-@facebook_img = "/fb-boutique.jpg" +-@description = " " +-@title = "La boutique One Voice" + + +-ProductCategory.order(:position).all.each do |product_category| + %center + %h2=product_category.lang("fr").name + =render :partial => "public/products/product_index", :locals => {:products => product_category.products.not_archived.limit(30)} + -if product_category.products.not_archived.count > 30 + %p=link_to "Voir tous les articles de la catégorie "+product_category.lang("fr").name+" (#{product_category.products.not_archived.count}) >", public_product_category_path(:id => product_category.id, :slug => product_category.lang(I18n.locale).slug) + + %br + %br + %br + .clear + +%br +%br +%br +%br diff --git a/app/views/public/product_categories/show.html.haml b/app/views/public/product_categories/show.html.haml new file mode 100755 index 0000000..3b3e472 --- /dev/null +++ b/app/views/public/product_categories/show.html.haml @@ -0,0 +1,52 @@ +#product_category_container{:id => @product_category.id} + -if @product_category.color? + + .product_category_top{:class =>( "big_cat" if @product_category.children.count > 0 )} + + %h1.category-title + =@product_category_lang.name + -if @product_category_lang.description? + .description + -if @product_category.image_file_left + =image_tag @product_category.image_file_left.file.large.medium.small.thumb.url, :class => "left_image" + -if @product_category.image_file_right + =image_tag @product_category.image_file_right.file.large.medium.small.thumb.url, :class => "right_image" + + + =@product_category_lang.description + + .clear + -if @product_category.top_image_id + %center=image_tag @product_category.top_image.file.large.url + + + =render @product_category.product_collections + -if @product_category.products.not_archived.where(:product_collection_id => nil).count > 0 + =render :partial => "public/products/product_index", :locals => {:products => @product_category.products.not_archived.where(:product_collection_id => nil)} + + + +-content_for :bandeau do + =render :partial => "public/product_categories/bandeau",:collection => @product_category.children.order(:position), :as => :product_category diff --git a/app/views/public/product_collections/_product_collection.html.haml b/app/views/public/product_collections/_product_collection.html.haml new file mode 100755 index 0000000..584ff13 --- /dev/null +++ b/app/views/public/product_collections/_product_collection.html.haml @@ -0,0 +1,32 @@ +.collection#product_collection_container{:id => product_collection.id} + %h2 + %span=product_collection.lang(I18n.locale).name + collection + + .collection_products + =render :partial => "public/products/product_index", :locals => {:products => product_collection.products.not_archived} + + -if product_collection.color? + \ No newline at end of file diff --git a/app/views/public/product_customers/_new_form.haml b/app/views/public/product_customers/_new_form.haml new file mode 100755 index 0000000..6ee6fbf --- /dev/null +++ b/app/views/public/product_customers/_new_form.haml @@ -0,0 +1,22 @@ + +#new_product_customer_form_container + + %h1= qit "Pas encore de compte ?", "Pas encore de compte ?" + + = semantic_form_for [:public, @product_customer] do |f| + + =f.inputs do + + + + + = f.input :email, :label => qit("email-label","email :"), :placeholder => qit("email","Email") + + = f.input :password, :label => qit("password-label","Mot de passe :"), :placeholder => qit("password","Mot de passe") + + + + + + =f.submit qit("account-create-save","Créer mon compte !"), :class => "btn btn-primary order_button" + diff --git a/app/views/public/product_customers/new.haml b/app/views/public/product_customers/new.haml new file mode 100755 index 0000000..6f27fa4 --- /dev/null +++ b/app/views/public/product_customers/new.haml @@ -0,0 +1,2 @@ + +=render :partial => "public/product_customers/new_form" diff --git a/app/views/public/product_customers_auths/new.haml b/app/views/public/product_customers_auths/new.haml new file mode 100755 index 0000000..707e51c --- /dev/null +++ b/app/views/public/product_customers_auths/new.haml @@ -0,0 +1,42 @@ +.forum_connect + + .connexion + + .inner + + .formtastic + + .connexion_form + + + + %h1= qit "Vous avez déjà un compte title", "Vous avez déjà un compte ?" + + = form_tag public_product_customers_auths_path do + =hidden_field_tag :for_annonce, params[:for_annonce] + =hidden_field_tag :for_mail, params[:for_mail] + + + %p + = label_tag :email, qit("email-label","email :") + + = text_field_tag :email, params[:email], :class => "form-control", :placeholder => qit("email","Email") + + %p + = label_tag :password, qit("password-label","Mot de passe :") + + = password_field_tag :password, "", :class => "form-control", :placeholder => qit("password","Mot de passe") + + %p + =check_box_tag :remember_me, 1,params[:remember_me], :style => "display:inline-block;width:auto;" + = label_tag :remember_me, qit("keep-connect-label","Rester connecté ?"), :style => "display:inline-block;width:auto;" + + %p + + = submit_tag qit("login-submit", "Se connecter"), :class => "btn btn-primary order_button" + %p + =link_to qit("lost-password","Mot de passe perdu ?"), new_public_password_reset_path + + .inscription + .inner + =render :partial => "public/product_customers/new_form" \ No newline at end of file diff --git a/app/views/public/product_images/_product_image.html.haml b/app/views/public/product_images/_product_image.html.haml new file mode 100755 index 0000000..aabf98f --- /dev/null +++ b/app/views/public/product_images/_product_image.html.haml @@ -0,0 +1,3 @@ +-if product_image.image_file + .product_image + =image_tag product_image.image_file.file.large.medium.small.url \ No newline at end of file diff --git a/app/views/public/product_order_products/_product_order_product.html.haml b/app/views/public/product_order_products/_product_order_product.html.haml new file mode 100755 index 0000000..4f8e8df --- /dev/null +++ b/app/views/public/product_order_products/_product_order_product.html.haml @@ -0,0 +1,29 @@ +%tr + %td{:style => "width:100px"} + =link_to public_product_path(:id => product_order_product.product.id, :slug => product_order_product.product.lang(I18n.locale).slug) do + =image_tag product_order_product.product.default_image.image_file.file.large.medium.small.thumb.url if product_order_product.product.default_image + %td + %strong + =link_to public_product_path(:id => product_order_product.product.id, :slug => product_order_product.product.lang(I18n.locale).slug) do + = product_order_product.product.lang(:fr).title + %br + = product_order_product.product_size.name if product_order_product.product_size + = product_order_product.product_option.lang(I18n.locale).name if product_order_product.product_option + + + + + + %td.boutique-right + = number_to_currency(product_order_product.product.final_price_ttc.to_f, locale: :fr) + %td{:style => "width:150px;text-align:center;"} + -if !@recap + .qty_form + = form_for [:public, product_order_product] do |f| + = f.text_field :qty, :style => "width:30px;" + = f.submit "Mettre à jour" + =link_to ic(:"trash-o"), public_product_order_product_path(:id => product_order_product.id, :product_order_product => {:qty => 0}), :method => :put + -else + =product_order_product.qty + %td.boutique-right + = number_to_currency(product_order_product.final_price_ttc_with_qty, locale: :fr) diff --git a/app/views/public/product_order_products/create.js.erb b/app/views/public/product_order_products/create.js.erb new file mode 100644 index 0000000..687d8fe --- /dev/null +++ b/app/views/public/product_order_products/create.js.erb @@ -0,0 +1,10 @@ +$("#cart_infos").html("<%= escape_javascript(render(:partial => "public/shared/cart")) %>"); + + + +$(".cart_link").animate({color: "#fecb31"}, function (){ + $(".cart_link").animate({color: "black"}); + +}); + +$(".cart_link").effect( "bounce", {times:5}, 1000 ); \ No newline at end of file diff --git a/app/views/public/product_orders/_mail_recap.html.haml b/app/views/public/product_orders/_mail_recap.html.haml new file mode 100644 index 0000000..8e74d32 --- /dev/null +++ b/app/views/public/product_orders/_mail_recap.html.haml @@ -0,0 +1,61 @@ +%table{:style => "width:100%;"} + %tr + %td + %h3=qit "Adresse de facturation-mail", "Adresse de facturation" + =render :partial => "public/particulars/particular", :object => @product_order.particular_bill if @product_order.particular_bill + %td + %h3=qit "Adresse de livraison-mail", "Adresse de livraison" + =render :partial => "public/particulars/particular", :object => @product_order.particular_send if @product_order.particular_send +%br +%table.order_table{:style => "width:100%;"} + -@product_order.product_order_products.order(:product_id).each do |product_order_product| + %tr + %td{:style => "width:120px"} + =image_tag "https://#{HOSTNAME}"+product_order_product.product.default_image.image_file.file.large.medium.small.thumb.url, :style => "width:100%;" if product_order_product.product and product_order_product.product.default_image + %td{:style => "vertical-align:top;"} + %strong= product_order_product.archived_product.lang(:fr).title + %br + + = product_order_product.archived_product_size.name if product_order_product.archived_product_size + + = product_order_product.archived_product_option.lang(I18n.locale).name if product_order_product.archived_product_option + + %td{:style => "text-align:right;vertical-align:top;"} + = number_to_currency(product_order_product.archived_product.price_ttc.to_f, locale: :fr) if product_order_product.archived_product + %td{:style => "text-align:center;vertical-align:top;"} + =product_order_product.qty + %td{:style => "text-align:right;vertical-align:top;"} + = number_to_currency(product_order_product.archived_price_ttc_with_qty, locale: :fr) if product_order_product.archived_product + + + + %tr + %td{:colspan => 3, :style => "border:0;"} + %td Total : + %td= number_to_currency(@product_order.archived_total_articles, locale: :fr) + + + -if @product_order.vourcher_code_archived + %tr + %td{:colspan => 3, :style => "border:0;"} + %td + =qit "Code réduction tableau", "Code de réduction " + ="("+@product_order.vourcher_code_archived.slug+") :" + %td + ="-" + =number_to_currency @product_order.archived_vourcher_reduction, locale: :fr + + + + + %tr + %td{:colspan => 3, :style => "border:0;"} + %td=qit "frais de port dans tableau", "Frais de port :" + %td= number_to_currency(@product_order.archived_total_fdp, locale: :fr) + %tr + %td{:colspan => 3, :style => "border:0;"} + %td + %strong Total : + %td + %strong + = number_to_currency(@product_order.archived_total_ttc, locale: :fr) diff --git a/app/views/public/product_orders/_particular_form.html.haml b/app/views/public/product_orders/_particular_form.html.haml new file mode 100755 index 0000000..c9ac836 --- /dev/null +++ b/app/views/public/product_orders/_particular_form.html.haml @@ -0,0 +1,26 @@ + + +=f.hidden_field :particular_type +=f.hidden_field :skip_validation, :class => "skip_validation" + +%table{:style => "width:100%;"} + %tr + %td{:style => "width:20%"} + =f.input :civilite, :label => qit("don-particular-civilite","Civilité"), :as => :select, :collection => [[qit("don-particular-civilite-mme","Mme."), "Mme"], [qit("don-particular-civilite-m","M."), "M"]], :include_blank => false + %td{:style => "width:40%"} + =f.input :firstname, :label => qit("don-particular-firstname","Prénom") + %td{:style => "width:40%"} + =f.input :name, :label => qit("don-particular-name","Nom") + +=f.input :address_2, :label => "Adresse" +=f.input :address_3, :label => "Adresse suite" +%table{:style => "width:100%;"} + %tr + %td{:style => "width:30%"} + =f.input :cp, :label => "Code postal" + %td{:style => "width:70%"} + =f.input :city, :label => "Ville" + +=f.input :country, :label => "Pays", :collection => [[ "France", "FR"], [ "Suisse", "CH"], [ "Belgique", "BE"]], :include_blank => false, :as => :select + +=f.input :tel, :label => "Téléphone" diff --git a/app/views/public/product_orders/my_cart.html.haml b/app/views/public/product_orders/my_cart.html.haml new file mode 100755 index 0000000..2cc67cd --- /dev/null +++ b/app/views/public/product_orders/my_cart.html.haml @@ -0,0 +1,61 @@ +.padding.center#my_cart + + %h1 + Ma commande + + -if @product_order.product_order_products.count > 0 + %table.table + %thead + %tr + %th + %th + Article + %th + Prix U. + %th + Qte + %th + Prix + + %tbody + =render @product_order.product_order_products.order(:product_id) + + -if @product_order.vourcher_code + %div.boutique-right + = "Total articles : " + number_to_currency(@product_order.total_articles, locale: :fr) + .clear + %div.boutique-right + ="Code de réduction " + ="("+@product_order.vourcher_code.slug+") :" + =number_to_currency @product_order.vourcher_reduction + .clear + %div.boutique-right{:style => "width:auto;"} + = "Total : " + %strong=number_to_currency((@product_order.total_articles-@product_order.vourcher_reduction) , locale: :fr) + .clear + %br + %br + + %center + + =link_to "Commander", particulars_public_product_orders_path, :class => "btn btn-primary order_button" + -else + %center + Vous n'avez pas de produits dans votre panier. + + %br + %br + =link_to "Visitez notre boutique !", boutique_path, :class => "btn btn-primary" + + + %br + %br + + -if 1==2 + %div + %br + %center + =form_tag vourcher_public_product_orders_path do + =qit "Code de réduction label", "Code de réduction :" + =text_field_tag :vourcher_code + =submit_tag "Envoyer le code" \ No newline at end of file diff --git a/app/views/public/product_orders/paid_by_ogone.html.haml b/app/views/public/product_orders/paid_by_ogone.html.haml new file mode 100644 index 0000000..8372ff7 --- /dev/null +++ b/app/views/public/product_orders/paid_by_ogone.html.haml @@ -0,0 +1,10 @@ + +%p Vous allez être redirigé automatiquement sur le serveur de paiement sécurisé par Ogone. Si ce n'est pas le cas, merci de cliquer sur "payer maintenant" +%form{:action => CONFIG_OGONE["ecom_url"], :id => "ogone_form"} + -form_content = ogone_fields(@ogone_options) + -form_content << '' + =raw form_content + +:javascript + $("#ogone_form").submit() + diff --git a/app/views/public/product_orders/paid_by_ogone_confirm.html.haml b/app/views/public/product_orders/paid_by_ogone_confirm.html.haml new file mode 100644 index 0000000..cfd659e --- /dev/null +++ b/app/views/public/product_orders/paid_by_ogone_confirm.html.haml @@ -0,0 +1,13 @@ +.center + %h1 Votre paiement a été accepté ! + + %center + %p + Nous vous remercions sincèrement pour votre commande que nous vous expédierons le plus rapidement possible. + + %br + %br + %br + %br + %br + \ No newline at end of file diff --git a/app/views/public/product_orders/paid_by_payplug_confirm.html.haml b/app/views/public/product_orders/paid_by_payplug_confirm.html.haml new file mode 100644 index 0000000..372e6cd --- /dev/null +++ b/app/views/public/product_orders/paid_by_payplug_confirm.html.haml @@ -0,0 +1,4 @@ +.center + %h1=qit "titre paiement accepté (par payplug)", "Votre paiement a été accepté" + %p + =qit "texte paiement accepté (par payplug)", "Merci pour votre commande." diff --git a/app/views/public/product_orders/particulars.html.haml b/app/views/public/product_orders/particulars.html.haml new file mode 100755 index 0000000..787296f --- /dev/null +++ b/app/views/public/product_orders/particulars.html.haml @@ -0,0 +1,58 @@ +#my_cart + %h1 Coordonnées + = semantic_form_for [:public,@product_order], :url => particulars_save_public_product_orders_path(), :html => { :method => :post, :onchange =>"cb_infos();"}do |f| + + =f.semantic_fields_for :product_customer do |f| + + + .row + .columns.span_6{:style => "padding:10px;"} + + %h3= qit "Adresse de facturation titre", "Adresse de facturation" + %p +   + =f.semantic_fields_for :particular_bill do |f| + .particular_form=render :partial => "particular_form", :locals => {:f => f} + + + + + + + -@particular_idem = f.object.particular_idem + + + + .columns.span_6{:style => "padding:10px;"} + %h3=qit "Adresse de livraison titre", "Adresse de livraison" + %p=f.input :particular_idem, :label => qit("phrase-adresse-identique","Adresse de livraison identique à l'adresse de facturation ?"), :input_html => {:onchange => "particular_idem()", :id => "particular_idem_checkbox"} + + #particular_send + + =f.semantic_fields_for :particular_send do |f| + + .particular_form=render :partial => "particular_form", :locals => {:f => f} + + + .clear + %br + + .actions + %center + =f.submit "Passer commande", :class => "btn btn-primary order_button" + =#f.submit qit("Choisir le mode de livraison - bouton", "Choisir le mode de livraison"), :class => "btn btn-primary order_button" + + %br + %br + + :coffeescript + @particular_idem = -> + if $("#particular_idem_checkbox").is(':checked') + $('#particular_send').hide() + $('#particular_send .skip_validation').val(1) + else + $('#particular_send').show() + $('#particular_send .skip_validation').val('') + + :javascript + particular_idem(); diff --git a/app/views/public/product_orders/payment_instructions.html.haml b/app/views/public/product_orders/payment_instructions.html.haml new file mode 100644 index 0000000..3fa20c8 --- /dev/null +++ b/app/views/public/product_orders/payment_instructions.html.haml @@ -0,0 +1,24 @@ +.center + %h1=qit "Titre dans instruction commande par chèque", "Merci pour votre commande !" + + %p + Pour finaliser celle-ci, merci de nous envoyer votre réglement par chèque d'un montant de + = number_to_currency(@product_order_ar.total_ttc, locale: :fr) + à l'ordre de One Voice à l'adresse suivante : + %br + %strong One Voice + %br + 38 rue Saint Cornély + %br + 56340 Carnac + %br + France + %br + %br + %br + =#%p Si vous souhaitez finalement payer cette commande par carte banque vous pouvez la retrouver dans votre compte client. + + + + + diff --git a/app/views/public/product_orders/select_fdp.html.haml b/app/views/public/product_orders/select_fdp.html.haml new file mode 100755 index 0000000..b132487 --- /dev/null +++ b/app/views/public/product_orders/select_fdp.html.haml @@ -0,0 +1,22 @@ +#my_cart + %h1=qit "Livraison", "Livraison" + = semantic_form_for [:public,@product_order], :url => select_fdp_save_public_product_orders_path(), :html => { :method => :post, :onchange =>"cb_infos();"}do |f| + + =f.hidden_field :force_fdp_validation + .radio_buttons.input.optional.form-group + %label + =qit "Mode de livraison :", "Mode de livraison :" + -( @product_order.particular_send.country == "FR" ? ProductFdp.where("archived is null").where(:country => "FR").all : ProductFdp.where("archived is null").where(:country => "all").all).each do |fdp| + + .radio + =label_tag "product_order_product_fdp_id_#{fdp.id}" do + =radio_button_tag "product_order[product_fdp_id]", fdp.id, (true if f.object.product_fdp_id == fdp.id ) + =fdp.fdp_description + =number_to_currency @product_order.total_fdp(fdp) + + + + .actions + %center + =f.submit qit("Valider bouton choix livraison", "Valider"), :class => "btn btn-primary order_button" + diff --git a/app/views/public/product_orders/select_payment.html.haml b/app/views/public/product_orders/select_payment.html.haml new file mode 100755 index 0000000..df7e8de --- /dev/null +++ b/app/views/public/product_orders/select_payment.html.haml @@ -0,0 +1,86 @@ +#my_cart + .order_recap + %h1=qit "titre page validation de commande", "Validation de votre commande" + %br + -@recap = true + %table.table + =render @product_order.product_order_products.order(:product_id) + + + %tr + %td{:colspan => 3, :style => "border:0;"} + %td Total : + %td.boutique-right= number_to_currency(@product_order.total_articles, locale: :fr) + + -if @product_order.vourcher_code + %tr + %td{:colspan => 3, :style => "border:0;"} + %td + =qit "Code réduction tableau", "Code de réduction " + ="("+@product_order.vourcher_code.slug+") :" + %td.boutique-right + ="-" + =number_to_currency @product_order.vourcher_reduction, locale: :fr + + + + + %tr + %td{:colspan => 3, :style => "border:0;"} + %td=qit "frais de port dans tableau", "Frais de port :" + %td.boutique-right= number_to_currency(@product_order.total_fdp, locale: :fr) + %tr + %td{:colspan => 3, :style => "border:0;"} + %td + %strong Total : + %td.boutique-right + %strong + = number_to_currency(@product_order.total_ttc, locale: :fr) + + + + + + .clear + + + = semantic_form_for [:public,@product_order], :url => select_payment_save_public_product_orders_path(), :html => { :method => :post, :onchange =>"cb_infos();"}do |f| + + =f.hidden_field :force_payment + + + %h3=qit "paiement titre", "Paiement" + + + -if params[:paid_fail] + %p=qit "texte erreur de paiement", "Votre tentative de paiement par carte bancaire a échouée, ou vous avez annulé votre paiement, merci de bien vouloir essayer de nouveau ou changer de mode de paiement." + + %br + + + + =f.input :product_order_payment_type_ok_id, :label => false, :collection => [["Chèque",1],["Carte bancaire",3]], :as => :radio, :include_blank => false + + + .cb_infos + =qit "texte redirection paiement sécurisé", "Vous serez redirigé vers la page de paiement sécurisé." + %br + + =f.input :cgv, :label => qit("phrase jaccepte les cgv","J'accepte les conditions générales de vente.") + .actions + %center + =f.submit qit("Valider ma commande bouton", "Valider ma commande"), :class => "btn btn-primary order_button" + + %br + %br + + + + :coffeescript + @cb_infos = -> + if $('#product_order_product_order_payment_type_ok_id_3').is(':checked') + $(".cb_infos").show() + else + $(".cb_infos").hide() + :javascript + cb_infos(); \ No newline at end of file diff --git a/app/views/public/products/_product.html.haml b/app/views/public/products/_product.html.haml new file mode 100755 index 0000000..bb91c81 --- /dev/null +++ b/app/views/public/products/_product.html.haml @@ -0,0 +1,23 @@ +=link_to public_reseaux_product_path(:reseaux_id => params[:reseaux_id],:id => product.id, :slug => product.lang(I18n.locale).slug) do + .product.product-item + .inner + =image_tag product.default_image.image_file.file.large.medium.url if product.default_image + + .description + %h3.product-title + =product.lang(I18n.locale).title + %div.product-price + -if !product.price_reduced_ht + = number_to_currency(product.price_ttc, locale: :fr) + -else + = number_to_currency(product.price_reduced_ttc, locale: :fr) + %del.strip + = number_to_currency(product.price_ttc, locale: :fr) + -if product.in_stock > 0 + .stock + + + + + + \ No newline at end of file diff --git a/app/views/public/products/_product_index.html.haml b/app/views/public/products/_product_index.html.haml new file mode 100644 index 0000000..f2302c0 --- /dev/null +++ b/app/views/public/products/_product_index.html.haml @@ -0,0 +1,11 @@ +.products_grid + -i = 0 + -products.each do |product| + -i += 1 + + =render product + + -if !i.odd? + =#.clear + + .clear \ No newline at end of file diff --git a/app/views/public/products/index.html.haml b/app/views/public/products/index.html.haml new file mode 100644 index 0000000..403639f --- /dev/null +++ b/app/views/public/products/index.html.haml @@ -0,0 +1,6 @@ + +.center.row + %h1 Produits exclusifs réservés à ce réseau + + .boutique_body.products + =render Product.all diff --git a/app/views/public/products/show.html.haml b/app/views/public/products/show.html.haml new file mode 100755 index 0000000..4055488 --- /dev/null +++ b/app/views/public/products/show.html.haml @@ -0,0 +1,108 @@ +.center.row.boutique_body + %h1{:style => "text-align:left;"} Détail d'un produit + .clear + .product_show + + .row + + .col_image + =image_tag @product.default_image.image_file.file.large.medium.url, :id => "product_default_image", :data => {:zoom_image => @product.default_image.image_file.file.url } if @product.default_image + + -if @product.product_images.count > 1 + .product_images + -@product.product_images.order(:position).each do |product_image| + =link_to image_tag(product_image.image_file.file.square.url), "#", :onclick => "$('#product_default_image').attr('data-zoom-image', $(this).data('zoom-url'));$('#product_default_image').attr('src', $(this).data('large-url'));$('#product_default_image').data('elevateZoom').swaptheimage($(this).data('large-url'), $(this).data('zoom-url')); return false;", :data => {:large_url => product_image.image_file.file.large.medium.url, :zoom_url => product_image.image_file.file.url} + + .col_description + .product_description + %h1= @product_lang.title + =simple_format @product_lang.description + + .price + -if !@product.price_reduced_ht? + = number_to_currency(@product.price_ttc, locale: :fr) + -else + = number_to_currency(@product.price_reduced_ttc, locale: :fr) + + -if @product.price_reduced_ht? + .price_reduced + %span.strip + = number_to_currency(@product.price_ttc, locale: :fr) + + + + -@porduct_order_product = ProductOrderProduct.new(product_id: @product.id ) + -@porduct_order_product.product_option_id = @product.product_options_in_stock.first.id if @product.product_options_in_stock.first + -@porduct_order_product.product_size_id = @product.product_sizes_in_stock(@porduct_order_product.product_option_id).first.id if @product.product_sizes_in_stock(@porduct_order_product.product_option_id).first + + + + -if @product.product_stocks.where("stock_th > 0").count > 0 + = form_for [:public, @porduct_order_product], :remote => true do |f| + = f.hidden_field :product_id + + .product_options + -@product.product_options_in_stock.each do |product_option| + + =link_to product_option.lang(I18n.locale).name, "#", :onclick => "$('#product_option_id').val($(this).data('id'));option_active();update_size_in_stocks($(this).data('sizes-in-stock'));return false;", :data => {:id => product_option.id, :sizes_in_stock => @product.product_sizes_in_stock_id(product_option.id)}, :id => "product_option_link_#{product_option.id}", :class => "product_option_link" + + + = f.hidden_field :product_option_id, :id => "product_option_id" + + + + + #product_sizes.product_sizes + -@product.product_sizes_in_stock(:all).each do |product_size| + =link_to product_size.name, "#", :onclick => "$('#product_size_id').val($(this).data('id'));size_active();return false;", :data => {:id => product_size.id }, :id => "product_size_link_#{product_size.id}", :class => "product_size_link "+("in_stock" if @product.product_sizes_in_stock_id(@porduct_order_product.product_option_id).include?(product_size.id)).to_s + + + + + = f.hidden_field :product_size_id, :id => "product_size_id" + + + + = f.submit "Ajouter à la commande", :class => "add_to_cart btn" + + -if 1==2 + -if [1,2,14,15,33,13,30].include?(@product.product_category_id) + .size_guide + =link_to "Guide des tailles", "/fr/guide-des-tailles.html", :target => "_blank" + + + :coffeescript + @size_active = -> + $(".product_size_link").removeClass("active") + $("#product_size_link_"+ $("#product_size_id").val()).addClass("active") + :javascript + size_active(); + + :coffeescript + @option_active = -> + $(".product_option_link").removeClass("active") + $("#product_option_link_"+ $("#product_option_id").val()).addClass("active") + :javascript + option_active(); + + :coffeescript + @update_size_in_stocks =(ids) -> + $(".product_size_link").removeClass("in_stock") + $.each ids, (index, value) -> + $("#product_size_link_"+ value).addClass("in_stock") + $(".in_stock").first().click() + + :javascript + //update_size_in_stocks([1,2]); + + :scss + .product_sizes a{ + display:none; + &.in_stock{ + display:inline-block; + } + } + + -else + .no_stock + Ce produit n'est plus en stock. \ No newline at end of file diff --git a/app/views/public/shared/_cart.html.haml b/app/views/public/shared/_cart.html.haml new file mode 100644 index 0000000..6ae09dd --- /dev/null +++ b/app/views/public/shared/_cart.html.haml @@ -0,0 +1,2 @@ +-if @product_order.product_order_products.sum(:qty) > 0 + = link_to i(:"shopping-cart")+(" #{@product_order.product_order_products.sum(:qty)}" if @product_order.product_order_products.sum(:qty) > 0).to_s, public_my_cart_path, :class => "cart_link" diff --git a/app/views/public/shared/_menu.html.haml b/app/views/public/shared/_menu.html.haml index 51dd1b4..25856da 100755 --- a/app/views/public/shared/_menu.html.haml +++ b/app/views/public/shared/_menu.html.haml @@ -17,6 +17,11 @@ %li=link_to ic(:envelope)+" Conversations", public_customer_messages_path, :class => "btn" %li=link_to "Se déconnecter", logout_public_customers_auths_path, :class => "btn" + + + %li + %span#cart_infos + =render :partial => "public/shared/cart" -else diff --git a/config/routes.rb b/config/routes.rb index 025a958..d255f78 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -169,7 +169,76 @@ Rails.application.routes.draw do get "sitemap.:f" => "public/sitemap#sitemap" namespace :public do - resources :reseauxes + get :my_cart, to: "product_orders#my_cart" + + + resources :militer_cats + + resources :product_sizes + + resources :product_images + + resources :product_categories + + resources :products + + resources :product_orders do + member do + get :payment_instructions + end + + collection do + get :paid_by_ogone + get :paid_by_ogone_confirm + + post :payplug_ipn + + post :vourcher + + get :particulars + post :particulars_save + get :select_payment + get :select_fdp + post :select_fdp_save + get :select_fdp_save + post :select_payment_save + + + get :payment_instructions + + end + + end + resources :product_order_products + + + resources :product_customers do + member do + get :confirm + get :mail + get :mail_confirm + get :show_details + end + + collection do + get :find_parrain + end + + end + + resources :product_customers_auths do + + collection do + + get :logout + + end + end + + resources :reseauxes do + resources :products + + end resources :virements resources :comments resources :customer_messages do @@ -237,6 +306,48 @@ Rails.application.routes.draw do end namespace :admin do + + resources :product_order_payments + resources :product_orders do + member do + get :ship + + get :bill + end + end + + + resources :product_sizes do + collection do + get :reorder + end + end + resources :product_images do + collection do + get :reorder + end + end + resources :product_categories do + collection do + post :reorder + end + resources :product_collections + end + resources :products do + collection do + post :reorder + end + + member do + get :stock + end + + end + + + + + resources :reseauxes resources :documents diff --git a/db/migrate/0000_create_lang_sites.rb b/db/migrate/0000_create_lang_sites.rb new file mode 100644 index 0000000..5602eef --- /dev/null +++ b/db/migrate/0000_create_lang_sites.rb @@ -0,0 +1,15 @@ +class CreateLangSites < ActiveRecord::Migration + def change + create_table :lang_sites do |t| + t.string :name + t.string :slug + t.boolean :enabled + + t.timestamps null: false + end + + LangSite.create(:name => "Français", :slug => "fr", :enabled => true) + + + end +end diff --git a/db/migrate/20160209225738_create_product_categories.rb b/db/migrate/20160209225738_create_product_categories.rb new file mode 100755 index 0000000..04b3caf --- /dev/null +++ b/db/migrate/20160209225738_create_product_categories.rb @@ -0,0 +1,9 @@ +class CreateProductCategories < ActiveRecord::Migration + def change + create_table :product_categories do |t| + t.integer :parent_id + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160209230130_create_product_category_langs.rb b/db/migrate/20160209230130_create_product_category_langs.rb new file mode 100755 index 0000000..46aa7bd --- /dev/null +++ b/db/migrate/20160209230130_create_product_category_langs.rb @@ -0,0 +1,13 @@ +class CreateProductCategoryLangs < ActiveRecord::Migration + def change + create_table :product_category_langs do |t| + t.string :name + t.string :slug + t.string :lang + t.references :product_category, index: true + + t.timestamps null: false + end + add_foreign_key :product_category_langs, :product_categories + end +end diff --git a/db/migrate/20160209230957_create_product_collections.rb b/db/migrate/20160209230957_create_product_collections.rb new file mode 100755 index 0000000..5dbcad1 --- /dev/null +++ b/db/migrate/20160209230957_create_product_collections.rb @@ -0,0 +1,10 @@ +class CreateProductCollections < ActiveRecord::Migration + def change + create_table :product_collections do |t| + t.references :product_category, index: true + + t.timestamps null: false + end + add_foreign_key :product_collections, :product_categories + end +end diff --git a/db/migrate/20160209231058_create_product_collection_langs.rb b/db/migrate/20160209231058_create_product_collection_langs.rb new file mode 100755 index 0000000..baee059 --- /dev/null +++ b/db/migrate/20160209231058_create_product_collection_langs.rb @@ -0,0 +1,13 @@ +class CreateProductCollectionLangs < ActiveRecord::Migration + def change + create_table :product_collection_langs do |t| + t.string :name + t.string :slug + t.string :lang + t.references :product_collection, index: true + + t.timestamps null: false + end + add_foreign_key :product_collection_langs, :product_collections + end +end diff --git a/db/migrate/20160209232420_add_position_to_product_categories.rb b/db/migrate/20160209232420_add_position_to_product_categories.rb new file mode 100755 index 0000000..13842ac --- /dev/null +++ b/db/migrate/20160209232420_add_position_to_product_categories.rb @@ -0,0 +1,6 @@ +class AddPositionToProductCategories < ActiveRecord::Migration + def change + add_column :product_categories, :position, :integer + add_column :product_categories, :description, :text + end +end diff --git a/db/migrate/20160214154854_create_products.rb b/db/migrate/20160214154854_create_products.rb new file mode 100755 index 0000000..48bff49 --- /dev/null +++ b/db/migrate/20160214154854_create_products.rb @@ -0,0 +1,13 @@ +class CreateProducts < ActiveRecord::Migration + def change + create_table :products do |t| + t.decimal :price_ht, precision: 10, scale: 2 + t.decimal :price_reduced_ht, precision: 10, scale: 2 + t.boolean :enabled + t.integer :default_image_id + t.integer :position + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160214155054_create_product_langs.rb b/db/migrate/20160214155054_create_product_langs.rb new file mode 100755 index 0000000..2185b5d --- /dev/null +++ b/db/migrate/20160214155054_create_product_langs.rb @@ -0,0 +1,17 @@ +class CreateProductLangs < ActiveRecord::Migration + def change + create_table :product_langs do |t| + t.string :title + t.string :lang + t.text :description + t.string :slug + t.references :product_category, index: true + t.references :product_collection, index: true + t.references :product, index: true + + t.timestamps null: false + end + add_foreign_key :product_langs, :product_categories + add_foreign_key :product_langs, :product_collections + end +end diff --git a/db/migrate/20160214173635_create_product_options.rb b/db/migrate/20160214173635_create_product_options.rb new file mode 100755 index 0000000..d61f706 --- /dev/null +++ b/db/migrate/20160214173635_create_product_options.rb @@ -0,0 +1,10 @@ +class CreateProductOptions < ActiveRecord::Migration + def change + create_table :product_options do |t| + t.references :product, index: true + + t.timestamps null: false + end + add_foreign_key :product_options, :products + end +end diff --git a/db/migrate/20160214173944_create_product_option_langs.rb b/db/migrate/20160214173944_create_product_option_langs.rb new file mode 100755 index 0000000..dfb3a2a --- /dev/null +++ b/db/migrate/20160214173944_create_product_option_langs.rb @@ -0,0 +1,12 @@ +class CreateProductOptionLangs < ActiveRecord::Migration + def change + create_table :product_option_langs do |t| + t.string :lang + t.references :product_option, index: true + t.string :name + + t.timestamps null: false + end + add_foreign_key :product_option_langs, :product_options + end +end diff --git a/db/migrate/20160214183718_create_product_images.rb b/db/migrate/20160214183718_create_product_images.rb new file mode 100755 index 0000000..9a045a8 --- /dev/null +++ b/db/migrate/20160214183718_create_product_images.rb @@ -0,0 +1,14 @@ +class CreateProductImages < ActiveRecord::Migration + def change + create_table :product_images do |t| + t.string :title + t.text :description + t.integer :position + t.references :image_file, index: true + t.references :product + + t.timestamps null: false + end + add_foreign_key :product_images, :image_files + end +end diff --git a/db/migrate/20160214204019_add_cats_to_products.rb b/db/migrate/20160214204019_add_cats_to_products.rb new file mode 100755 index 0000000..fa68f51 --- /dev/null +++ b/db/migrate/20160214204019_add_cats_to_products.rb @@ -0,0 +1,8 @@ +class AddCatsToProducts < ActiveRecord::Migration + def change + add_reference :products, :product_category, index: true + add_foreign_key :products, :product_categories + add_reference :products, :product_collection, index: true + add_foreign_key :products, :product_collections + end +end diff --git a/db/migrate/20160216174039_create_product_sizes.rb b/db/migrate/20160216174039_create_product_sizes.rb new file mode 100755 index 0000000..fd58126 --- /dev/null +++ b/db/migrate/20160216174039_create_product_sizes.rb @@ -0,0 +1,9 @@ +class CreateProductSizes < ActiveRecord::Migration + def change + create_table :product_sizes do |t| + t.string :name + t.integer :position + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160216174106_create_product_product_sizes.rb b/db/migrate/20160216174106_create_product_product_sizes.rb new file mode 100755 index 0000000..73adef9 --- /dev/null +++ b/db/migrate/20160216174106_create_product_product_sizes.rb @@ -0,0 +1,13 @@ +class CreateProductProductSizes < ActiveRecord::Migration + def change + create_table :product_product_sizes do |t| + t.references :product, index: true + t.references :product_size, index: true + + + t.timestamps null: false + end + add_foreign_key :product_product_sizes, :products + add_foreign_key :product_product_sizes, :product_sizes + end +end diff --git a/db/migrate/20160229230155_create_product_orders.rb b/db/migrate/20160229230155_create_product_orders.rb new file mode 100755 index 0000000..25553c6 --- /dev/null +++ b/db/migrate/20160229230155_create_product_orders.rb @@ -0,0 +1,23 @@ +class CreateProductOrders < ActiveRecord::Migration + def change + create_table :product_orders do |t| + t.decimal :amount, precision: 10, scale: 2 + t.boolean :particular_idem, :default => false + t.boolean :paid, :default => false + t.integer :particular_bill_id + t.string :particular_send_id + t.string :token + t.boolean :completed_finish, :default => false + t.integer :product_order_payment_ok + t.integer :product_order_payment_type_ok_id + t.integer :bill_index + t.string :bill_number + t.string :bill_year + t.boolean :bill_ok, :default => false + t.references :product_customer + t.datetime :paid_at + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160229231722_create_product_order_products.rb b/db/migrate/20160229231722_create_product_order_products.rb new file mode 100755 index 0000000..86b0dad --- /dev/null +++ b/db/migrate/20160229231722_create_product_order_products.rb @@ -0,0 +1,19 @@ +class CreateProductOrderProducts < ActiveRecord::Migration + def change + create_table :product_order_products do |t| + t.references :product_order + t.references :product + t.string :name + t.decimal :price_ht, precision: 10, scale: 2 + t.decimal :price_reduced_ht, precision: 10, scale: 2 + t.integer :product_archived_id + t.decimal :qty + t.decimal :total, precision: 10, scale: 2 + t.integer :product_size_id + t.integer :product_option_id + + t.timestamps null: false + end + + end +end diff --git a/db/migrate/20160229231818_add_archived_to_products.rb b/db/migrate/20160229231818_add_archived_to_products.rb new file mode 100755 index 0000000..0653402 --- /dev/null +++ b/db/migrate/20160229231818_add_archived_to_products.rb @@ -0,0 +1,5 @@ +class AddArchivedToProducts < ActiveRecord::Migration + def change + add_column :products, :archived, :boolean, :default => false + end +end diff --git a/db/migrate/20160302205347_create_product_customers.rb b/db/migrate/20160302205347_create_product_customers.rb new file mode 100755 index 0000000..64a7b99 --- /dev/null +++ b/db/migrate/20160302205347_create_product_customers.rb @@ -0,0 +1,28 @@ +class CreateProductCustomers < ActiveRecord::Migration + def change + create_table :product_customers do |t| + t.string :email + + t.string :password_digest, :null => false, :default => "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + t.integer :sign_in_count, :default => 0 + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.string :current_sign_in_ip + t.string :last_sign_in_ip + + t.boolean :lock + t.datetime :locked_at + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160303203749_add_remote_ip_to_product_customer.rb b/db/migrate/20160303203749_add_remote_ip_to_product_customer.rb new file mode 100755 index 0000000..ac9dd2f --- /dev/null +++ b/db/migrate/20160303203749_add_remote_ip_to_product_customer.rb @@ -0,0 +1,6 @@ +class AddRemoteIpToProductCustomer < ActiveRecord::Migration + def change + add_column :product_customers, :remote_ip, :string + add_column :product_customers, :token, :string + end +end diff --git a/db/migrate/20160303214530_add_particulars_to_product_customers.rb b/db/migrate/20160303214530_add_particulars_to_product_customers.rb new file mode 100755 index 0000000..c2e5c6d --- /dev/null +++ b/db/migrate/20160303214530_add_particulars_to_product_customers.rb @@ -0,0 +1,7 @@ +class AddParticularsToProductCustomers < ActiveRecord::Migration + def change + add_column :product_customers, :particular_idem, :boolean, :default => false + add_column :product_customers, :particular_bill_id, :integer + add_column :product_customers, :particular_send_id, :integer + end +end diff --git a/db/migrate/20160304111746_add_archived_options_to_product_order_product.rb b/db/migrate/20160304111746_add_archived_options_to_product_order_product.rb new file mode 100644 index 0000000..b7468c1 --- /dev/null +++ b/db/migrate/20160304111746_add_archived_options_to_product_order_product.rb @@ -0,0 +1,6 @@ +class AddArchivedOptionsToProductOrderProduct < ActiveRecord::Migration + def change + add_column :product_order_products, :archived_product_option_id, :integer + add_column :product_order_products, :archived_product_size_id, :integer + end +end diff --git a/db/migrate/20160304115835_change_product_order_product_attribute_name.rb b/db/migrate/20160304115835_change_product_order_product_attribute_name.rb new file mode 100644 index 0000000..584604b --- /dev/null +++ b/db/migrate/20160304115835_change_product_order_product_attribute_name.rb @@ -0,0 +1,5 @@ +class ChangeProductOrderProductAttributeName < ActiveRecord::Migration + def change + rename_column :product_order_products, :product_archived_id, :archived_product_id + end +end diff --git a/db/migrate/20160304132328_add_image_file_to_product_categories.rb b/db/migrate/20160304132328_add_image_file_to_product_categories.rb new file mode 100644 index 0000000..9bae606 --- /dev/null +++ b/db/migrate/20160304132328_add_image_file_to_product_categories.rb @@ -0,0 +1,5 @@ +class AddImageFileToProductCategories < ActiveRecord::Migration + def change + add_column :product_categories, :image_file_id, :integer + end +end diff --git a/db/migrate/20160304215405_add_descriptio_to_product_category_langs.rb b/db/migrate/20160304215405_add_descriptio_to_product_category_langs.rb new file mode 100644 index 0000000..22ed55e --- /dev/null +++ b/db/migrate/20160304215405_add_descriptio_to_product_category_langs.rb @@ -0,0 +1,5 @@ +class AddDescriptioToProductCategoryLangs < ActiveRecord::Migration + def change + add_column :product_category_langs, :description, :text + end +end diff --git a/db/migrate/20160304215502_add_descriptio_to_product_collection_langs.rb b/db/migrate/20160304215502_add_descriptio_to_product_collection_langs.rb new file mode 100644 index 0000000..0bcaaaf --- /dev/null +++ b/db/migrate/20160304215502_add_descriptio_to_product_collection_langs.rb @@ -0,0 +1,5 @@ +class AddDescriptioToProductCollectionLangs < ActiveRecord::Migration + def change + add_column :product_collection_langs, :description, :text + end +end diff --git a/db/migrate/20160305180845_add_image_to_collection.rb b/db/migrate/20160305180845_add_image_to_collection.rb new file mode 100644 index 0000000..145f8df --- /dev/null +++ b/db/migrate/20160305180845_add_image_to_collection.rb @@ -0,0 +1,5 @@ +class AddImageToCollection < ActiveRecord::Migration + def change + add_column :product_collections, :image_fille_id, :integer + end +end diff --git a/db/migrate/20160306133908_create_product_stocks.rb b/db/migrate/20160306133908_create_product_stocks.rb new file mode 100644 index 0000000..4199e50 --- /dev/null +++ b/db/migrate/20160306133908_create_product_stocks.rb @@ -0,0 +1,19 @@ +class CreateProductStocks < ActiveRecord::Migration + def change + create_table :product_stocks do |t| + t.references :product, index: true + t.integer :product_size_id + t.integer :product_option_id + t.integer :stock + t.integer :stock_th + + t.timestamps null: false + end + add_foreign_key :product_stocks, :products + + Product.all.each do |product| + product.save + end + + end +end diff --git a/db/migrate/20160309104918_create_product_fdps.rb b/db/migrate/20160309104918_create_product_fdps.rb new file mode 100644 index 0000000..c062f2c --- /dev/null +++ b/db/migrate/20160309104918_create_product_fdps.rb @@ -0,0 +1,19 @@ +class CreateProductFdps < ActiveRecord::Migration + def change + create_table :product_fdps do |t| + t.decimal :price, precision: 10, scale: 2 + t.text :country + t.string :fdp_description + t.decimal :price_max, precision: 10, scale: 2 + t.string :delais + + t.timestamps null: false + end + + + ProductFdp.create(:fdp_description => "LIVRAISON EN FRANCE METROPOLITAINE ET CORSE", :price => 7, :price_max =>999999, :delais => "2 à 5 jours ouvrés", :country => "FR") + + ProductFdp.create(:fdp_description => "LIVRAISON VERS L'OUTRE MER ET L’INTERNATIONAL", :price => 15, :price_max => 999999, :delais => "5 à 10 jours ouvrés", :country => "all") + + end +end diff --git a/db/migrate/20160309111107_add_product_fdp_to_product_order.rb b/db/migrate/20160309111107_add_product_fdp_to_product_order.rb new file mode 100644 index 0000000..9a501b9 --- /dev/null +++ b/db/migrate/20160309111107_add_product_fdp_to_product_order.rb @@ -0,0 +1,5 @@ +class AddProductFdpToProductOrder < ActiveRecord::Migration + def change + add_column :product_orders, :product_fdp_id, :integer + end +end diff --git a/db/migrate/20160309193926_create_product_order_payments.rb b/db/migrate/20160309193926_create_product_order_payments.rb new file mode 100644 index 0000000..cf097a4 --- /dev/null +++ b/db/migrate/20160309193926_create_product_order_payments.rb @@ -0,0 +1,24 @@ +class CreateProductOrderPayments < ActiveRecord::Migration + def change + create_table :product_order_payments do |t| + t.integer :product_order_payment_type_id + + t.integer :product_order_id + + t.decimal :amount + t.string :check_number + t.string :check_bank + t.string :payplug_payment_id + t.string :payplug_card_id + t.string :payplug_card_expiry_month + t.string :payplug_card_expiry_year + t.string :payplug_card_last_number + t.datetime :paid_at + t.datetime :tr_canceled_at + t.boolean :tr_canceled, :default => false + t.string :token + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160309234817_add_archive_fdp_to_product_orders.rb b/db/migrate/20160309234817_add_archive_fdp_to_product_orders.rb new file mode 100644 index 0000000..0e33142 --- /dev/null +++ b/db/migrate/20160309234817_add_archive_fdp_to_product_orders.rb @@ -0,0 +1,7 @@ +class AddArchiveFdpToProductOrders < ActiveRecord::Migration + def change + add_column :product_orders, :product_fdp_archived_id, :integer + + add_column :product_fdps, :archived, :boolean + end +end diff --git a/db/migrate/20160312131410_add_archived_to_product_options.rb b/db/migrate/20160312131410_add_archived_to_product_options.rb new file mode 100644 index 0000000..a249f04 --- /dev/null +++ b/db/migrate/20160312131410_add_archived_to_product_options.rb @@ -0,0 +1,10 @@ +class AddArchivedToProductOptions < ActiveRecord::Migration + def change + add_column :product_options, :archived, :boolean + add_column :product_option_langs, :archived, :boolean + add_column :product_sizes, :archived, :boolean + add_column :product_langs, :archived, :boolean + + + end +end \ No newline at end of file diff --git a/db/migrate/20160312234811_add_cgv_to_product_orders.rb b/db/migrate/20160312234811_add_cgv_to_product_orders.rb new file mode 100644 index 0000000..8d85992 --- /dev/null +++ b/db/migrate/20160312234811_add_cgv_to_product_orders.rb @@ -0,0 +1,5 @@ +class AddCgvToProductOrders < ActiveRecord::Migration + def change + add_column :product_orders, :cgv, :boolean + end +end diff --git a/db/migrate/20160328212528_add_color_to_product_categories.rb b/db/migrate/20160328212528_add_color_to_product_categories.rb new file mode 100644 index 0000000..ad8f13a --- /dev/null +++ b/db/migrate/20160328212528_add_color_to_product_categories.rb @@ -0,0 +1,7 @@ +class AddColorToProductCategories < ActiveRecord::Migration + def change + add_column :product_categories, :color, :string + add_column :product_categories, :image_file_left_id, :integer + add_column :product_categories, :image_file_right_id, :integer + end +end diff --git a/db/migrate/20160328212556_add_color_to_product_collections.rb b/db/migrate/20160328212556_add_color_to_product_collections.rb new file mode 100644 index 0000000..c79e819 --- /dev/null +++ b/db/migrate/20160328212556_add_color_to_product_collections.rb @@ -0,0 +1,5 @@ +class AddColorToProductCollections < ActiveRecord::Migration + def change + add_column :product_collections, :color, :string + end +end diff --git a/db/migrate/20160330180631_add_top_image_to_product_categories.rb b/db/migrate/20160330180631_add_top_image_to_product_categories.rb new file mode 100644 index 0000000..3d22add --- /dev/null +++ b/db/migrate/20160330180631_add_top_image_to_product_categories.rb @@ -0,0 +1,5 @@ +class AddTopImageToProductCategories < ActiveRecord::Migration + def change + add_column :product_categories, :top_image_id, :integer + end +end diff --git a/db/migrate/20170912112150_add_images_to_reseauxes.rb b/db/migrate/20170912112150_add_images_to_reseauxes.rb new file mode 100644 index 0000000..bb43794 --- /dev/null +++ b/db/migrate/20170912112150_add_images_to_reseauxes.rb @@ -0,0 +1,8 @@ +class AddImagesToReseauxes < ActiveRecord::Migration + def change + add_column :reseauxes, :logo_image_file_id, :integer + add_column :reseauxes, :background_image_file_id, :integer + add_column :reseauxes, :title, :string + + end +end diff --git a/db/migrate/20170912122525_add_reseaux_to_products.rb b/db/migrate/20170912122525_add_reseaux_to_products.rb new file mode 100644 index 0000000..bc36579 --- /dev/null +++ b/db/migrate/20170912122525_add_reseaux_to_products.rb @@ -0,0 +1,5 @@ +class AddReseauxToProducts < ActiveRecord::Migration + def change + add_column :products, :reseaux_id, :integer + end +end diff --git a/db/migrate/20170912164519_add_customer_to_product_orders.rb b/db/migrate/20170912164519_add_customer_to_product_orders.rb new file mode 100644 index 0000000..48694cb --- /dev/null +++ b/db/migrate/20170912164519_add_customer_to_product_orders.rb @@ -0,0 +1,5 @@ +class AddCustomerToProductOrders < ActiveRecord::Migration + def change + add_column :product_orders, :customer_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 12a6dd8..51aa35c 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170605134146) do +ActiveRecord::Schema.define(version: 20170912164519) do create_table "accepted_offers", force: :cascade do |t| t.datetime "created_at", null: false @@ -413,6 +413,14 @@ ActiveRecord::Schema.define(version: 20170605134146) do t.datetime "updated_at" end + create_table "lang_sites", force: :cascade do |t| + t.string "name", limit: 255 + t.string "slug", limit: 255 + t.boolean "enabled", limit: 1 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "link_contents", force: :cascade do |t| t.integer "type", limit: 4 t.string "name", limit: 255 @@ -600,6 +608,242 @@ ActiveRecord::Schema.define(version: 20170605134146) do t.datetime "updated_at" end + create_table "product_categories", force: :cascade do |t| + t.integer "parent_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "position", limit: 4 + t.text "description", limit: 65535 + t.integer "image_file_id", limit: 4 + t.string "color", limit: 255 + t.integer "image_file_left_id", limit: 4 + t.integer "image_file_right_id", limit: 4 + t.integer "top_image_id", limit: 4 + end + + create_table "product_category_langs", force: :cascade do |t| + t.string "name", limit: 255 + t.string "slug", limit: 255 + t.string "lang", limit: 255 + t.integer "product_category_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "description", limit: 65535 + end + + add_index "product_category_langs", ["product_category_id"], name: "index_product_category_langs_on_product_category_id", using: :btree + + create_table "product_collection_langs", force: :cascade do |t| + t.string "name", limit: 255 + t.string "slug", limit: 255 + t.string "lang", limit: 255 + t.integer "product_collection_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "description", limit: 65535 + end + + add_index "product_collection_langs", ["product_collection_id"], name: "index_product_collection_langs_on_product_collection_id", using: :btree + + create_table "product_collections", force: :cascade do |t| + t.integer "product_category_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "image_fille_id", limit: 4 + t.string "color", limit: 255 + end + + add_index "product_collections", ["product_category_id"], name: "index_product_collections_on_product_category_id", using: :btree + + create_table "product_customers", force: :cascade do |t| + t.string "email", limit: 255 + t.string "password_digest", limit: 255, default: "", null: false + t.string "reset_password_token", limit: 255 + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", limit: 4, default: 0 + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip", limit: 255 + t.string "last_sign_in_ip", limit: 255 + t.boolean "lock", limit: 1 + t.datetime "locked_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "remote_ip", limit: 255 + t.string "token", limit: 255 + t.boolean "particular_idem", limit: 1, default: false + t.integer "particular_bill_id", limit: 4 + t.integer "particular_send_id", limit: 4 + end + + create_table "product_fdps", force: :cascade do |t| + t.decimal "price", precision: 10, scale: 2 + t.text "country", limit: 65535 + t.string "fdp_description", limit: 255 + t.decimal "price_max", precision: 10, scale: 2 + t.string "delais", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "archived", limit: 1 + end + + create_table "product_images", force: :cascade do |t| + t.string "title", limit: 255 + t.text "description", limit: 65535 + t.integer "position", limit: 4 + t.integer "image_file_id", limit: 4 + t.integer "product_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "product_images", ["image_file_id"], name: "index_product_images_on_image_file_id", using: :btree + + create_table "product_langs", force: :cascade do |t| + t.string "title", limit: 255 + t.string "lang", limit: 255 + t.text "description", limit: 65535 + t.string "slug", limit: 255 + t.integer "product_category_id", limit: 4 + t.integer "product_collection_id", limit: 4 + t.integer "product_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "archived", limit: 1 + end + + add_index "product_langs", ["product_category_id"], name: "index_product_langs_on_product_category_id", using: :btree + add_index "product_langs", ["product_collection_id"], name: "index_product_langs_on_product_collection_id", using: :btree + add_index "product_langs", ["product_id"], name: "index_product_langs_on_product_id", using: :btree + + create_table "product_option_langs", force: :cascade do |t| + t.string "lang", limit: 255 + t.integer "product_option_id", limit: 4 + t.string "name", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "archived", limit: 1 + end + + add_index "product_option_langs", ["product_option_id"], name: "index_product_option_langs_on_product_option_id", using: :btree + + create_table "product_options", force: :cascade do |t| + t.integer "product_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "archived", limit: 1 + end + + add_index "product_options", ["product_id"], name: "index_product_options_on_product_id", using: :btree + + create_table "product_order_payments", force: :cascade do |t| + t.integer "product_order_payment_type_id", limit: 4 + t.integer "product_order_id", limit: 4 + t.decimal "amount", precision: 10 + t.string "check_number", limit: 255 + t.string "check_bank", limit: 255 + t.string "payplug_payment_id", limit: 255 + t.string "payplug_card_id", limit: 255 + t.string "payplug_card_expiry_month", limit: 255 + t.string "payplug_card_expiry_year", limit: 255 + t.string "payplug_card_last_number", limit: 255 + t.datetime "paid_at" + t.datetime "tr_canceled_at" + t.boolean "tr_canceled", limit: 1, default: false + t.string "token", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "product_order_products", force: :cascade do |t| + t.integer "product_order_id", limit: 4 + t.integer "product_id", limit: 4 + t.string "name", limit: 255 + t.decimal "price_ht", precision: 10, scale: 2 + t.decimal "price_reduced_ht", precision: 10, scale: 2 + t.integer "archived_product_id", limit: 4 + t.decimal "qty", precision: 10 + t.decimal "total", precision: 10, scale: 2 + t.integer "product_size_id", limit: 4 + t.integer "product_option_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "archived_product_option_id", limit: 4 + t.integer "archived_product_size_id", limit: 4 + end + + create_table "product_orders", force: :cascade do |t| + t.decimal "amount", precision: 10, scale: 2 + t.boolean "particular_idem", limit: 1, default: false + t.boolean "paid", limit: 1, default: false + t.integer "particular_bill_id", limit: 4 + t.string "particular_send_id", limit: 255 + t.string "token", limit: 255 + t.boolean "completed_finish", limit: 1, default: false + t.integer "product_order_payment_ok", limit: 4 + t.integer "product_order_payment_type_ok_id", limit: 4 + t.integer "bill_index", limit: 4 + t.string "bill_number", limit: 255 + t.string "bill_year", limit: 255 + t.boolean "bill_ok", limit: 1, default: false + t.integer "product_customer_id", limit: 4 + t.datetime "paid_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "product_fdp_id", limit: 4 + t.integer "product_fdp_archived_id", limit: 4 + t.boolean "cgv", limit: 1 + t.integer "customer_id", limit: 4 + end + + create_table "product_product_sizes", force: :cascade do |t| + t.integer "product_id", limit: 4 + t.integer "product_size_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "product_product_sizes", ["product_id"], name: "index_product_product_sizes_on_product_id", using: :btree + add_index "product_product_sizes", ["product_size_id"], name: "index_product_product_sizes_on_product_size_id", using: :btree + + create_table "product_sizes", force: :cascade do |t| + t.string "name", limit: 255 + t.integer "position", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "archived", limit: 1 + end + + create_table "product_stocks", force: :cascade do |t| + t.integer "product_id", limit: 4 + t.integer "product_size_id", limit: 4 + t.integer "product_option_id", limit: 4 + t.integer "stock", limit: 4 + t.integer "stock_th", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "product_stocks", ["product_id"], name: "index_product_stocks_on_product_id", using: :btree + + create_table "products", force: :cascade do |t| + t.decimal "price_ht", precision: 10, scale: 2 + t.decimal "price_reduced_ht", precision: 10, scale: 2 + t.boolean "enabled", limit: 1 + t.integer "default_image_id", limit: 4 + t.integer "position", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "product_category_id", limit: 4 + t.integer "product_collection_id", limit: 4 + t.boolean "archived", limit: 1, default: false + t.integer "reseaux_id", limit: 4 + end + + add_index "products", ["product_category_id"], name: "index_products_on_product_category_id", using: :btree + add_index "products", ["product_collection_id"], name: "index_products_on_product_collection_id", using: :btree + create_table "reseaux_customers", force: :cascade do |t| t.integer "reseaux_id", limit: 4 t.integer "customer_id", limit: 4 @@ -611,13 +855,16 @@ ActiveRecord::Schema.define(version: 20170605134146) do add_index "reseaux_customers", ["reseaux_id"], name: "index_reseaux_customers_on_reseaux_id", using: :btree create_table "reseauxes", force: :cascade do |t| - t.string "name", limit: 255 - t.text "description", limit: 65535 - t.integer "chef_reseau_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "token", limit: 255 - t.integer "parent_id", limit: 4 + t.string "name", limit: 255 + t.text "description", limit: 65535 + t.integer "chef_reseau_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "token", limit: 255 + t.integer "parent_id", limit: 4 + t.integer "logo_image_file_id", limit: 4 + t.integer "background_image_file_id", limit: 4 + t.string "title", limit: 255 end create_table "sessions", force: :cascade do |t| @@ -710,6 +957,19 @@ ActiveRecord::Schema.define(version: 20170605134146) do add_foreign_key "domain_needs", "needs" add_foreign_key "offer_reseauxes", "offers" add_foreign_key "offer_reseauxes", "reseauxes" + add_foreign_key "product_category_langs", "product_categories" + add_foreign_key "product_collection_langs", "product_collections" + add_foreign_key "product_collections", "product_categories" + add_foreign_key "product_images", "image_files" + add_foreign_key "product_langs", "product_categories" + add_foreign_key "product_langs", "product_collections" + add_foreign_key "product_option_langs", "product_options" + add_foreign_key "product_options", "products" + add_foreign_key "product_product_sizes", "product_sizes" + add_foreign_key "product_product_sizes", "products" + add_foreign_key "product_stocks", "products" + add_foreign_key "products", "product_categories" + add_foreign_key "products", "product_collections" add_foreign_key "reseaux_customers", "customers" add_foreign_key "reseaux_customers", "reseauxes" add_foreign_key "thing_conversations", "conversations" diff --git a/public/logo-mb.png b/public/logo-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..17f3ccb2ee813dbcf416dc90d9cf4d89cdb280dc GIT binary patch literal 285509 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 GkN*dnr1dfY literal 0 HcmV?d00001