This repository has been archived on 2021-11-24. You can view files and clone it, but cannot push or open issues or pull requests.
phone_app/app/views/admin/dashboards/commercial.html.haml
2021-10-26 23:30:01 +02:00

1904 lines
83 KiB
Plaintext

:javascript
function number_checkbox_checked(checkboxclass, labelclass) {
const checkboxChecked = $(`.${checkboxclass}:checked`);
$(`.${labelclass}`).append('<p>('+checkboxChecked.length+')</p>')
}
function on_load(itemlist) {
var list = $(`.${itemlist}`),
origOrder = list.children();
var i, checked = document.createDocumentFragment(),
unchecked = document.createDocumentFragment();
for (i = 0; i < origOrder.length; i++) {
if (origOrder[i].getElementsByTagName("input")[0].checked) {
checked.appendChild(origOrder[i]);
} else {
unchecked.appendChild(origOrder[i]);
}
}
list.append(checked).append(unchecked);
}
function move_on_top_of_the_list(itemlist) {
var list = $(`.${itemlist}`),
origOrder = list.children();
list.on("click", ":checkbox", function() {
var i, checked = document.createDocumentFragment(),
unchecked = document.createDocumentFragment();
for (i = 0; i < origOrder.length; i++) {
if (origOrder[i].getElementsByTagName("input")[0].checked) {
checked.appendChild(origOrder[i]);
} else {
unchecked.appendChild(origOrder[i]);
}
}
list.append(checked).append(unchecked);
});
}
window.onload = function() {
on_load("productCheck");
on_load("salesCheck");
on_load("productcatCheck");
on_load("brandCheck");
on_load("clientsCheck");
};
-if current_admin.has_permission?("stats-avec-marges") or current_admin.has_permission?("stats-commercial")
.qi_header
%h1
Tableaux de bord
%span
Commercial
-if params[:p_commercial_id].to_s != "" and @p_commercial = PCommercial.where(:id => params[:p_commercial_id]).first
%span=@p_commercial.long_name
-if params[:p_customer_id].to_s != "" and @p_customer = PCustomer.where(:id => params[:p_customer_id]).first
%span=@p_customer.show_name
-if @current_p_commercial_id.present?
.row
.col-xl-12.col-xxl-12.d-flex
.w-100
.row
.col-sm-3
.card
.card-body
.row
.col.mt-0
%h5.card-title Chiffre d'affaires / N-1 de l'entreprise
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :euro
%h1.display-5.mt-2.mb-4
.row
.col-sm-6
Commercial :
%br
-(@periode_ca = (@periode_lines.sum(:tot_amount_ht)))
-(@past_periode_ca = (@past_periode_lines.sum(:tot_amount_ht)))
="(#{number_to_percentage((@percent_periode_ca = (@periode_ca/@past_periode_ca)*100.0), :precision => 2)})"
.col-sm-6
Entreprise :
%br
-(periode_ca = (@gen_periode_lines.sum(:tot_amount_ht)))
-(past_periode_ca = (@gen_past_periode_lines.sum(:tot_amount_ht)))
="(#{number_to_percentage((percent_periode_ca = (periode_ca/past_periode_ca)*100.0), :precision => 2)})"
Soit
-if @percent_periode_ca < percent_periode_ca
%span.text-danger
="(#{number_to_percentage((@percent_periode_ca - percent_periode_ca ), :precision => 2)})"
-else
%span.text-success
="(#{number_to_percentage((@percent_periode_ca - percent_periode_ca ), :precision => 2)})"
d'écart
.col-sm-3
.card
.card-body
.row
.col.mt-0
%h5.card-title Prix moyen au kilo de l'entreprise
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :"balance-scale-right"
%h1.display-5.mt-2.mb-4
.row
.col-sm-6
Commercial :
%br
-@ca_produits_degrade = @periode_lines.where("title not in(?)", ["Remise pied de page","Frais de port"]).sum(:tot_amount_ht)
-@periode_tot_weight = @periode_lines.sum(:weight_tot).to_i
=number_to_currency(((@periode_tot_weight.to_f != 0.0 ? @periode_avg_price_per_kg = @ca_produits_degrade / @periode_tot_weight : 0.0)), :precision => 2)
="/ Kg"
.col-sm-6
Entreprise :
%br
-ca_produits_degrade = @gen_periode_lines.where("title not in(?)", ["Remise pied de page","Frais de port"]).sum(:tot_amount_ht)
-periode_tot_weight = @gen_periode_lines.sum(:weight_tot).to_i
=number_to_currency(((@periode_tot_weight.to_f != 0.0 ? periode_avg_price_per_kg = ca_produits_degrade / periode_tot_weight : 0.0)), :precision => 2)
="/ Kg"
Soit
-if @periode_avg_price_per_kg != nil
-if @periode_avg_price_per_kg < periode_avg_price_per_kg
%span.text-danger
="(#{number_to_currency((@periode_avg_price_per_kg - periode_avg_price_per_kg ), :precision => 2)})"
-else
%span.text-success
="(#{number_to_currency((@periode_avg_price_per_kg - periode_avg_price_per_kg ), :precision => 2)})"
d'écart
.col-sm-3
.card
.card-body
.row
.col.mt-0
%h5.card-title Délais de paiement moyen
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :calendar
%h1.display-5.mt-2.mb-4
.row
.col-sm-6
Commercial :
%br
=@payment_avg = (@periode_price_documents.where("cc_solded_nbr_days is not NULL").average(:cc_solded_nbr_days)).to_i
jours
.col-sm-6
Entreprise :
%br
=payment_avg = (@gen_periode_price_documents.where("cc_solded_nbr_days is not NULL").average(:cc_solded_nbr_days)).to_i
jours
Soit
-if @payment_avg > payment_avg
%span.text-danger
=@payment_avg - payment_avg
-else
%span.text-success
=@payment_avg - payment_avg
jours d'écart
-objective_done = number_to_currency (@periode_lines.sum(:tot_amount_ht)), :precision => 0
-objective = PCommercialObjective.where(:start_at => @start.to_date).where(p_commercial_id: @current_p_commercial_id).each do |objective|
-objective_todo = number_to_currency (objective.total_ca), :precision => 0
.col-sm-3{ :class => ("d-none" if params[:s_brand_ids].present? || params[:p_product_ref_ids].present? || params[:p_product_cat_ids].present? || params[:p_customer_ids].present?)}
.card
.card-body
.row
.col.mt-0
%h5.card-title Objectifs
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :bullseye
%h1.display-5.mt-2.mb-4
.row
.col-sm-6
A réaliser:
%br
=objective_todo
.col-sm-6
Réalisé :
-if objective_done >= objective_todo
%br
.text-success
=objective_done
-else
%br
.text-danger
=objective_done
.qi_search_row
=form_tag "", :method => "get", :onsubmit => "" do
.right
=submit_tag "Afficher", :class => "btn btn-primary"
%table.qi_search_row_top
%tr
%td{:style => "vertical-align:center;"}
Début
%td{:style => "vertical-align:center;"}
.input-group
=text_field_tag :start, params[:start],:class => "form-control datepicker", :placeholder => "Début"
%span.input-group-addon.btn{:onclick => "$(this).prev('input').val('');"}
%td
Fin
%td
.input-group
=text_field_tag :stop, params[:stop],:class => "form-control datepicker", :placeholder => "Fin"
%span.input-group-addon.btn{:onclick => "$(this).prev('input').val('');"}
%table.qi_search_row_top
/ -if @current_p_commercial_id.present?
%tr
%td{:style => "width:25%;", :class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
%strong Commerciaux :
#checkAllSales
%label Tout séléctionner
<input type="checkbox" name="checkall" id="checkallsales"</input>
%label{:class => "countSales"}
.check_box_search_index
<input type="text" class="check_box_search_input" placeholder="Recherche"></input>
.check_box_search_index_inner.salesCheck
-if @current_p_commercial_id.present? && @current_p_commercial_id != nil
-@current_p_commercial_id.each do |pdt|
%p
= label_tag "p_commercial_ids_"+pdt.id.to_s do
= check_box_tag :"p_commercial_ids[]", pdt.id, {:id => "p_commercial_ids_#{pdt.id}"}
= pdt.name
-else
-PCommercial.all.each do |pdt|
%p
= label_tag "p_commercial_ids_"+pdt.id.to_s do
= check_box_tag :"p_commercial_ids[]", pdt.id, (true if params[:p_commercial_ids].include?(pdt.id.to_s)), {:id => "p_commercial_ids_#{pdt.id}", :class => "checkSales"}
= pdt.long_name
:javascript
$("#checkallsales").change(function () {
$("input:checkbox.checkSales").prop('checked',this.checked);
});
number_checkbox_checked("checkSales", "countSales")
move_on_top_of_the_list("salesCheck")
%td{:style => "width:25%;"}
%strong Produits :
#checkAllProducts
%label Tout séléctionner
<input type="checkbox" name="checkall" id="checkallproducts"</input>
%label{:class => "countProducts"}
.check_box_search_index
<input type="text" class="check_box_search_input" placeholder="Recherche"></input>
.check_box_search_index_inner.productCheck
-PProductRef.all.each do |pdt|
%p{:class => "products" }
= label_tag "p_product_ref_ids_"+pdt.id.to_s do
= check_box_tag :"p_product_ref_ids[]", pdt.id, (true if params[:p_product_ref_ids].include?(pdt.id.to_s)), {:id => "p_product_ref_ids_#{pdt.id}", :class => "checkProducts", }
= pdt.cc_name
:javascript
$("#checkallproducts").change(function () {
$("input:checkbox.checkProducts").prop('checked',this.checked);
});
number_checkbox_checked("checkProducts", "countProducts")
move_on_top_of_the_list("productCheck")
%td{:style => "width:25%;"}
%strong Clients :
#checkAllClients
%label Tout séléctionner
<input type="checkbox" name="checkall" id="checkallclients"</input>
%label{:class => "countClients"}
.check_box_search_index
<input type="text" class="check_box_search_input" placeholder="Recherche"></input>
.check_box_search_index_inner.clientsCheck
-st = StatLine.select(:p_customer_id, :p_customer_name).group(:p_customer_id, :p_customer_name).order('stat_lines.p_customer_name')
-if current_admin.p_commercial
-st = st.where(:p_customer_id => current_admin.p_commercial.p_customers.ids)
-st.all.each do |pdt|
-if pdt.p_customer_name?
%p
= label_tag "p_customer_ids_"+pdt.p_customer_id.to_s do
= check_box_tag :"p_customer_ids[]", pdt.p_customer_id, (true if params[:p_customer_ids].include?(pdt.p_customer_id.to_s)), {:id => "p_customer_ids_#{pdt.p_customer_id}", :class => "checkClients"}
= "#{pdt.p_customer_code} #{pdt.p_customer_name}"
:javascript
$("#checkallclients").change(function () {
$("input:checkbox.checkClients").prop('checked',this.checked);
});
number_checkbox_checked("checkClients", "countClients")
move_on_top_of_the_list("clientsCheck")
%td{:style => "width:25%;"}
%strong Catégorie produits :
#checkAllProductCat
%label Tout séléctionner
<input type="checkbox" name="checkall" id="checkallproductcat"</input>
%label{:class => "countProductCat"}
.check_box_search_index
<input type="text" class="check_box_search_input" placeholder="Recherche"></input>
.check_box_search_index_inner.productCatCheck
-if @current_p_commercial_id.present? && @current_p_commercial_id != nil
-PProductCat.where(commercial_show: true).all.each do |pdt|
%p
= label_tag "p_product_cat_ids_"+pdt.id.to_s do
= check_box_tag :"p_product_cat_ids[]", pdt.id, (true if params[:p_product_cat_ids].include?(pdt.id.to_s)), {:id => "p_product_cat_ids_#{pdt.id}", :class => "checkProductCat"}
= pdt.name
-else
-PProductCat.all.each do |pdt|
%p
= label_tag "p_product_cat_ids_"+pdt.id.to_s do
= check_box_tag :"p_product_cat_ids[]", pdt.id, (true if params[:p_product_cat_ids].include?(pdt.id.to_s)), {:id => "p_product_cat_ids_#{pdt.id}", :class => "checkProductCat"}
= pdt.name
:javascript
$("#checkallproductcat").change(function () {
$("input:checkbox.checkProductCat").prop('checked',this.checked);
});
number_checkbox_checked("checkProductCat", "countProductCat")
move_on_top_of_the_list("productCatCheck")
%td{:style => "width:25%;"}
%strong Marques :
#checkAllBrands
%label Tout séléctionner
<input type="checkbox" name="checkall" id="checkallbrands"</input>
%label{:class => "countBrands"}
.check_box_search_index
<input type="text" class="check_box_search_input" placeholder="Recherche"></input>
.check_box_search_index_inner.brandCheck
-SBrand.all.each do |pdt|
%p{:class => "brands"}
= label_tag "s_brand_ids_"+pdt.id.to_s do
= check_box_tag :"s_brand_ids[]", pdt.id, (true if params[:s_brand_ids].include?(pdt.id.to_s)), {:id => "s_brand_ids_#{pdt.id}", :class => "checkBrands"};
= pdt.name
:javascript
$("#checkallbrands").change(function () {
$("input:checkbox.checkBrands").prop('checked',this.checked);
});
number_checkbox_checked("checkBrands", "countBrands")
move_on_top_of_the_list("brandCheck")
:scss
.check_box_search_index_inner{
height:150px;
overflow:auto;
white-space: normal !important;
p{
margin:0;
}
}
.qi_search_row{
td{
vertical-align :top;
}
}
:javascript
$(".check_box_search_input").on("keyup", function() {
var value = $(this).val();
$(this).closest(".check_box_search_index").find("p").each(function(index) {
$row = $(this);
var text = $row.text();
if (text.toUpperCase().search(value.toUpperCase()) != -1) {
$row.show();
}
else {
$row.hide();
}
});
});
.qi_row
%main
%div
.card
.card-header
%h5.card-title.mb-0 CA
.card-body
.align-self-center.w-100
.py-3
.chart.chart-xs
%canvas#chartjs-ca
-ca = []
-ca_past = []
-ca_labels = []
-start_date = @start.beginning_of_month
-while start_date < @stop
-ca << @periode_lines.where("date >= ? and date <= ?", start_date.beginning_of_month, start_date.end_of_month).sum(:tot_amount_ht)
-ca_past << @past_periode_lines.where("date >= ? and date <= ?", (start_date - 1.year).beginning_of_month, (start_date - 1.year).end_of_month).sum(:tot_amount_ht)
-ca_labels << l(start_date, :format => "%b")
-start_date = start_date + 1.month
:javascript
$(function() {
// Bar chart
new Chart(document.getElementById("chartjs-ca"), {
type: "line",
data: {
labels: #{raw(ca_labels.to_s)},
datasets: [
{
label: "N-1",
backgroundColor: "transparent",
borderColor: "#718197",
hoverBackgroundColor: "#718197",
hoverBorderColor: "#718197",
data: #{raw(ca_past.to_s)},
barPercentage: .75,
categoryPercentage: .5
},
{
label: "N",
backgroundColor: "transparent",
borderColor: "#57a36d",
hoverBackgroundColor: "#57a36d",
hoverBorderColor: "#57a36d",
data: #{raw(ca.to_s)},
barPercentage: .75,
categoryPercentage: .5
}
]
},
options: {
maintainAspectRatio: false,
legend: {
display: true
},
scales: {
yAxes: [{
gridLines: {
display: false
},
stacked: false,
}],
xAxes: [{
stacked: false,
gridLines: {
color: "transparent"
}
}]
}
}
});
});
.row
.col-xl-6.col-xxl-6.d-flex
.w-100
.row
.col-sm-6
.card
.card-body
.row
.col.mt-0
%h5.card-title Chiffre d'affaires net produits
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :euro
%h1.display-5.mt-2.mb-4
=number_to_currency (@periode_ca = (@periode_lines.sum(:tot_amount_ht))), :precision => 0
="/"
%br
%span{:style => "font-size:0.8em;"}
=number_to_currency (@past_periode_ca = (@past_periode_lines.sum(:tot_amount_ht))), :precision => 0
="(#{number_to_percentage((@percent_periode_ca = (@periode_ca/@past_periode_ca)*100.0), :precision => 2)})"
.mb-0
Dont
%span.text-danger{:class => ("d-none" if @periode_lines.where(:title =>"Remise pied de page").sum(:tot_amount_ht) <= 0 && @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_currency @periode_lines.where(:title =>"Remise pied de page").sum(:tot_amount_ht), :precision => 0
de remise pied de page et
%span.text-success
=number_to_currency @periode_lines.where(:title =>"Frais de port").sum(:tot_amount_ht), :precision => 0
de frais de port
.card
.card-body{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
.row
.col.mt-0
%h5.card-title Marge
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :euro
%h1.display-5.mt-2.mb-4
=number_to_currency (@periode_marge = (@periode_lines.sum(:marge_ht))), :precision => 0
-if (n = @periode_price_documents.where(:price_document_type_id => [4]).where(:cost_ok => false).count) > 0
=link_to admin_price_documents_path(:start => params[:start], :stop => params[:stop], :price_document_type_ids => [4], :search => {:cost_ok => "Non"}) do
%span.red{:style => "font-size:0.5em;"}
=ic :warning
=n
="/"
%br
%span{:style => "font-size:0.8em;"}
=number_to_currency (@past_periode_marge = (@past_periode_lines.sum(:marge_ht))), :precision => 0
-if (n = @past_periode_price_documents.where(:price_document_type_id => [4]).where(:cost_ok => false).count) > 0
=ic :warning
=n
="(#{number_to_percentage((@percent_vs_periode_marge = (@periode_marge/@past_periode_marge)*100.0), :precision => 2)})"
.mb-0
Marge générale sur la période
=number_to_percentage((@percent_periode_marge = (@periode_marge/@periode_ca)*100.0), :precision => 2)
(sur n-1
=number_to_percentage((@past_percent_periode_marge = (@past_periode_marge/@past_periode_ca)*100.0), :precision => 2)
=")"
.card{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
.card-body
.row
.col.mt-0
%h5.card-title Chiffre d'affaire brut
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :euro
%h1.display-5.mt-2.mb-4
=number_to_currency (@ca_produits = @periode_lines.sum(:tot_line_ht)), :precision => 0
.col-sm-6
.card
.card-body
.row
.col.mt-0
%h5.card-title Chiffre d'affaire net
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :euro
%h1.display-5.mt-2.mb-4
=number_to_currency (@ca_produits_degrade = @periode_lines.where("title not in(?)", ["Remise pied de page","Frais de port"]).sum(:tot_amount_ht)), :precision => 0
.mb_0
Soit
%span.text-danger
-@ca_produits = @periode_lines.sum(:tot_line_ht)
=number_to_currency(@remises = (@ca_produits - @ca_produits_degrade), :precision => 0)
\(
%span.text-danger=number_to_percentage((@remises / @ca_produits)*100.0, :precision => 2)
\)
de remises
.card
.card-header
%h5.card-title.mb-0 Répartition familles produits
.card-body.d-flex
.align-self-center.w-100
.py-3
.chart.chart-xs
%canvas#chartjs-dashboard-pie
-if false
%table.table.mb-0
%tbody
%tr
%td
%i.fas.fa-circle.text-primary.fa-fw
Chrome
%td.text-right 4401
%tr
%td
%i.fas.fa-circle.text-warning.fa-fw
Firefox
%td.text-right 4003
%tr
%td
%i.fas.fa-circle.text-danger.fa-fw
IE
%td.text-right 1589
.col-xl-6.col-xxl-6.d-flex
.w-100
.row
.col-sm-6
.card
.card-body
.row
.col.mt-0
%h5.card-title Poids
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :"balance-scale-right"
%h1.display-5.mt-2.mb-4
=number_to_currency ((@periode_tot_weight = @periode_lines.sum(:weight_tot)).to_i), :precision => 0, :unit => "Kg"
.mb-0
%span.text-success
%i.mdi.mdi-arrow-bottom-right
=number_to_currency(((@periode_tot_weight.to_f != 0.0 ? @periode_avg_price_per_kg = @ca_produits_degrade / @periode_tot_weight : 0.0)), :precision => 2)
/ DEBUG POUR AFFICHER LA PAGE SANS DATA
- @periode_avg_price_per_kg = 1
="/ Kg"
ca moyen / kilo
.card
.card-header
%h5.card-title.mb-0 Paiements à venir
.card-body
-@periode_payment_retard = @periode_price_documents.where(:cc_solded => false).where("cc_payment_end_at < ?", Date.today).sum(:cc_tot_amount_ht)
-@periode_payment_a_venir_30_j = @periode_price_documents.where(:cc_solded => false).where("cc_payment_end_at >= ? and cc_payment_end_at < ?", Date.today, (Date.today + 30.days)).sum(:cc_tot_amount_ht)
-@periode_payment_a_venir_plus_30_j = @periode_price_documents.where(:cc_solded => false).where("cc_payment_end_at >= ?", (Date.today + 30.days)).sum(:cc_tot_amount_ht)
-treso = []
-treso_labels = []
-treso << (@periode_payment_retard * -1).to_f
-treso_labels << "En retard"
-treso << @periode_payment_a_venir_30_j.to_f
-treso_labels << "30 jours"
-treso << @periode_payment_a_venir_plus_30_j.to_f
-treso_labels << "+ de 30 jours"
.align-self-center.w-100
.py-3
.chart.chart-xs
%canvas#chartjs-dashboard-bar-alt
.col-sm-6
.card
.card-body
.row
-if params[:p_commercial_ids].size > 0
-@all_customers_rows = PCustomer.where(:p_commercial_id => params[:p_commercial_ids])
-@all_customers = @all_customers_rows.count
-else
-@all_customers = PCustomer.count
-@all_customers_rows = PCustomer.all
.col.mt-0
%h5.card-title
=@all_customers
Clients
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :"users"
%h1.display-5.mt-2.mb-4
-if params[:p_customer_ids] and params[:p_customer_ids].size > 0
-@periode_nbr_clients_actifs = (@periode_lines.group(:p_customer_id).map{|a| a.p_customer_id}).reject { |e| e.to_s.empty? }.uniq.length
-@tot_customs = PCustomer.where(id: params[:p_customer_ids]).ids
-@all_customers = PCustomer.where(id: params[:p_customer_ids]).count
-@tot_clients_inactifs = (@tot_customs - @periode_lines.group(:p_customer_id).map{|p| p.p_customer_id}.uniq)
-@all_customers_rows = @all_customers_rows.where(id: params[:p_customer_ids])
-else
-@tot_clients_inactifs = (@all_customers_rows.ids - (@periode_lines.select(:p_customer_id).group(:p_customer_id).map{|a| a.p_customer_id}).reject { |e| e.to_s.empty? }.uniq )
-@periode_nbr_clients_actifs = (@periode_lines.select(:p_customer_id).group(:p_customer_id).map{|a| a.p_customer_id}).reject { |e| e.to_s.empty? }.uniq.length
/ -@clients_inactifs = []
/ -@periode_nbr_clients_inactifs = params[:p_customer_ids].each do |a|
/ -@clients_inactifs << PCustomer.where(id: a, enabled: false)
/ -@tot_clients_inactifs = (@clients_inactifs.length - @periode_nbr_clients_actifs)
%div{:style => "font-size:0.7em;float:right"}
=link_to admin_p_customers_path(:p_customer_ids => (@all_customers_rows.ids - (@periode_lines.select(:p_customer_id).group(:p_customer_id).map{|a| a.p_customer_id}).uniq )), :method => :patch do
=@tot_clients_inactifs.length
inactifs
%div{:style => "font-size:0.7em"}
=@periode_nbr_clients_actifs
actifs
- @active_customers = ((@periode_nbr_clients_actifs.to_f / @all_customers.to_f)*100)
.progress
.progress-bar.bg-success-dark{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "43", :role => "progressbar", :style => "width: #{@active_customers.to_i}%;"}=number_to_percentage @active_customers.to_i, :precision => 0
.progress-bar.bg-danger-dark{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "43", :role => "progressbar", :style => "width: #{100.0 - (@active_customers.to_i)}%;"}=number_to_percentage((100.0 - @active_customers.to_i), :precision => 0)
-@new_customer = @all_customers_rows.where("created_at > ?", @start).count
%br
%div{:style => "font-size:0.6em;float:right"}
=@past_customers = @all_customers - @new_customer
Historiques
%div{:style => "font-size:0.6em"}
=@new_customer
Nouveaux
- @new_customers_percent = ((@new_customer.to_f / @all_customers.to_f)*100).to_i
.progress
.progress-bar.bg-success-dark{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "43", :role => "progressbar", :style => "width: #{@new_customers_percent.to_i}%;"}=number_to_percentage @new_customers_percent.to_i, :precision => 0
.progress-bar.bg-primary-dark{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "43", :role => "progressbar", :style => "width: #{100.0 - (@new_customers_percent.to_i)}%;"}=number_to_percentage((100.0 - @new_customers_percent.to_i), :precision => 0)
=#number_to_percentage (@active_customers = ((@periode_nbr_clients_actifs.to_f / @all_customers.to_f)*100)), :precision => 0
.mb-0
%span.text-success
%i.mdi.mdi-arrow-bottom-right
=number_to_currency((@periode_avg_ca_per_customer = @ca_produits_degrade / @periode_nbr_clients_actifs.to_f), :precision => 0)
/ DEBUG POUR AFFICHER LA PAGE SANS DATA
-@periode_avg_ca_per_customer = 1
ca moyen / clients
.mb-0
Dont
%span.text-warning
%i.mdi.mdi-arrow-bottom-right
=PCustomer.where(disabled_raison: "n'existe plus" ).count
clients qui n'existent plus
.card
.card-body
.row
.col.mt-0
%h5.card-title Délais de paiement moyen
.col-auto
.avatar
.avatar-title.rounded-circle.bg-primary-dark
.align-middle=ic :"calendar"
%h1.display-5.mt-2.mb-4
=(@payment_avg = @periode_price_documents.where("cc_solded_nbr_days is not NULL").average(:cc_solded_nbr_days)).to_i
jours
.mb-0
-if true
-params[:tab] = params[:tab] || "p_product_cats"
.tab
%ul.nav.nav-tabs{:role => "tablist"}
-if !@current_p_commercial_id or @current_p_commercial_id == nil
%li.nav-item
=link_to params.permit!.merge({:tab => "p_commercials"}), :class => "nav-link "+("active" if params[:tab] == "p_commercials").to_s do
Commerciaux
%li.nav-item
=link_to params.permit!.merge({:tab => "p_customers"}), :class => "nav-link "+("active" if params[:tab] == "p_customers").to_s do
Clients
%li.nav-item
=link_to params.permit!.merge({:tab => "inactive_p_customers"}), :class => "nav-link "+("active" if params[:tab] == "inactive_p_customers").to_s do
Clients inactifs
%li.nav-item
=link_to params.permit!.merge({:tab => "p_product_cats"}), :class => "nav-link "+("active" if params[:tab] == "p_product_cats").to_s do
Catégories produits
%li.nav-item
=link_to params.permit!.merge({:tab => "p_product_refs"}), :class => "nav-link "+("active" if params[:tab] == "p_product_refs").to_s do
Produits
%li.nav-item
=link_to params.permit!.merge({:tab => "s_brand"}), :class => "nav-link "+("active" if params[:tab] == "s_brand").to_s do
Marques
-if current_admin.p_commercial
%li.nav-item{ :class => ("d-none" if params[:s_brand_ids].present? || params[:p_product_ref_ids].present? || params[:p_product_cat_ids].present? || params[:p_customer_ids].present?)}
=link_to params.permit!.merge({:tab => "p_commercial_objectives"}), :class => "nav-link "+("active" if params[:tab] == "p_commercial_objectives").to_s do
Objectifs
.tab-content
-if params[:tab] == "p_commercials"
#tab-3.tab-pane.active{:role => "tabpanel"}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?) }
%thead
%tr
%th Commercial
%th.numeraire CA
%th.numeraire CA N-1
%th.numeraire Poids
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Marge
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Ecart marge
%th.numeraire Prix moyen / Kg
%th.numeraire Ecart prix moyen / prix moyen
%th.numeraire Nbr client actifs
%th.numeraire Nbr clients
%th.numeraire Moyenne CA client
%th.numeraire Ecart
%th.numeraire Moyenne de délais de paiement
%th
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(cc_tot_amount_ht) AS cc_tot_amount_ht, SUM(cc_weight_tot) AS cc_weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("cc_tot_amount_ht DESC").each do |ppp|
-results = @periode_lines.select("p_commercial_id AS p_commercial_id, SUM(tot_amount_ht) AS tot_amount_ht, (SELECT SUM(tot_amount_ht) FROM stat_lines plb WHERE id IN(#{@past_periode_lines.ids.to_s.gsub('[', '').gsub(']', '')}) and p_commercial_id = stat_lines.p_commercial_id) AS past_tot_amount_ht, ((SUM(tot_amount_ht)/#{@ca_produits_degrade}) * 100.0) as ca_percent, ((SUM(marge_ht)/SUM(tot_amount_ht)) * 100.0) as marge_percent, (((SUM(marge_ht)/SUM(tot_amount_ht)) * 100.0)) - #{@percent_periode_marge} as ecart_marge_percent, SUM(weight_tot) AS weight_tot, ((SUM(weight_tot)/#{@periode_tot_weight}) * 100.0) as weight_tot_percent , SUM(weight_tot) AS weight_tot, (SUM(tot_amount_ht) / SUM(weight_tot)) AS price_per_kg, (#{@periode_avg_price_per_kg}) AS avg_price_per_kg, ((SUM(tot_amount_ht) / SUM(weight_tot)) - #{@periode_avg_price_per_kg}) AS ecart_avg_price_per_kg, (#{@periode_avg_ca_per_customer}) as periode_avg_ca_per_customer").group(:p_commercial_id).order("tot_amount_ht DESC")
-results.each do |ppp|
%tr
%td
-ppr = PCommercial.where(:id => ppp.p_commercial_id).first
=link_to ppr.long_name, admin_p_commercial_path(ppr) if ppr
%td.numeraire
=number_to_currency ppp.tot_amount_ht, :precision => 0
=percentage_jauge(ppp.ca_percent, 5.0 )
%td.numeraire
=number_to_currency ppp.past_tot_amount_ht, :precision => 0
=percentage_jauge((ppp.tot_amount_ht / ppp.past_tot_amount_ht) * 100.0, 1.0, @percent_periode_ca, "success", "warning") if ppp.past_tot_amount_ht
%td.numeraire
=number_to_currency ppp.weight_tot, :unit => "Kg", :precision => 0
=percentage_jauge(ppp.weight_tot_percent, 5.0 )
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
-if ppr
-m = (@periode_lines.where(:p_commercial_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_commercial_id => ppr.id).sum(:tot_amount_ht))*100.0
=number_to_currency ((@periode_lines.where(:p_commercial_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_commercial_id => ppr.id).sum(:tot_amount_ht)) * ppp.price_per_kg.to_f), :precision => 3
=percentage_jauge(m)
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_percentage(m.to_f - @percent_periode_marge.to_f, :precision => 2)
%td.numeraire
=number_to_currency(ppp.price_per_kg)
%td.numeraire
-if ppp.ecart_avg_price_per_kg.to_f > 0.0
.text-success=number_to_currency(ppp.ecart_avg_price_per_kg)
-else
.text-danger=number_to_currency(ppp.ecart_avg_price_per_kg)
%td.numeraire
=n = @periode_lines.where(:p_commercial_id => ppp.p_commercial_id).group(:p_customer_id).count().length
-if ppr
=percentage_jauge((n.to_f / ppr.p_customers.count.to_f) * 100.0, 1.0, @active_customers, "success", "warning") if ppp.past_tot_amount_ht
%td.numeraire
=ppr.p_customers.count if ppr
%td.numeraire
=number_to_currency (ppp.tot_amount_ht / @periode_lines.where(:p_commercial_id => ppp.p_commercial_id).group(:p_customer_id).count().length.to_f), :precision => 0
%td.numeraire
-ecart_commercial_ca = (ppp.tot_amount_ht / @periode_lines.where(:p_commercial_id => ppp.p_commercial_id).group(:p_customer_id).count().length.to_f) - ppp.periode_avg_ca_per_customer
-if ecart_commercial_ca.to_f > 0.0
.text-success=number_to_currency(ecart_commercial_ca, :precision => 0)
-else
.text-danger=number_to_currency(ecart_commercial_ca, :precision => 0)
%td.numeraire
-n = (@periode_price_documents.where(:p_commercial_id => ppr.id).where("cc_solded_nbr_days is not NULL").average(:cc_solded_nbr_days)).to_i if ppr
=color_scale(n,@payment_avg, 7, "#28a745", "red")
%td
=link_to i(:"bar-chart"), params.permit!.merge({:p_commercial_id => ppr.id, :p_customer_id => nil, :p_product_ref_id => nil}) if ppr
-if params[:tab] == "p_product_refs"
#tab-1.tab-pane.active{:role => "tabpanel"}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?) }
%thead
%tr
%th Produit
%th.numeraire CA
%th.numeraire CA N-1
%th.numeraire Poids
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Marge
-if false
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Ecart marge
%th.numeraire Prix moyen / Kg produit
%th.numeraire Prix moyen / Kg
%th.numeraire Ecart prix moyen / prix moyen
%th
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(tot_amount_ht) AS tot_amount_ht, SUM(weight_tot) AS weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("tot_amount_ht DESC").each do |ppp|
-results = @periode_lines.select("p_product_ref_id, SUM(tot_amount_ht) AS tot_amount_ht,"+("(SELECT SUM(tot_amount_ht) FROM stat_lines plb WHERE id IN(#{@past_periode_lines.ids.to_s.gsub('[', '').gsub(']', '')}) and p_product_ref_id = stat_lines.p_product_ref_id) AS past_tot_amount_ht," if @past_periode_lines.ids.size > 0).to_s+" ((SUM(tot_amount_ht)/#{@ca_produits}) * 100.0) as ca_percent, SUM(weight_tot) AS weight_tot, ((SUM(weight_tot)/#{@periode_tot_weight}) * 100.0) as weight_tot_percent , (SUM(tot_amount_ht) / SUM(weight_tot)) AS price_per_kg, (#{@periode_avg_price_per_kg}) AS avg_price_per_kg, ((SUM(tot_amount_ht) / SUM(weight_tot)) - #{@periode_avg_price_per_kg}) AS ecart_avg_price_per_kg").group(:p_product_ref_id).order("tot_amount_ht DESC")
-results.each do |ppp|
%tr
%td
-ppr = PProductRef.where(:id => ppp.p_product_ref_id).first
=link_to ppr.name, edit_admin_p_product_path(ppr.p_product) if ppr and ppr.p_product
%td.numeraire
=number_to_currency ppp.tot_amount_ht, :precision => 0
=percentage_jauge(ppp.ca_percent, 5.0 )
%td.numeraire
-if @past_periode_lines.ids.size > 0
=number_to_currency ppp.past_tot_amount_ht, :precision => 0
=percentage_jauge((ppp.tot_amount_ht / ppp.past_tot_amount_ht) * 100.0) if ppp.past_tot_amount_ht
%td.numeraire
=number_to_currency ppp.weight_tot, :unit => "Kg", :precision => 0
=percentage_jauge(ppp.weight_tot_percent, 5.0 )
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
-if ppr
-m = (@periode_lines.where(:p_product_ref_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_product_ref_id => ppr.id).sum(:tot_amount_ht))*100.0
=number_to_currency ((@periode_lines.where(:p_product_ref_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_product_ref_id => ppr.id).sum(:tot_amount_ht)) * ppp.price_per_kg.to_f), :precision => 3
=percentage_jauge(m)
-if false
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_percentage(m.to_f - @percent_periode_marge.to_f, :precision => 2)
%td.numeraire
=number_to_currency(ppp.price_per_kg)
%td.numeraire
=#number_to_currency(ppp.avg_price_per_kg)
%td.numeraire
-if ppp.ecart_avg_price_per_kg.to_f > 0.0
.text-success=number_to_currency(ppp.ecart_avg_price_per_kg)
-else
.text-danger=number_to_currency(ppp.ecart_avg_price_per_kg)
%td
=link_to i(:"bar-chart"), params.permit!.merge({:p_commercial_id => nil, :p_customer_id => nil, :p_product_ref_id => ppr.id}) if ppr
-if params[:tab] == "inactive_p_customers"
#tab-2.tab-pane.active{:role => "tabpanel"}
%table#inactive_p_customers_table.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?) }
%thead
%tr
%th Client
%th Commercial
%th Client bloqué ?
%th Raison du blocage
%th.numeraire CA N-1
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(cc_tot_amount_ht) AS cc_tot_amount_ht, SUM(cc_weight_tot) AS cc_weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("cc_tot_amount_ht DESC").each do |ppp|
-if params[:p_customer_ids] and params[:p_customer_ids].size > 0
-@actifs_customs = @periode_lines.group(:p_customer_id).map{|p| p.p_customer_id}.uniq
-@tot_customs = PCustomer.where(id: params[:p_customer_ids]).ids
-@inactif_customs = (@tot_customs - @actifs_customs)
-else
-@inactif_customs = (@all_customers_rows.ids - (@periode_lines.group(:p_customer_id).map{|a| a.p_customer_id}).reject { |e| e.to_s.empty? }.uniq )
-PCustomer.where(:id => @inactif_customs).all.each do |p_customer|
%tr
%td
=link_to p_customer.show_name, admin_p_customer_path(p_customer)
%td
-ppc = PCommercial.where(:id => p_customer.p_commercial_id).first if p_customer
=link_to ppc.long_name, admin_p_commercial_path(ppc) if ppc
%td
-if !p_customer.enabled
Bloqué
%td
-if !p_customer.enabled
=p_customer.disabled_raison
%td.numeraire=number_to_currency @past_periode_lines.where(:p_customer_id => p_customer.id).sum(:tot_amount_ht)
-if params[:tab] == "p_customers"
#tab-2.tab-pane.active{:role => "tabpanel"}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?) }
%thead
%tr
%th Client
%th Commercial
%th.numeraire CA
%th.numeraire CA N-1
%th.numeraire Poids
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Marge
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Ecart marge
%th.numeraire Prix moyen / Kg produit
%th.numeraire Prix moyen / Kg
%th.numeraire Ecart prix moyen / prix moyen
%th.numeraire Moyenne délais de paiement
%th Client bloqué ?
%th Raison du blocage
%th
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(cc_tot_amount_ht) AS cc_tot_amount_ht, SUM(cc_weight_tot) AS cc_weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("cc_tot_amount_ht DESC").each do |ppp|
-results = @periode_lines.select("p_customer_id, SUM(tot_amount_ht) AS tot_amount_ht, SUM(tot_amount_ht) AS tot_amount_ht, (SELECT SUM(tot_amount_ht) FROM stat_lines plb WHERE id IN(#{@past_periode_lines.ids.to_s.gsub('[', '').gsub(']', '')}) and p_customer_id = stat_lines.p_customer_id) AS past_tot_amount_ht, ((SUM(tot_amount_ht)/#{@ca_produits}) * 100.0) as ca_percent, SUM(weight_tot) AS weight_tot, ((SUM(weight_tot)/#{@periode_tot_weight}) * 100.0) as weight_tot_percent , (SUM(tot_amount_ht) / SUM(weight_tot)) AS price_per_kg, (#{@periode_avg_price_per_kg}) AS avg_price_per_kg, ((SUM(tot_amount_ht) / SUM(weight_tot)) - #{@periode_avg_price_per_kg}) AS ecart_avg_price_per_kg").group(:p_customer_id).order("tot_amount_ht DESC")
-results.each do |ppp|
%tr
%td
-ppr = PCustomer.where(:id => ppp.p_customer_id).first
=link_to ppr.show_name, admin_p_customer_path(ppr) if ppr
%td
-ppc = PCommercial.where(:id => ppr.p_commercial_id).first if ppr
=link_to ppc.long_name, admin_p_commercial_path(ppc) if ppr and ppc
%td.numeraire
=number_to_currency ppp.tot_amount_ht, :precision => 0
=percentage_jauge(ppp.ca_percent, 20.0 )
%td.numeraire
=number_to_currency ppp.past_tot_amount_ht, :precision => 0
=percentage_jauge((ppp.tot_amount_ht / ppp.past_tot_amount_ht) * 100.0) if ppp.past_tot_amount_ht
%td.numeraire
=number_to_currency ppp.weight_tot, :unit => "Kg", :precision => 0
=percentage_jauge(ppp.weight_tot_percent, 20.0 )
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
-if ppr
-m = (@periode_lines.where(:p_customer_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_customer_id => ppr.id).sum(:tot_amount_ht))*100.0
=number_to_currency ((@periode_lines.where(:p_customer_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_customer_id => ppr.id).sum(:tot_amount_ht)) * ppp.price_per_kg.to_f), :precision => 3
=percentage_jauge(m)
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_percentage(m.to_f - @percent_periode_marge.to_f, :precision => 2)
%td.numeraire
=number_to_currency(ppp.price_per_kg)
%td.numeraire
=number_to_currency(ppp.avg_price_per_kg)
%td.numeraire
-if ppp.ecart_avg_price_per_kg.to_f > 0.0
.text-success=number_to_currency(ppp.ecart_avg_price_per_kg)
-else
.text-danger=number_to_currency(ppp.ecart_avg_price_per_kg)
%td.numeraire
=(@periode_price_documents.where(:p_customer_id => ppr.id).where("cc_solded_nbr_days is not NULL").average(:cc_solded_nbr_days)).to_i if ppr
%td
-if ppr and !ppr.enabled
Bloqué
%td
-if ppr and !ppr.enabled
=ppr.disabled_raison
%td
=link_to i(:"bar-chart"), params.permit!.merge({:p_commercial_id => nil, :p_customer_id => ppr.id, :p_product_ref_id => nil}) if ppr
-if true
#tab-4.tab-pane{:role => "tabpanel", :class => ("active" if params[:tab] == "p_product_cats")}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?), :data => {:title => "categories-produits"}}
%thead
%tr
%th Catégorie produit
%th.numeraire CA
%th.numeraire CA N-1
%th.numeraire Poids
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Marge
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Ecart marge
%th.numeraire Prix moyen / Kg produit
%th.numeraire Ecart prix moyen / prix moyen
-if false
%th.numeraire CA Moyen / clients général
%th.numeraire Nbr Clients
%th.numeraire CA Moyen famille / client
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(cc_tot_amount_ht) AS cc_tot_amount_ht, SUM(cc_weight_tot) AS cc_weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("cc_tot_amount_ht DESC").each do |ppp|
-pie_label = []
-pie_data = []
-results = @periode_lines.select("p_product_cat_id, SUM(tot_amount_ht) AS tot_amount_ht, "+("(SELECT SUM(tot_amount_ht) FROM stat_lines plb WHERE id IN(#{@past_periode_lines.ids.to_s.gsub('[', '').gsub(']', '')}) and p_product_cat_id = stat_lines.p_product_cat_id) AS past_tot_amount_ht, " if @past_periode_lines.ids.size > 0).to_s+"((SUM(tot_amount_ht)/#{@ca_produits}) * 100.0) as ca_percent, SUM(weight_tot) AS weight_tot, "+("((SUM(weight_tot)/#{@periode_tot_weight}) * 100.0) as weight_tot_percent , " if @periode_tot_weight != 0.0).to_s+"(SUM(tot_amount_ht) / SUM(weight_tot)) AS price_per_kg, (#{@periode_avg_price_per_kg}) AS avg_price_per_kg, ((SUM(tot_amount_ht) / SUM(weight_tot)) - #{@periode_avg_price_per_kg}) AS ecart_avg_price_per_kg, (#{@periode_avg_ca_per_customer}) as periode_avg_ca_per_customer").group(:p_product_cat_id).order("tot_amount_ht DESC")
-results.each do |ppp|
%tr
%td
-ppr = PProductCat.where(:id => ppp.p_product_cat_id).first
=link_to ppr.name, admin_p_commercial_path(ppr) if ppr
-pie_label << ppr.name if ppr
-pie_data << ppp.tot_amount_ht.to_f if ppr
%td.numeraire
=number_to_currency ppp.tot_amount_ht, :precision => 0
=percentage_jauge(ppp.ca_percent, 2.0 )
%td.numeraire
-if defined?(past_tot_amount_ht)
=number_to_currency ppp.past_tot_amount_ht, :precision => 0
=percentage_jauge((ppp.tot_amount_ht / ppp.past_tot_amount_ht) * 100.0) if ppp.past_tot_amount_ht
%td.numeraire
=number_to_currency ppp.weight_tot, :unit => "Kg", :precision => 0
=percentage_jauge(ppp.weight_tot_percent, 2.0 )
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
-if ppr
-m = (@periode_lines.where(:p_product_cat_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_product_cat_id => ppr.id).sum(:tot_amount_ht))*100.0
=number_to_currency ((@periode_lines.where(:p_product_cat_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:p_product_cat_id => ppr.id).sum(:tot_amount_ht)) * ppp.price_per_kg.to_f), :precision => 3
=percentage_jauge(m)
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_percentage(m.to_f - @percent_periode_marge.to_f, :precision => 3)
%td.numeraire
=number_to_currency(ppp.price_per_kg, :precision => 3)
%td.numeraire
-if ppp.ecart_avg_price_per_kg.to_f > 0.0
.text-success=number_to_currency(ppp.ecart_avg_price_per_kg)
-else
.text-danger=number_to_currency(ppp.ecart_avg_price_per_kg)
%td.numeraire
=nbr_customers = @periode_lines.where(:p_product_cat_id => ppp.p_product_cat_id).group(:p_customer_id).count().length
%td.numeraire
=number_to_currency (ppp.tot_amount_ht / nbr_customers.to_f), :precision => 0
-if true
#tab-4.tab-pane{:role => "tabpanel", :class => ("active" if params[:tab] == "s_brand")}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?), :data => {:title => "marques"}}
%thead
%tr
%th Marques
%th.numeraire CA
%th.numeraire CA N-1
%th.numeraire Poids
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Marge
%th.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)} Ecart marge
%th.numeraire Prix moyen / Kg produit
%th.numeraire Ecart prix moyen / prix moyen
-if false
%th.numeraire CA Moyen / clients général
%th.numeraire Nbr Clients
%th.numeraire CA Moyen famille / client
%tbody
/* 11:18:50 localhost phone_app */ SELECT COUNT(1) FROM `order_hist_lines`;
-#@periode_price_lines.select("p_product_ref_id, SUM(cc_tot_amount_ht) AS cc_tot_amount_ht, SUM(cc_weight_tot) AS cc_weight_tot, ((SELECT weight FROM `p_product_refs` WHERE id = price_lines.p_product_ref_id )) AS price_per_kg").group(:p_product_ref_id).order("cc_tot_amount_ht DESC").each do |ppp|
-#pie_label = []
-#pie_data = []
-results = @periode_lines.select("s_brand_id, SUM(tot_amount_ht) AS tot_amount_ht, "+("(SELECT SUM(tot_amount_ht) FROM stat_lines plb WHERE id IN(#{@past_periode_lines.ids.to_s.gsub('[', '').gsub(']', '')}) and s_brand_id = stat_lines.s_brand_id) AS past_tot_amount_ht, " if @past_periode_lines.ids.size > 0).to_s+"((SUM(tot_amount_ht)/#{@ca_produits}) * 100.0) as ca_percent, SUM(weight_tot) AS weight_tot, "+("((SUM(weight_tot)/#{@periode_tot_weight}) * 100.0) as weight_tot_percent , " if @periode_tot_weight != 0.0).to_s+"(SUM(tot_amount_ht) / SUM(weight_tot)) AS price_per_kg, (#{@periode_avg_price_per_kg}) AS avg_price_per_kg, ((SUM(tot_amount_ht) / SUM(weight_tot)) - #{@periode_avg_price_per_kg}) AS ecart_avg_price_per_kg, (#{@periode_avg_ca_per_customer}) as periode_avg_ca_per_customer").group(:s_brand_id).order("tot_amount_ht DESC")
-results.each do |ppp|
%tr
%td
-ppr = SBrand.where(:id => ppp.s_brand_id).first
=link_to ppr.name, admin_p_commercial_path(ppr) if ppr
-#pie_label << ppr.name if ppr
-#pie_data << ppp.tot_amount_ht.to_f if ppr
%td.numeraire
=number_to_currency ppp.tot_amount_ht, :precision => 0
=percentage_jauge(ppp.ca_percent, 2.0 )
%td.numeraire
-if defined?(past_tot_amount_ht)
=number_to_currency ppp.past_tot_amount_ht, :precision => 0
=percentage_jauge((ppp.tot_amount_ht / ppp.past_tot_amount_ht) * 100.0) if ppp.past_tot_amount_ht
%td.numeraire
=number_to_currency ppp.weight_tot, :unit => "Kg", :precision => 0
=percentage_jauge(ppp.weight_tot_percent, 2.0 )
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
-if ppr
-m = (@periode_lines.where(:s_brand_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:s_brand_id => ppr.id).sum(:tot_amount_ht))*100.0
=number_to_currency ((@periode_lines.where(:s_brand_id => ppr.id).sum(:marge_ht)/@periode_lines.where(:s_brand_id => ppr.id).sum(:tot_amount_ht)) * ppp.price_per_kg.to_f), :precision => 3
=percentage_jauge(m)
%td.numeraire{:class => ("d-none" if @current_p_commercial_id.present? && @current_p_commercial_id != nil)}
=number_to_percentage(m.to_f - @percent_periode_marge.to_f, :precision => 3)
%td.numeraire
=number_to_currency(ppp.price_per_kg, :precision => 3)
%td.numeraire
-if ppp.ecart_avg_price_per_kg.to_f > 0.0
.text-success=number_to_currency(ppp.ecart_avg_price_per_kg)
-else
.text-danger=number_to_currency(ppp.ecart_avg_price_per_kg)
%td.numeraire
=nbr_customers = @periode_lines.where(:s_brand_id => ppp.s_brand_id).group(:p_customer_id).count().length
%td.numeraire
=number_to_currency (ppp.tot_amount_ht / nbr_customers.to_f), :precision => 0
-if true
-if (current_admin.p_commercial)
#tab-4.tab-pane{:role => "tabpanel", :class => ("active" if params[:tab] == "p_commercial_objectives")}
%table#datatables-dashboard-traffic.table.table-striped.my-0.table-hover{:class => ("export_table" if @current_p_commercial_id.blank?), :data => {:title => "objectifs"}}
-if @start.month == 5 and @start.day == 1
-trim_start_date = Date.parse("#{@start.year}/#{@start.month}/#{@start.day}")
-p_commercial_objective = PCommercialObjective.where(:start_at => trim_start_date).where(:p_commercial_id => params[:p_commercial_ids]).first
-if p_commercial_objective
-tot_trim = {}
-next_year_trim_start_date = trim_start_date + 1.year
-i = 1
%th
Période
%th
Objectif CA
%th
Objectif Poids
%th
Réalisé CA
%th
Réalisé poids
-while trim_start_date < next_year_trim_start_date
- trim_end_date = trim_start_date + (3.month - 1.day)
- tr_array = []
-start_month_date = trim_start_date
-tot = {:ca => 0.0, :weight => 0.0}
-tot_ca = 0.0
-tot_weight = 0.0
-while start_month_date <= trim_end_date
-end_month_date = start_month_date.end_of_month
-p_commercial_object_month = p_commercial_objective.p_commercial_object_months.where(start_at: start_month_date).first
-tr_array << capture do
-month_periode_lines = StatLine.where("date >= ? and date <= ?", start_month_date, end_month_date).where(p_commercial_id: p_commercial_objective.p_commercial_id)
-month_ca_done = month_periode_lines.sum(:tot_amount_ht).round(0)
-month_weight_done = month_periode_lines.sum(:weight_tot).round(0)
%tr{:class => "tr_trim_#{i}", :style => ("display:none;" if i != 1)}
%td
=l(start_month_date, :format => "%B").capitalize
%td
-tot[:ca] += p_commercial_object_month.ca_total_ca
=number_to_currency(p_commercial_object_month.ca_total_ca)
%td
-tot[:weight] += p_commercial_object_month.ca_total_weight
=p_commercial_object_month.ca_total_weight.to_i
Kg
%td
=number_to_currency month_ca_done, :precision => 0
%td
=month_weight_done.to_i
Kg
-start_month_date = start_month_date + 1.month
%tr
-trim_periode_lines = StatLine.where("date >= ? and date <= ?", trim_start_date, trim_end_date).where(p_commercial_id: p_commercial_objective.p_commercial_id)
-trim_ca_done = trim_periode_lines.sum(:tot_amount_ht).round(0)
-trim_weight_done = trim_periode_lines.sum(:weight_tot).round(0)
%td
=link_to "+", "#", :onclick => "$('.tr_trim_#{i}').toggle();return false;"
%strong
Trimestre
= i
du
=l trim_start_date
au
=l trim_end_date
%td
-r = 0.0
-p_commercial_objective.p_commercial_object_months.where("start_at >= ? and start_at <= ?", trim_start_date, trim_end_date).each do |pcom|
-r = r + pcom.ca_total_ca
=number_to_currency r
/ %td
/ =number_to_currency tot[:ca]
%td
= tot[:weight].to_i
Kg
%td
=number_to_currency trim_ca_done, :precision => 0
%td
=trim_weight_done.to_i
Kg
-tr_array.each do |tr|
=raw tr
-trim_start_date = trim_start_date + 3.month
-i += 1
.thead
%tr
%th
=link_to "+", "#", :onclick => "$('.brands_objectives').toggle();return false;"
Marque
%th
Objectif CA
%th
Objectif Poids
%th
Réalisé CA
%th
Réalisé poids
-p_commercial_object_brand = PCommercialObjectBrand.where(p_commercial_id: params[:p_commercial_ids], commercial_show: true).all.each do |object_brand|
-brand_start_date = p_commercial_objective.start_at
-brand_end_date = p_commercial_objective.end_at
-brand_periode_lines = StatLine.where("date >= ? and date <= ?", brand_start_date, brand_end_date).where(p_commercial_id: p_commercial_objective.id, s_brand_id: object_brand.s_brand_id)
-brand_ca_done = trim_periode_lines.sum(:tot_amount_ht)
-brand_weight_done = trim_periode_lines.sum(:weight_tot)
%tbody
%tr{:class => "brands_objectives", :style => "display:none;"}
%td
=object_brand.s_brand.name
%td
=number_to_currency object_brand.ca_total_ca
%td
=object_brand.ca_total_weight
Kg
%td
=number_to_currency brand_ca_done, :precision => 0
%td
=brand_weight_done.to_i
Kg
-if false
-PCommercialObjective.where(:p_commercial_id => params[:p_commercial_ids]).each do |p_commercial_objective|
-@t1 = p_commercial_objective.p_commercial_object_months.where(start_at: ["01/05/2020", "01/06/2020", "01/07/2020"])
-@t2 = p_commercial_objective.p_commercial_object_months.where(start_at: ["01/08/2021", "01/09/2021", "01/10/2021"])
-@t2 = p_commercial_objective.p_commercial_object_months.where(start_at: ["01/11/2021", "01/12/2021", "01/01/2022"])
-@t2 = p_commercial_objective.p_commercial_object_months.where(start_at: ["01/02/2022", "01/03/2022", "01/04/2022"])
%thead
%tr
%th{:scope => "col"}
ID
%th{:scope => "col"}
Objectif (%)
%th{:scope => "col"}
Date de début
%th{:scope => "col"}
Date de fin
%th{:scope => "col"}
A réaliser
%th{:scope => "col"}
Réalisé
%tbody
%tr
%th{:scope => "col"}
%td
=object_month.objective_percent
(%)
%td
=object_month.start_at
%td
=object_month.end_at
%td
#{@month_ca_todo}
-if @month_ca_todo >= @month_ca_done
%td.text-danger
#{@month_ca_done}
-else
%td.text-success
#{@month_ca_done}
-@t1.each do |object_month|
-@month_start = object_month.start_at
-@month_stop = object_month.end_at
%tr
%td
=@month_start
%td
=@month_stop
-@month_periode_lines = StatLine.where("date >= ? and date <= ?", @month_start, @month_stop)
-@month_periode_lines = @month_periode_lines.where(p_commercial_id: object_month.p_commercial_id)
-@month_ca_todo = number_to_currency (p_commercial_objective.total_ca * object_month.objective_percent) / 100
-@month_ca_done = number_to_currency (@month_periode_lines.sum(:tot_amount_ht)), :precision => 0
%tbody
%tr
%th{:scope => "col"}
=object_month.id
%td
=object_month.objective_percent
(%)
%td
=object_month.start_at
%td
=object_month.end_at
%td
#{@month_ca_todo}
-if @month_ca_todo >= @month_ca_done
%td.text-danger
#{@month_ca_done}
-else
%td.text-success
#{@month_ca_done}
-pie_data.to_s
:javascript
$(function() {
var mapData = {
"US": 298,
"SA": 200,
"DE": 220,
"FR": 540,
"CN": 120,
"AU": 760,
"BR": 550,
"IN": 200,
"GB": 120,
};
$('#world_map').vectorMap({
map: 'world_mill',
backgroundColor: "transparent",
zoomOnScroll: false,
regionStyle: {
initial: {
fill: '#e4e4e4',
"fill-opacity": 0.9,
stroke: 'none',
"stroke-width": 0,
"stroke-opacity": 0
}
},
series: {
regions: [{
values: mapData,
scale: [window.theme.primary],
normalizeFunction: 'polynomial'
}]
},
});
setTimeout(function() {
$(window).trigger('resize');
}, 350)
})
:javascript
$(function() {
// Pie chart
new Chart(document.getElementById("chartjs-dashboard-pie"), {
type: 'pie',
data: {
labels: #{raw(pie_label.to_s)},
datasets: [{
data: #{raw(pie_data.to_s)},
backgroundColor: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],
borderColor: "transparent"
}]
},
options: {
responsive: !window.MSInputMethodContext,
maintainAspectRatio: false,
legend: {
display: false
},
cutoutPercentage: 75
}
});
});
:javascript
$(function() {
// Radar chart
new Chart(document.getElementById("chartjs-dashboard-radar"), {
type: "radar",
data: {
labels: ["Technology", "Sports", "Media", "Gaming", "Arts"],
datasets: [{
label: "Interests",
backgroundColor: "rgba(0, 123, 255, 0.2)",
borderColor: "#2979ff",
pointBackgroundColor: "#2979ff",
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "#2979ff",
data: [70, 53, 82, 60, 33]
}]
},
options: {
maintainAspectRatio: false,
legend: {
display: false
}
}
});
});
:javascript
$(function() {
// Bar chart
new Chart(document.getElementById("chartjs-dashboard-bar-alt"), {
type: "bar",
data: {
labels: #{raw(treso_labels.to_s)},
datasets: [{
backgroundColor: ["#dd6b5a", "#f6c143", "#57a36d"],
borderColor: window.theme.primary,
hoverBackgroundColor: ["#dd6b5a", "#f6c143", "#57a36d"],
hoverBorderColor: window.theme.primary,
data: #{raw(treso.to_s)},
barPercentage: .75,
categoryPercentage: .5
}]
},
options: {
maintainAspectRatio: false,
legend: {
display: false
},
scales: {
yAxes: [{
gridLines: {
display: false
},
stacked: false,
}],
xAxes: [{
stacked: false,
gridLines: {
color: "transparent"
}
}]
}
}
});
});
-if false
:javascript
$(function() {
// Bar chart
new Chart(document.getElementById("chartjs-dashboard-bar-alt"), {
type: "bar",
data: {
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
datasets: [{
label: "Last year",
backgroundColor: window.theme.primary,
borderColor: window.theme.primary,
hoverBackgroundColor: window.theme.primary,
hoverBorderColor: window.theme.primary,
data: [54, 67, 41, 55, 62, 45, 55, 73, 60, 76, 48, 79],
barPercentage: .75,
categoryPercentage: .5
}, {
label: "This year",
backgroundColor: "#E8EAED",
borderColor: "#E8EAED",
hoverBackgroundColor: "#E8EAED",
hoverBorderColor: "#E8EAED",
data: [69, 66, 24, 48, 52, 51, 44, 53, 62, 79, 51, 68],
barPercentage: .75,
categoryPercentage: .5
}]
},
options: {
maintainAspectRatio: false,
legend: {
display: false
},
scales: {
yAxes: [{
gridLines: {
display: false
},
stacked: false,
ticks: {
stepSize: 20
}
}],
xAxes: [{
stacked: false,
gridLines: {
color: "transparent"
}
}]
}
}
});
});
:javascript
$('.export_table').DataTable( {
dom: 'Bfrtip',
ordering: false,
paging: false,
searching:false,
buttons: [
{
extend: 'excelHtml5',
text:'Export Excel',
filename: 'export-basic-#{Time.now.strftime("%Y-%m-%d-%H-%m-%S")}',
title:''
},
{
extend: 'csv',
text:'Export CSV',
filename: 'export-basic-#{Time.now.strftime("%Y-%m-%d-%H-%m-%S")}',
title:''
}
]
} );
:scss
.dataTables_info{
display:none;
}