Files
aem_moniteurs/aem_gestion/models/parametres.py
2023-06-22 10:34:18 +02:00

571 lines
22 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
import datetime
import transaction
from .default import (
execute_query,
)
def get_faqs(request, faq_id):
"""Lire les FAQ"""
if faq_id == 0:
query = "SELECT * FROM p_faq ORDER BY theme, intitule;"
results = request.dbsession.execute(query).fetchall()
elif faq_id == -1:
query = "SELECT * FROM p_faq where theme != 'INTERNE' ORDER BY theme, intitule;"
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM p_faq where faq_id = :faq_id;"
results = request.dbsession.execute(query, {'faq_id': faq_id}).first()
return results
def update_faq(request, faq_id, intitule, texte, theme):
"""créér ou modifier la FAQ"""
if faq_id == '0':
query = "INSERT INTO p_faq (intitule, texte, theme) VALUES(:intitule, :texte, :theme);"
execute_query(request, query, {'intitule': intitule, 'texte': texte, 'theme': theme})
else:
query = "update p_faq set intitule=:intitule, texte=:texte, theme=:theme where faq_id = :faq_id;"
execute_query(request, query, {'faq_id': faq_id, 'intitule': intitule, 'texte': texte, 'theme': theme})
def delete_faq(request, faq_id):
"""supprimer la FAQ"""
query = "delete from p_faq where faq_id = :faq_id;"
execute_query(request, query, {'faq_id': faq_id})
def get_last_payments(request, ):
"""Lire les 50 derniers paiements par carte bancaire"""
query = """SELECT tickets_cb.*, eleves.nom FROM tickets_cb
INNER JOIN eleves ON eleves.cd_cli = tickets_cb.cd_cli ORDER BY date DESC LIMIT 10;"""
results = request.dbsession.execute(query, {})
return results.fetchall()
def get_eleves_by_last_connection(request, ):
# lire les donnees de l'eleve
query = """SELECT dern_cnx_le,CD_CLI,CIVILITE,NOM,PERMIS_DEMANDE,FORMULE,STATUT,device_used
FROM eleves ORDER BY dern_cnx_le DESC LIMIT 10;"""
results = request.dbsession.execute(query, )
return results.fetchall()
def update_user(request, cd_uti, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'nom':
new_values['nom'] = new_values['nom'].title()
if param == 'cd_mon':
new_values['cd_mon'] = new_values['cd_mon'].upper()
if param == 'secu':
' secu = le 1er caractère'
new_values['secu'] = new_values['secu'][0]
if param == 'agence':
' agence = le 1er caractère'
new_values['agence'] = new_values['agence'][0]
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if cd_uti == '0':
query = "INSERT INTO p_users SET %s" % s
else:
new_values['cd_uti'] = cd_uti
query = "UPDATE p_users SET %s WHERE cd_uti = :cd_uti;" % s
execute_query(request, query, new_values)
def update_moniteur(request, cd_mon, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'NOM':
new_values['NOM'] = new_values['NOM'].upper()
if param == 'PLANNING':
new_values['PLANNING'] = new_values['PLANNING'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if cd_mon == '0':
query = "INSERT INTO moniteurs SET %s" % s
else:
new_values['CD_MON'] = cd_mon.upper()
query = "UPDATE moniteurs SET %s WHERE CD_MON = :CD_MON;" % s
execute_query(request, query, new_values)
def update_moniteur_aff(request,no_ligne, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_ligne == '0':
query = "INSERT INTO moniteurs_aff SET %s" % s
else:
query = "UPDATE moniteurs_aff SET %s WHERE no_ligne = :no_ligne;" % s
execute_query(request, query, new_values)
def delete_user(request, cd_uti):
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
execute_query(request, query, {'cd_uti': cd_uti})
def delete_moniteur(request, cd_mon):
query = "DELETE FROM moniteurs WHERE cd_mon = :cd_mon ;"
execute_query(request, query, {'cd_mon': cd_mon})
def delete_moniteur_aff(request, no_ligne):
query = "DELETE FROM moniteurs_aff WHERE no_ligne = :no_ligne ;"
execute_query(request, query, {'no_ligne': no_ligne})
def import_tables(request, table, items, code):
if table == 'PAYS':
# Vider la table
query = "TRUNCATE TABLE ws_pays;"
execute_query(request, query, {})
for pays in items:
query = "INSERT INTO ws_pays (pays) VALUES (:pays);"
execute_query(request, query, {'pays': pays})
elif table == 'COMMUNES':
for commune in items:
query = "REPLACE INTO ws_communes (dept, commune) VALUES (:code, :commune);"
execute_query(request, query, {'code': code, 'commune': commune})
else:
# Vider la table
query = "TRUNCATE TABLE ws_departements;"
execute_query(request, query, {})
for item in items:
query = "INSERT INTO ws_departements (code,nom) VALUES (:code, :nom);"
execute_query(request, query, {'code': item.code, 'nom': item.nom})
def get_last_emailing(request, table):
"""Lire les 200 derniers envois d'emails"""
if table == 'RESERVATIONS':
query = "SELECT r.*, e.email FROM email_resa r INNER JOIN eleves e ON r.cd_cli = e.cd_cli GROUP BY r.cd_cli, date(r.cree_le) ORDER BY no_id DESC LIMIT 400;"
else:
query = "SELECT r.*, e.email FROM email_rappels r INNER JOIN eleves e ON r.cd_cli = e.cd_cli ORDER BY no_id DESC LIMIT 400;"
results = request.dbsession.execute(query, {})
return results.fetchall()
def get_last_7days_cnx(request, ):
# lire les dernières connexions
query = """SELECT date(dern_cnx_le) as date, count(*) as nb FROM eleves WHERE dern_cnx_le BETWEEN NOW() - INTERVAL 10 DAY AND NOW()
GROUP BY date(dern_cnx_le) ORDER BY dern_cnx_le"""
results = request.dbsession.execute(query, )
return results.fetchall()
def get_last_7days_paymnt(request, ):
# lire les dernières paiements
query = """SELECT date(date) as date, count(*) as nb FROM tickets_cb WHERE date BETWEEN NOW() - INTERVAL 10 DAY AND NOW()
GROUP BY date(date) ORDER BY date;"""
results = request.dbsession.execute(query, )
return results.fetchall()
def get_log_nuit(request, ):
# lire le log de nuit
query = """SELECT * FROM t_log_nuit;"""
results = request.dbsession.execute(query, )
return results.fetchall()
def get_charts_data(request, chart_id, group1):
# lire les data
query = "SELECT * FROM charts_data WHERE id=:chart_id AND group1=:group1;"""
results = request.dbsession.execute(query, {'chart_id': chart_id, 'group1': group1})
return results.fetchall()
def get_charts_exam1(request, agence):
# lire les examens sur 12 mois glissants par agence
today = datetime.date.today()
query = """SELECT * FROM (
SELECT * FROM bd_aem.charts_data where id='examens01' and group1 < :mois and group2=:agence order by group1 desc limit 12) t
ORDER BY group1;"""
results = request.dbsession.execute(query, {'mois': today.strftime("%Y%m"), 'agence': agence})
return results.fetchall()
def get_charts_exam2(request, datedeb, datefin, cd_mon):
# lire les examens sur 12 mois glissants par moniteur
query = """SELECT * FROM bd_aem.charts_data
WHERE id='exams_mon' AND group1 >= :datedeb AND group1 < :datefin AND group2=:cd_mon order by group1;"""
results = request.dbsession.execute(query, {'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m"), 'cd_mon': cd_mon})
return results.fetchall()
def get_charts_exam2_mon(request, datedeb, datefin):
query = """SELECT group2, group2_lib FROM bd_aem.charts_data
WHERE id='exams_mon' AND group1 >= :datedeb AND group1 < :datefin GROUP BY group2 ORDER BY group2_lib;"""
results = request.dbsession.execute(query, {'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
return results.fetchall()
def get_inscriptions(request, table):
if table == 'PAP':
""" Lire toutes les commandes PAP encours """
query = """SELECT l.cree_le, l.cd_cli, l.nom, s.debut, e.credit-e.debit as solde, l.valide, l.cd_uti,l.groupe,l.fin_reservation
FROM bd_aem.pla_stage_lignes l
INNER JOIN eleves e on e.cd_cli = l.cd_cli
INNER JOIN pla_stage s on s.type = l.type AND s.semaine = l.semaine AND s.groupe = l.groupe
where l.type='C' and s.fin >= CURRENT_DATE()
order by s.debut, l.nom desc;"""
elif table == 'PEM125':
query = """SELECT l.cree_le, l.cd_cli, l.nom, s.debut, e.credit-e.debit as solde, l.valide, l.cd_uti,l.groupe,l.fin_reservation
FROM bd_aem.pla_stage_lignes l
INNER JOIN eleves e on e.cd_cli = l.cd_cli
INNER JOIN pla_stage s on s.type = l.type AND s.semaine = l.semaine AND s.groupe = l.groupe
where l.type='M' and s.fin >= CURRENT_DATE() and s.libelle like '%pem%'
order by s.debut, l.nom desc;"""
elif table == 'PASA2':
query = """SELECT l.cree_le, l.cd_cli, l.nom, s.debut, e.credit-e.debit as solde, l.valide, l.cd_uti,l.groupe,l.fin_reservation
FROM bd_aem.pla_stage_lignes l
INNER JOIN eleves e on e.cd_cli = l.cd_cli
INNER JOIN pla_stage s on s.type = l.type AND s.semaine = l.semaine AND s.groupe = l.groupe
where l.type='M' and s.fin >= CURRENT_DATE() and s.libelle like 'pas%'
order by s.debut, l.nom desc;"""
else:
# stage B96
query = """SELECT l.cree_le, l.cd_cli, l.nom, s.debut, e.credit-e.debit as solde, l.valide, l.cd_uti,l.groupe,l.fin_reservation
FROM bd_aem.pla_stage_lignes l
INNER JOIN eleves e on e.cd_cli = l.cd_cli
INNER JOIN pla_stage s on s.type = l.type AND s.semaine = l.semaine AND s.groupe = l.groupe
where l.type='B' and s.fin >= CURRENT_DATE() and l.groupe ='G'
order by s.debut, l.nom desc;"""
results = request.dbsession.execute(query).fetchall()
return results
def get_pass_rousseau(request):
# lire les pass rousseau
query = """SELECT * FROM pass_rousseau;"""
results = request.dbsession.execute(query, )
return results.fetchall()
def update_type_devis(request, type_devis, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if type_devis == '0':
query = "INSERT INTO p_types_devis SET %s" % s
else:
new_values['type_devis'] = type_devis
query = "UPDATE p_types_devis SET %s WHERE type_devis = :type_devis;" % s
execute_query(request, query, new_values)
def delete_type_devis(request, type_devis):
query = "DELETE FROM p_types_devis WHERE type_devis = :type_devis ;"
execute_query(request, query, {'type_devis': type_devis})
def get_tarifs(request, ref):
"""Lire les tarifs"""
if ref == '0':
query = "SELECT * FROM tarifs ORDER BY ref;"
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM tarifs where ref = :ref;"
results = request.dbsession.execute(query, {'ref': ref}).first()
return results
def get_formules(request, formule, validite):
"""Lire les formules"""
if formule == '0':
if validite == 'TOUTES':
query = "SELECT * FROM formules ORDER BY formule;"
else:
query = "SELECT * FROM formules WHERE DateFin >= CURRENT_DATE ORDER BY formule;"
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM formules where formule = :formule;"
results = request.dbsession.execute(query, {'formule': formule}).first()
return results
def get_justifs(request, code):
"""Lire les justifs"""
query = "SELECT * FROM p_justifs WHERE code = :code;"
results = request.dbsession.execute(query, {'code': code}).first()
return results
def get_justifsByType(request, type):
"""Lire les justifs"""
query = "SELECT * FROM p_justifs WHERE type=:type ORDER BY conditions;"
results = request.dbsession.execute(query, {'type': type}).fetchall()
return results
def get_permis(request, cat):
"""Lire les permis"""
if cat == '0':
query = "SELECT * FROM permis ORDER BY cat;"
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM permis where cat = :cat;"
results = request.dbsession.execute(query, {'cat': cat}).first()
return results
def update_activite(request, cd_cli, new_values):
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if cd_cli == '0':
query = "INSERT INTO eleves SET %s " % s
else:
query = "UPDATE eleves SET %s WHERE CD_CLI=:CD_CLI" % s
new_values['CD_CLI'] = cd_cli
execute_query(request, query, new_values)
def delete_activite(request, cd_cli):
query = "DELETE FROM eleves WHERE CD_CLI=:cd_cli"
execute_query(request, query, {'cd_cli':cd_cli})
def get_permis_justifs(request, cat, code):
"""Lire les justifs du permis"""
if code == '0':
query = """SELECT p.*, j.libelle, j.conditions FROM permis_justifs p INNER JOIN p_justifs j ON p.code = j.code
WHERE CAT=:cat ORDER BY no_tri;"""
results = request.dbsession.execute(query, {'cat': cat}).fetchall()
else:
query = """SELECT p.*, j.libelle, j.conditions FROM permis_justifs p INNER JOIN p_justifs j ON p.code = j.code
WHERE p.CAT=:cat AND p.CODE=:code;"""
results = request.dbsession.execute(query, {'cat': cat, 'code': code}).first()
return results
def get_tarifs_byFam(request, famille):
"""Lire les tarifs par famille"""
query = "SELECT * FROM tarifs where fam = :famille order by ref;"
results = request.dbsession.execute(query, {'famille': famille}).fetchall()
return results
def get_p_tables(request, table):
query = "CALL spGet_P_TABLES_byCODE(:table, 0);"
results = request.dbsession.execute(query, {'table': table}).fetchall()
return results
def update_tarif(request, ref, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'LIB':
new_values['LIB'] = new_values['LIB'].upper()
if param == 'COMPTE':
new_values['COMPTE'] = new_values['COMPTE'].split('|')[0]
if param == 'CTVA':
' CTVA = le 1er caractère'
new_values['CTVA'] = new_values['CTVA'][0]
if param == 'FAM':
' famille = le 1er caractère'
new_values['FAM'] = new_values['FAM'][0]
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if ref == '0':
query = "INSERT INTO tarifs SET %s" % s
else:
new_values['ref'] = ref
query = "UPDATE tarifs SET %s WHERE ref = :ref;" % s
execute_query(request, query, new_values)
def delete_tarif(request, ref):
query = "DELETE FROM tarifs WHERE ref = :ref ;"
execute_query(request, query, {'ref': ref})
def update_permis(request, cat, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'LIB':
new_values['LIB'] = new_values['LIB'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if cat == '0':
query = "INSERT INTO permis SET %s" % s
else:
new_values['cat'] = cat
query = "UPDATE permis SET %s WHERE cat = :cat;" % s
execute_query(request, query, new_values)
def delete_permis(request, cat):
query = "DELETE FROM permis WHERE cat = :cat ;"
execute_query(request, query, {'cat': cat})
def delete_formule(request, formule):
query = "DELETE FROM formules WHERE formule = :formule ;"
execute_query(request, query, {'formule': formule})
def delete_justif(request, code):
query = "DELETE FROM p_justifs WHERE code = :code ;"
execute_query(request, query, {'code': code})
def update_justif(request, code, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if code == '0':
query = "INSERT INTO p_justifs SET %s" % s
else:
new_values['code'] = code
query = "UPDATE p_justifs SET %s WHERE code = :code;" % s
execute_query(request, query, new_values)
def update_semaine_type(request, code, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if code == '0':
query = "INSERT INTO p_semaines SET %s" % s
else:
new_values['CODE_SEM'] = code
query = "UPDATE p_semaines SET %s WHERE CODE_SEM = :CODE_SEM;" % s
execute_query(request, query, new_values)
def get_semaine_type_activity(request,code_sem):
query = "SELECT * FROM p_semaines WHERE CODE_SEM = :code"
query2 = "SELECT * FROM p_semaine_type WHERE CODE_SEM = :code"
results = request.dbsession.execute(query, {'code': code_sem})
results2 = request.dbsession.execute(query2, {'code': code_sem})
return results.first(),results2.fetchall()
def delete_semaine_type(request,code_sem):
query = "DELETE FROM p_semaines WHERE CODE_SEM = :code ;"
execute_query(request, query, {'code': code_sem})
def duplicate_semaine_type(request,code_sem,logged_in):
query = " CALL spINS_SEMAINE_DUP(:code_sem,:logged_in)"
execute_query(request, query, {'code_sem': code_sem,'logged_in':logged_in})
def get_all_activites(request):
query = "SELECT * FROM `eleves` WHERE AGENCE=0 AND (PERMIS_DEMANDE='ACTIV' OR PERMIS_DEMANDE='A' OR PERMIS_DEMANDE='A2' OR PERMIS_DEMANDE='B')"
results = request.dbsession.execute(query).fetchall()
return results
def get_activite_by_code(request, cd_cli):
# lire l'eleve connecte
query = """SELECT * FROM eleves WHERE cd_cli=:cd_cli;"""
results = request.dbsession.execute(query, {'cd_cli': cd_cli}).first()
return results
def update_semaine_type_activity(request,new_values):
result = None
s = ''
no_ligne = new_values['no_ligne']
del new_values['no_ligne']
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param).s
if no_ligne == '' :
query = """ INSERT INTO p_semaine_type SET %s """ % s + """;"""
execute_query(request,query,new_values)
query2 = "SELECT MAX(no_ligne) as no_ligne from p_semaine_type;"
result = request.dbsession.execute(query2,new_values).fetchone()
mark_changed(request.dbsession, keep_session=True)
transaction.commit()
else:
query = """ UPDATE p_semaine_type SET %s WHERE no_ligne = :no_ligne; """ % s
new_values['no_ligne'] = no_ligne
execute_query(request,query,new_values)
return result
def delete_semaine_type_activity(request,no_ligne):
query = "DELETE FROM p_semaine_type WHERE no_ligne = :no_ligne ;"
execute_query(request, query, {'no_ligne': no_ligne})
def duplicate_semaine_type_activity(request,no_ligne,qte,logged_in):
query = " CALL spINS_SEMAINE_DUP_ACTIVITY( :no_ligne, :qte, :logged_in) ;"
execute_query(request,query,{'no_ligne':no_ligne,'qte':qte,'logged_in':logged_in})
def update_agence(request, code, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
new_values['code'] = code
query = "UPDATE p_agences SET %s WHERE code = :code;" % s
execute_query(request, query, new_values)
def delete_permis_justif(request, cat, code):
query = "DELETE FROM permis_justifs WHERE cat = :cat AND code = :code;"
execute_query(request, query, {'cat': cat, 'code': code})
def insert_permis_justif(request, cat, code):
query = "INSERT INTO permis_justifs (`CAT`, `CODE`) VALUES (:cat, :code);"
execute_query(request, query, {'cat': cat, 'code': code})
def update_permis_justif(request, cat, code, no_tri):
query = "UPDATE permis_justifs SET no_tri=:no_tri WHERE CAT = :cat AND CODE = :code;"
execute_query(request, query, {'cat': cat, 'code': code, 'no_tri': no_tri})
def get_permis_justifs_manquant(request, cat):
"""Lire les justifs non encore ajouté dans permis"""
query = """SELECT j.* FROM p_justifs j LEFT JOIN permis_justifs p ON j.code = p.code AND p.cat = :cat
WHERE j.type = 'JUST' AND p.code IS null;"""
results = request.dbsession.execute(query, {'cat': cat}).fetchall()
return results
def update_formule(request, formule, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'LIBELLE':
new_values['LIBELLE'] = new_values['LIBELLE'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if formule == '0':
query = "INSERT INTO formules SET %s;" % s
else:
new_values['formule'] = formule
query = "UPDATE formules SET %s WHERE formule = :formule;" % s
execute_query(request, query, new_values)
def get_all_semaines_type(request):
query = "SELECT * FROM `p_semaines` ORDER BY `p_semaines`.`CODE_SEM` DESC";
results = request.dbsession.execute(query)
return results.fetchall()