# -*- 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 * from dateutil.relativedelta 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, datedeb, datefin): query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm, 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', 1, 0)) AS AXA_nb, SUM(IF(groupe = 'MAIF', totalht, 0)) AS MAIF_ca, SUM(IF(groupe = 'MAIF', 1, 0)) AS MAIF_nb FROM bddevfac.facture WHERE societe=:societe and date >= :datedeb and date <= :datefin GROUP BY yymm;""" 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) 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 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")}) return results.fetchall() def get_ca_clients_12m(request, societe, datedeb, datefin): query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm, DATE_FORMAT(date, "%M") as mois, DATE_FORMAT(date, "%M %Y") as date, SUM(IF(typecli = 'A', totalht, 0)) AS A_ca, SUM(IF(typecli = 'A', 1, 0)) AS A_nb, SUM(IF(typecli = 'E', totalht, 0)) AS E_ca, SUM(IF(typecli = 'E', 1, 0)) AS E_nb, SUM(IF(typecli = 'G', totalht, 0)) AS G_ca, SUM(IF(typecli = 'G', 1, 0)) AS G_nb, SUM(IF(typecli = 'P', totalht, 0)) AS P_ca, SUM(IF(typecli = 'P', 1, 0)) AS P_nb, SUM(IF(typecli = 'R', totalht, 0)) AS R_ca, SUM(IF(typecli = 'R', 1, 0)) AS R_nb, SUM(IF(typecli = 'S', totalht, 0)) AS S_ca, SUM(IF(typecli = 'S', 1, 0)) AS S_nb FROM bddevfac.facture WHERE societe=:societe and date >= :datedeb and date <= :datefin GROUP BY yymm;""" 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) 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 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")}) return results.fetchall() def get_delais_pourcent(request, societe, groupe, datedeb): query = """SELECT SUM(IF (delai_contact <= 2, 1, 0)) AS delais_inf, SUM(IF (delai_contact > 2, 1, 0)) AS delais_sup FROM bddevfac.dem_devis WHERE societe = :societe AND GROUPE = :groupe AND date >= :datedeb;""" results = request.dbsession.execute(query, {'societe': societe, 'groupe': groupe, 'datedeb': datedeb.strftime("%Y-%m")}) return results.fetchall()