Files
dumas_gestion/mondumas/models/stats.py
2021-08-13 10:15:43 +02:00

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()