# -*- 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', renderer='../templates/stats/ca_groupes.pt', permission='view') def ca_groupes(request): societe = request.matchdict['societe'] url = request.route_url('ca_groupes', societe = societe) datefin = date.today() datefin.replace(day=1) # 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 CA par mois items = get_ca_groupe_12m(request, societe, datedeb, datefin) print(datedeb) chart_ca_12m = [] # titre des colonnes chart_ca_12m.append(('Mois', 'MAIF', { 'type':'string','role': 'tooltip'}, 'MACIF', { 'type':'string','role': 'tooltip'}, 'GMF', { 'type':'string','role': 'tooltip'},'DOMUS', { 'type':'string','role': 'tooltip'}, 'AXA', { 'type':'string','role': 'tooltip'})) title = 'CA sur 12 mois' for item in items: date_aff = item.date[:3] + ' ' + item.date[-4:] # construire la liste pour donut cible tooltipMAIF = 'MAIF - ' + date_aff + ' \nCA: '+str(item.MAIF_ca) + ' €\nDossiers: '+str(round(item.MAIF_nb)) tooltipAXA = "AXA - " + date_aff + ' \nCA: '+str(item.AXA_ca) + ' €\nDossiers: '+str(round(item.AXA_nb)) tooltipDOMUS = "DOMUS - " + date_aff + ' \nCA: '+str(item.DOMUS_ca) + ' €\nDossiers: '+str(round(item.DOMUS_nb)) tooltipGMF = "GMF - " + date_aff + ' \nCA: '+str(item.GMF_ca) + ' €\nDossiers: '+str(round(item.GMF_nb)) tooltipMACIF = "MACIF - " + date_aff + ' \nCA: '+str(item.MACIF_ca) + ' €\nDossiers: '+str(round(item.MACIF_nb)) # ('+str(item.population)+')/n' d = (item.mois[:3], float(item.MAIF_ca), tooltipMAIF, float(item.MACIF_ca), tooltipMACIF, float(item.GMF_ca), tooltipGMF, float(item.DOMUS_ca), tooltipDOMUS, float(item.AXA_ca), tooltipAXA) chart_ca_12m.append(d) # debut = aujourd'hui - 11 mois thisyear = date.today().year # lire les CA par mois items = get_ca_groupe_3y(request, societe, thisyear) chart_ca_3y_1 = [] chart_ca_3y_2 = [] chart_ca_3y_3 = [] # titre des colonnes 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'})) for item in items: # construire la liste pour donut cible tooltip_y1 = item.groupe + ' \nCA: '+str(item.Annee1) + ' €\nDossiers: '+str(round(item.Count1)) tooltip_y2 = item.groupe + ' \nCA: '+str(item.Annee2) + ' €\nDossiers: '+str(round(item.Count1)) tooltip_y3 = item.groupe + ' \nCA: '+str(item.Annee3) + ' €\nDossiers: '+str(round(item.Count1)) # ('+str(item.population)+')/n' d1 = (item.groupe, float(item.Annee1), tooltip_y1) chart_ca_3y_1.append(d1) d2 = (item.groupe, float(item.Annee2), tooltip_y2) chart_ca_3y_2.append(d2) d3 = (item.groupe, float(item.Annee3), tooltip_y3) chart_ca_3y_3.append(d3) # lire les CA par mois items = get_ca_groupe_3y_with_others(request, societe, thisyear) chart_ca_3y_1_x = [] chart_ca_3y_2_x = [] chart_ca_3y_3_x = [] # titre des colonnes chart_ca_3y_1_x.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'})) chart_ca_3y_2_x.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'})) chart_ca_3y_3_x.append(('Groupe', 'CA', { 'type':'string','role': 'tooltip'})) annee1 = str(thisyear - 2) annee2 = str(thisyear - 1) annee3 = 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)) tooltip_y2 = item.groupe + ' \nCA: '+str(item.Annee2) + ' €\nDossiers: '+str(round(item.Count1)) tooltip_y3 = item.groupe + ' \nCA: '+str(item.Annee3) + ' €\nDossiers: '+str(round(item.Count1)) # ('+str(item.population)+')/n' d1_x = (item.groupe, float(item.Annee1), tooltip_y1) chart_ca_3y_1_x.append(d1_x) d2_x = (item.groupe, float(item.Annee2), tooltip_y2) chart_ca_3y_2_x.append(d2_x) d3_x = (item.groupe, float(item.Annee3), tooltip_y3) chart_ca_3y_3_x.append(d3_x) return { 'page_title': "CA par groupe", 'url': url, '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), 'chart_ca_3y_1_x': json.dumps(chart_ca_3y_1_x), 'chart_ca_3y_2_x': json.dumps(chart_ca_3y_2_x), 'chart_ca_3y_3_x': json.dumps(chart_ca_3y_3_x), 'title': title, 'annee1': annee1, 'annee2': annee2, 'annee3': annee3, 'societes': societes, 'societe': societe, } @view_config(route_name='ca_clients', renderer='../templates/stats/ca_clients.pt', permission='view') def ca_clients(request): societe = request.matchdict['societe'] url = request.route_url('ca_clients', 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 CA par mois items = get_ca_clients_12m(request, societe, datedeb, datefin) print(datedeb) chart_ca_12m = [] # titre des colonnes chart_ca_12m.append(('Mois', 'SOCIETE', { 'type':'string','role': 'tooltip'}, 'REGIES', { 'type':'string','role': 'tooltip'}, 'PARTICULIER', { 'type':'string','role': 'tooltip'}, 'GROUPEMENT', { 'type':'string','role': 'tooltip'}, 'EXPERTS', { 'type':'string','role': 'tooltip'}, 'ASSURANCES', { 'type':'string','role': 'tooltip'})) title = 'CA sur 12 mois' for item in items: date_aff = item.date[:3] + ' ' + item.date[-4:] # construire la liste pour donut cible tooltipA = date_aff + ' \nCA: '+str(item.A_ca) + ' €\nDossiers: '+str(round(item.A_nb)) tooltipE = date_aff + ' \nCA: '+str(item.E_ca) + ' €\nDossiers: '+str(round(item.E_nb)) tooltipG = date_aff + ' \nCA: '+str(item.G_ca) + ' €\nDossiers: '+str(round(item.G_nb)) tooltipP = date_aff + ' \nCA: '+str(item.P_ca) + ' €\nDossiers: '+str(round(item.P_nb)) tooltipR = date_aff + ' \nCA: '+str(item.R_ca) + ' €\nDossiers: '+str(round(item.R_nb)) tooltipS = date_aff + ' \nCA: '+str(item.S_ca) + ' €\nDossiers: '+str(round(item.S_nb)) # ('+str(item.population)+')/n' d = (item.mois[:3], float(item.S_ca), tooltipS, float(item.R_ca), tooltipR, float(item.P_ca), tooltipP, float(item.G_ca), tooltipG, float(item.E_ca), tooltipE, float(item.A_ca), tooltipA) chart_ca_12m.append(d) # debut = aujourd'hui - 11 mois thisyear = date.today().year # lire les CA par mois items = get_ca_clients_3y(request, societe, thisyear) chart_ca_3y_1 = [] chart_ca_3y_2 = [] chart_ca_3y_3 = [] # titre des colonnes 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 ' + 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' if item.Annee1 > 0: ca = float(item.Annee1) else: ca = 0 d1 = (item.LIB, ca, tooltip_y1) chart_ca_3y_1.append(d1) if item.Annee2 > 0: ca = float(item.Annee2) else: ca = 0 d2 = (item.LIB, ca, tooltip_y2) chart_ca_3y_2.append(d2) 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 types de clients", 'url': url, '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, 'title2': title2, 'title3': title3, 'societes': societes, 'societe': societe, } @view_config(route_name='delais_pourcentage', renderer='../templates/stats/delais_pourcentage.pt', permission='view') def delais_pourcentage(request): societe = request.matchdict['societe'] url = request.route_url('delais_pourcentage', 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 CA par mois items = get_delais_pourcent(request, societe, groupe, datedeb) chart_delais_p = [] # titre des colonnes chart_delais_p.append(('Catégorie', 'Delais')) title = 'POURCENTAGE DELAIS' for item in items: # construire la liste pour donut cible #tooltipA = item.date + ' \nCA: '+str(item.A_ca) + ' €\nDossiers: '+str(round(item.A_nb)) # ('+str(item.population)+')/n' d = ('1er contact inférieur à 2j', round(item.delais_inf)) chart_delais_p.append(d) d = ('1er contact supérieur à 2j', round(item.delais_sup)) chart_delais_p.append(d) return { 'page_title': "Pourcentage de délais inférieurs à 2 jours", 'url': url, 'chart_delais_p': json.dumps(chart_delais_p), 'title': title, 'societes': societes, 'societe': societe, 'groupes': groupes, 'groupe': groupe, } @view_config(route_name='pourcentage_devis', renderer='../templates/stats/pourcentage_devis.pt', permission='view') def pourcentage_devis(request): societe = request.matchdict['societe'] url = request.route_url('delais_pourcentage', societe = societe) # année aujourd'hui thisyear = date.today().year societes = ['PE','ME','PL'] # si societe a été changé par le user if 'societe' in request.params: societe = request.params["societe"] # lire le nb de devis facturés items = get_nb_devis_fact(request, societe, thisyear) chart_devis_y1 = [] chart_devis_y2 = [] chart_devis_y3 = [] # titre des colonnes chart_devis_y1.append(('Catégorie', 'Nb Devis facturés')) chart_devis_y2.append(('Catégorie', 'Nb Devis facturés')) chart_devis_y3.append(('Catégorie', 'Nb Devis facturés')) title_devis1 = 'NB DEVIS ' + str(thisyear - 2) title_devis2 = 'NB DEVIS ' + str(thisyear - 1) title_devis3 = 'NB DEVIS ' + str(thisyear) for item in items: d1 = ('Nb de devis facturés', float(item.devis_fact_y1)) chart_devis_y1.append(d1) d1 = ('Nb de devis non facturés', float(item.devis_non_fact_y1)) chart_devis_y1.append(d1) d2 = ('Nb de devis facturés', float(item.devis_fact_y2)) chart_devis_y2.append(d2) d2 = ('Nb de devis non facturés', float(item.devis_non_fact_y2)) chart_devis_y2.append(d2) d3 = ('Nb de devis facturés', float(item.devis_fact_y3)) chart_devis_y3.append(d3) d3 = ('Nb de devis non facturés', float(item.devis_non_fact_y3)) chart_devis_y3.append(d3) # lire le nb de devis facturés items = get_nb_fact_with_devis(request, societe, thisyear) chart_fact_y1 = [] chart_fact_y2 = [] chart_fact_y3 = [] # titre des colonnes chart_fact_y1.append(('Catégorie', 'Nb Factures avec devis')) chart_fact_y2.append(('Catégorie', 'Nb Factures avec devis')) chart_fact_y3.append(('Catégorie', 'Nb Factures avec devis')) title_fact1 = 'NB FACTURES ' + str(thisyear - 2) title_fact2 = 'NB FACTURES ' + str(thisyear - 1) title_fact3 = 'NB FACTURES ' + str(thisyear) for item in items: d1 = ("Nb de factures avec devis", float(item.fact_w_devis_y1)) chart_fact_y1.append(d1) d1 = ("Nb de factures sans devis", float(item.fact_wo_devis_y1)) chart_fact_y1.append(d1) d2 = ("Nb de factures avec devis", float(item.fact_w_devis_y2)) chart_fact_y2.append(d2) d2 = ("Nb de factures sans devis", float(item.fact_wo_devis_y2)) chart_fact_y2.append(d2) d3 = ("Nb de factures avec devis", float(item.fact_w_devis_y3)) chart_fact_y3.append(d3) d3 = ("Nb de factures sans devis", float(item.fact_wo_devis_y3)) chart_fact_y3.append(d3) return { 'page_title': "Nombre de devis facturés et de factures avec devis", 'url': url, 'chart_devis_y1': json.dumps(chart_devis_y1), 'chart_devis_y2': json.dumps(chart_devis_y2), 'chart_devis_y3': json.dumps(chart_devis_y3), 'chart_fact_y1': json.dumps(chart_fact_y1), 'chart_fact_y2': json.dumps(chart_fact_y2), 'chart_fact_y3': json.dumps(chart_fact_y3), 'title_devis1': title_devis1, 'title_devis2': title_devis2, 'title_devis3': title_devis3, 'title_fact1': title_fact1, 'title_fact2': title_fact2, 'title_fact3': title_fact3, 'societes': societes, 'societe': societe, }