corrections infobox + stats

This commit is contained in:
2021-06-30 12:28:02 +02:00
parent dc595b8f5d
commit 4f52ff8afe
7 changed files with 139 additions and 126 deletions

View File

@@ -62,21 +62,18 @@ def get_ca_groupe_12m(request, societe, datedeb, datefin):
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y-%m"), 'datefin': datefin.strftime("%Y-%m")})
return results.fetchall()
def get_ca_groupe_3y(request, societe, datedeb):
date2 = datedeb + relativedelta(years=-1)
date3 = datedeb + relativedelta(years=-2)
def get_ca_groupe_3y(request, societe, year):
query = """SELECT groupe,
SUM(IF (date_format(date, '%Y') = :date_n-2, TOTALHT, 0)) as Annee1,
SUM(IF (date_format(date, '%Y') = :date_n-2, 1, 0)) as Count1,
SUM(IF (date_format(date, '%Y') = :date_n-1, TOTALHT, 0)) as Annee2,
SUM(IF (date_format(date, '%Y') = :date_n-1, 1, 0)) as Count2,
SUM(IF (date_format(date, '%Y') = :date_n, TOTALHT, 0)) as Annee3,
SUM(IF (date_format(date, '%Y') = :date_n, 1, 0)) as Count3
SUM(IF (year(date) = :year - 2, TOTALHT, 0)) as Annee1,
SUM(IF (year(date) = :year - 2, 1, 0)) as Count1,
SUM(IF (year(date) = :year - 1, TOTALHT, 0)) as Annee2,
SUM(IF (year(date) = :year - 1, 1, 0)) as Count2,
SUM(IF (year(date) = :year, TOTALHT, 0)) as Annee3,
SUM(IF (year(date) = :year, 1, 0)) as Count3
FROM bddevfac.facture
WHERE societe=:societe AND groupe <> 'X' 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")})
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
return results.fetchall()
def get_ca_clients_12m(request, societe, datedeb, datefin):
@@ -101,21 +98,18 @@ def get_ca_clients_12m(request, societe, datedeb, datefin):
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y-%m"), 'datefin': datefin.strftime("%Y-%m")})
return results.fetchall()
def get_ca_clients_3y(request, societe, datedeb):
date2 = datedeb + relativedelta(years=-1)
date3 = datedeb + relativedelta(years=-2)
def get_ca_clients_3y(request, societe, year):
query = """SELECT LIB,
SUM(IF (date_format(date, '%Y') = :date_n-2, TOTALHT, 0)) as Annee1,
SUM(IF (date_format(date, '%Y') = :date_n-2, 1, 0)) as Count1,
SUM(IF (date_format(date, '%Y') = :date_n-1, TOTALHT, 0)) as Annee2,
SUM(IF (date_format(date, '%Y') = :date_n-1, 1, 0)) as Count2,
SUM(IF (date_format(date, '%Y') = :date_n, TOTALHT, 0)) as Annee3,
SUM(IF (date_format(date, '%Y') = :date_n, 1, 0)) as Count3
SUM(IF (year(date) = :year - 2, TOTALHT, 0)) as Annee1,
SUM(IF (year(date) = :year - 2, 1, 0)) as Count1,
SUM(IF (year(date) = :year - 1, TOTALHT, 0)) as Annee2,
SUM(IF (year(date) = :year - 1, 1, 0)) as Count2,
SUM(IF (year(date) = :year, TOTALHT, 0)) as Annee3,
SUM(IF (year(date) = :year, 1, 0)) as Count3
FROM bddevfac.facture JOIN bddevfac.p_type ON bddevfac.facture.typecli = bddevfac.p_type.CODE
WHERE societe=:societe AND typecli <> 'I' GROUP BY typecli;"""
results = request.dbsession.execute(query, {'societe': societe, 'date_n': date3.strftime("%Y"), 'date_n-1': date2.strftime("%Y"), 'date_n': datedeb.strftime("%Y")})
WHERE societe=:societe AND year(date) >= :year - 2 AND typecli <> 'I' GROUP BY typecli;"""
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
return results.fetchall()
def get_delais_pourcent(request, societe, groupe, datedeb):

View File

@@ -177,19 +177,19 @@
color: black;
}
.bg-mar {
background-color: #800000 !important;
.bg-compta {
background-color: SlateBlue !important;
color: white;
}
.bg-choco {
background-color: #D2691E !important;
.bg-gest {
background-color: Coral !important;
color: white;
}
.bg-tan {
background-color: #D2B48C !important;
color: black;
.bg-prod {
background-color: SkyBlue !important;
color: white;
}
.new-page {

View File

@@ -2,60 +2,11 @@
<div metal:fill-slot="content">
<div class="container-fluid">
<br />
<div class="row">
<div class="col-sm-3">
<div class="info-box bg-tan">
<span class="info-box-icon"><i class="glyphicon glyphicon-folder-open"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEM. DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_dd_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_dd_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_dd_restants.nb_PL}</span></span>
</div>
</div>
</div>
<div class="col-sm-3">
<div class="info-box bg-tan">
<span class="info-box-icon"><i class="glyphicon glyphicon-file"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_de_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_de_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_de_restants.nb_PL}</span></span>
</div>
</div>
</div>
<div class="col-sm-3">
<div class="info-box bg-tan">
<span class="info-box-icon"><i class="glyphicon glyphicon-inbox"></i></span>
<div class="info-box-content">
<span class="info-box-number">FACTURES</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_fa_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_fa_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_fa_restants.nb_PL}</span></span>
</div>
</div>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/dossier_lookup" tal:condition="access > 6">
<div class="info-box bg-tan">
<span class="info-box-icon"><i class="glyphicon glyphicon-search"></i></span>
<div class="info-box-content">
<span class="info-box-number">RECHERCHE</span>
</div>
</div>
</a>
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<a href="${request.application_url}/agenda/today">
<div class="info-box bg-tan">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-number">AGENDA</span>
@@ -67,7 +18,7 @@
</div>
<div class="col-sm-3">
<a href="${request.application_url}/rdf_list">
<div class="info-box bg-tan">
<div class="info-box bg-green">
<span class="info-box-icon"><i class="glyphicon glyphicon-tint"></i></span>
<div class="info-box-content">
<span class="info-box-number">RDF</span>
@@ -77,9 +28,9 @@
</div>
</a>
</div>
<div class="col-sm-3" tal:condition="logged_in=='CAO'">
<div class="col-sm-3">
<a href="${request.application_url}/devis_list">
<div class="info-box bg-mar">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-text-height"></i></span>
<div class="info-box-content">
<span class="info-box-number">E-DEVIS</span>
@@ -87,13 +38,23 @@
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/dossier_lookup" tal:condition="access > 6">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-search"></i></span>
<div class="info-box-content">
<span class="info-box-number">RECHERCHE</span>
</div>
</div>
</a>
</div>
</div>
<br>
<div class="row" tal:condition="access >= 5">
<div class="col-sm-3">
<a href="${request.application_url}/planning/today">
<div class="info-box bg-choco">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-number">PLANNING</span>
@@ -101,19 +62,9 @@
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/upload_om" tal:condition="access > 0">
<div class="info-box bg-choco">
<span class="info-box-icon"><i class="glyphicon glyphicon-download-alt"></i></span>
<div class="info-box-content">
<span class="info-box-number">PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/demandes" tal:condition="access > 0">
<div class="info-box bg-choco">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-envelope"></i></span>
<div class="info-box-content">
<span class="info-box-number">EMAILS</span>
@@ -123,9 +74,63 @@
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/upload_om" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-download-alt"></i></span>
<div class="info-box-content">
<span class="info-box-number">PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-folder-open"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEM. DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_dd_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_dd_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_dd_restants.nb_PL}</span></span>
</div>
</div>
</div>
<div class="col-sm-3">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-file"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_de_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_de_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_de_restants.nb_PL}</span></span>
</div>
</div>
</div>
<div class="col-sm-3">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-inbox"></i></span>
<div class="info-box-content">
<span class="info-box-number">FACTURES</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_fa_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_fa_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_fa_restants.nb_PL}</span></span>
</div>
</div>
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<a href="${request.application_url}/stats" tal:condition="access > 6">
<div class="info-box bg-mar">
<div class="info-box bg-compta">
<span class="info-box-icon"><i class="glyphicon glyphicon-stats"></i></span>
<div class="info-box-content">
<span class="info-box-number">STATS</span>

View File

@@ -17,11 +17,13 @@
</form>
</div>
<h2>Evolution du CA sur les 12 derniers mois</h2>
<div class="row">
<!-- Histogramme CA sur 12 mois par clients -->
<div id="chart_ca_12m" style="width: 100%; height: 500px;"></div>
</div>
<h2>Evolution du CA sur les 3 dernières années</h2>
<div class="row">
<!-- camembert 1 -->
<div class="col-sm-4">

View File

@@ -17,11 +17,13 @@
</form>
</div>
<h2>Evolution du CA sur les 12 derniers mois</h2>
<div class="row">
<!-- Histogramme CA sur 12 mois par groupe -->
<div id="chart_ca_12m" style="width: 100%; height: 500px;"></div>
</div>
<h2>Evolution du CA sur les 3 dernières années</h2>
<div class="row">
<!-- camembert 1 -->
<div class="col-sm-4">

View File

@@ -22,12 +22,12 @@
<div class="col-sm-3">
<a href="${request.application_url}/ca_groupes/PE" tal:condition="access > 0">
<span class="glyphicon glyphicon-equalizer logo-warning"></span>
<h4>CA GROUPES</h4></a>
<h4>CA / GROUPES</h4></a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/ca_clients/PE" tal:condition="access > 0">
<span class="glyphicon glyphicon-equalizer logo-warning"></span>
<h4>CA CLIENTS</h4></a>
<h4>CA / TYPE CLIENTS</h4></a>
</div>
</div>
</div>

View File

@@ -177,21 +177,20 @@ def ca_groupes(request):
chart_ca_12m = []
# titre des colonnes
chart_ca_12m.append(('Mois', 'AXA', { 'type':'string','role': 'tooltip'}, 'MAIF', { 'type':'string','role': 'tooltip'}))
title = 'CA / MOIS'
title = 'CA sur 12 mois'
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))
tooltipMAIF = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.MAIF_ca) + '\nDossiers: '+str(round(item.MAIF_nb))
tooltipAXA = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.AXA_ca) + '\nDossiers: '+str(round(item.AXA_nb))
# ('+str(item.population)+')/n'
d = (item.mois, float(item.AXA_ca), tooltipAXA, float(item.MAIF_ca), tooltipMAIF)
d = (item.mois[:3], float(item.AXA_ca), tooltipAXA, float(item.MAIF_ca), tooltipMAIF)
chart_ca_12m.append(d)
# debut = aujourd'hui - 11 mois
datedeb = date.today()
datedeb.replace(month=1,day=1)
thisyear = date.today().year
# lire les CA par mois
items = get_ca_groupe_3y(request, societe, datedeb)
items = get_ca_groupe_3y(request, societe, thisyear)
chart_ca_3y_1 = []
chart_ca_3y_2 = []
chart_ca_3y_3 = []
@@ -199,9 +198,9 @@ def ca_groupes(request):
chart_ca_3y_1.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'}))
chart_ca_3y_2.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'}))
chart_ca_3y_3.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'}))
title1 = 'CA ' + (datedeb + relativedelta(years=-2)).strftime("%Y")
title2 = 'CA ' + (datedeb + relativedelta(years=-1)).strftime("%Y")
title3 = 'CA ' + datedeb.strftime("%Y")
title1 = 'CA ' + str(thisyear - 2)
title2 = 'CA ' + str(thisyear - 1)
title3 = 'CA ' + str(thisyear)
for item in items:
# construire la liste pour donut cible
tooltip_y1 = item.groupe + ' \nCA: '+str(item.Annee1) + '\nDossiers: '+str(round(item.Count1))
@@ -253,26 +252,25 @@ def ca_clients(request):
chart_ca_12m.append(('Mois', 'ASSURANCES', { 'type':'string','role': 'tooltip'}, 'EXPERTS', { 'type':'string','role': 'tooltip'},
'GROUPEMENT', { 'type':'string','role': 'tooltip'}, 'PARTICULIER', { 'type':'string','role': 'tooltip'},
'REGIES', { 'type':'string','role': 'tooltip'}, 'SOCIETE', { 'type':'string','role': 'tooltip'}))
title = 'CA / MOIS'
title = 'CA sur 12 mois'
for item in items:
# construire la liste pour donut cible
tooltipA = item.date + ' \nCA: '+str(item.A_ca) + '\nDossiers: '+str(round(item.A_nb))
tooltipE = item.date + ' \nCA: '+str(item.E_ca) + '\nDossiers: '+str(round(item.E_nb))
tooltipG = item.date + ' \nCA: '+str(item.G_ca) + '\nDossiers: '+str(round(item.G_nb))
tooltipP = item.date + ' \nCA: '+str(item.P_ca) + '\nDossiers: '+str(round(item.P_nb))
tooltipR = item.date + ' \nCA: '+str(item.R_ca) + '\nDossiers: '+str(round(item.R_nb))
tooltipS = item.date + ' \nCA: '+str(item.S_ca) + '\nDossiers: '+str(round(item.S_nb))
tooltipA = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.A_ca) + '\nDossiers: '+str(round(item.A_nb))
tooltipE = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.E_ca) + '\nDossiers: '+str(round(item.E_nb))
tooltipG = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.G_ca) + '\nDossiers: '+str(round(item.G_nb))
tooltipP = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.P_ca) + '\nDossiers: '+str(round(item.P_nb))
tooltipR = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.R_ca) + '\nDossiers: '+str(round(item.R_nb))
tooltipS = item.date[:3] + ' ' + item.date[-4:] + ' \nCA: '+str(item.S_ca) + '\nDossiers: '+str(round(item.S_nb))
# ('+str(item.population)+')/n'
d = (item.mois, float(item.A_ca), tooltipA, float(item.E_ca), tooltipE, float(item.G_ca), tooltipG,
d = (item.mois[:3], float(item.A_ca), tooltipA, float(item.E_ca), tooltipE, float(item.G_ca), tooltipG,
float(item.P_ca), tooltipP, float(item.R_ca), tooltipR, float(item.S_ca), tooltipS)
chart_ca_12m.append(d)
# debut = aujourd'hui - 11 mois
datedeb = date.today()
datedeb.replace(month=1,day=1)
thisyear = date.today().year
# lire les CA par mois
items = get_ca_clients_3y(request, societe, datedeb)
items = get_ca_clients_3y(request, societe, thisyear)
chart_ca_3y_1 = []
chart_ca_3y_2 = []
chart_ca_3y_3 = []
@@ -280,24 +278,36 @@ def ca_clients(request):
chart_ca_3y_1.append(('Clients', 'CA', { 'type':'string','role': 'tooltip'}))
chart_ca_3y_2.append(('Clients', 'CA', { 'type':'string','role': 'tooltip'}))
chart_ca_3y_3.append(('Clients', 'CA', { 'type':'string','role': 'tooltip'}))
title1 = 'CA ' + (datedeb + relativedelta(years=-2)).strftime("%Y")
title2 = 'CA ' + (datedeb + relativedelta(years=-1)).strftime("%Y")
title3 = 'CA ' + datedeb.strftime("%Y")
title1 = 'CA ' + str(thisyear - 2)
title2 = 'CA ' + str(thisyear - 1)
title3 = 'CA ' + str(thisyear)
for item in items:
# construire la liste pour donut cible
tooltip_y1 = item.LIB + ' \nCA: '+str(item.Annee1) + '\nDossiers: '+str(round(item.Count1))
tooltip_y2 = item.LIB + ' \nCA: '+str(item.Annee2) + '\nDossiers: '+str(round(item.Count1))
tooltip_y3 = item.LIB + ' \nCA: '+str(item.Annee3) + '\nDossiers: '+str(round(item.Count1))
# ('+str(item.population)+')/n'
d1 = (item.LIB, float(item.Annee1), tooltip_y1)
if item.Annee1 > 0:
ca = float(item.Annee1)
else:
ca = 0
d1 = (item.LIB, ca, tooltip_y1)
chart_ca_3y_1.append(d1)
d2 = (item.LIB, float(item.Annee2), tooltip_y2)
if item.Annee2 > 0:
ca = float(item.Annee2)
else:
ca = 0
d2 = (item.LIB, ca, tooltip_y2)
chart_ca_3y_2.append(d2)
d3 = (item.LIB, float(item.Annee3), tooltip_y3)
if item.Annee3 > 0:
ca = float(item.Annee3)
else:
ca = 0
d3 = (item.LIB, ca, tooltip_y3)
chart_ca_3y_3.append(d3)
return {
'page_title': "CA par clients",
'page_title': "CA par types de clients",
'url': url,
'chart_ca_12m': json.dumps(chart_ca_12m),
'chart_ca_3y_1': json.dumps(chart_ca_3y_1),