ca_groupe
This commit is contained in:
@@ -32,19 +32,6 @@ def get_rappels_rdv(request):
|
|||||||
results = request.dbsession.execute(query, {})
|
results = request.dbsession.execute(query, {})
|
||||||
return results.fetchall()
|
return results.fetchall()
|
||||||
|
|
||||||
def get_stats_dd(request, societe):
|
|
||||||
|
|
||||||
query = """SELECT societe, year(date) as Annee, COUNT(*) as Total,
|
|
||||||
SUM(IF(status = '', 1, 0)) AS Created,
|
|
||||||
SUM(IF(status = 'Devis', 1, 0)) AS Devis,
|
|
||||||
SUM(IF(status = 'Commandé', 1, 0)) AS Commande,
|
|
||||||
SUM(IF(status = 'Facturé', 1, 0)) AS Facture,
|
|
||||||
SUM(IF(status = 'Régl part.', 1, 0)) AS ReglePart,
|
|
||||||
SUM(IF(status = 'Réglée', 1, 0)) AS Regle
|
|
||||||
FROM dem_devis where societe=:societe group by societe, year(date);"""
|
|
||||||
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
|
||||||
return results
|
|
||||||
|
|
||||||
def get_dossiers_byChantier(request, societe, name):
|
def get_dossiers_byChantier(request, societe, name):
|
||||||
|
|
||||||
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
|
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
|
||||||
@@ -198,20 +185,6 @@ def delete_expert(request, code_cab, code_exp):
|
|||||||
query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;"
|
query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;"
|
||||||
execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp})
|
execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp})
|
||||||
|
|
||||||
def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
|
||||||
query = """SELECT group2, group2_lib FROM stats_delais
|
|
||||||
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")})
|
|
||||||
return results.fetchall()
|
|
||||||
|
|
||||||
def get_stats_delais(request, societe, datedeb, datefin, groupe, id_chart):
|
|
||||||
# lire les examens sur 12 mois glissants par moniteur
|
|
||||||
query = """SELECT * FROM stats_delais
|
|
||||||
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, 'id_chart': id_chart, 'datedeb': datedeb.strftime("%Y%m"),
|
|
||||||
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
|
||||||
return results.fetchall()
|
|
||||||
|
|
||||||
def update_societe(request, code, new_values):
|
def update_societe(request, code, new_values):
|
||||||
# formater les champs
|
# formater les champs
|
||||||
s = ''
|
s = ''
|
||||||
|
|||||||
61
mondumas/models/stats.py
Normal file
61
mondumas/models/stats.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy.orm import (
|
||||||
|
scoped_session,
|
||||||
|
sessionmaker,
|
||||||
|
)
|
||||||
|
from zope.sqlalchemy import (
|
||||||
|
ZopeTransactionExtension,
|
||||||
|
mark_changed
|
||||||
|
)
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
|
import dateutil.relativedelta
|
||||||
|
import transaction
|
||||||
|
|
||||||
|
def execute_query(request, query, params):
|
||||||
|
"""Execute query and mark session as changed"""
|
||||||
|
request.dbsession.execute(query, params)
|
||||||
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
|
|
||||||
|
def get_stats_dd(request, societe):
|
||||||
|
|
||||||
|
query = """SELECT societe, year(date) as Annee, COUNT(*) as Total,
|
||||||
|
SUM(IF(status = '', 1, 0)) AS A_traiter,
|
||||||
|
SUM(IF(status = 'Devis', 1, 0)) AS Devis,
|
||||||
|
SUM(IF(status = 'Commandé', 1, 0)) AS Commande,
|
||||||
|
SUM(IF(status = 'Facturé', 1, 0)) AS Facture,
|
||||||
|
SUM(IF(status = 'Régl part.', 1, 0)) AS ReglePart,
|
||||||
|
SUM(IF(status = 'Réglée', 1, 0)) AS Regle
|
||||||
|
FROM dem_devis where societe=:societe group by societe, year(date) order by year(date) desc;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_stats_delais(request, societe, datedeb, datefin, groupe, id_chart):
|
||||||
|
# lire les examens sur 12 mois glissants par moniteur
|
||||||
|
query = """SELECT * FROM stats_delais
|
||||||
|
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, 'id_chart': id_chart, 'datedeb': datedeb.strftime("%Y%m"),
|
||||||
|
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
||||||
|
query = """SELECT group2, group2_lib FROM stats_delais
|
||||||
|
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")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_groupe_12m(request, societe):
|
||||||
|
|
||||||
|
query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm,
|
||||||
|
DATE_FORMAT(date, "%M") as mois,
|
||||||
|
SUM(IF(groupe = 'AXA', totalht, 0)) AS AXA_ca,
|
||||||
|
sum(IF(groupe = 'AXA', 1, 0)) AS AXA_nb,
|
||||||
|
SUM(IF(groupe = 'MAIF', totalht, 0)) AS MAIF
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe='PE' and date >= "2020/07/01" and date <= "2021/06/30" GROUP BY yymm;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
@@ -58,8 +58,6 @@ def includeme(config):
|
|||||||
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
||||||
config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
|
config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
|
||||||
config.add_route('infrastructure', '/infrastructure')
|
config.add_route('infrastructure', '/infrastructure')
|
||||||
config.add_route('stats_dd', '/stats_dd/{societe}')
|
|
||||||
config.add_route('stats_delais', '/stats_delais/{societe}')
|
|
||||||
config.add_route('rappels_rdv', '/rappels_rdv')
|
config.add_route('rappels_rdv', '/rappels_rdv')
|
||||||
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
||||||
config.add_route('rdf_causes', '/rdf_causes')
|
config.add_route('rdf_causes', '/rdf_causes')
|
||||||
@@ -75,6 +73,11 @@ def includeme(config):
|
|||||||
config.add_route('users', '/users')
|
config.add_route('users', '/users')
|
||||||
config.add_route('users_ua', '/users_ua')
|
config.add_route('users_ua', '/users_ua')
|
||||||
|
|
||||||
|
# stats
|
||||||
|
config.add_route('stats', '/stats')
|
||||||
|
config.add_route('stats_dossiers', '/stats_dossiers/{societe}')
|
||||||
|
config.add_route('stats_delais', '/stats_delais/{societe}')
|
||||||
|
config.add_route('ca_groupes_12m', '/ca_groupes_12m/{societe}')
|
||||||
# utils
|
# utils
|
||||||
config.add_route('batch_nuit', '/batch_nuit/{param}')
|
config.add_route('batch_nuit', '/batch_nuit/{param}')
|
||||||
config.add_route('batch_test', '/batch_test/{param}')
|
config.add_route('batch_test', '/batch_test/{param}')
|
||||||
|
|||||||
@@ -45,9 +45,9 @@
|
|||||||
<h4>PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
|
<h4>PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
|
||||||
</div>
|
</div>
|
||||||
<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" tal:condition="access > 6">
|
||||||
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
||||||
<h4>INDICES P.</h4></a>
|
<h4>STATISTIQUES</h4></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
96
mondumas/templates/stats/ca_groupes_12m.pt
Normal file
96
mondumas/templates/stats/ca_groupes_12m.pt
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<div class="row">
|
||||||
|
<form method="POST" id="frm" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-sm-2">Societe</label>
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<!-- graphique 1ER CONTACT -->
|
||||||
|
<div id="barChart_annee1" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||||
|
google.charts.setOnLoadCallback(drawChart);
|
||||||
|
var dataSet_annee1 = ${barChart_annee1};
|
||||||
|
var dataSet_annee2 = ${barChart_annee2};
|
||||||
|
var dataSet_annee3 = ${barChart_annee3};
|
||||||
|
var dataSet_annee4 = ${barChart_annee4};
|
||||||
|
|
||||||
|
function drawChart() {
|
||||||
|
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_annee1 = {
|
||||||
|
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'));
|
||||||
|
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>
|
||||||
|
|
||||||
|
</div><!-- content -->
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
31
mondumas/templates/stats/stats.pt
Normal file
31
mondumas/templates/stats/stats.pt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div id="jquery" class="container-fluid">
|
||||||
|
<div class="row text-center">
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/stats_delais/PE" tal:condition="access > 0">
|
||||||
|
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
||||||
|
<h4>DELAIS MOYENS</h4></a>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/stats_dossiers/PE"><span class="glyphicon glyphicon-wrench logo-primary"></span>
|
||||||
|
<h4>STATS DOSSIERS</h4></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row text-center">
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/ca_groupes_12m/PE" tal:condition="access > 0">
|
||||||
|
<span class="glyphicon glyphicon-equalizer logo-warning"></span>
|
||||||
|
<h4>CA GROUPES</h4></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
</div><!-- content -->
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
@@ -21,13 +21,13 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Année</th>
|
<th>Année</th>
|
||||||
<th class="text-right">A traiter</th>
|
<th class="text-right">Total DD</th>
|
||||||
<th class="text-right">Devis</th>
|
<th class="text-right">DD à traiter</th>
|
||||||
<th class="text-right">Commandé</th>
|
<th class="text-right">DD avec devis</th>
|
||||||
<th class="text-right">Facturé</th>
|
<th class="text-right">Devis à traiter</th>
|
||||||
|
<th class="text-right">DD avec facture</th>
|
||||||
<th class="text-right">Régl part.</th>
|
<th class="text-right">Régl part.</th>
|
||||||
<th class="text-right">Réglée</th>
|
<th class="text-right">Réglée</th>
|
||||||
<th class="text-right">Total</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
</table>
|
</table>
|
||||||
@@ -63,7 +63,9 @@
|
|||||||
order: [[0, 'asc']],
|
order: [[0, 'asc']],
|
||||||
rowCallback: function( row, data ) {
|
rowCallback: function( row, data ) {
|
||||||
$('td', row).eq(0).addClass('bg-success');
|
$('td', row).eq(0).addClass('bg-success');
|
||||||
$('td', row).eq(7).addClass('bg-warning');
|
$('td', row).eq(1).addClass('bg-warning');
|
||||||
|
$('td', row).eq(3).addClass('bg-warning');
|
||||||
|
$('td', row).eq(5).addClass('bg-warning');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -218,37 +218,6 @@ def rappels_rdv(request):
|
|||||||
'nbRappels': nbRappels,
|
'nbRappels': nbRappels,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='stats_dd', renderer='../templates/parametres/stats_dd.pt', permission='view')
|
|
||||||
def stats_dd(request):
|
|
||||||
|
|
||||||
societe = request.matchdict['societe']
|
|
||||||
url = request.route_url('stats_dd', societe=societe)
|
|
||||||
message = ''
|
|
||||||
societes = ['PE','ME','PL','PO','CD']
|
|
||||||
|
|
||||||
# prendre en compte les paramètres de saisie
|
|
||||||
if 'societe' in request.params:
|
|
||||||
societe = request.params["societe"]
|
|
||||||
url = request.route_url('stats_dd', societe=societe)
|
|
||||||
|
|
||||||
# lire les stats globales des demandes de devis
|
|
||||||
stats_dd = get_stats_dd(request, societe)
|
|
||||||
|
|
||||||
liste=[]
|
|
||||||
# construire la liste
|
|
||||||
for item in stats_dd:
|
|
||||||
d = (str(item.Annee), str(item.Created), str(item.Devis), str(item.Commande), str(item.Facture), str(item.ReglePart),
|
|
||||||
str(item.Regle), str(item.Total))
|
|
||||||
liste.append(d)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'page_title': "Stats : Demandes de devis",
|
|
||||||
'url': url,
|
|
||||||
'message': message,
|
|
||||||
'dt_data': json.dumps(liste),
|
|
||||||
'societes': societes,
|
|
||||||
'societe': societe,
|
|
||||||
}
|
|
||||||
|
|
||||||
@view_config(route_name='rdf_causes', renderer='../templates/parametres/rdf_causes.pt', permission='manage')
|
@view_config(route_name='rdf_causes', renderer='../templates/parametres/rdf_causes.pt', permission='manage')
|
||||||
def rdf_causes(request):
|
def rdf_causes(request):
|
||||||
@@ -647,96 +616,6 @@ def expert_edit(request):
|
|||||||
'code_exp': code_exp,
|
'code_exp': code_exp,
|
||||||
'message': message,
|
'message': message,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='stats_delais', renderer='../templates/parametres/stats_delais.pt', permission='view')
|
|
||||||
def stats_delais(request):
|
|
||||||
|
|
||||||
societe = request.matchdict['societe']
|
|
||||||
url = request.route_url('stats_delais', societe = societe)
|
|
||||||
|
|
||||||
datefin = date.today()
|
|
||||||
# debut = aujourd'hui - 11 mois
|
|
||||||
datedeb = datefin + relativedelta(months=-11)
|
|
||||||
|
|
||||||
societes = ['PE','ME','PL']
|
|
||||||
# si societe a été changé par le user
|
|
||||||
if 'societe' in request.params:
|
|
||||||
societe = request.params["societe"]
|
|
||||||
|
|
||||||
# lire les groupes
|
|
||||||
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
|
||||||
|
|
||||||
# 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_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_contact')
|
|
||||||
barChart_annee1 = []
|
|
||||||
barChart_annee1.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
|
||||||
title1 = '1er CONTACT'
|
|
||||||
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_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)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'page_title': "Indices de performances",
|
|
||||||
'url': url,
|
|
||||||
'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,
|
|
||||||
'groupes': groupes,
|
|
||||||
'groupe': groupe,
|
|
||||||
}
|
|
||||||
|
|
||||||
@view_config(route_name='societes', renderer='../templates/parametres/societes.pt', permission='manage')
|
@view_config(route_name='societes', renderer='../templates/parametres/societes.pt', permission='manage')
|
||||||
def societes(request):
|
def societes(request):
|
||||||
|
|||||||
207
mondumas/views/stats.py
Normal file
207
mondumas/views/stats.py
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
from pyramid.response import Response
|
||||||
|
from pyramid.renderers import render, get_renderer
|
||||||
|
from pyramid.view import (
|
||||||
|
view_config,
|
||||||
|
forbidden_view_config,
|
||||||
|
)
|
||||||
|
from pyramid.httpexceptions import (
|
||||||
|
HTTPFound,
|
||||||
|
HTTPNotFound,
|
||||||
|
HTTPForbidden,
|
||||||
|
)
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
|
from dateutil.relativedelta import *
|
||||||
|
import json
|
||||||
|
|
||||||
|
from ..models.default import *
|
||||||
|
from ..models.agenda import *
|
||||||
|
from ..models.stats import *
|
||||||
|
|
||||||
|
@view_config(route_name='stats', renderer='../templates/stats/stats.pt', permission='view')
|
||||||
|
def stats(request):
|
||||||
|
logged_in = request.authenticated_userid.upper()
|
||||||
|
# lire la fiche de l'utilisateur
|
||||||
|
member = get_member_by_id(request, logged_in)
|
||||||
|
access = member.access
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Statistiques",
|
||||||
|
'logged_in': logged_in,
|
||||||
|
'access': access,
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='stats_dossiers', renderer='../templates/stats/stats_dossiers.pt', permission='view')
|
||||||
|
def stats_dossiers(request):
|
||||||
|
|
||||||
|
societe = request.matchdict['societe']
|
||||||
|
url = request.route_url('stats_dossiers', societe=societe)
|
||||||
|
message = ''
|
||||||
|
societes = ['PE','ME','PL','PO','CD']
|
||||||
|
|
||||||
|
# prendre en compte les paramètres de saisie
|
||||||
|
if 'societe' in request.params:
|
||||||
|
societe = request.params["societe"]
|
||||||
|
url = request.route_url('stats_dossiers', societe=societe)
|
||||||
|
|
||||||
|
# lire les stats globales des demandes de devis
|
||||||
|
stats_dossiers = get_stats_dd(request, societe)
|
||||||
|
|
||||||
|
liste=[]
|
||||||
|
# construire la liste
|
||||||
|
for item in stats_dossiers:
|
||||||
|
total_facture = item.Facture + item.ReglePart + item.Regle
|
||||||
|
total_devis = item.Devis + item.Commande + total_facture
|
||||||
|
d = (str(item.Annee), str(item.Total), str(item.A_traiter), str(total_devis), str(item.Devis), str(total_facture), str(item.ReglePart), str(item.Regle))
|
||||||
|
liste.append(d)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Stats : Dossiers par année",
|
||||||
|
'url': url,
|
||||||
|
'message': message,
|
||||||
|
'dt_data': json.dumps(liste),
|
||||||
|
'societes': societes,
|
||||||
|
'societe': societe,
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='stats_delais', renderer='../templates/stats/stats_delais.pt', permission='view')
|
||||||
|
def stats_delais(request):
|
||||||
|
|
||||||
|
societe = request.matchdict['societe']
|
||||||
|
url = request.route_url('stats_delais', societe = societe)
|
||||||
|
|
||||||
|
datefin = date.today()
|
||||||
|
# debut = aujourd'hui - 11 mois
|
||||||
|
datedeb = datefin + relativedelta(months=-11)
|
||||||
|
|
||||||
|
societes = ['PE','ME','PL']
|
||||||
|
# si societe a été changé par le user
|
||||||
|
if 'societe' in request.params:
|
||||||
|
societe = request.params["societe"]
|
||||||
|
|
||||||
|
# lire les groupes
|
||||||
|
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
||||||
|
|
||||||
|
# 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_stats_delais(request, societe, datedeb, datefin, groupe, 'delai_contact')
|
||||||
|
barChart_annee1 = []
|
||||||
|
barChart_annee1.append(('Mois', 'Moy. ' + groupe, {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
|
title1 = '1er CONTACT'
|
||||||
|
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_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)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Délais / mois",
|
||||||
|
'url': url,
|
||||||
|
'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,
|
||||||
|
'groupes': groupes,
|
||||||
|
'groupe': groupe,
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='ca_groupes_12m', renderer='../templates/stats/ca_groupes_12m.pt', permission='view')
|
||||||
|
def ca_groupes_12m(request):
|
||||||
|
|
||||||
|
societe = request.matchdict['societe']
|
||||||
|
url = request.route_url('stats_delais', societe = societe)
|
||||||
|
|
||||||
|
datefin = date.today()
|
||||||
|
# debut = aujourd'hui - 11 mois
|
||||||
|
datedeb = datefin + relativedelta(months=-11)
|
||||||
|
|
||||||
|
societes = ['PE','ME','PL']
|
||||||
|
# si societe a été changé par le user
|
||||||
|
if 'societe' in request.params:
|
||||||
|
societe = request.params["societe"]
|
||||||
|
|
||||||
|
# lire les groupes
|
||||||
|
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
||||||
|
|
||||||
|
# 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
|
||||||
|
barChart_annee1.append(('Mois', 'AXA', {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} , 'Moy. Dumas'))
|
||||||
|
title1 = '1er CONTACT'
|
||||||
|
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.mois, round(item.moyenne), str(round(item.moyenne))+'j', tooltip, round(item.moy_ref))
|
||||||
|
barChart_annee1.append(d)
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Délais / mois",
|
||||||
|
'url': url,
|
||||||
|
'barChart_annee1': json.dumps(barChart_annee1),
|
||||||
|
'title1': title1,
|
||||||
|
'societes': societes,
|
||||||
|
'societe': societe,
|
||||||
|
'groupes': groupes,
|
||||||
|
'groupe': groupe,
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user