173 lines
8.0 KiB
Python
173 lines
8.0 KiB
Python
# -*- 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,
|
|
SUM(IF(groupe = 'DOMUS', totalht, 0)) AS DOMUS_ca,
|
|
SUM(IF(groupe = 'DOMUS', 1, 0)) AS DOMUS_nb,
|
|
SUM(IF(groupe = 'GMF', totalht, 0)) AS GMF_ca,
|
|
SUM(IF(groupe = 'GMF', 1, 0)) AS GMF_nb,
|
|
SUM(IF(groupe = 'MACIF', totalht, 0)) AS MACIF_ca,
|
|
SUM(IF(groupe = 'MACIF', 1, 0)) AS MACIF_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, year):
|
|
|
|
query = """SELECT groupe,
|
|
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, 'year': year})
|
|
return results.fetchall()
|
|
|
|
def get_ca_groupe_3y_with_others(request, societe, year):
|
|
|
|
query = """SELECT groupe,
|
|
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 year(date) >= :year - 2 AND typecli <> 'I' GROUP BY groupe;"""
|
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
|
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, year):
|
|
|
|
query = """SELECT LIB,
|
|
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 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):
|
|
|
|
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()
|
|
|
|
def get_nb_devis_fact(request, societe, year):
|
|
|
|
query = """SELECT
|
|
SUM(IF (NOFACT > 0 AND year(date) = :year - 2, 1, 0)) AS devis_fact_y1,
|
|
SUM(IF (NOFACT <= 0 AND year(date) = :year - 2, 1, 0)) AS devis_non_fact_y1,
|
|
SUM(IF (NOFACT > 0 AND year(date) = :year - 1, 1, 0)) AS devis_fact_y2,
|
|
SUM(IF (NOFACT <= 0 AND year(date) = :year - 1, 1, 0)) AS devis_non_fact_y2,
|
|
SUM(IF (NOFACT > 0 AND year(date) = :year, 1, 0)) AS devis_fact_y3,
|
|
SUM(IF (NOFACT <= 0 AND year(date) = :year, 1, 0)) AS devis_non_fact_y3
|
|
FROM bddevfac.devis
|
|
WHERE societe = :societe;"""
|
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
|
return results.fetchall()
|
|
|
|
def get_nb_fact_with_devis(request, societe, year):
|
|
|
|
query = """SELECT
|
|
SUM(IF (NODEVIS > 0 AND year(date) = :year - 2, 1, 0)) AS fact_w_devis_y1,
|
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year - 2, 1, 0)) AS fact_wo_devis_y1,
|
|
SUM(IF (NODEVIS > 0 AND year(date) = :year - 1, 1, 0)) AS fact_w_devis_y2,
|
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year - 1, 1, 0)) AS fact_wo_devis_y2,
|
|
SUM(IF (NODEVIS > 0 AND year(date) = :year, 1, 0)) AS fact_w_devis_y3,
|
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year, 1, 0)) AS fact_wo_devis_y3
|
|
FROM bddevfac.facture
|
|
WHERE societe = :societe;"""
|
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
|
return results.fetchall()
|
|
|