diff --git a/app/controllers/admin/buy_lists_controller.rb b/app/controllers/admin/buy_lists_controller.rb index 51bd848..7e15188 100644 --- a/app/controllers/admin/buy_lists_controller.rb +++ b/app/controllers/admin/buy_lists_controller.rb @@ -214,7 +214,7 @@ class Admin::BuyListsController < ApplicationController def reject @p_customer_sheet = PCustomerSheet.find(params[:id]) - @p_customer_sheet.state = "refusée" + @p_customer_sheet.state = "Refusée" @p_customer_sheet.save @p_customer_sheet.archive_now if !@p_customer_sheet.archived diff --git a/app/controllers/admin/p_customer_sheets_controller.rb b/app/controllers/admin/p_customer_sheets_controller.rb index 8cd2e5d..0d83a9a 100644 --- a/app/controllers/admin/p_customer_sheets_controller.rb +++ b/app/controllers/admin/p_customer_sheets_controller.rb @@ -258,7 +258,7 @@ class Admin::PCustomerSheetsController < ApplicationController def reject @p_customer_sheet = PCustomerSheet.find(params[:id]) - @p_customer_sheet.state = "refusée" + @p_customer_sheet.state = "Refusée" @p_customer_sheet.save @p_customer_sheet.archive_now if !@p_customer_sheet.archived @@ -363,6 +363,5 @@ class Admin::PCustomerSheetsController < ApplicationController } end end - end diff --git a/app/controllers/admin/price_documents_controller.rb b/app/controllers/admin/price_documents_controller.rb index ca35b64..18956fb 100644 --- a/app/controllers/admin/price_documents_controller.rb +++ b/app/controllers/admin/price_documents_controller.rb @@ -551,28 +551,24 @@ class Admin::PriceDocumentsController < ApplicationController if @p_customer_sheet price_document = @p_customer_sheet.price_documents.new(:price_document_type => PriceDocumentType.find_by_label("Bon de livraison"), :bon_de_commande_id => @past_price_document.id, :date => Date.today) price_document.p_customer = @past_price_document.p_customer - price_document.reliquat = true if @p_customer_sheet and @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false).count > 0 - price_document.price_line_block = @past_price_document.price_line_block.dup - + price_document.tva_type = @past_price_document.tva_type + price_document.price_line_block.ac_bon_de_commande_id = nil price_document.price_line_block.ac_bon_de_livraison_id = nil price_document.price_line_block.ac_facture_id = nil price_document.price_line_block.ac_block_type = nil price_document.price_line_block.ac_reliquat = nil - - - + price_document.price_line_block.bk_tot_fdp_ht = price_document.price_line_block.cc_tot_fdp_ht - - - + @past_price_document.price_line_block.price_lines.each do |pl| new_pl = pl.dup new_pl.price_line_ref_id = pl.id new_pl.ac_block_type = nil - + new_pl.p_articles = pl.p_articles + new_pl.save if price_document.reliquat bls = @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false) @@ -583,11 +579,11 @@ class Admin::PriceDocumentsController < ApplicationController end price_document.price_line_block.price_lines << new_pl end - + if price_document.save price_document.reset_for_update price_document.archive_now - @p_customer_sheet.state = "en livraison" + @p_customer_sheet.state = "Livraison" @p_customer_sheet.save redirect_to admin_p_customer_sheet_path(price_document.ref_element) @@ -821,14 +817,4 @@ class Admin::PriceDocumentsController < ApplicationController end - def update_pcustomersheet_statut - @price_document = PriceDocument.find(params[:id]) - state = params[:state] - @price_document.ref_element.state = state - if @price_document.ref_element.save - redirect_to [:admin, @price_document] - end - end - - end diff --git a/app/helpers/translation_helper.rb b/app/helpers/translation_helper.rb index 068f0ab..825930e 100755 --- a/app/helpers/translation_helper.rb +++ b/app/helpers/translation_helper.rb @@ -83,6 +83,8 @@ module TranslationHelper r = ''+value+'' elsif value == "Payé" r = ''+value+'' + elsif value == "Refusée" + r = ''+value+'' end return raw(r) diff --git a/app/models/line_stock.rb b/app/models/line_stock.rb index 21da23b..b06f8e0 100644 --- a/app/models/line_stock.rb +++ b/app/models/line_stock.rb @@ -51,6 +51,9 @@ before_validation do + puts "SELF QTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" + puts self.qte + puts "SELF QTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" if self.qte >= 0 self.qte_used = self.line_stock_usages.sum(:qte) self.qte_available = self.qte - self.qte_used diff --git a/app/models/p_customer.rb b/app/models/p_customer.rb index 0d11ced..d046876 100644 --- a/app/models/p_customer.rb +++ b/app/models/p_customer.rb @@ -244,12 +244,12 @@ class PCustomer < ApplicationRecord end def nbr_orders - self.p_customer_sheets.where(:state => "facturée") + self.p_customer_sheets.where(:state => "Payée") end def nbr_orders_refusees - self.p_customer_sheets.where(:state => "refusée") + self.p_customer_sheets.where(:state => "Refusée") end diff --git a/app/models/p_customer_sheet.rb b/app/models/p_customer_sheet.rb index b64b760..974391f 100644 --- a/app/models/p_customer_sheet.rb +++ b/app/models/p_customer_sheet.rb @@ -48,7 +48,7 @@ class PCustomerSheet < ApplicationRecord # STATES = ["brouillon", "offre", "commande", "livrée","facturée", "annulée", "refusée"] # STATES = ["AV BPA", "PAS BPA","BPA", "Traitée"] - STATES = ["Brouillon", "Validée", "Préparation", "Livraison", "Réceptionné", "Payé"] + STATES = ["Brouillon", "Validée", "Préparation", "Livraison", "Réceptionné", "Payé", "Refusée"] def personalised_archive self.price_line_block.archive_now @@ -268,77 +268,32 @@ class PCustomerSheet < ApplicationRecord self.archive_now if !self.archived self.block_price if !self.price_blocked + price_document = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label(label), :date => Date.today) + price_document.p_customer = self.p_customer + price_document.price_line_block = self.price_line_block.dup + price_document.tva_type = TvaType.first #le type de TVA est correctement enregistrée dans le fonction generate_f pour les factures + price_document.price_line_block.ac_block_type = nil - if !self.price_line_block.price_lines.joins(:p_articles).where("p_articles.tva_type_id = ?", 1).empty? - price_document_standard_tva = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label(label), :date => Date.today, :tva_type_id => 1) - price_document_standard_tva.p_customer = self.p_customer - price_document_standard_tva.price_line_block = self.price_line_block.dup - price_document_standard_tva.price_line_block.ac_block_type = nil - - self.price_line_block.price_lines.each do |pl| - if !pl.p_articles.where(tva_type_id: 1).empty? - - new_pl = pl.dup - new_pl.ac_block_type = nil - pl.p_articles.where(tva_type_id: 1).each do |p_article| - - new_pl.p_articles << PArticle.first - end - new_pl.save - price_document_standard_tva.price_line_block.price_lines << new_pl - end - end - - if price_document_standard_tva.save - price_document_standard_tva.archive_now - self.state = state - self.save - end + self.price_line_block.price_lines.each do |pl| + new_pl = pl.dup + new_pl.ac_block_type = nil + pl.p_articles.each { |p_article| new_pl.p_articles << p_article } + price_document.price_line_block.price_lines << new_pl end - - - if !self.price_line_block.price_lines.joins(:p_articles).where("p_articles.tva_type_id = ?", 2).empty? - price_document_sur_marge_tva = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label(label), :date => Date.today, :tva_type_id => 2) - price_document_sur_marge_tva.p_customer = self.p_customer - price_document_sur_marge_tva.price_line_block = self.price_line_block.dup - price_document_sur_marge_tva.price_line_block.ac_block_type = nil - - self.price_line_block.price_lines.each do |pl| - if !pl.p_articles.where(tva_type_id: 2).empty? - new_pl = pl.dup - new_pl.ac_block_type = nil - pl.p_articles.where(tva_type_id: 2).each { |p_article| new_pl.p_articles << p_article } - price_document_sur_marge_tva.price_line_block.price_lines << new_pl - end - end - - if price_document_sur_marge_tva.save - price_document_sur_marge_tva.archive_now - self.state = state - self.save - end + if price_document.save + price_document.archive_now + puts 'STATEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE' + puts state + puts 'STATEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE' + self.state = state + self.save + else + puts "ERRORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" + puts price_document.errors.full_messages + puts "ERRORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" end - - - # price_document = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label(label), :date => Date.today) - # price_document.p_customer = self.p_customer - # price_document.price_line_block = self.price_line_block.dup - # price_document.price_line_block.ac_block_type = nil - - # self.price_line_block.price_lines.each do |pl| - # new_pl = pl.dup - # new_pl.ac_block_type = nil - # pl.p_articles.each { |p_article| new_pl.p_articles << p_article } - # price_document.price_line_block.price_lines << new_pl - # end - - # if price_document.save - # price_document.archive_now - # self.state = state - # self.save - # end end def generate_d @@ -368,8 +323,58 @@ class PCustomerSheet < ApplicationRecord end def generate_f() + #generate_doc("Facture", "Payé") On n'appelle plus la fonction generate doc car on veut générer 1 facture par type de TVA présent dans la commande - generate_doc("Facture", "Payé") + self.archive_now if !self.archived + self.block_price if !self.price_blocked + + if !self.price_line_block.price_lines.joins(:p_articles).where("p_articles.tva_type_id = ?", 1).empty? + price_document_standard_tva = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label("Facture"), :date => Date.today, :tva_type_id => 1) + price_document_standard_tva.p_customer = self.p_customer + price_document_standard_tva.price_line_block = self.price_line_block.dup + price_document_standard_tva.price_line_block.ac_block_type = nil + + self.price_line_block.price_lines.each do |pl| + if !pl.p_articles.where(tva_type_id: 1).empty? + + new_pl = pl.dup + new_pl.ac_block_type = nil + pl.p_articles.where(tva_type_id: 1).each do |p_article| + new_pl.p_articles << pl.p_articles + end + new_pl.save + price_document_standard_tva.price_line_block.price_lines << new_pl + end + end + + if price_document_standard_tva.save + price_document_standard_tva.archive_now + self.state = "Payé" + self.save + end + end + + if !self.price_line_block.price_lines.joins(:p_articles).where("p_articles.tva_type_id = ?", 2).empty? + price_document_sur_marge_tva = self.price_documents.new(:price_document_type => PriceDocumentType.find_by_label("Facture"), :date => Date.today, :tva_type_id => 2) + price_document_sur_marge_tva.p_customer = self.p_customer + price_document_sur_marge_tva.price_line_block = self.price_line_block.dup + price_document_sur_marge_tva.price_line_block.ac_block_type = nil + + self.price_line_block.price_lines.each do |pl| + if !pl.p_articles.where(tva_type_id: 2).empty? + new_pl = pl.dup + new_pl.ac_block_type = nil + pl.p_articles.where(tva_type_id: 2).each { |p_article| new_pl.p_articles << p_article } + price_document_sur_marge_tva.price_line_block.price_lines << new_pl + end + end + + if price_document_sur_marge_tva.save + price_document_sur_marge_tva.archive_now + self.state = "Payé" + self.save + end + end end diff --git a/app/models/p_product.rb b/app/models/p_product.rb index 886c99f..7eaf7b8 100644 --- a/app/models/p_product.rb +++ b/app/models/p_product.rb @@ -32,7 +32,7 @@ class PProduct < ApplicationRecord belongs_to :p_product_cat belongs_to :s_brand - + validates :s_brand, :presence => true validates :name, :presence => true, exclusion: { in: ["--> Selectioner un produit <--"], message: "Selectioner un produit avant de valider" } validates :code, :presence => true, :uniqueness => true, exclusion: { in: ["--> Indiquer un code produit <--"], message: "Indiquer un code produit avant de valider" } diff --git a/app/models/price_document.rb b/app/models/price_document.rb index 2505167..78145fa 100644 --- a/app/models/price_document.rb +++ b/app/models/price_document.rb @@ -26,7 +26,7 @@ class PriceDocument < ApplicationRecord #PURCHASES = ["Demande prix", "Réponse fournisseur", "Commande achat", "Facture achat", "Consultation fournisseur"] PURCHASES = ["Facture achat", "Bon de réception achat"] - SALES = ["Devis", "Avoir", "Facture", "Bon de livraison", "Bon de commande"] + SALES = ["Facture", "Bon de livraison", "Bon de commande"] # AVANCEMENT = ["0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"] AVANCEMENT = ["0%", "25%", "50%", "75%", "100"] @@ -266,6 +266,7 @@ class PriceDocument < ApplicationRecord :id => {:name => "ID", :reorder => false}, :actions => {:name => "Actions", :reorder => false}, + :label => {:name => "Type", :reorder => false}, :p_customer_code => {:name => "Code client", :reorder => false}, #:avancement => {:name => "Avancement (%)", :reorder => true}, #:list_designaton => {:name => "Designation liste", :reorder => true}, @@ -279,7 +280,6 @@ class PriceDocument < ApplicationRecord :public_fournisseur_name => {:name => "Nom fournisseur saisi", :reorder => false}, :p_fournisseur => {:name => "Fournisseur", :reorder => false}, :com_counter => {:name => "N° Offre", :reorder => false}, - :label => {:name => "Type", :reorder => false}, :stock_ok => {:name => "Stock mis à jour ?", :reorder => true}, #:tva_type_name => {:name => "Type de TVA", :reorder => true}, #:package_number => {:name => "Nombre de colis", :reorder => true}, @@ -777,8 +777,9 @@ class PriceDocument < ApplicationRecord end def stock_generable - return self.price_line_block.price_lines.joins(:p_articles).count < self.price_line_block.price_lines.sum(:qte) ? false : true + return self.price_line_block.price_lines.joins(:p_articles).count == self.price_line_block.price_lines.sum(:qte) ? true : false #exclure les produit non stockable et sans SN + #return self.price_line_block.price_lines.joins(:p_product_ref).joins(:p_product).where("p_products.stockable = ?", true).where("p_products.with_serial_number = ?", true).joins(:p_articles).count < self.price_line_block.price_lines.joins(:p_product_ref).joins(:p_product).where("p_products.stockable = ?", true).where("p_products.with_serial_number = ?", true).sum(:qte) ? false : true end end diff --git a/app/models/price_line_block.rb b/app/models/price_line_block.rb index 6211ab7..03bab55 100644 --- a/app/models/price_line_block.rb +++ b/app/models/price_line_block.rb @@ -123,10 +123,65 @@ class PriceLineBlock < ApplicationRecord def update_stocks_for(p_product_ref, qte, pl) - puts "TEST" - puts "Référence : #{p_product_ref.id} #{p_product_ref.p_product.name}" - if qte.to_f != 0.0 - decr_line_stock = LineStock.create(:date => self.price_lineable.date, + if !pl.p_articles.empty? + pl.p_articles.each do |p_article| + decr_line_stock = LineStock.new(:date => self.price_lineable.date, + :p_product_ref => p_product_ref, + :qte => -1, + :description => "Attribution à la ligne d'une facture", + :price_ht => 0.0, + :price_line => pl, + :price_line_block => self, + :stockable => self.price_lineable) + + price = 0.0 + line_stock_usages = [] + #qte_to_affect = qte + + lsu_p_art = LineStockUsage.where(p_article_id: p_article.id) + + # ls = LineStock.joins(:p_articles).joins(:line_stock_usages).where("p_articles.id = ?", p_article.id).where.not("line_stock_usages.p_article").order(:date).last + # ls = LineStock.joins(:p_articles).joins(:line_stock_usages).where("p_articles.id = ?", 69).where.not("line_stock_usages.p_article_id = ?", 69).order(:date).last + # used_line_stock_p_article = line_stocks_p_article.joins(:line_stock_usages).where("line_stock_usages.p_article_id = ?", p_article.id).order(date: :desc).last + # line_stocks_p_article = LineStock.joins(:p_articles).where("p_articles.id = ?", p_article.id) + + line_stocks_p_article = p_article.line_stocks.where("qte_available > ?", 0) #LineStock.joins(:p_articles).where("p_articles.id = ?", p_article.id) + ls = nil + line_stocks_p_article.each do |p_article_line_stock| + if p_article_line_stock.line_stock_usages.where(p_article_id: p_article).empty? + ls = p_article_line_stock + + end + end + + #ls = LineStock.joins(:p_articles).where("p_articles.id = ?", p_article.id).joins(:line_stock_usages) + #ls.qte_available = ls.qte_available - 1 + #qte_to_affect = qte_to_affect - qte_here + + lsu = LineStockUsage.create(:qte => 1, :line_stock => ls, :dest_line_stock_id => decr_line_stock.id, p_article_id: p_article.id) + #line_stock_usages << lsu + + price += lsu.price_ht + ls.save + decr_line_stock.price_ht = price * -1 + decr_line_stock.save + + ls_p_art = LineStockPArticle.new( + p_article: p_article, + line_stock: decr_line_stock + ) + ls_p_art.save + + + end + else + + #=================================================================================================================== + + puts "TEST" + puts "Référence : #{p_product_ref.id} #{p_product_ref.p_product.name}" + if qte.to_f != 0.0 + decr_line_stock = LineStock.create(:date => self.price_lineable.date, :p_product_ref => p_product_ref, :qte => qte*-1, :description => "Attribution à la ligne d'une facture", @@ -134,33 +189,37 @@ class PriceLineBlock < ApplicationRecord :price_line => pl, :price_line_block => self, :stockable => self.price_lineable) - - - price = 0.0 - line_stock_usages = [] - qte_to_affect = qte - - LineStock.where(:p_product_ref_id => p_product_ref.id).where("date <= ?", self.price_lineable.date).where("qte_available > 0.0").each do |ls| - if qte_to_affect <= ls.qte_available - qte_here = qte_to_affect - else - qte_here = ls.qte_available + + price = 0.0 + line_stock_usages = [] + qte_to_affect = qte + + #LineStock.where(:p_product_ref_id => p_product_ref.id).where("date <= ?", self.price_lineable.date).where("qte_available > 0.0").each do |ls| + LineStock.where(:p_product_ref_id => p_product_ref.id).where("date <= ?", self.price_lineable.date).where("qte_available > 0.0").each do |ls| + if qte_to_affect <= ls.qte_available + qte_here = qte_to_affect + else + qte_here = ls.qte_available + end + + qte_to_affect = qte_to_affect - qte_here + lsu = LineStockUsage.create(:qte => qte_here, :line_stock => ls, :dest_line_stock_id => decr_line_stock.id) + line_stock_usages << lsu + price += lsu.price_ht + ls.save + + break if qte_to_affect == 0.0 + #price_u_ht end - - qte_to_affect = qte_to_affect - qte_here - lsu = LineStockUsage.create(:qte => qte_here, :line_stock => ls, :dest_line_stock_id => decr_line_stock.id) - line_stock_usages << lsu - price += lsu.price_ht - ls.save - - break if qte_to_affect == 0.0 - #price_u_ht + + + decr_line_stock.p_articles = pl.p_articles + decr_line_stock.price_ht = price * -1 + + decr_line_stock.save end - decr_line_stock.p_articles = pl.p_articles - decr_line_stock.price_ht = price * -1 - decr_line_stock.save + #=================================================================================================================== end - end def update_stocks @@ -203,6 +262,8 @@ class PriceLineBlock < ApplicationRecord ls.p_articles = pl.p_articles ls.save end + + pl.p_articles.joins(:p_grade).where(p_grades: {grade: "RMA"}).each do |p_article| decr_line_stock = LineStock.new( :date => self.price_lineable.date, @@ -216,6 +277,11 @@ class PriceLineBlock < ApplicationRecord decr_line_stock.p_articles << p_article decr_line_stock.save end + + + + + end diff --git a/app/views/admin/p_customer_sheets/show.html.haml b/app/views/admin/p_customer_sheets/show.html.haml index 544a72e..7276f32 100644 --- a/app/views/admin/p_customer_sheets/show.html.haml +++ b/app/views/admin/p_customer_sheets/show.html.haml @@ -1,8 +1,8 @@ .qi_header .right - =raw @p_customer_sheet.state_html - + =#raw @p_customer_sheet.state_html + =state_helper(@p_customer_sheet.price_line_block.state) =#debug @p_customer_sheet.archive_now @@ -27,62 +27,60 @@ -price_line_block = @p_customer_sheet.price_line_block %h3 Contenu de la demande de commande : - - - + =render price_line_block - - - - %hr - -if @p_customer_sheet.demande_type? - %p - Demande lors de la saisie : - %strong=@p_customer_sheet.demande_type - .right{:style => "text-align:right;"} - - -if current_admin.has_permission?("gestion-des-commandes") - - -if @p_customer_sheet.state == "Brouillon" - - %p - -if @p_customer_sheet.price_blocked - =link_to ic(:unlock)+" Débloquer les prix", block_price_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-default" - -else - =link_to ic(:lock)+" Bloquer les prix", block_price_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-default" - - - - -if @p_customer_sheet.state == "Brouillon" or @p_customer_sheet.state == "offre"# or @p_customer_sheet.state == "Validée" - -if @p_customer_sheet.state == "Brouillon" - %p=link_to "Générer le devis", generate_d_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" - %p=#link_to "Générer la facture proforma", generate_fp_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" - %p=link_to "Générer le bon de commande", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add disabled" if !@p_customer_sheet.stock_generable - %p=link_to "Générer le bon de commande", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add" if @p_customer_sheet.stock_generable + -@bon_de_commande = @p_customer_sheet.price_documents.where(:cc_label => "Bon de commande client").first + %p=link_to "Marquer l'offre comme refusée", reject_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn", style: "background:rgb(110,45,116); color: white;" + %p=link_to "Générer le bon de commande et marquer la commande comme Validée", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add disabled" if !@p_customer_sheet.stock_generable + %p=link_to "Générer le bon de commande et marquer la commande comme Validée", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add" if @p_customer_sheet.stock_generable - %p=link_to "Marquer l'offre comme refusée", reject_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary btn-ap-error " - - -if( @p_customer_sheet.state == "Validée" or (@p_customer_sheet.state == "en livraison" and @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false).count == 0)) and @bon_de_commande - -if price_line_block.nbr_ship + - if @bon_de_commande + -# %p=link_to "Générer le devis", generate_d_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" + %p=link_to "Passer la commande en Préparation", admin_p_customer_sheet_path(:id => @p_customer_sheet.id, :p_customer_sheet => {:state => "Préparation"}), :method => :put, :class => "btn", style: "background:rgb(233,122,28); color: white" if !@bon_de_commande.stock_ok and @bon_de_commande.stock_generable + %p=link_to "Générer le bon de livraison et marquer la commande comme Livraison", bl_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary btn-ap-add" + %p=link_to "Passer la commande en Livraison", admin_p_customer_sheet_path(:id => @p_customer_sheet.id, :p_customer_sheet => {:state => "Livraison"}), :method => :put, :class => "btn", style: "background:rgb(66,122,255); color: white" if !@bon_de_commande.stock_ok and @bon_de_commande.stock_generable + %p=link_to "Générer la facture", generate_f_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" + + + %p=link_to "Mettre à jour les stocks, calculer la marge", update_stocks_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary" if !@bon_de_commande.stock_ok and @bon_de_commande.stock_generable + + + + + -if false + -if @p_customer_sheet.demande_type? + %p + Demande lors de la saisie : + %strong=@p_customer_sheet.demande_type + .right{:style => "text-align:right;"} + -if current_admin.has_permission?("gestion-des-commandes") + -if @p_customer_sheet.state == "Brouillon" %p - -if @bon_de_commande.label == "Bon de commande" and @p_customer_sheet and @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false).count == 0 - - = link_to ic(:pencil)+" Modifier le bon de commande", edit_admin_price_document_path(:id => @bon_de_commande.id, :public_edit => true), :class => "btn btn-default" - =link_to "Générer le bon de livraison", bl_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary btn-ap-add" - - - + -if @p_customer_sheet.price_blocked + =link_to ic(:unlock)+" Débloquer les prix", block_price_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-default" + -else + =link_to ic(:lock)+" Bloquer les prix", block_price_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-default" + -if @p_customer_sheet.state == "Brouillon" or @p_customer_sheet.state == "offre"# or @p_customer_sheet.state == "Validée" + -if @p_customer_sheet.state == "Brouillon" + %p=link_to "Générer le devis", generate_d_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" + %p=#link_to "Générer la facture proforma", generate_fp_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary" + %p=link_to "Générer le bon de commande", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add disabled" if !@p_customer_sheet.stock_generable + %p=link_to "Générer le bon de commande", generate_bc_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-success btn-ap-add" if @p_customer_sheet.stock_generable + %p=link_to "Marquer l'offre comme refusée", reject_admin_p_customer_sheet_path(@p_customer_sheet), :class => "btn btn-primary btn-ap-error " + -if( @p_customer_sheet.state == "Validée" or (@p_customer_sheet.state == "en livraison" and @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false).count == 0)) and @bon_de_commande + -if price_line_block.nbr_ship + %p + -if @bon_de_commande.label == "Bon de commande" and @p_customer_sheet and @p_customer_sheet.price_documents.where(:cc_label => "Bon de livraison", :cancelled => false).count == 0 + = link_to ic(:pencil)+" Modifier le bon de commande", edit_admin_price_document_path(:id => @bon_de_commande.id, :public_edit => true), :class => "btn btn-default" + =link_to "Générer le bon de livraison", bl_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary btn-ap-add" + -else + %p=link_to "Indiquer le nombre de colis à livrer", edit_ship_admin_price_document_path(@bon_de_commande), :class => "btn btn-default" + -elsif @bon_de_commande + -if (@bon_de_commande.price_line_block.price_lines.sum(:qte) > PriceLine.where(:price_line_block_id => PriceLineBlock.where(:price_lineable_type => "PriceDocument", :price_lineable_id => @p_customer_sheet.price_documents.where(:cancelled => false, :cc_label => "Bon de livraison").ids)).sum(:qte)) + =link_to "Générer un bon de livraison pour le reliquat", bl_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary btn-ap-add" - -else - %p=link_to "Indiquer le nombre de colis à livrer", edit_ship_admin_price_document_path(@bon_de_commande), :class => "btn btn-default" - - - -elsif @bon_de_commande - -if (@bon_de_commande.price_line_block.price_lines.sum(:qte) > PriceLine.where(:price_line_block_id => PriceLineBlock.where(:price_lineable_type => "PriceDocument", :price_lineable_id => @p_customer_sheet.price_documents.where(:cancelled => false, :cc_label => "Bon de livraison").ids)).sum(:qte)) - =link_to "Générer un bon de livraison pour le reliquat", bl_admin_price_document_path(@bon_de_commande), :class => "btn btn-primary btn-ap-add" - .clear @@ -91,10 +89,10 @@ -params[:search][:per_page] = params[:search][:per_page] || 50 -per_page = params[:search][:per_page] -page = (params[:page] and params[:page] != "") ? params[:page] : 1 - -@price_documents = @p_customer_sheet.price_documents.order("date DESC, created_at DESC") + -@price_documents = @p_customer_sheet.price_documents.order("date ASC, created_at ASC") -if params[:price_document_ids] -@price_documents = @price_documents.where(:id => params[:price_document_ids]) - -@price_documents = sort_by_sorting(@price_documents, "created_at DESC") + -@price_documents = sort_by_sorting(@price_documents, "created_at ASC") -@price_documents = @price_documents.page(page).per(per_page) - if @price_documents.exists? diff --git a/app/views/admin/p_products/_form.html.haml b/app/views/admin/p_products/_form.html.haml index 6a02656..fb28bce 100755 --- a/app/views/admin/p_products/_form.html.haml +++ b/app/views/admin/p_products/_form.html.haml @@ -1,5 +1,11 @@ =semantic_form_for [:admin, @p_product], :remote => false do |f| + %div.error.has-error + -f.object.errors.keys.each do |key| + %p=key.to_s + %p=f.object.errors[key.to_sym][0] + + .qi_row .qi_pannel.qi_plain.padding =f.inputs do @@ -17,7 +23,7 @@ #with_serial = f.input :with_serial_number, :label => "Avec n° de série ?" .col-sm-2 - =f.input :s_brand_id, :label => "Marque :", :collection => SBrand.all, :as => :select, :include_blank => true + =f.input :s_brand_id, :label => "Marque :", :collection => SBrand.all, required: true, :as => :select, :include_blank => true =# f.input :stocked, :label => "Suivi de stock ?" .col-sm-2 =#f.input :sorecop_cat, label: "Catgorie Sorecop :", :collection => SorecopCat.all, :as => :select, :include_blank => true diff --git a/app/views/admin/price_documents/show.html.haml b/app/views/admin/price_documents/show.html.haml index a078692..7bd05c1 100644 --- a/app/views/admin/price_documents/show.html.haml +++ b/app/views/admin/price_documents/show.html.haml @@ -13,7 +13,8 @@ = link_to i(:download), print_admin_price_document_path(@price_document.token), :remote => false, :target => "_blank" if !PriceLineBlock::PURCHASE_BLOCKS.include?(@price_document.block_type) - =breadcrumb second_title: @price_document.label, second_link: admin_price_documents_path(:price_document_type_id => @price_document.price_document_type_id), record: @price_document.d_number + + =breadcrumb first_title: "Commandes", second_title: @price_document.label, second_link: admin_price_documents_path(:price_document_type_id => @price_document.price_document_type_id), record: @price_document.d_number .qi_row @@ -251,20 +252,16 @@ =link_to "Générer un bon de réception", bon_de_reception_admin_price_document_path(@price_document), :class => "btn btn-primary disabled" if !@price_document.stock_ok and !@price_document.stock_generable -elsif @price_document.price_document_type_id == 4 or @price_document.price_document_type_id == 5 - %p - Coût : - =number_to_currency @price_document.cost_ht - %p - Marge : - =number_to_currency @price_document.marge_ht + -# %p + -# Coût : + -# =number_to_currency @price_document.cost_ht + -# %p + -# Marge : + -# =number_to_currency @price_document.marge_ht -if !@price_document.cost_ok - =link_to "Mettre à jour les stocks, calculer la marge", update_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary" if !@price_document.stock_ok and @price_document.stock_generable - =link_to "Mettre à jour les stocks, calculer la marge", update_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary disabled" if !@price_document.stock_ok and !@price_document.stock_generable - -elsif @price_document.price_document_type_id == 12 - %p=link_to "Mettre à jour les stocks, calculer la marge", update_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary" if !@price_document.stock_ok and @price_document.stock_generable - %p=link_to "Passer la commande client au statut Préparation", update_pcustomersheet_statut_admin_price_document_path(@price_document, state: "Préparation"), :class => "btn btn-primary" if !@price_document.stock_ok and @price_document.stock_generable - %p=link_to "Passer la commande client au statut Livraison", update_pcustomersheet_statut_admin_price_document_path(@price_document, state: "Livraison"), :class => "btn btn-primary" if !@price_document.stock_ok and @price_document.stock_generable + =link_to "Mettre à jour les stocks", generate_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary" if !@price_document.stock_ok and @price_document.stock_generable + =link_to "Mettre à jour les stocks", generate_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary disabled" if !@price_document.stock_ok and !@price_document.stock_generable -if @price_document.d_number -if @price_document.cc_label == "Commande achat" diff --git a/app/views/admin/price_line_blocks/_price_line_block.html.haml b/app/views/admin/price_line_blocks/_price_line_block.html.haml index 54da1fc..ac38232 100644 --- a/app/views/admin/price_line_blocks/_price_line_block.html.haml +++ b/app/views/admin/price_line_blocks/_price_line_block.html.haml @@ -62,7 +62,7 @@ %table.table %thead %tr - %th IDddd + %th ID %th Référence %th Désignation %th Qté diff --git a/config/routes.rb b/config/routes.rb index 11a9e6d..effb589 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -672,7 +672,6 @@ Rails.application.routes.draw do get :buy_order_create get :bon_de_reception get :facture_achat - get :update_pcustomersheet_statut end collection do diff --git a/db/migrate/20211117161758_add_p_article_to_line_stock_usage.rb b/db/migrate/20211117161758_add_p_article_to_line_stock_usage.rb new file mode 100644 index 0000000..6486543 --- /dev/null +++ b/db/migrate/20211117161758_add_p_article_to_line_stock_usage.rb @@ -0,0 +1,5 @@ +class AddPArticleToLineStockUsage < ActiveRecord::Migration[6.0] + def change + add_column :line_stock_usages, :p_article_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index dd6f2ee..29d819f 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: 2021_11_16_144749) do +ActiveRecord::Schema.define(version: 2021_11_17_161758) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -568,6 +568,7 @@ ActiveRecord::Schema.define(version: 2021_11_16_144749) do t.integer "dest_line_stock_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.integer "p_article_id" t.index ["line_stock_id"], name: "index_line_stock_usages_on_line_stock_id" end