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