From d170cb31a3813524ee704556c6bf1a269ba8e9c2 Mon Sep 17 00:00:00 2001 From: Nicolas Bally Date: Tue, 6 Oct 2020 14:48:51 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20fonction=20pour=20g=C3=A9n=C3=A9ration?= =?UTF-8?q?=20bons=20d'achat=20=C3=A0=20la=20vol=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/public/m_odrs_controller.rb | 5 +- app/helpers/translation_helper.rb | 4 +- app/models/m_odr_rep.rb | 15 ++++ .../admin/m_odr_reps/_left_column.html.haml | 4 + app/views/admin/m_odr_reps/ba.html.haml | 21 +++++ app/views/admin/m_odrs/_form.html.haml | 11 +++ app/views/admin/m_odrs/_m_odr.html.haml | 5 ++ app/views/admin/m_odrs/index.html.haml | 1 + .../public/m_odrs/validation_ba.html.haml | 89 +++++++++++++++++++ config/routes.rb | 7 +- ...5331_add_ba_number_generation_to_m_odrs.rb | 16 ++++ ...01006115533_add_ba_number_to_m_odr_reps.rb | 6 ++ db/schema.rb | 21 +++-- 13 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 app/views/public/m_odrs/validation_ba.html.haml create mode 100644 db/migrate/20201006115331_add_ba_number_generation_to_m_odrs.rb create mode 100644 db/migrate/20201006115533_add_ba_number_to_m_odr_reps.rb diff --git a/app/controllers/public/m_odrs_controller.rb b/app/controllers/public/m_odrs_controller.rb index 154afdc..8742d8f 100644 --- a/app/controllers/public/m_odrs_controller.rb +++ b/app/controllers/public/m_odrs_controller.rb @@ -7,7 +7,10 @@ class Public::MOdrsController < ApplicationController def show @m_odr = MOdr.where(:slug => params[:slug]).first - + end + + def validation_ba + @m_odr = MOdr.where(:slug => params[:slug]).first end diff --git a/app/helpers/translation_helper.rb b/app/helpers/translation_helper.rb index d94e97d..7220a17 100755 --- a/app/helpers/translation_helper.rb +++ b/app/helpers/translation_helper.rb @@ -27,7 +27,7 @@ module TranslationHelper value = value.to_s if ["brouillon","Reçue"].include?(value) r = ''+value+'' - elsif ["Virement envoyé", "Validé", "Envoyée"].include?(value) + elsif ["Virement envoyé", "Validé", "Envoyée","Non utilisé" ].include?(value) r = ''+value+'' elsif value == "commande" r = 'Commande' @@ -39,7 +39,7 @@ module TranslationHelper r = 'Facturée' elsif value == "annulée" r = 'Annulée' - elsif ["Erreur sur virement", "Refusé", "Refusée"].include?(value) + elsif ["Erreur sur virement", "Refusé", "Refusée", "Déjà utilisé"].include?(value) r = ''+value+'' elsif ["En cours de traitement"].include?(value) r = ''+value+'' diff --git a/app/models/m_odr_rep.rb b/app/models/m_odr_rep.rb index 83dbf2a..ec7b7aa 100644 --- a/app/models/m_odr_rep.rb +++ b/app/models/m_odr_rep.rb @@ -336,6 +336,21 @@ file_admin_ok remise particular_civilite particular_name particular_firstname pa #, :sort_name => "code" end + before_save do + self.generate_ba_number if self.m_odr and self.m_odr.ba_number_generator + end + def generate_ba_number + + if !self.ba_number? + self.ba_number = loop do + + ba_number = SecureRandom.hex(3).upcase + break ba_number unless MOdrRep.exists?(ba_number: ba_number) + end + + end + end + def csv_m_odr self.m_odr.name if self.m_odr end diff --git a/app/views/admin/m_odr_reps/_left_column.html.haml b/app/views/admin/m_odr_reps/_left_column.html.haml index cda753f..4aec764 100644 --- a/app/views/admin/m_odr_reps/_left_column.html.haml +++ b/app/views/admin/m_odr_reps/_left_column.html.haml @@ -194,6 +194,10 @@ RIB : - @m_odr_rep.generate_ba =link_to "Voir le bon d'achat", @m_odr_rep.ba_url, :class => "btn btn-primary" + -if @m_odr_rep.m_odr.ba_number_generator + -@m_odr_rep.save + =@m_odr_rep.ba_number + -if false %p Test mail diff --git a/app/views/admin/m_odr_reps/ba.html.haml b/app/views/admin/m_odr_reps/ba.html.haml index 20ceda6..bdbd34e 100644 --- a/app/views/admin/m_odr_reps/ba.html.haml +++ b/app/views/admin/m_odr_reps/ba.html.haml @@ -9,6 +9,16 @@ .place{:style => "top:#{@m_odr_rep.m_odr.ba_place_y}px;"} =@m_odr_rep.place_name + =debug @m_odr_rep.m_odr.ba_number_generator + -if @m_odr_rep.m_odr and @m_odr_rep.m_odr.ba_number_generator + .number{:style => "top:#{@m_odr_rep.m_odr.ba_number_place_y}px;"} + =@m_odr_rep.ba_number + + + -if @m_odr_rep.m_odr and @m_odr_rep.m_odr.ba_show_remise + .number{:style => "top:#{@m_odr_rep.m_odr.ba_remise_place_y}px;"} + =number_to_currency @m_odr_rep.remise + :scss #ba{ @@ -34,5 +44,16 @@ text-transform:uppercase; font-weigh:bold; + } + + .number{ + position:absolute; + left:0; + right:0; + text-align:center; + font-size:30px; + text-transform:uppercase; + font-weigh:bold; + } } \ No newline at end of file diff --git a/app/views/admin/m_odrs/_form.html.haml b/app/views/admin/m_odrs/_form.html.haml index b5b6d6d..842c51f 100644 --- a/app/views/admin/m_odrs/_form.html.haml +++ b/app/views/admin/m_odrs/_form.html.haml @@ -126,6 +126,17 @@ =# f.input :ba_place_x, :label => "Position X du revendeur (px) :" = f.input :ba_place_y, :label => "Position Y du revendeur (px) :" + = f.input :ba_number_place_y, :label => "Position Y du numéro (px) :" + + = f.input :ba_show_remise, :label => "Afficher la remise ?" + = f.input :ba_remise_place_y, :label => "Position Y de la remise (px) :" + + + + = f.input :ba_number_generator, :label => "Générer un numéro de bon d'achat unique à l'inscription" + + = f.input :ba_interface, :label => "Générer une interface pour les revendeurs permettant de valider le bon d'achat" + diff --git a/app/views/admin/m_odrs/_m_odr.html.haml b/app/views/admin/m_odrs/_m_odr.html.haml index 2e89580..60f32d1 100644 --- a/app/views/admin/m_odrs/_m_odr.html.haml +++ b/app/views/admin/m_odrs/_m_odr.html.haml @@ -9,6 +9,11 @@ -m_odr.m_odr_trackers.each do |mot| %br =link_to public_m_odr_path(m_odr.slug, :t => mot.token, :lang => nil), public_m_odr_path(m_odr.slug, :t => mot.token, :lang => nil), :target => "_blank" + + %td + -if m_odr.ba_interface + = link_to validation_ba_public_m_odr_path(m_odr.slug, :lang => nil), validation_ba_public_m_odr_path(m_odr.slug, :lang => nil), :target => "_blank" + %td= m_odr.start_at %td= m_odr.end_at %td= m_odr.public_end diff --git a/app/views/admin/m_odrs/index.html.haml b/app/views/admin/m_odrs/index.html.haml index b179b4d..3581afc 100644 --- a/app/views/admin/m_odrs/index.html.haml +++ b/app/views/admin/m_odrs/index.html.haml @@ -14,6 +14,7 @@ %th Client %th Nom %th Lien + %th Lien validation BA %th Date de début %th Date de fin %th Fin de réception diff --git a/app/views/public/m_odrs/validation_ba.html.haml b/app/views/public/m_odrs/validation_ba.html.haml new file mode 100644 index 0000000..9e99769 --- /dev/null +++ b/app/views/public/m_odrs/validation_ba.html.haml @@ -0,0 +1,89 @@ + + + +-if @m_odr.start_at > Date.today and params[:force].to_s == "" + %div{:style => "margin-top:30px;font-weight:bold;font-weight:800;font-size:2em;text-transform:uppercase;font-family: 'Open Sans','Helvetica Neue', Helvetica, sans-serif;text-align:center;"} + -count = ((@m_odr.start_at) - (Date.today)) + + -if @m_odr.landing_text? + =@m_odr.landing_text + -else + Démarrage + %div{:style => "font-weight:bold;font-weight:800;text-transform:uppercase;font-family: 'Open Sans','Helvetica Neue', Helvetica, sans-serif;text-align:center;line-height:200px;position:relative;top:-40px"} + dans + .clock{:style => "margin:2em;display:inline-block;width:auto;margin:0 auto;position:relative;top:35px"} + -if count > 1 + jours ! + -else + jour ! + + :javascript + var countup; + + var clock = $('.clock').FlipClock(0, { + clockFace: 'Counter', + minimumDigits: 1, + callbacks:{ + init:function (){ + + } + } + }); + if(clock_max > 0){ + countup = setInterval(function() { + clock.increment(); + if(clock.getTime().time >= clock_max) { + clock.stop(); + clearInterval(countup); + } + }, 0);} + + -if false + %p{:style => "font-weight:bold;font-size:2em;text-transform:uppercase;font-family:'Helvetica Neue', Helvetica, sans-serif;"} + jours avant l'ouverture + + +-else + #odr_form + .form_pannel + =form_tag "", :method => "get", :onsubmit => "" do + %p + =text_field_tag :code, params[:code],:class => "form-control", :placeholder => "Numéro du bon d'achat" + + %p{:style => "text-align:center;"} + =submit_tag "Rechercher", :class => "btn btn-primary" + + + %hr + -if params[:code].to_s != "" + -@m_odr_rep = MOdrRep.where(:ba_number => params[:code].to_s.upcase).first + + -if params[:code].to_s != "" and !@m_odr_rep + %p Le bon d'achat portant ce numéro n'a pas été trouvé + + -elsif @m_odr_rep + -if params[:to_use].to_s == "true" + -@m_odr_rep.ba_used = true + -@m_odr_rep.save + + %p + N° Bon d'achat : + =@m_odr_rep.ba_number + + d'une valeur de + =number_to_currency @m_odr_rep.remise + + %p + Statut : + -if !@m_odr_rep.ba_used + =state_helper "Non utilisé" + %br + %br + =link_to "Signaler comme utilisé dès maintenant", params.permit!.merge({:to_use => true}), :data => {:confirm => "Attention, une fois indiqué comme utilisé ce bon d'achat sera désactivé."} + + -else + =state_helper "Déjà utilisé" + + \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 1a595d3..6758541 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,10 @@ Rails.application.routes.draw do + + get ':slug/validation_ba.html', to: 'public/m_odrs#validation_ba', :as => :validation_ba_public_m_odr + + + get "qi_help" => "admin/qi_helps#update", :as => :admin_qi_helps @@ -956,9 +961,9 @@ Rails.application.routes.draw do get "plan" => "public/home#plan" - get ':slug.html', to: 'public/m_odrs#show', :as => :public_m_odr + root "admin/admin_auths#index" diff --git a/db/migrate/20201006115331_add_ba_number_generation_to_m_odrs.rb b/db/migrate/20201006115331_add_ba_number_generation_to_m_odrs.rb new file mode 100644 index 0000000..0d1a9b2 --- /dev/null +++ b/db/migrate/20201006115331_add_ba_number_generation_to_m_odrs.rb @@ -0,0 +1,16 @@ +class AddBaNumberGenerationToMOdrs < ActiveRecord::Migration[6.0] + def change + add_column :m_odrs, :ba_number_generator, :boolean, :default => false + add_column :m_odrs, :ba_interface, :boolean, :default => false + + add_column :m_odrs, :ba_show_remise, :boolean, :default => false + + add_column :m_odrs, :ba_number_place_y, :integer + add_column :m_odrs, :ba_number_place_x, :integer + + + + add_column :m_odrs, :ba_remise_place_y, :integer + add_column :m_odrs, :ba_remise_place_x, :integer + end +end diff --git a/db/migrate/20201006115533_add_ba_number_to_m_odr_reps.rb b/db/migrate/20201006115533_add_ba_number_to_m_odr_reps.rb new file mode 100644 index 0000000..27fb9ac --- /dev/null +++ b/db/migrate/20201006115533_add_ba_number_to_m_odr_reps.rb @@ -0,0 +1,6 @@ +class AddBaNumberToMOdrReps < ActiveRecord::Migration[6.0] + def change + add_column :m_odr_reps, :ba_number, :string + add_column :m_odr_reps, :ba_used, :boolean, :default => false + end +end diff --git a/db/schema.rb b/db/schema.rb index b38d114..bbb21f0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_07_30_084942) do +ActiveRecord::Schema.define(version: 2020_10_06_115533) do create_table "accounting_zones", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| t.string "name" @@ -517,7 +517,7 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.datetime "updated_at", precision: 6, null: false end - create_table "import_csv_champs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "import_csv_champs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t| t.string "champ" t.string "header" t.string "value" @@ -527,7 +527,7 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.index ["import_csv_id"], name: "index_import_csv_champs_on_import_csv_id" end - create_table "import_csv_elements", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "import_csv_elements", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t| t.bigint "import_csv_id" t.string "element_type" t.integer "element_id" @@ -536,7 +536,7 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.index ["import_csv_id"], name: "index_import_csv_elements_on_import_csv_id" end - create_table "import_csv_headers", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "import_csv_headers", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t| t.bigint "import_csv_id" t.string "name" t.string "champ" @@ -546,7 +546,7 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.index ["import_csv_id"], name: "index_import_csv_headers_on_import_csv_id" end - create_table "import_csvs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "import_csvs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t| t.bigint "m_odr_id" t.string "file" t.text "notes" @@ -827,6 +827,8 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.string "reduc_code" t.date "buy_at" t.decimal "reduc", precision: 14, scale: 2 + t.string "ba_number" + t.boolean "ba_used", default: false t.index ["m_odr_id"], name: "index_m_odr_reps_on_m_odr_id" t.index ["m_odr_place_id"], name: "index_m_odr_reps_on_m_odr_place_id" t.index ["m_odr_product_cat_id"], name: "index_m_odr_reps_on_m_odr_product_cat_id" @@ -958,6 +960,13 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.boolean "product_process", default: true t.boolean "product_needed", default: true t.string "reduc_label" + t.boolean "ba_number_generator", default: false + t.boolean "ba_interface", default: false + t.boolean "ba_show_remise", default: false + t.integer "ba_number_place_y" + t.integer "ba_number_place_x" + t.integer "ba_remise_place_y" + t.integer "ba_remise_place_x" t.index ["p_customer_id"], name: "index_m_odrs_on_p_customer_id" end @@ -1029,7 +1038,7 @@ ActiveRecord::Schema.define(version: 2020_07_30_084942) do t.datetime "updated_at", precision: 6, null: false end - create_table "mail_type_cats", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "mail_type_cats", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t| t.string "name" t.bigint "m_odr_id" t.string "slug"