diff --git a/development.ini b/development.ini index 7bbc137..552442e 100644 --- a/development.ini +++ b/development.ini @@ -19,8 +19,8 @@ pyramid.includes = pyramid_tm -sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8 -#sqlalchemy.url = mysql://phuoc:phuoc!@192.168.1.17/bddevfac?charset=utf8 +#sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8 +sqlalchemy.url = mysql://phuoc:phuoc!@192.168.1.17/bddevfac?charset=utf8 # sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8 mondumas.admin_email = cao.thien-phuoc@orange.fr diff --git a/mondumas/models/agenda.py b/mondumas/models/agenda.py index 232e38b..3c44edc 100644 --- a/mondumas/models/agenda.py +++ b/mondumas/models/agenda.py @@ -1,96 +1,96 @@ -# -*- 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 * -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_users_agenda(request, user): - if user == '': - """ lire la liste des users ayant un agenda""" - query = "SELECT * FROM p_users WHERE cd_uti != 'N' and cd_uti = agenda AND actif != 0 ORDER BY nom;" - results = request.dbsession.execute(query).fetchall() - else: - """ lire le user ayant un agenda""" - query = "SELECT * FROM p_users WHERE cd_uti = :user;" - results = request.dbsession.execute(query, {'user': user}).first() - return results - -def get_types_rdv(request): - """ lire la liste des types de rendez-vous""" - query = "SELECT * FROM p_types_rdv ORDER BY LIB;" - results = request.dbsession.execute(query).fetchall() - return results - -def get_rendez_vous(request, itc): - d = datetime.now() - d = d - dateutil.relativedelta.relativedelta(months=3) - # début du mois M-2 - datedeb = d.strftime('%Y-%m-01') - - # lire les rdv de l'ITC - query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.nolig, l.rdv_debut, l.rdv_fin, e.c_qualite, e.c_nom, e.c_ville, e.c_cp FROM dem_lig l - INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id - WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi -""" - results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall() - return results - -def delete_rdv(request, nodossier, nolig): - societe = nodossier[0:2] - no_id = nodossier[3:] - - query = "DELETE FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig) - execute_query(request, query, {}) - -def update_rdv(request, nodossier, nolig, new_values): - societe = nodossier[0:2] - no_id = nodossier[3:] - - # formater date et heure de visite - if new_values['rdv_debut']: - ddate = datetime.strptime(new_values['rdv_debut'], '%d-%m-%Y %H:%M') - new_values['DATEVI'] = ddate.strftime("%Y-%m-%d") - new_values['HEUREVI'] = ddate.strftime("%H:%M") - - del new_values['rdv_debut'] - s = '' - for param in new_values.keys(): - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if nolig == '0': - create_rdv(request, nodossier, new_values['DATEVI'], new_values['HEUREVI'], new_values['COMMENT'], new_values['LISTE'], new_values['USERMAJ']) - else: - new_values['societe'] = societe - new_values['no_id'] = no_id - new_values['nolig'] = nolig - query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s - execute_query(request, query, new_values) - -def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in): - societe = nodossier[0:2] - no_id = nodossier[3:] - - query = """ -INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, DATEVI, HEUREVI, LISTE, USERMAJ) VALUES -(:societe, :no_id, CURRENT_DATE, :type_rdv, :dateRDV, :heureRDV, :agenda, :logged_in) ;""" - execute_query(request, query, {'societe': societe, 'no_id' :no_id, 'dateRDV': dateRDV, 'heureRDV': heureRDV, 'type_rdv': type_rdv, 'agenda': agenda, 'logged_in':logged_in}) - +# -*- 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 * +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_users_agenda(request, user): + if user == '': + """ lire la liste des users ayant un agenda""" + query = "SELECT * FROM p_users WHERE cd_uti != 'N' and cd_uti = agenda AND actif != 0 ORDER BY nom;" + results = request.dbsession.execute(query).fetchall() + else: + """ lire le user ayant un agenda""" + query = "SELECT * FROM p_users WHERE cd_uti = :user;" + results = request.dbsession.execute(query, {'user': user}).first() + return results + +def get_types_rdv(request): + """ lire la liste des types de rendez-vous""" + query = "SELECT * FROM p_types_rdv ORDER BY LIB;" + results = request.dbsession.execute(query).fetchall() + return results + +def get_rendez_vous(request, itc): + d = datetime.now() + d = d - dateutil.relativedelta.relativedelta(months=3) + # début du mois M-2 + datedeb = d.strftime('%Y-%m-01') + + # lire les rdv de l'ITC + query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.nolig, l.rdv_debut, l.rdv_fin, e.c_qualite, e.c_nom, e.c_ville, e.c_cp FROM dem_lig l + INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id + WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi +""" + results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall() + return results + +def delete_rdv(request, nodossier, nolig): + societe = nodossier[0:2] + no_id = nodossier[3:] + + query = "DELETE FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig) + execute_query(request, query, {}) + +def update_rdv(request, nodossier, nolig, new_values): + societe = nodossier[0:2] + no_id = nodossier[3:] + + # formater date et heure de visite + if new_values['rdv_debut']: + ddate = datetime.strptime(new_values['rdv_debut'], '%d-%m-%Y %H:%M') + new_values['DATEVI'] = ddate.strftime("%Y-%m-%d") + new_values['HEUREVI'] = ddate.strftime("%H:%M") + + del new_values['rdv_debut'] + s = '' + for param in new_values.keys(): + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if nolig == '0': + create_rdv(request, nodossier, new_values['DATEVI'], new_values['HEUREVI'], new_values['COMMENT'], new_values['LISTE'], new_values['USERMAJ']) + else: + new_values['societe'] = societe + new_values['no_id'] = no_id + new_values['nolig'] = nolig + query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s + execute_query(request, query, new_values) + +def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in): + societe = nodossier[0:2] + no_id = nodossier[3:] + + query = """ +INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, DATEVI, HEUREVI, LISTE, USERMAJ) VALUES +(:societe, :no_id, CURRENT_DATE, :type_rdv, :dateRDV, :heureRDV, :agenda, :logged_in) ;""" + execute_query(request, query, {'societe': societe, 'no_id' :no_id, 'dateRDV': dateRDV, 'heureRDV': heureRDV, 'type_rdv': type_rdv, 'agenda': agenda, 'logged_in':logged_in}) + diff --git a/mondumas/models/parametres.py b/mondumas/models/parametres.py index 1196a84..2cbc56e 100644 --- a/mondumas/models/parametres.py +++ b/mondumas/models/parametres.py @@ -1,229 +1,263 @@ -# -*- 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 * -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_log_nuit(request, ): - # lire le log de nuit - query = """SELECT * FROM t_log_nuit;""" - results = request.dbsession.execute(query, ) - return results.fetchall() - -def get_rappels_rdv(request): - """Lire les 200 derniers envois d'emails""" - query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;" - results = request.dbsession.execute(query, {}) - return results.fetchall() - -def get_dossiers_byChantier(request, societe, name): - - query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''")) - results = request.dbsession.execute(query).fetchall() - return results - -def get_cabinets_by_id(request, code): - # lire les cabinets - if code == '0': - query = """SELECT * FROM P_CABINET ORDER BY nom;""" - results = request.dbsession.execute(query).fetchall() - else: - query = """SELECT * FROM P_CABINET WHERE code=:code;""" - results = request.dbsession.execute(query, {'code': code}).first() - return results - -def get_experts_by_id(request, code_cab, code_exp): - # lire les experts du cabinet - if code_exp == '0': - query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab ORDER BY nom;""" - results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall() - else: - query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab AND code_exp=:code_exp;""" - results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first() - return results - -def get_rdf_causes_by_id(request, code): - # lire les rdf_causes - if code == '0': - query = """SELECT * FROM rdf_causes;""" - results = request.dbsession.execute(query).fetchall() - else: - query = """SELECT * FROM rdf_causes WHERE code=:code;""" - results = request.dbsession.execute(query, {'code': code}).first() - return results - -def delete_rdf_cause(request, old_code): - query = "DELETE FROM rdf_causes WHERE code = :old_code;" - execute_query(request, query, {'old_code': old_code}) - -def update_rdf_cause(request, old_code, code, libelle): - if old_code == '0': - query = "INSERT rdf_causes (code, libelle) values (:code, :libelle);" - else: - query = "UPDATE rdf_causes SET code = :code, libelle = :libelle WHERE code = :old_code;" - execute_query(request, query, {'old_code': old_code, 'code': code, 'libelle': libelle}) - -def get_texts(request, text_id): - """Lire les textes""" - if text_id == 0: - query = "SELECT * FROM p_texts ORDER BY theme, intitule;" - results = request.dbsession.execute(query).fetchall() - elif text_id == -1: - query = "SELECT * FROM p_texts where theme != 'INTERNE' ORDER BY theme, intitule;" - results = request.dbsession.execute(query).fetchall() - else: - query = "SELECT * FROM p_texts where text_id = :text_id;" - results = request.dbsession.execute(query, {'text_id': text_id}).first() - return results - -def update_text(request, text_id, intitule, texte, theme): - """créér ou modifier la text""" - if text_id == '0': - query = "INSERT INTO p_texts (intitule, texte, theme) VALUES(:intitule, :texte, :theme);" - execute_query(request, query, {'intitule': intitule, 'texte': texte, 'theme': theme}) - else: - query = "update p_texts set intitule=:intitule, texte=:texte, theme=:theme where text_id = :text_id;" - execute_query(request, query, {'text_id': text_id, 'intitule': intitule, 'texte': texte, 'theme': theme}) - -def delete_text(request, text_id): - """supprimer la text""" - query = "delete from p_texts where text_id = :text_id;" - execute_query(request, query, {'text_id': text_id}) - -def get_articles_byFam(request, fam): - if fam == 'T': - query = "SELECT * FROM articles WHERE FAM = 'T';" - else: - query = "SELECT * FROM articles WHERE FAM != 'T';" - results = request.dbsession.execute(query, ).fetchall() - return results - -def update_article(request, ref, new_values): - # formater les champs - s = '' - for param in new_values.keys(): - if param == 'FAM': - ' ne prend que 2 premiers caractères' - new_values['FAM'] = new_values['FAM'][0:2].upper() - - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if ref == '0': - query = "INSERT INTO articles SET %s" % s - else: - new_values['ref'] = ref - query = "UPDATE articles SET %s WHERE ref = :ref;" % s - execute_query(request, query, new_values) - -def delete_article(request, ref): - query = "DELETE FROM articles WHERE ref = :ref ;" - execute_query(request, query, {'ref': ref}) - -def update_cabinet(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 = "CALL spINS_P_CABINET(:nom);" - results = request.dbsession.execute(query, {'nom': new_values['NOM']}).first() - # recupère lenouveau code créé - code = results.newligne - - new_values['code'] = code - query = "UPDATE p_cabinet SET %s WHERE code = :code;" % s - execute_query(request, query, new_values) - -def delete_cabinet(request, code): - query = "DELETE FROM p_cabinet WHERE code = :code ;" - execute_query(request, query, {'code': code}) - -def update_expert(request, code_cab, code_exp, 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_exp == '0': - query = "CALL spINS_P_EXPERT(:code_cab, :nom);" - results = request.dbsession.execute(query, {'code_cab': code_cab, 'nom': new_values['NOM']}).first() - # recupère lenouveau code créé - code_exp = results.newligne - - new_values['code_cab'] = code_cab - new_values['code_exp'] = code_exp - query = "UPDATE p_experts SET %s WHERE code_cab = :code_cab AND code_exp = :code_exp;" % s - execute_query(request, query, new_values) - -def delete_expert(request, code_cab, code_exp): - query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;" - execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp}) - -def update_societe(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['societe'] = code - query = "UPDATE p_societe SET %s WHERE societe = :societe;" % s - execute_query(request, query, new_values) - -def update_tarif(request, ref, 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 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 get_tarifs_byGroupe(request, groupe): - query = "SELECT * FROM tarifs WHERE groupe = :groupe;" - results = request.dbsession.execute(query, {'groupe': groupe}).fetchall() - return results - -def get_tarif(request, groupe, ref): - query = "SELECT * FROM tarifs WHERE groupe = :groupe and ref = :ref;" - results = request.dbsession.execute(query, {'groupe': groupe, 'ref': ref}).first() - return results +# -*- 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 * +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_log_nuit(request, ): + # lire le log de nuit + query = """SELECT * FROM t_log_nuit;""" + results = request.dbsession.execute(query, ) + return results.fetchall() + +def get_rappels_rdv(request): + """Lire les 200 derniers envois d'emails""" + query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;" + results = request.dbsession.execute(query, {}) + return results.fetchall() + +def get_dossiers_byChantier(request, societe, name): + + query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''")) + results = request.dbsession.execute(query).fetchall() + return results + +def get_cabinets_by_id(request, code): + # lire les cabinets + if code == '0': + query = """SELECT * FROM P_CABINET ORDER BY nom;""" + results = request.dbsession.execute(query).fetchall() + else: + query = """SELECT * FROM P_CABINET WHERE code=:code;""" + results = request.dbsession.execute(query, {'code': code}).first() + return results + +def get_experts_by_id(request, code_cab, code_exp): + # lire les experts du cabinet + if code_exp == '0': + query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab ORDER BY nom;""" + results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall() + else: + query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab AND code_exp=:code_exp;""" + results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first() + return results + +def get_rdf_causes_by_id(request, code): + # lire les rdf_causes + if code == '0': + query = """SELECT * FROM rdf_causes;""" + results = request.dbsession.execute(query).fetchall() + else: + query = """SELECT * FROM rdf_causes WHERE code=:code;""" + results = request.dbsession.execute(query, {'code': code}).first() + return results + +def delete_rdf_cause(request, old_code): + query = "DELETE FROM rdf_causes WHERE code = :old_code;" + execute_query(request, query, {'old_code': old_code}) + +def update_rdf_cause(request, old_code, code, libelle): + if old_code == '0': + query = "INSERT rdf_causes (code, libelle) values (:code, :libelle);" + else: + query = "UPDATE rdf_causes SET code = :code, libelle = :libelle WHERE code = :old_code;" + execute_query(request, query, {'old_code': old_code, 'code': code, 'libelle': libelle}) + +def get_texts(request, text_id): + """Lire les textes""" + if text_id == 0: + query = "SELECT * FROM p_texts ORDER BY theme, intitule;" + results = request.dbsession.execute(query).fetchall() + elif text_id == -1: + query = "SELECT * FROM p_texts where theme != 'INTERNE' ORDER BY theme, intitule;" + results = request.dbsession.execute(query).fetchall() + else: + query = "SELECT * FROM p_texts where text_id = :text_id;" + results = request.dbsession.execute(query, {'text_id': text_id}).first() + return results + +def update_text(request, text_id, intitule, texte, theme): + """créér ou modifier la text""" + if text_id == '0': + query = "INSERT INTO p_texts (intitule, texte, theme) VALUES(:intitule, :texte, :theme);" + execute_query(request, query, {'intitule': intitule, 'texte': texte, 'theme': theme}) + else: + query = "update p_texts set intitule=:intitule, texte=:texte, theme=:theme where text_id = :text_id;" + execute_query(request, query, {'text_id': text_id, 'intitule': intitule, 'texte': texte, 'theme': theme}) + +def delete_text(request, text_id): + """supprimer la text""" + query = "delete from p_texts where text_id = :text_id;" + execute_query(request, query, {'text_id': text_id}) + +def get_articles_byFam(request, fam): + if fam == 'T': + query = "SELECT * FROM articles WHERE FAM = 'T';" + else: + query = "SELECT * FROM articles WHERE FAM != 'T';" + results = request.dbsession.execute(query, ).fetchall() + return results + +def update_article(request, ref, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if param == 'FAM': + ' ne prend que 2 premiers caractères' + new_values['FAM'] = new_values['FAM'][0:2].upper() + + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if ref == '0': + query = "INSERT INTO articles SET %s" % s + else: + new_values['ref'] = ref + query = "UPDATE articles SET %s WHERE ref = :ref;" % s + execute_query(request, query, new_values) + +def delete_article(request, ref): + query = "DELETE FROM articles WHERE ref = :ref ;" + execute_query(request, query, {'ref': ref}) + +def update_cabinet(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 = "CALL spINS_P_CABINET(:nom);" + results = request.dbsession.execute(query, {'nom': new_values['NOM']}).first() + # recupère lenouveau code créé + code = results.newligne + + new_values['code'] = code + query = "UPDATE p_cabinet SET %s WHERE code = :code;" % s + execute_query(request, query, new_values) + +def delete_cabinet(request, code): + query = "DELETE FROM p_cabinet WHERE code = :code ;" + execute_query(request, query, {'code': code}) + +def update_expert(request, code_cab, code_exp, 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_exp == '0': + query = "CALL spINS_P_EXPERT(:code_cab, :nom);" + results = request.dbsession.execute(query, {'code_cab': code_cab, 'nom': new_values['NOM']}).first() + # recupère lenouveau code créé + code_exp = results.newligne + + new_values['code_cab'] = code_cab + new_values['code_exp'] = code_exp + query = "UPDATE p_experts SET %s WHERE code_cab = :code_cab AND code_exp = :code_exp;" % s + execute_query(request, query, new_values) + +def delete_expert(request, code_cab, code_exp): + query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;" + execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp}) + +def update_societe(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['societe'] = code + query = "UPDATE p_societe SET %s WHERE societe = :societe;" % s + execute_query(request, query, new_values) + +def update_tarif(request, ref, 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 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 get_tarifs_byGroupe(request, groupe): + query = "SELECT * FROM tarifs WHERE groupe = :groupe;" + results = request.dbsession.execute(query, {'groupe': groupe}).fetchall() + return results + +def get_tarif(request, groupe, ref): + query = "SELECT * FROM tarifs WHERE groupe = :groupe and ref = :ref;" + results = request.dbsession.execute(query, {'groupe': groupe, 'ref': ref}).first() + return results + +def get_dd_restant(request): + query = """SELECT SUM(IF(societe='PE',1,0)) AS nb_PE, + SUM(IF(societe='ME',1,0)) AS nb_ME, + SUM(IF(societe='PL',1,0)) AS nb_PL + FROM dem_devis WHERE STATUS=0;""" + results = request.dbsession.execute(query).first() + return results + +def get_de_restant(request): + query = """SELECT SUM(IF(societe='PE',1,0)) AS nb_PE, + SUM(IF(societe='ME',1,0)) AS nb_ME, + SUM(IF(societe='PL',1,0)) AS nb_PL + FROM devis WHERE STATUS<4;""" + results = request.dbsession.execute(query).first() + return results + +def get_fa_restant(request): + query = """SELECT SUM(IF(societe='PE',1,0)) AS nb_PE, + SUM(IF(societe='ME',1,0)) AS nb_ME, + SUM(IF(societe='PL',1,0)) AS nb_PL + FROM facture WHERE STATUS<8;""" + results = request.dbsession.execute(query).first() + return results + +def get_rdv_by_date(request, date, agenda): + query = """SELECT COUNT(*) AS nb_rdv FROM bddevfac.dem_lig WHERE DATEVI=:date AND LISTE=:agenda;""" + results = request.dbsession.execute(query, {'date': date, 'agenda': agenda}).first() + return results + +def get_rdf_null(request): + query = """SELECT COUNT(*) AS nb_rdf FROM bddevfac.dem_rdf WHERE date_relu IS NULL;""" + results = request.dbsession.execute(query).first() + return results diff --git a/mondumas/routes.py b/mondumas/routes.py index ba0cfff..b270264 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -72,7 +72,8 @@ def includeme(config): config.add_route('user_edit', '/user_edit/{cd_uti}') config.add_route('users', '/users') config.add_route('users_ua', '/users_ua') - + config.add_route('new_home', '/new_home') + # stats config.add_route('stats', '/stats') config.add_route('stats_dossiers', '/stats_dossiers/{societe}') diff --git a/mondumas/templates/parametres/new_home.pt b/mondumas/templates/parametres/new_home.pt new file mode 100644 index 0000000..c909cf5 --- /dev/null +++ b/mondumas/templates/parametres/new_home.pt @@ -0,0 +1,117 @@ + +
+ +
+
+ +
+
+ +
+ DEMANDES DEVIS + A traiter : + ${nb_dd_restants.nb_PE} + ${nb_dd_restants.nb_ME} + ${nb_dd_restants.nb_PL} +
+
+
+
+
+ +
+ DEVIS + A traiter : + ${nb_de_restants.nb_PE} + ${nb_dd_restants.nb_ME} + ${nb_dd_restants.nb_PL} +
+
+
+
+
+ +
+ FACTURES + A traiter : + ${nb_fa_restants.nb_PE} + ${nb_dd_restants.nb_ME} + ${nb_dd_restants.nb_PL} +
+
+
+
+
+
+ +
+
+ +
+ AGENDA + A traiter : + ${nb_rdv.nb_rdv} +
+
+
+
+
+ +
+ RDF + A traiter : + ${nb_rdf.nb_rdf} +
+
+
+
+
+ +
+ EMAILS + A traiter : + ${nb_mails} +
+
+
+
+
+ + +
+
+
+
+ +
+
+ diff --git a/mondumas/templates/parametres/parametres.pt b/mondumas/templates/parametres/parametres.pt index c11d397..6b3002e 100644 --- a/mondumas/templates/parametres/parametres.pt +++ b/mondumas/templates/parametres/parametres.pt @@ -1,73 +1,77 @@ - -
- -
-
-
- -

UTILISATEURS

-
-
- -

ARTICLES

-
-
- -

TARIFS

-
-
- -

CABINETS EXP.

-
-
-
-
-
- -

SOCIETES

-
-
- -

RDF : CAUSES

-
-
- -

TEXTES EMAIL

-
-
-
-
-
- -

TABLEAU de BORD

-
-
- -

RAPPELS RDV

-
-
- -

CONNEXIONS

-
-
- -

STATS GLOBALES

-
-
-
-
- -

INFRASTRUCTURE

-
-
-
-
-
- -
-
- -
-
- - + +
+ +
+
+
+ +

UTILISATEURS

+
+
+ +

ARTICLES

+
+
+ +

TARIFS

+
+
+ +

CABINETS EXP.

+
+
+
+
+
+ +

SOCIETES

+
+
+ +

RDF : CAUSES

+
+
+ +

TEXTES EMAIL

+
+
+ +

PROTOTYPE HOME

+
+
+
+
+
+ +

TABLEAU de BORD

+
+
+ +

RAPPELS RDV

+
+
+ +

CONNEXIONS

+
+
+ +

STATS GLOBALES

+
+
+
+
+ +

INFRASTRUCTURE

+
+
+
+
+
+ +
+
+ +
+
+ + diff --git a/mondumas/views/parametres.py b/mondumas/views/parametres.py index 813aab3..336dea1 100644 --- a/mondumas/views/parametres.py +++ b/mondumas/views/parametres.py @@ -11,6 +11,7 @@ from pyramid.httpexceptions import ( HTTPForbidden, ) +from pyramid_mailer import get_mailer from pyramid_mailer.message import Message, Attachment from datetime import * from dateutil.relativedelta import * @@ -262,7 +263,8 @@ def rdf_cause_edit(request): if 'form.submitted' in request.params: code = request.params['code'] - libelle = request.params['libelle'] + libelle = request.params['libelle'] + update_rdf_cause(request, old_code, code, libelle) request.session.flash(u"La cause a été mise à jour avec succès.", 'success') return HTTPFound(location=request.route_url('rdf_causes')) @@ -837,3 +839,97 @@ def tarifs_import(request): 'groupe': groupe, } +@view_config(route_name='new_home', renderer='../templates/parametres/new_home.pt', permission='view') +def new_home(request): + logged_in = request.authenticated_userid.upper() + url = request.route_url('new_home') + # lire la fiche de l'utilisateur + member = get_member_by_id(request, logged_in) + access = member.access + agenda = member.agenda + + datedeb = date.today().strftime("%Y-%m-%d") + + nb_dd_restants = get_dd_restant(request) + nb_de_restants = get_de_restant(request) + nb_fa_restants = get_fa_restant(request) + + nb_rdv = get_rdv_by_date(request, datedeb, agenda) + nb_rdf = get_rdf_null(request) + + # Récupération de la listes des mails pour ensuite avoir leur nombre + def demandes_lister(societe, search_criteria): + # connecter au serveur de mail + conn = mailbox_connect(request, societe) + # select INBOX + rv, data = conn.select('INBOX', readonly =True) + + # créer la liste des entêtes des messages à afficher + liste = [] + for criteria in search_criteria: + rv, data = conn.search(None, criteria) + if rv != 'OK': + request.session.flash("ERREUR de lecture de la boîte de réception", 'danger') + return HTTPFound(location=request.route_url('home')) + + mail_ids = data[0] + for email_UID in mail_ids.split(): + rv, msg_data = conn.fetch(email_UID, '(RFC822)') + if rv != 'OK': + request.session.flash("ERREUR de lecture du message %s" % email_UID, 'danger') + return HTTPFound(location=request.route_url('home')) + + msg = email.message_from_bytes(msg_data[0][1]) + hdr = email.header.make_header(email.header.decode_header(msg['Subject'])) + email_subject = str(hdr) + email_from = email.utils.parseaddr(msg['from'])[1] + # Now convert to local date-time + date_tuple = email.utils.parsedate_tz(msg['Date']) + if date_tuple: + email_date = datetime.fromtimestamp(email.utils.mktime_tz(date_tuple)) + else: + email_date = datetime.now() + + d = { + "email_societe": societe, + "email_date": email_date, + "email_from": email_from.split('@')[1], + 'email_subject':email_subject, + "email_uid": email_UID + } + liste.append(d) + + # deconnexion du serveur + conn.close() + conn.logout() + return liste + + societes = ['PE','ME','PL','PO'] + + # critères de recherche des demandes d'interventions de la MAIF + # search_criteria = ['FROM service.sinistres@domus-services.fr SUBJECT "Ordre de mission DOMUS - Dossier" UNDELETED'] " + search_criteria = ['FROM gestionsinistre@maif.fr SUBJECT "Intervention entreprise partenaire"', + 'FROM service.sinistres@domus-services.fr UNDELETED'] + # 'FROM service.sinistres@domus-services.fr SUBJECT "Ordre de mission DOMUS - Dossier" UNDELETED'] + + emails=[] + # lister les demandes par societe + for societe in societes: + emails = emails + demandes_lister(societe, search_criteria) + + # messages lus + msglus = bool(emails) + + return { + 'page_title': 'Bienvenue sur %s' % request.host, + 'project': 'mondumas', + 'access': access, + 'logged_in': logged_in, + 'nb_dd_restants': nb_dd_restants, + 'nb_de_restants': nb_de_restants, + 'nb_fa_restants': nb_fa_restants, + 'nb_rdv': nb_rdv, + 'nb_rdf': nb_rdf, + 'nb_mails': len(emails), + #'mails': emails, + } \ No newline at end of file