suite
This commit is contained in:
parent
f4ccdc82dc
commit
71350f9b8c
@ -23,7 +23,7 @@ class Admin::PStatsController < ApplicationController
|
|||||||
@start = Date.parse(params[:start]).beginning_of_day
|
@start = Date.parse(params[:start]).beginning_of_day
|
||||||
|
|
||||||
else
|
else
|
||||||
@start = Date.today.beginning_of_month
|
@start = Date.parse("2000-01-01")
|
||||||
end
|
end
|
||||||
params[:start]= @start.strftime('%d/%m/%Y')
|
params[:start]= @start.strftime('%d/%m/%Y')
|
||||||
|
|
||||||
|
@ -8,24 +8,57 @@ class MOdrPrime < ApplicationRecord
|
|||||||
include ActionView::Helpers::TranslationHelper
|
include ActionView::Helpers::TranslationHelper
|
||||||
include ActionView::Helpers::UrlHelper
|
include ActionView::Helpers::UrlHelper
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
has_many :m_odr_prime_files #, :dependent => :destroy
|
has_many :m_odr_prime_files #, :dependent => :destroy
|
||||||
|
|
||||||
|
|
||||||
|
has_many :m_odr_files, :through => :m_odr_prime_files
|
||||||
|
|
||||||
|
has_many :m_odr_places, :through => :m_odr_files
|
||||||
|
|
||||||
|
has_many :m_odr_file_products, :through => :m_odr_files
|
||||||
|
|
||||||
|
|
||||||
|
has_many :m_odr_products, :through => :m_odr_file_products
|
||||||
|
|
||||||
|
|
||||||
has_many :mail_hists
|
has_many :mail_hists
|
||||||
has_many :m_odr_virements
|
has_many :m_odr_virements
|
||||||
|
|
||||||
acts_as_sorting :fields => {
|
acts_as_sorting :fields => {
|
||||||
:id => {:name => "Id", :reorder => true},
|
:id => {:name => "Id", :reorder => true},
|
||||||
:p_customer => {:name => "Client", :reorder => true, :sort_name => "p_customers.cc_show_name"},
|
#:p_customer => {:name => "Client", :reorder => true, :sort_name => "p_customers.cc_show_name"},
|
||||||
|
|
||||||
|
:p_customer_created_at => {:name => "Inscription", :reorder => true, :sort_name => "p_customers.created_at"},
|
||||||
|
|
||||||
|
:particular_name => {:name => "Nom", :reorder => true, :sort_name => "particulars.name"},
|
||||||
|
:particular_firstname => {:name => "Prénom", :reorder => true, :sort_name => "particulars.firstname"},
|
||||||
|
:amount => {:name => "Montant", :as => :currency},
|
||||||
|
|
||||||
|
:created_at => {:name => "Date"},
|
||||||
|
|
||||||
|
|
||||||
|
:pneu_gamme => {:name => "Gamme"},
|
||||||
|
|
||||||
|
#:pneu_tailles => {:name => "Tailles"},
|
||||||
|
|
||||||
|
:m_odr_place_name => {:name => "Nom"},
|
||||||
|
:m_odr_place_cp=> {:name => "CP"},
|
||||||
|
:m_odr_place_city => {:name => "Nom"},
|
||||||
|
|
||||||
|
:organisateur_name => {:name => "Organisateur"},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:date_roulage => {:name => "Date de roulage", :reorder => true, :sort_name => "m_odr_file_roulages.date"},
|
:date_roulage => {:name => "Date de roulage", :reorder => true, :sort_name => "m_odr_file_roulages.date"},
|
||||||
:state => {:name => "Statut", :reorder => true},
|
:state => {:name => "Statut", :reorder => true},
|
||||||
:amount => {:name => "Montant"},
|
|
||||||
:actions => {:name => "Actions", :reorder => true},
|
:actions => {:name => "Actions", :reorder => true},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
before_validation do
|
before_validation do
|
||||||
|
|
||||||
|
@ -1,9 +1,18 @@
|
|||||||
%tr#m_odr_prime_row{:id => m_odr_prime.id}
|
%tr#m_odr_prime_row{:id => m_odr_prime.id}
|
||||||
-tr = {}
|
-tr = {}
|
||||||
|
|
||||||
-tr[:p_customer] = capture do
|
-tr[:particular_name] = capture do
|
||||||
%td
|
%td
|
||||||
=link_to m_odr_prime.p_customer.show_name, [:admin, m_odr_prime.p_customer] if m_odr_prime.p_customer
|
=link_to m_odr_prime.particular.name, [:admin, m_odr_prime.p_customer] if m_odr_prime.particular
|
||||||
|
|
||||||
|
-tr[:particular_firstname] = capture do
|
||||||
|
%td
|
||||||
|
=link_to m_odr_prime.particular.firstname, [:admin, m_odr_prime.p_customer] if m_odr_prime.particular
|
||||||
|
|
||||||
|
|
||||||
|
-tr[:p_customer_created_at] = capture do
|
||||||
|
%td
|
||||||
|
=l m_odr_prime.p_customer.created_at if m_odr_prime.p_customer
|
||||||
|
|
||||||
-tr[:state] = capture do
|
-tr[:state] = capture do
|
||||||
%td
|
%td
|
||||||
@ -14,6 +23,31 @@
|
|||||||
=l m_odr_prime.m_odr_file_roulage.date if m_odr_prime.m_odr_file_roulage
|
=l m_odr_prime.m_odr_file_roulage.date if m_odr_prime.m_odr_file_roulage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-tr[:pneu_gamme] = capture do
|
||||||
|
%td
|
||||||
|
=m_odr_prime.m_odr_products.uniq.map{ |u| (u.name)}.join(" | ")
|
||||||
|
|
||||||
|
-tr[:m_odr_place_name] = capture do
|
||||||
|
%td
|
||||||
|
=m_odr_prime.m_odr_places.uniq.map{ |u| u.name}.join(" | ")
|
||||||
|
|
||||||
|
-tr[:m_odr_place_cp] = capture do
|
||||||
|
%td
|
||||||
|
=m_odr_prime.m_odr_places.uniq.map{ |u| u.cp}.join(" | ")
|
||||||
|
|
||||||
|
-tr[:m_odr_place_city] = capture do
|
||||||
|
%td
|
||||||
|
=m_odr_prime.m_odr_places.uniq.map{ |u| u.city}.join(" | ")
|
||||||
|
|
||||||
|
|
||||||
|
-tr[:organisateur_name] = capture do
|
||||||
|
%td
|
||||||
|
=m_odr_prime.m_odr_file_roulage.m_event.organisateur.name if m_odr_prime.m_odr_file_roulage and m_odr_prime.m_odr_file_roulage.m_event and m_odr_prime.m_odr_file_roulage.m_event.organisateur
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-tr[:actions] = capture do
|
-tr[:actions] = capture do
|
||||||
|
@ -45,184 +45,60 @@
|
|||||||
-if @start and @stop
|
-if @start and @stop
|
||||||
=link_to "Mois suivant >","?start=#{CGI.escape((@start + 1.month).beginning_of_month.strftime('%d/%m/%Y'))}&stop=#{CGI.escape((@stop + 1.month).end_of_month.strftime('%d/%m/%Y'))}", :class => "btn btn-default"
|
=link_to "Mois suivant >","?start=#{CGI.escape((@start + 1.month).beginning_of_month.strftime('%d/%m/%Y'))}&stop=#{CGI.escape((@stop + 1.month).end_of_month.strftime('%d/%m/%Y'))}", :class => "btn btn-default"
|
||||||
|
|
||||||
|
|
||||||
%p
|
|
||||||
-if @start and @stop
|
|
||||||
=link_to "< Année précédente","?start=#{CGI.escape((@start - 1.year).beginning_of_month.strftime('%d/%m/%Y'))}&stop=#{CGI.escape((@stop - 1.year).end_of_month.strftime('%d/%m/%Y'))}", :class => "btn btn-default"
|
|
||||||
-if @start and @stop
|
|
||||||
=link_to "Année suivante >","?start=#{CGI.escape((@start + 1.year).beginning_of_month.strftime('%d/%m/%Y'))}&stop=#{CGI.escape((@stop + 1.year).end_of_month.strftime('%d/%m/%Y'))}", :class => "btn btn-default"
|
|
||||||
|
|
||||||
|
|
||||||
%hr
|
%hr
|
||||||
|
|
||||||
|
-@m_odr_primes = MOdrPrime.where("created_at >= ? and created_at < ?",@start.beginning_of_year, @stop).where(:state => ["Virement envoyé"])
|
||||||
|
|
||||||
|
%table.table.table-stripped
|
||||||
|
|
||||||
%h2
|
|
||||||
=#raw("#{l(@start_at, :format => '%B %Y')}")
|
|
||||||
%table.table
|
|
||||||
%tr
|
%tr
|
||||||
%td{:style => "width:50%;"}
|
%th
|
||||||
=l @start
|
%th Nombre
|
||||||
%td{:style => "width:50%;"}
|
%th Montant
|
||||||
=l @stop
|
%th Nbr pneus
|
||||||
|
%tr
|
||||||
|
%th Motards
|
||||||
%p
|
%td
|
||||||
Nombre de commandes finalisées :
|
=PCustomer.where(:test_user => false, :enabled => true).where("created_at < ?", @stop).count
|
||||||
|
%td
|
||||||
=orders_ok = @finished.count
|
%td
|
||||||
-if false
|
|
||||||
%table
|
%tr
|
||||||
|
%th Organisateurs
|
||||||
|
%td
|
||||||
|
=Organisateur.where("created_at < ?", @stop).count
|
||||||
|
%td
|
||||||
|
%td
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%th Circuits
|
||||||
|
%td
|
||||||
|
=Circuit.where("created_at < ?", @stop).count
|
||||||
|
%td
|
||||||
|
%td
|
||||||
|
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%th Dates
|
||||||
|
%td
|
||||||
|
-r = 0
|
||||||
|
-MEvent.where("start_at >= ? and start_at < ? and created_at >= ? and created_at < ?",@start.beginning_of_year, @stop.end_of_year, @start.beginning_of_year, @stop).all.each do |m_event|
|
||||||
|
-r+=(m_event.end_at - m_event.start_at ).to_i / (24 * 60 * 60) +1
|
||||||
|
=r
|
||||||
|
%td
|
||||||
|
%td
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%th
|
||||||
|
Primes
|
||||||
|
%td
|
||||||
|
=@m_odr_primes.count
|
||||||
|
%td
|
||||||
|
=number_to_currency @m_odr_primes.sum(:amount)
|
||||||
|
|
||||||
|
%td
|
||||||
|
= @m_odr_primes.sum(:nbr_pneus)
|
||||||
|
|
||||||
|
|
||||||
-@finished.each do |ps|
|
|
||||||
%tr
|
|
||||||
%td
|
|
||||||
=ps.a_ok_total
|
|
||||||
%td
|
|
||||||
=ps.a_total_cost_ok
|
|
||||||
|
|
||||||
|
|
||||||
%br
|
|
||||||
%strong=number_to_percentage ((@finished.count*100)/@p_customer_sheets.count), :precision => 2 if @p_customer_sheets.count > 0
|
|
||||||
|
|
||||||
%p
|
|
||||||
Nombre de commandes non finalisées :
|
|
||||||
=orders_not_ok = (@p_customer_sheets.count - @finished.count)
|
|
||||||
|
|
||||||
%p
|
|
||||||
CA HT :
|
|
||||||
|
|
||||||
%strong=number_to_currency @finished.sum(:a_ok_total)
|
|
||||||
|
|
||||||
-if @sans_marges.count > 0
|
|
||||||
%p{:style => "color:red;"}
|
|
||||||
Attention : le calcul des marges est faussé car certaines factures fournisseurs semblent ne pas être saisies, et donc certaines commandes n'ont pas pu être attribuées.
|
|
||||||
%p
|
|
||||||
Coût estimé HT :
|
|
||||||
-cout = @finished.sum(:a_total_cost_ok)
|
|
||||||
%strong=number_to_currency cout
|
|
||||||
|
|
||||||
%p
|
|
||||||
Marge estimée HT :
|
|
||||||
-marge = @finished.sum(:a_ok_total) - @finished.sum(:a_total_cost_ok)
|
|
||||||
%strong=number_to_currency(marge)
|
|
||||||
%br
|
|
||||||
%strong=number_to_percentage ((@finished.sum(:a_ok_total) - @finished.sum(:a_total_cost_ok))/@finished.sum(:a_ok_total)*100), :precision => 2 if @finished.sum(:a_ok_total) > 0.0
|
|
||||||
|
|
||||||
|
|
||||||
%div{:style => "width:350px;display:inline-block;"}
|
|
||||||
<canvas id="ordersChart" width="400" height="400"></canvas>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
var myPieChart = new Chart("ordersChart",{
|
|
||||||
type: 'pie',
|
|
||||||
data: {
|
|
||||||
labels: ["Finalisées", "Non finalisées"],
|
|
||||||
datasets: [{
|
|
||||||
label: '# of Votes',
|
|
||||||
data: [#{orders_ok},#{orders_not_ok}],
|
|
||||||
backgroundColor: [
|
|
||||||
'#4BC0C0',
|
|
||||||
'#FF6384',
|
|
||||||
|
|
||||||
],
|
|
||||||
borderColor: [
|
|
||||||
'white',
|
|
||||||
'white',
|
|
||||||
|
|
||||||
],
|
|
||||||
borderWidth: 2
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
title: {
|
|
||||||
display: true,
|
|
||||||
text: 'Finalisation des commandes'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// options: options
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
%div{:style => "width:350px;display:inline-block;"}
|
|
||||||
<canvas id="margeChart" width="400" height="400"></canvas>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
var myPieChart = new Chart("margeChart",{
|
|
||||||
type: 'pie',
|
|
||||||
data: {
|
|
||||||
labels: ["Marge", "Cout"],
|
|
||||||
datasets: [{
|
|
||||||
label: '# of Votes',
|
|
||||||
data: [#{marge},#{cout}],
|
|
||||||
backgroundColor: [
|
|
||||||
'#4BC0C0',
|
|
||||||
'#FF6384',
|
|
||||||
|
|
||||||
],
|
|
||||||
borderColor: [
|
|
||||||
'white',
|
|
||||||
'white',
|
|
||||||
|
|
||||||
],
|
|
||||||
borderWidth: 2
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
title: {
|
|
||||||
display: true,
|
|
||||||
text: 'Marges'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// options: options
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
-if false
|
|
||||||
<canvas id="myChart" width="400" height="200"></canvas>
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
var ctx = document.getElementById("myChart");
|
|
||||||
var myChart = new Chart(ctx, {
|
|
||||||
type: 'bar',
|
|
||||||
data: {
|
|
||||||
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
|
|
||||||
datasets: [{
|
|
||||||
label: '# of Votes',
|
|
||||||
data: [12, 19, 3, 5, 2, 3],
|
|
||||||
backgroundColor: [
|
|
||||||
'rgba(255, 99, 132, 0.2)',
|
|
||||||
'rgba(54, 162, 235, 0.2)',
|
|
||||||
'rgba(255, 206, 86, 0.2)',
|
|
||||||
'rgba(75, 192, 192, 0.2)',
|
|
||||||
'rgba(153, 102, 255, 0.2)',
|
|
||||||
'rgba(255, 159, 64, 0.2)'
|
|
||||||
],
|
|
||||||
borderColor: [
|
|
||||||
'rgba(255,99,132,1)',
|
|
||||||
'rgba(54, 162, 235, 1)',
|
|
||||||
'rgba(255, 206, 86, 1)',
|
|
||||||
'rgba(75, 192, 192, 1)',
|
|
||||||
'rgba(153, 102, 255, 1)',
|
|
||||||
'rgba(255, 159, 64, 1)'
|
|
||||||
],
|
|
||||||
borderWidth: 0
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
scales: {
|
|
||||||
yAxes: [{
|
|
||||||
ticks: {
|
|
||||||
beginAtZero:true
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
Tunnels fichier sécurisés
|
Tunnels fichier sécurisés
|
||||||
|
|
||||||
|
|
||||||
-if false
|
-if current_admin.has_permission?("statistiques")
|
||||||
.element
|
.element
|
||||||
=link_to admin_p_stats_path do
|
=link_to admin_p_stats_path do
|
||||||
.cat#big_cat_statistiques
|
.cat#big_cat_statistiques
|
||||||
|
Loading…
x
Reference in New Issue
Block a user