diff --git a/app/controllers/admin/price_documents_controller.rb b/app/controllers/admin/price_documents_controller.rb index ccb68b1..62756c9 100644 --- a/app/controllers/admin/price_documents_controller.rb +++ b/app/controllers/admin/price_documents_controller.rb @@ -670,4 +670,84 @@ class Admin::PriceDocumentsController < ApplicationController redirect_to admin_price_document_path(@price_document) end end + + def bon_de_reception + @past_price_document = PriceDocument.find(params[:id]) + + @p_customer_sheet = @past_price_document.ref_element + + if @p_customer_sheet + price_document = @p_customer_sheet.price_documents.new(:price_document_type => PriceDocumentType.find_by_label("Bon de réception achat"), :demande_de_prix_id => @past_price_document.id, :date => Date.today) + + else + price_document = PriceDocument.new(:price_document_type => PriceDocumentType.find_by_label("Bon de réception achat"), :date => Date.today) + end + + price_document.doc_ref_id = @past_price_document.id + + price_document.p_fournisseur = @past_price_document.p_fournisseur + + + price_document.price_line_block = @past_price_document.price_line_block.dup + + if @past_price_document.cc_label == "Commande achat" + price_document.bon_de_commande_achat_id = @past_price_document.id + price_document.reliquat = true if PriceDocument.where(:bon_de_commande_achat_id => @past_price_document.id, :price_document_type_id => [5]).count > 0 + + + + end + + + if @past_price_document.cc_label == "Facture achat" + price_document.facture_achat_id = @past_price_document.id + + + end + + + 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 + + + + + @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 + + if price_document.reliquat and @p_customer_sheet + bls = PriceDocument.where(:bon_de_commande_achat_id => @past_price_document.id, :price_document_type_id => [5]) + + qte_ok = PriceLine.where(:price_line_ref_id => new_pl.price_line_ref_id).where(:price_line_block_id => PriceLineBlock.where(:price_lineable_type => "PriceDocument", :price_lineable_id => bls.ids)).sum(:qte) + + new_pl.qte = new_pl.qte - qte_ok + + end + price_document.price_line_block.price_lines << new_pl + end + + if price_document.save + #price_document.reset_for_update + #price_document.archive_now + if @p_customer_sheet + @p_customer_sheet.state = "Bon de réception achat" + @p_customer_sheet.save + end + + if price_document.ref_element + redirect_to [:admin, price_document.ref_element] + else + redirect_to [:admin, price_document] + end + + + else + render :inline => price_document.errors.messages.to_s + end + end end diff --git a/app/views/admin/price_documents/show.html.haml b/app/views/admin/price_documents/show.html.haml index 838b25f..9400fbe 100644 --- a/app/views/admin/price_documents/show.html.haml +++ b/app/views/admin/price_documents/show.html.haml @@ -5,25 +5,25 @@ -if @price_document.price_document_type_id == 6 and !@price_document.stock_ok = link_to i(:pencil), edit_admin_price_document_path(:id => @price_document.id, :public_edit => true) if !@price_document.stock_ok - - + + = diag do = link_to i(:pencil), edit_admin_price_document_path(@price_document) = link_to i(:eye), admin_price_document_path(@price_document.id), :remote => false, :target => "_blank" - + = 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) - + %h1 Documents - + %span =@price_document.price_document_type.label - + %span ="##{@price_document.id}" %span =@price_document.d_number - + .qi_row @@ -35,16 +35,21 @@ Nom fournisseur saisi %td =@price_document.public_fournisseur_name - + -if @price_document.p_fournisseur %tr %td Fournisseur %td =link_to @price_document.p_fournisseur.name, [:admin, @price_document.p_fournisseur] if @price_document.p_fournisseur - - + -if @price_document.d_number? + %tr + %td Numéro + %td=@price_document.d_number + %tr + %td Date + %td=l @price_document.date, :format => :date -if @price_document.label == "Demande prix" %tr @@ -57,23 +62,23 @@ Désignation %td =@price_document.list_designaton - + %tr %td Date de fin de consultation : %td =l @price_document.end_date if @price_document.end_date - + %tr %td Commentaire %td =simple_format @price_document.dp_comment - + %tr %td - Envoyé à + Envoyé à %td =simple_format @price_document.acheteur_text - + %tr %td Lien pour consultation @@ -86,20 +91,20 @@ .qi_pannel.qi_plain.padding -if false =debug @price_document - - - + + + -if true - + -price_line_block = @price_document.price_line_block - - + + =#render price_line_block - + -else -params[:search][:per_page] = params[:search][:per_page] || 5000 -per_page = params[:search][:per_page] - -page = (params[:page] and params[:page] != "") ? params[:page] : 1 + -page = (params[:page] and params[:page] != "") ? params[:page] : 1 -@price_lines = @price_document.price_line_block.price_lines @@ -112,85 +117,86 @@ - .clear + .clear =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @price_lines, :key => "reponses-prix-show"} - - - + + + -if @price_document.label != "Demande prix" and @price_document.label != "Réponse fournisseur" - - + -if current_admin and current_admin.id == 1 - %table.table - %tr - %th Archivé ? - %td - = diag do - -if @price_document.archived - Oui - =link_to "Désarchiver", unarchive_now_admin_price_document_path(@price_document.id) - -else - =link_to "Archiver", archive_now_admin_price_document_path(@price_document.id) - %tr - %th Id bloc - %td=price_line_block.id - - - %tr - %th Cout block - %td=price_line_block.cc_cost_ht - - - -params[:search][:per_page] = params[:search][:per_page] || 5000 - -per_page = params[:search][:per_page] - -page = (params[:page] and params[:page] != "") ? params[:page] : 1 - - -@stat_lines = @price_document.stat_lines.order("date DESC, created_at DESC") - -@stat_lines = sort_by_sorting(@stat_lines, "created_at DESC") - -@stat_lines = @stat_lines.page(page).per(per_page) - %br - - - =link_to "Générer les stats", generate_stat_lines_admin_price_document_path(@price_document), :class => "btn btn-primary" - - %table.table - %tr - %th - HT - %td - =number_to_currency @stat_lines.sum(:tot_amount_ht) - - %tr - %th - TTC - %td - =number_to_currency @stat_lines.sum(:tot_amount_ttc) - - - %tr - %th - Coût HT - %td - =number_to_currency @stat_lines.sum(:cost_ht) - + -enable_stat = false + -if enable_stat + %table.table + %tr + %th Archivé ? + %td + = diag do + -if @price_document.archived + Oui + =link_to "Désarchiver", unarchive_now_admin_price_document_path(@price_document.id) + -else + =link_to "Archiver", archive_now_admin_price_document_path(@price_document.id) + %tr + %th Id bloc + %td=price_line_block.id - .clear - =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @stat_lines} - - - - - - - - + %tr + %th Cout block + %td=price_line_block.cc_cost_ht + + + -params[:search][:per_page] = params[:search][:per_page] || 5000 + -per_page = params[:search][:per_page] + -page = (params[:page] and params[:page] != "") ? params[:page] : 1 + + -@stat_lines = @price_document.stat_lines.order("date DESC, created_at DESC") + -@stat_lines = sort_by_sorting(@stat_lines, "created_at DESC") + -@stat_lines = @stat_lines.page(page).per(per_page) + %br + + + =link_to "Générer les stats", generate_stat_lines_admin_price_document_path(@price_document), :class => "btn btn-primary" + + %table.table + %tr + %th + HT + %td + =number_to_currency @stat_lines.sum(:tot_amount_ht) + + %tr + %th + TTC + %td + =number_to_currency @stat_lines.sum(:tot_amount_ttc) + + + %tr + %th + Coût HT + %td + =number_to_currency @stat_lines.sum(:cost_ht) + + + + .clear + =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @stat_lines} + + + + + + + + %h3 Lignes de produits %table.table %thead %tr %th %th Référence - %th Produit + %th Marque %th Désignation %th Qté %th P.U. HT @@ -204,131 +210,130 @@ ="##{price_line.id}" %td =price_line.ref - - + + %td - =link_to price_line.p_product_ref.p_product.name, edit_admin_p_product_path(price_line.p_product_ref.p_product) if price_line.p_product_ref and price_line.p_product_ref.p_product - - + =price_line.p_product_ref.p_product.s_brand.name + %td - =price_line.title - + =link_to price_line.p_product_ref.cc_name, edit_admin_p_product_path(price_line.p_product_ref.p_product) if price_line.p_product_ref and price_line.p_product_ref.p_product + %td.numeraire =price_line.qte - + %td.numeraire =number_to_currency price_line.price_u_ht - - + + %td.numeraire =price_line.tva_account_value.to_s+"%" - - - - + + + + %td.numeraire =number_to_currency price_line.tot_amount_ht - - %td - = price_line.line_stocks.sum(:price_ht) - - -if current_admin.has_permission?("show-costs") - %br - %br - %p - -if @price_document.price_document_type_id == 6 - =link_to "Générer les stocks", generate_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary" if !@price_document.stock_ok - -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 - - -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 false - - -if @price_document.price_document_type_id == 4 or @price_document.price_document_type_id == 5 and !@price_document.cost_ok - %table.table.table-striped.table-hover.table-bordered - %thead - %tr - %th Produit - %th Quantité dans cette pièce comptable - %th Quantité restante - %th - -@price_document.price_line_block.price_lines.all.each do |pl| - -if pl.p_product_ref - - -if pl.p_product_ref.assembled - -pl.p_product_ref.p_product_assembleds.all.each do |ppa| - %tr - %td - =ppa.p_product_ref.cc_name - %td - =@a = (pl.qte.to_f * ppa.qte.to_f).to_f - - %td - =link_to admin_line_stocks_path(:p_product_ref_id => ppa.p_product_ref.id) do - =@b = LineStock.where(:p_product_ref_id => ppa.p_product_ref_id).sum(:qte_available).to_f - - %td - -if @a > @b - .red=ic :warning - - -else + + / %td=# price_line.line_stocks.sum(:price_ht) + +.qi_row + -if current_admin.has_permission?("show-costs") + %p + -if @price_document.price_document_type_id == 6 + =link_to "Générer les stocks", generate_stocks_admin_price_document_path(@price_document), :class => "btn btn-primary" if !@price_document.stock_ok + -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 + + -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.d_number + -if @price_document.cc_label == "Commande achat" + %p=link_to "Générer un bon de réception", bon_de_reception_admin_price_document_path(@price_document), :class => "btn btn-primary" + + -if false + + -if @price_document.price_document_type_id == 4 or @price_document.price_document_type_id == 5 and !@price_document.cost_ok + %table.table.table-striped.table-hover.table-bordered + %thead + %tr + %th Produit + %th Quantité dans cette pièce comptable + %th Quantité restante + %th + -@price_document.price_line_block.price_lines.all.each do |pl| + -if pl.p_product_ref + + -if pl.p_product_ref.assembled + -pl.p_product_ref.p_product_assembleds.all.each do |ppa| %tr %td - =pl.p_product_ref.cc_name + =ppa.p_product_ref.cc_name %td - =@a = pl.qte.to_f - + =@a = (pl.qte.to_f * ppa.qte.to_f).to_f + %td - =link_to admin_line_stocks_path(:p_product_ref_id => pl.p_product_ref.id) do - =@b = LineStock.where(:p_product_ref_id => pl.p_product_ref_id).sum(:qte_available).to_f - + =link_to admin_line_stocks_path(:p_product_ref_id => ppa.p_product_ref.id) do + =@b = LineStock.where(:p_product_ref_id => ppa.p_product_ref_id).sum(:qte_available).to_f + %td - -if pl.p_product_ref.stocked and @a > @b + -if @a > @b .red=ic :warning - - - - - -if @price_document.price_document_type_id == 6 or @price_document.price_document_type_id == 4 or @price_document.price_document_type_id == 5 - %h3 Stocks générés - #bills - -params[:search][:per_page] = params[:search][:per_page] || 5000 - -per_page = params[:search][:per_page] - -page = (params[:page] and params[:page] != "") ? params[:page] : 1 - - -@line_stocks = @price_document.line_stocks.order("date DESC, created_at DESC") - -if params[:price_document_ids] - -@line_stocks = @line_stocks.where(:id => params[:price_document_ids]) - - -@line_stocks = sort_by_sorting(@line_stocks, "created_at DESC") - -@line_stocks = @line_stocks.page(page).per(per_page) - %br - + -else + %tr + %td + =pl.p_product_ref.cc_name + %td + =@a = pl.qte.to_f + + %td + =link_to admin_line_stocks_path(:p_product_ref_id => pl.p_product_ref.id) do + =@b = LineStock.where(:p_product_ref_id => pl.p_product_ref_id).sum(:qte_available).to_f + + %td + -if pl.p_product_ref.stocked and @a > @b + .red=ic :warning - .clear - =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @line_stocks} - + + -if @price_document.price_document_type_id == 6 or @price_document.price_document_type_id == 4 or @price_document.price_document_type_id == 5 + %h3 Stocks générés + #bills + -params[:search][:per_page] = params[:search][:per_page] || 5000 + -per_page = params[:search][:per_page] + -page = (params[:page] and params[:page] != "") ? params[:page] : 1 + + -@line_stocks = @price_document.line_stocks.order("date DESC, created_at DESC") + -if params[:price_document_ids] + -@line_stocks = @line_stocks.where(:id => params[:price_document_ids]) + + + -@line_stocks = sort_by_sorting(@line_stocks, "created_at DESC") + -@line_stocks = @line_stocks.page(page).per(per_page) + %br + + + + .clear + =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @line_stocks} + -if @price_document.label == "Demande prix" %h3.ml-2 Réponses fournisseur #bills -params[:search][:per_page] = params[:search][:per_page] || 5000 -per_page = params[:search][:per_page] - -page = (params[:page] and params[:page] != "") ? params[:page] : 1 + -page = (params[:page] and params[:page] != "") ? params[:page] : 1 -@price_documents = PriceDocument.where(:doc_ref_id => @price_document.id, :price_document_type_id => PriceDocumentType.find_by_label("Réponse fournisseur").id) - - + + -@price_documents = sort_by_sorting(@price_documents, "created_at DESC") @@ -337,19 +342,19 @@ - .clear + .clear =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @price_documents, :key => "reponses-prix-show"} - - + + %h3.ml-2 Consultations fournisseur #consult -params[:search][:per_page] = params[:search][:per_page] || 5000 -per_page = params[:search][:per_page] - -page = (params[:page] and params[:page] != "") ? params[:page] : 1 + -page = (params[:page] and params[:page] != "") ? params[:page] : 1 -@price_documents = PriceDocument.where(:doc_ref_id => @price_document.id, :price_document_type_id => PriceDocumentType.find_by_label("Consultation fournisseur").id) - - + + -@price_documents = sort_by_sorting(@price_documents, "created_at DESC") @@ -358,7 +363,7 @@ - .clear + .clear =render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @price_documents, :key => "reponses-prix-show"} -if @price_documents.empty? .qi_pannel.qi_plain.padding diff --git a/config/routes.rb b/config/routes.rb index d266eda..faa9cc1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -632,6 +632,8 @@ Rails.application.routes.draw do post :analyse_reponses_save get :generate_final_consult get :buy_order_create + get :bon_de_reception + end collection do get :search_to_affect