.qi_header
%h1
Achats
%span
Analyse des réponces à la consiltation n°
= link_to @price_document.d_number, admin_price_document_path(@price_document)
\-
= @price_document.list_designaton
-unmatched_fournisseur = 0
=semantic_form_for [:admin, @price_document], :html => {:class => "qi_price_form"}, :remote => false do |form|
=form.semantic_fields_for :price_line_block do |f|
- price_line_block = f.object
.qi_pannel.padding.new_table_container
.table-slider
.inner
.table-area{:style => "overflow:auto;"}
.table-area-inner
.freezeTable
%table.table.table-striped.table-hover.table-bordered.data_table
%thead.header
%tr
-nb_resp = @price_document_responses.count
%th{colspan: 12}
Consultation
%th{colspan: nb_resp}
Fournisseurs
.btn.btn-light.ml-4#reset-radio
reset
%tr
%th
Qté à
%br
satisfaire
%th
Qté consultée
%th
Produit
%th
Référence
%th
Couleur
%th
Type
%br
chargeur
%th
Target hors
%br
Sorecop
%th
Px d'achat
%br
référence
%th
Marge
%br
théorique
%br
référence
%br
par zone
%th
Fours.
%br
de référence
%th
Date
%br
px référence
%th.limit
Spec
-@price_document_responses.each do |resp|
%th
-if resp.p_fournisseur
=resp.p_fournisseur.name
-else
-unmatched_fournisseur += 1
nom renseigné par le fournisseur :
%br
="(#{resp.public_fournisseur_name})"
%br
=link_to ic('pencil') + " rapprocher le fournisseur", match_p_fournisseur_admin_price_document_path(resp), remote: true
%tbody
-# price_lines = f.object.price_lines
-consult_price_lines = @price_document.price_line_block.price_lines
=f.semantic_fields_for :price_lines do |form|
- price_line = form.object
-#price_lines = @price_document.price_line_block.price_lines
-#price_lines.each do |price_line|
%tr
%td
=# ATTENTION ! On a plus accès direct aux commandes qui on engendré cette demande de prix. donc plus accès aux délais différent entre les différentes commades pour une ref donée
/ ∑
/ =price_line.qte.to_i
/ %br
- if price_line.cc_wish_date.present? && price_line.cc_wish_date < Date.today + 20.days
%span.red
=ic(:fire)
=price_line.qte.to_i
- else
%span.darkblue
=ic(:hourglass)
=price_line.qte.to_i
%td.ref_tr
Qté en comm
%td
= price_line.p_product_ref.p_product.name
%td
=link_to [:admin, price_line.p_product_ref] do
= price_line.p_product_ref.ct_sub_name
= price_line.p_product_ref.p_product_color.name
%td
= price_line.p_product_ref.p_product_color.color if price_line.p_product_ref and price_line.p_product_ref.p_product_color
%td
= price_line.p_product_power.name if price_line.p_product_power
%td
/ Target hors Sorecop
%td
/ Px d'achat de référence
%td
/ Marge théorique de référence par zone
%td
/ Fournisseurs de référence
%td
/ Date du px de référence
%td.limit
/ spec
=#form.object.price_line_resp_ids
=#form.text_field :price_line_demand_id
=#form.input :price_line_resp_id, collection: PriceLine.where(:price_line_demand_id => form.object.id).all, as: :check_boxes, :member_label => :id
=form.input :price_line_resp_ids, collection: PriceLine.where(:price_line_ref_id => form.object.id).all, as: :check_boxes , :member_label => :id
- @price_document_responses.each do |resp|
-line = resp.price_line_block.price_lines.where(p_product_ref: price_line.p_product_ref).first
-cell = []
- if line.qte_available.to_i > 0
-if line.qte_available >= price_line.qte.to_i
- cell << "Qté dispo : #{line.qte_available.to_i}"
-else
- cell << "#{ic(:warning, class: "orange")} Qté dispo : #{line.qte_available.to_i} (#{line.qte_available.to_i - price_line.qte.to_i})"
- cell << "PA: #{line.ct_u_price_ht} €"
- # mp = calcul de la marge prévisionelle TODO
- line.id.odd? ? mp = 0.17 : mp = 0.11
- if mp.present?
-if mp > 0.15
- cell << "#{ic(:check)} MP: #{mp * 100} %"
-else
- cell << "#{ic(:times, class: "red")} MP: #{mp * 100} %"
-else
- cell << "pas dispo"
-if line.comment.present?
- display_comment = ""
- if line.comment.length > 10
- display_comment = "#{line.comment[0..10]} (..)"
- else
- display_comment = line.comment
- cell << "#{ic('info-circle')} #{display_comment}#{line.comment}"
%td.p-0
= "reponse price_line ID : #{line.id}"
=#form.input :selected_price_offer, as: :radio
= radio_button_tag "ref_price_selected_#{price_line.p_product_ref.id}", line.id, false, class: "category-selector"
= label_tag "ref_price_selected_#{price_line.p_product_ref.id}_#{line.id}", sanitize(cell.join('
')), class: "p-2 m-auto"
- if unmatched_fournisseur == 0
=submit_tag 'valider la selection', class: "btn btn-primary ml-4"
- else
%button.btn.btn-primary.ml-4{"type" => "button", "data-toggle" => "modal", "data-target" => "#unmatched-fournisseur"}
Valider la selection
.modal.fade#unmatched-fournisseur{"tab-index" => "-1", "role" => "dialog", "aria-labelledby" => "Raprochement Fournisseur", "aria-hidden" => "true"}
.modal-dialog{role: "dialog"}
.modal-content
.modal-header
%h5.modal-title
Rapprochement du fournisseur
%button.close{"data-dismiss" => "modal", "aria-label" => "Close"}
%span{"aria-hidden" => "true"}
×
.modal-body
Il reste des fournisseurs à prapprocher avant de pouvoir valider.
.modal-footer
%button.btn.btn-light{"data-dismiss" => "modal"}
Close
:scss
.category-selector {
position: absolute;
transform: scale(0);
}
.category-selector + label {
display: block;
min-height: 105px;
cursor: pointer;
box-sizing: border-box;
width: 100%;
text-align: left;
}
.category-selector:checked + label {
background-color: #b4f99e !important;
}
.limit {
border-right:3px solid green !important;
}
.red {
color: red;
}
.green {
color: green;
}
.orange {
color: orange;
}
.info {
color: #009bbf;
position: relative;
display: inline-block;
text-overflow: ellipsis;
.info-text {
visibility: hidden;
background-color: #555;
color: #fff;
text-align: center;
padding: 5px;
border-radius: 6px;
max-width: 500px;
min-width: fit-content;
white-space: normal;
/* Position the tooltip text */
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -60px;
/* Fade in tooltip */
opacity: 0;
transition: opacity 0.3s;
}
.info-text::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #555 transparent transparent transparent;
}
}
.info:hover {
.info-text {
visibility: visible;
opacity: 1;
}
}
.darkblue {
color: darkblue;
}
.small-input {
max-width: 100px;
}
:javascript
$( "#reset-radio" ).click(function(event){
$( ":radio" ).prop('checked',false);
})