Ajout graphiques CA par groupes
This commit is contained in:
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@@ -1,2 +1,3 @@
|
|||||||
{
|
{
|
||||||
|
"html.validate.scripts": false
|
||||||
}
|
}
|
||||||
@@ -25,6 +25,7 @@ mondumas/models/default.py
|
|||||||
mondumas/models/devis.py
|
mondumas/models/devis.py
|
||||||
mondumas/models/dossier.py
|
mondumas/models/dossier.py
|
||||||
mondumas/models/parametres.py
|
mondumas/models/parametres.py
|
||||||
|
mondumas/models/stats.py
|
||||||
mondumas/models/utils.py
|
mondumas/models/utils.py
|
||||||
mondumas/scripts/__init__.py
|
mondumas/scripts/__init__.py
|
||||||
mondumas/views/__init__.py
|
mondumas/views/__init__.py
|
||||||
@@ -34,4 +35,5 @@ mondumas/views/devis.py
|
|||||||
mondumas/views/dossier.py
|
mondumas/views/dossier.py
|
||||||
mondumas/views/notfound.py
|
mondumas/views/notfound.py
|
||||||
mondumas/views/parametres.py
|
mondumas/views/parametres.py
|
||||||
|
mondumas/views/stats.py
|
||||||
mondumas/views/utils.py
|
mondumas/views/utils.py
|
||||||
@@ -11,6 +11,7 @@ from zope.sqlalchemy import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
|
from dateutil.relativedelta import *
|
||||||
import dateutil.relativedelta
|
import dateutil.relativedelta
|
||||||
import transaction
|
import transaction
|
||||||
|
|
||||||
@@ -47,15 +48,31 @@ def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
|||||||
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
|
||||||
return results.fetchall()
|
return results.fetchall()
|
||||||
|
|
||||||
def get_ca_groupe_12m(request, societe):
|
def get_ca_groupe_12m(request, societe, datedeb, datefin):
|
||||||
|
|
||||||
query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm,
|
query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm,
|
||||||
DATE_FORMAT(date, "%M") as mois,
|
DATE_FORMAT(date, "%M") as mois,
|
||||||
|
DATE_FORMAT(date, "%M %Y") as date,
|
||||||
SUM(IF(groupe = 'AXA', totalht, 0)) AS AXA_ca,
|
SUM(IF(groupe = 'AXA', totalht, 0)) AS AXA_ca,
|
||||||
sum(IF(groupe = 'AXA', 1, 0)) AS AXA_nb,
|
SUM(IF(groupe = 'AXA', 1, 0)) AS AXA_nb,
|
||||||
SUM(IF(groupe = 'MAIF', totalht, 0)) AS MAIF
|
SUM(IF(groupe = 'MAIF', totalht, 0)) AS MAIF_ca,
|
||||||
|
SUM(IF(groupe = 'MAIF', 1, 0)) AS MAIF_nb
|
||||||
FROM bddevfac.facture
|
FROM bddevfac.facture
|
||||||
WHERE societe='PE' and date >= "2020/07/01" and date <= "2021/06/30" GROUP BY yymm;"""
|
WHERE societe=:societe and date >= :datedeb and date <= :datefin GROUP BY yymm;"""
|
||||||
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
|
||||||
return results
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_groupe_3y(request, societe, datedeb):
|
||||||
|
|
||||||
|
date2 = datedeb + relativedelta(years=-1)
|
||||||
|
date3 = datedeb + relativedelta(years=-2)
|
||||||
|
|
||||||
|
query = """SELECT groupe,
|
||||||
|
SUM(IF (date_format(date, '%Y') = :date_n-2, TOTALHT, 0)) as Annee1,
|
||||||
|
SUM(IF (date_format(date, '%Y') = :date_n-1, TOTALHT, 0)) as Annee2,
|
||||||
|
SUM(IF (date_format(date, '%Y') = :date_n, TOTALHT, 0)) as Annee3
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe=:societe GROUP BY groupe;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'date_n': date3.strftime("%Y"), 'date_n-1': date2.strftime("%Y"), 'date_n': datedeb.strftime("%Y")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
|||||||
@@ -18,75 +18,68 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- graphique 1ER CONTACT -->
|
<!-- Histogramme CA sur 12 mois par groupe -->
|
||||||
<div id="barChart_annee1" style="width: 100%; height: 500px;"></div>
|
<div id="chart_ca_12m" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<!-- camembert 1 -->
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div id="chart_ca_3y_1" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div id="chart_ca_3y_2" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div id="chart_ca_3y_3" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
google.charts.load("current", {packages:["corechart"]});
|
||||||
google.charts.setOnLoadCallback(drawChart);
|
google.charts.setOnLoadCallback(drawChart);
|
||||||
var dataSet_annee1 = ${barChart_annee1};
|
var dataSet_ca_12m = ${chart_ca_12m};
|
||||||
var dataSet_annee2 = ${barChart_annee2};
|
|
||||||
var dataSet_annee3 = ${barChart_annee3};
|
var dataSet_ca_3y_1 = ${chart_ca_3y_1};
|
||||||
var dataSet_annee4 = ${barChart_annee4};
|
var dataSet_ca_3y_2 = ${chart_ca_3y_2};
|
||||||
|
var dataSet_ca_3y_3 = ${chart_ca_3y_3};
|
||||||
|
|
||||||
function drawChart() {
|
function drawChart() {
|
||||||
var data_annee1 = google.visualization.arrayToDataTable(dataSet_annee1);
|
var data_ca_12m = google.visualization.arrayToDataTable(dataSet_ca_12m);
|
||||||
var data_annee2 = google.visualization.arrayToDataTable(dataSet_annee2);
|
|
||||||
var data_annee3 = google.visualization.arrayToDataTable(dataSet_annee3);
|
|
||||||
var data_annee4 = google.visualization.arrayToDataTable(dataSet_annee4);
|
|
||||||
|
|
||||||
var options_annee1 = {
|
var data_ca_3y_1 = google.visualization.arrayToDataTable(dataSet_ca_3y_1);
|
||||||
|
var data_ca_3y_2 = google.visualization.arrayToDataTable(dataSet_ca_3y_2);
|
||||||
|
var data_ca_3y_3 = google.visualization.arrayToDataTable(dataSet_ca_3y_3);
|
||||||
|
|
||||||
|
var options_ca_12m = {
|
||||||
|
title: '${title}',
|
||||||
|
vAxis: {title: "Chiffre d'Affaires en €"},
|
||||||
|
isStacked: true
|
||||||
|
};
|
||||||
|
|
||||||
|
var options_ca_3y_1 = {
|
||||||
title: '${title1}',
|
title: '${title1}',
|
||||||
seriesType: 'bars',
|
|
||||||
series: {1: {type: 'line'}},
|
|
||||||
vAxis: {
|
|
||||||
viewWindow: {
|
|
||||||
min:0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var options_annee2 = {
|
|
||||||
title: '${title2}',
|
|
||||||
seriesType: 'bars',
|
|
||||||
series: {1: {type: 'line'}},
|
|
||||||
vAxis: {
|
|
||||||
viewWindow: {
|
|
||||||
min:0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var options_annee3 = {
|
|
||||||
title: '${title3}',
|
|
||||||
seriesType: 'bars',
|
|
||||||
series: {1: {type: 'line'}},
|
|
||||||
vAxis: {
|
|
||||||
viewWindow: {
|
|
||||||
min:0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var options_annee4 = {
|
|
||||||
title: '${title4}',
|
|
||||||
seriesType: 'bars',
|
|
||||||
series: {1: {type: 'line'}},
|
|
||||||
vAxis: {
|
|
||||||
viewWindow: {
|
|
||||||
min:0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var chart_annee1 = new google.visualization.ComboChart(document.getElementById('barChart_annee1'));
|
var options_ca_3y_2 = {
|
||||||
chart_annee1.draw(data_annee1, options_annee1);
|
title: '${title2}',
|
||||||
var chart_annee2 = new google.visualization.ComboChart(document.getElementById('barChart_annee2'));
|
};
|
||||||
chart_annee2.draw(data_annee2, options_annee2);
|
|
||||||
var chart_annee3 = new google.visualization.ComboChart(document.getElementById('barChart_annee3'));
|
var options_ca_3y_3 = {
|
||||||
chart_annee3.draw(data_annee3, options_annee3);
|
title: '${title3}',
|
||||||
var chart_annee4 = new google.visualization.ComboChart(document.getElementById('barChart_annee4'));
|
};
|
||||||
chart_annee4.draw(data_annee4, options_annee4);
|
|
||||||
|
var chart_ca_12m = new google.visualization.SteppedAreaChart(document.getElementById('chart_ca_12m'));
|
||||||
|
chart_ca_12m.draw(data_ca_12m, options_ca_12m);
|
||||||
|
|
||||||
|
var chart_ca_3y_1 = new google.visualization.PieChart(document.getElementById('chart_ca_3y_1'));
|
||||||
|
chart_ca_3y_1.draw(data_ca_3y_1, options_ca_3y_1);
|
||||||
|
var chart_ca_3y_2 = new google.visualization.PieChart(document.getElementById('chart_ca_3y_2'));
|
||||||
|
chart_ca_3y_2.draw(data_ca_3y_2, options_ca_3y_2);
|
||||||
|
var chart_ca_3y_3 = new google.visualization.PieChart(document.getElementById('chart_ca_3y_3'));
|
||||||
|
chart_ca_3y_3.draw(data_ca_3y_3, options_ca_3y_3);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -170,38 +170,60 @@ def ca_groupes_12m(request):
|
|||||||
if 'societe' in request.params:
|
if 'societe' in request.params:
|
||||||
societe = request.params["societe"]
|
societe = request.params["societe"]
|
||||||
|
|
||||||
# lire les groupes
|
# lire les CA par mois
|
||||||
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
items = get_ca_groupe_12m(request, societe, datedeb, datefin)
|
||||||
|
chart_ca_12m = []
|
||||||
# mémoriser le 1er de la liste
|
|
||||||
groupe = groupes[0].group2
|
|
||||||
|
|
||||||
# si groupe a été changé par le user
|
|
||||||
if 'groupe' in request.params:
|
|
||||||
groupe = request.params["groupe"]
|
|
||||||
|
|
||||||
# lire les délais CONTACT du groupe
|
|
||||||
items = get_ca_groupe_12m(request, societe, datedeb, datefin, groupe, 'delai_contact')
|
|
||||||
barChart_annee1 = []
|
|
||||||
# titre des colonnes
|
# titre des colonnes
|
||||||
barChart_annee1.append(('Mois', 'AXA', {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
chart_ca_12m.append(('Mois', 'AXA', { 'type':'string','role': 'tooltip'}, 'MAIF', { 'type':'string','role': 'tooltip'}))
|
||||||
title1 = '1er CONTACT'
|
title = 'CA / MOIS'
|
||||||
for item in items:
|
for item in items:
|
||||||
# construire la liste pour donut cible
|
# construire la liste pour donut cible
|
||||||
tooltip = item.group1_lib + '\nMoyennne: -'+str(round(item.moyenne))+' j\nDossiers: '+str(round(item.population))
|
tooltipMAIF = item.date + ' \nCA: '+str(item.MAIF_ca) + ' €\nDossiers: '+str(round(item.MAIF_nb))
|
||||||
|
tooltipAXA = item.date + ' \nCA: '+str(item.AXA_ca) + ' €\nDossiers: '+str(round(item.AXA_nb))
|
||||||
# ('+str(item.population)+')/n'
|
# ('+str(item.population)+')/n'
|
||||||
d = (item.mois, round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
d = (item.mois, float(item.AXA_ca), tooltipAXA, float(item.MAIF_ca), tooltipMAIF)
|
||||||
barChart_annee1.append(d)
|
chart_ca_12m.append(d)
|
||||||
|
|
||||||
|
# debut = aujourd'hui - 11 mois
|
||||||
|
datedeb = date.today()
|
||||||
|
datedeb.replace(month=1,day=1)
|
||||||
|
|
||||||
|
# lire les CA par mois
|
||||||
|
items = get_ca_groupe_3y(request, societe, datedeb)
|
||||||
|
chart_ca_3y_1 = []
|
||||||
|
chart_ca_3y_2 = []
|
||||||
|
chart_ca_3y_3 = []
|
||||||
|
# titre des colonnes
|
||||||
|
chart_ca_3y_1.append(('Groupe', 'CA'))
|
||||||
|
chart_ca_3y_2.append(('Groupe', 'CA'))
|
||||||
|
chart_ca_3y_3.append(('Groupe', 'CA'))
|
||||||
|
title1 = 'CA ' + (datedeb + relativedelta(years=-2)).strftime("%Y")
|
||||||
|
title2 = 'CA ' + (datedeb + relativedelta(years=-1)).strftime("%Y")
|
||||||
|
title3 = 'CA ' + datedeb.strftime("%Y")
|
||||||
|
for item in items:
|
||||||
|
# construire la liste pour donut cible
|
||||||
|
#tooltipMAIF = item.date + ' \nCA: '+str(item.MAIF_ca) + ' €\nDossiers: '+str(round(item.MAIF_nb))
|
||||||
|
#tooltipAXA = item.date + ' \nCA: '+str(item.AXA_ca) + ' €\nDossiers: '+str(round(item.AXA_nb))
|
||||||
|
# ('+str(item.population)+')/n'
|
||||||
|
d1 = (item.groupe, float(item.Annee1))
|
||||||
|
chart_ca_3y_1.append(d1)
|
||||||
|
d2 = (item.groupe, float(item.Annee2))
|
||||||
|
chart_ca_3y_2.append(d2)
|
||||||
|
d3 = (item.groupe, float(item.Annee3))
|
||||||
|
chart_ca_3y_3.append(d3)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Délais / mois",
|
'page_title': "CA par groupe",
|
||||||
'url': url,
|
'url': url,
|
||||||
'barChart_annee1': json.dumps(barChart_annee1),
|
'chart_ca_12m': json.dumps(chart_ca_12m),
|
||||||
|
'chart_ca_3y_1': json.dumps(chart_ca_3y_1),
|
||||||
|
'chart_ca_3y_2': json.dumps(chart_ca_3y_2),
|
||||||
|
'chart_ca_3y_3': json.dumps(chart_ca_3y_3),
|
||||||
|
'title': title,
|
||||||
'title1': title1,
|
'title1': title1,
|
||||||
|
'title2': title2,
|
||||||
|
'title3': title3,
|
||||||
'societes': societes,
|
'societes': societes,
|
||||||
'societe': societe,
|
'societe': societe,
|
||||||
'groupes': groupes,
|
|
||||||
'groupe': groupe,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user