stats delais -> indices de performances
This commit is contained in:
@@ -200,15 +200,15 @@ def delete_expert(request, code_cab, code_exp):
|
|||||||
|
|
||||||
def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
||||||
query = """SELECT group2, group2_lib FROM stats_delais
|
query = """SELECT group2, group2_lib FROM stats_delais
|
||||||
WHERE societe=:societe AND id='delai_contact' AND group1 >= :datedeb AND group1 < :datefin GROUP BY group2 ORDER BY group2_lib;"""
|
WHERE societe=:societe AND group1 >= :datedeb AND group1 < :datefin GROUP BY group2 ORDER BY group2_lib;"""
|
||||||
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_stats_delais(request, societe, datedeb, datefin, groupe):
|
def get_stats_delais(request, societe, datedeb, datefin, groupe, id_chart):
|
||||||
# lire les examens sur 12 mois glissants par moniteur
|
# lire les examens sur 12 mois glissants par moniteur
|
||||||
query = """SELECT * FROM stats_delais
|
query = """SELECT * FROM stats_delais
|
||||||
WHERE societe=:societe AND id='delai_contact' AND group1 >= :datedeb AND group1 < :datefin AND group2=:groupe order by group1;"""
|
WHERE societe=:societe AND id=:id_chart AND group1 >= :datedeb AND group1 < :datefin AND group2=:groupe order by group1;"""
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"),
|
results = request.dbsession.execute(query, {'societe': societe, 'id_chart': id_chart, 'datedeb': datedeb.strftime("%Y%m"),
|
||||||
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
||||||
return results.fetchall()
|
return results.fetchall()
|
||||||
|
|
||||||
|
|||||||
@@ -196,3 +196,7 @@ def delete_client_unused(request):
|
|||||||
query = "DELETE FROM clients WHERE cd_cli <> 1 AND dern_operation IS NULL AND YEAR(cree_le) < YEAR(CURRENT_DATE()) - 2;"
|
query = "DELETE FROM clients WHERE cd_cli <> 1 AND dern_operation IS NULL AND YEAR(cree_le) < YEAR(CURRENT_DATE()) - 2;"
|
||||||
execute_query(request, query, {})
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
def update_stats_delais(request, societe, date, groupe):
|
||||||
|
query = "CALL spUPD_STATS_DELAIS(:societe, :date, :groupe);"
|
||||||
|
execute_query(request, query, {'societe': societe, 'date': date, 'groupe': groupe})
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<a href="${request.application_url}/stats_delais/PE" tal:condition="access > 0">
|
<a href="${request.application_url}/stats_delais/PE" tal:condition="access > 0">
|
||||||
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
||||||
<h4>PERFORMANCES</h4></a>
|
<h4>INDICES P.</h4></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -1,11 +1,20 @@
|
|||||||
<metal:block use-macro="main_template">
|
<metal:block use-macro="main_template">
|
||||||
<div metal:fill-slot="content">
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<br />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form method="POST" id="frm" class="form-horizontal">
|
<form method="POST" id="frm" class="form-horizontal">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-md-2">Groupe</label>
|
<label class="control-label col-sm-2">Societe</label>
|
||||||
<div class="col-md-10">
|
<div class="col-sm-4">
|
||||||
|
<select class="form-control" id="societe" name="societe" onChange="$('#frm').submit()">
|
||||||
|
<tal:block tal:repeat="item societes">
|
||||||
|
<option value="${item}" tal:attributes="selected societe==item and 'selected' or None"> ${item}</option>
|
||||||
|
</tal:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<label class="control-label col-sm-2">Groupe</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
<select class="form-control" id="groupe" name="groupe" onChange="$('#frm').submit()">
|
<select class="form-control" id="groupe" name="groupe" onChange="$('#frm').submit()">
|
||||||
<tal:block tal:repeat="item groupes">
|
<tal:block tal:repeat="item groupes">
|
||||||
<option value="${item.group2}" tal:attributes="selected groupe==item.group2 and 'selected' or None"> ${item.group2}</option>
|
<option value="${item.group2}" tal:attributes="selected groupe==item.group2 and 'selected' or None"> ${item.group2}</option>
|
||||||
@@ -17,8 +26,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- graphique colonne année N -->
|
<!-- graphique 1ER CONTACT -->
|
||||||
<div id="barChart_annee" style="width: 100%; height: 500px;"></div>
|
<div id="barChart_annee1" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<!-- graphique 1ER RDV -->
|
||||||
|
<div id="barChart_annee2" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<!-- graphique 1ER DEVIS -->
|
||||||
|
<div id="barChart_annee3" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<!-- graphique 1ERE FACTURE -->
|
||||||
|
<div id="barChart_annee4" style="width: 100%; height: 500px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -26,13 +47,49 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||||
google.charts.setOnLoadCallback(drawChart);
|
google.charts.setOnLoadCallback(drawChart);
|
||||||
var dataSet_annee = ${barChart_annee};
|
var dataSet_annee1 = ${barChart_annee1};
|
||||||
|
var dataSet_annee2 = ${barChart_annee2};
|
||||||
|
var dataSet_annee3 = ${barChart_annee3};
|
||||||
|
var dataSet_annee4 = ${barChart_annee4};
|
||||||
|
|
||||||
function drawChart() {
|
function drawChart() {
|
||||||
var data_annee = google.visualization.arrayToDataTable(dataSet_annee);
|
var data_annee1 = google.visualization.arrayToDataTable(dataSet_annee1);
|
||||||
|
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_annee = {
|
var options_annee1 = {
|
||||||
title: '${title}',
|
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',
|
seriesType: 'bars',
|
||||||
series: {1: {type: 'line'}},
|
series: {1: {type: 'line'}},
|
||||||
vAxis: {
|
vAxis: {
|
||||||
@@ -42,8 +99,14 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var chart_annee = new google.visualization.ComboChart(document.getElementById('barChart_annee'));
|
var chart_annee1 = new google.visualization.ComboChart(document.getElementById('barChart_annee1'));
|
||||||
chart_annee.draw(data_annee, options_annee);
|
chart_annee1.draw(data_annee1, options_annee1);
|
||||||
|
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'));
|
||||||
|
chart_annee3.draw(data_annee3, options_annee3);
|
||||||
|
var chart_annee4 = new google.visualization.ComboChart(document.getElementById('barChart_annee4'));
|
||||||
|
chart_annee4.draw(data_annee4, options_annee4);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -656,6 +656,11 @@ def stats_delais(request):
|
|||||||
datefin = date.today()
|
datefin = date.today()
|
||||||
# debut = aujourd'hui - 12 mois
|
# debut = aujourd'hui - 12 mois
|
||||||
datedeb = datefin + relativedelta(months=-12)
|
datedeb = datefin + relativedelta(months=-12)
|
||||||
|
|
||||||
|
societes = ['PE','ME','PL']
|
||||||
|
# si societe a été changé par le user
|
||||||
|
if 'societe' in request.params:
|
||||||
|
societe = request.params["societe"]
|
||||||
|
|
||||||
# lire les groupes
|
# lire les groupes
|
||||||
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
||||||
@@ -666,22 +671,66 @@ def stats_delais(request):
|
|||||||
if 'groupe' in request.params:
|
if 'groupe' in request.params:
|
||||||
groupe = request.params["groupe"]
|
groupe = request.params["groupe"]
|
||||||
|
|
||||||
# lire les délais CONTACT du groupe
|
# lire les délais CONTACT du groupe
|
||||||
items = get_stats_delais(request, societe, datedeb, datefin, groupe)
|
items = get_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_contact')
|
||||||
barChart_annee=[]
|
barChart_annee1 = []
|
||||||
barChart_annee.append(('Mois', groupe, {'role': 'annotation'}, 'Moyenne'))
|
barChart_annee1.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
title1 = '1er CONTACT'
|
title1 = '1er CONTACT'
|
||||||
for item in items:
|
for item in items:
|
||||||
# construire la liste pour donut cible
|
# construire la liste pour donut cible
|
||||||
title = '%s - %s' % (item.group2_lib, item.group2)
|
tooltip = item.group1_lib + '\nMoyennne: -'+str(round(item.moyenne))+' j\nDossiers: '+str(round(item.population))
|
||||||
d = (item.group1_lib[:4], round(item.moyenne), str(item.moyenne)+'j ('+str(item.population)+')', round(item.moy_ref))
|
# ('+str(item.population)+')/n'
|
||||||
|
d = (item.group1_lib[:3], round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
||||||
barChart_annee1.append(d)
|
barChart_annee1.append(d)
|
||||||
|
|
||||||
|
# lire les délais RENDEZ-VOUS du groupe
|
||||||
|
items = get_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_rdv')
|
||||||
|
barChart_annee2=[]
|
||||||
|
barChart_annee2.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
|
title2 = '1er RENDEZ-VOUS'
|
||||||
|
for item in items:
|
||||||
|
# construire la liste pour donut cible
|
||||||
|
tooltip = item.group1_lib + '\nMoyennne: -'+str(round(item.moyenne))+' j\nDossiers: '+str(round(item.population))
|
||||||
|
# ('+str(item.population)+')/n'
|
||||||
|
d = (item.group1_lib[:3], round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
||||||
|
barChart_annee2.append(d)
|
||||||
|
|
||||||
|
# lire les délais DEVIS du groupe
|
||||||
|
items = get_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_devis')
|
||||||
|
barChart_annee3=[]
|
||||||
|
barChart_annee3.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
|
title3 = '1er DEVIS'
|
||||||
|
for item in items:
|
||||||
|
# construire la liste pour donut cible
|
||||||
|
tooltip = item.group1_lib + '\nMoyennne: -'+str(round(item.moyenne))+' j\nDossiers: '+str(round(item.population))
|
||||||
|
# ('+str(item.population)+')/n'
|
||||||
|
d = (item.group1_lib[:3], round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
||||||
|
barChart_annee3.append(d)
|
||||||
|
|
||||||
|
# lire les délais FACTURE du groupe
|
||||||
|
items = get_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_facture')
|
||||||
|
barChart_annee4 = []
|
||||||
|
barChart_annee4.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
|
title4 = '1ère FACTURE'
|
||||||
|
for item in items:
|
||||||
|
# construire la liste pour donut cible
|
||||||
|
tooltip = item.group1_lib + '\nMoyennne: -'+str(round(item.moyenne))+' j\nDossiers: '+str(round(item.population))
|
||||||
|
# ('+str(item.population)+')/n'
|
||||||
|
d = (item.group1_lib[:3], round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
||||||
barChart_annee4.append(d)
|
barChart_annee4.append(d)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Indices de performances",
|
'page_title': "Indices de performances",
|
||||||
'url': url,
|
'url': url,
|
||||||
'barChart_annee': json.dumps(barChart_annee),
|
'barChart_annee1': json.dumps(barChart_annee1),
|
||||||
|
'barChart_annee2': json.dumps(barChart_annee2),
|
||||||
|
'barChart_annee3': json.dumps(barChart_annee3),
|
||||||
|
'barChart_annee4': json.dumps(barChart_annee4),
|
||||||
|
'title1': title1,
|
||||||
|
'title2': title2,
|
||||||
|
'title3': title3,
|
||||||
|
'title4': title4,
|
||||||
|
'societes': societes,
|
||||||
'societe': societe,
|
'societe': societe,
|
||||||
'groupes': groupes,
|
'groupes': groupes,
|
||||||
'groupe': groupe,
|
'groupe': groupe,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from pyramid_mailer.message import Message, Attachment
|
|||||||
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from datetime import *
|
from datetime import *
|
||||||
|
from dateutil.relativedelta import *
|
||||||
|
|
||||||
from ..models.utils import *
|
from ..models.utils import *
|
||||||
|
|
||||||
@@ -176,7 +177,18 @@ def batch_test(request):
|
|||||||
|
|
||||||
# à revoir
|
# à revoir
|
||||||
# update_chantiers_status(request)
|
# update_chantiers_status(request)
|
||||||
update_chantiers_delais(request, '2020/12/01')
|
# update_chantiers_delais(request, '2020/12/01')
|
||||||
|
# calculer les délais de traitements des dossiers sur 1 an
|
||||||
|
societes = ['PL', 'ME', 'PE']
|
||||||
|
datejour = date.today()
|
||||||
|
groupes = ['MAIF', 'AXA', 'X']
|
||||||
|
for i in range(12):
|
||||||
|
for societe in societes:
|
||||||
|
for groupe in groupes:
|
||||||
|
update_stats_delais(request, societe, datejour.strftime('%Y%m%d'), groupe)
|
||||||
|
# recule d'un mois
|
||||||
|
datejour = datejour + relativedelta(months=-1)
|
||||||
|
|
||||||
|
|
||||||
return Response('Batch nuit terminé OK')
|
return Response('Batch nuit terminé OK')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user