From 145501fe813dbbf9b564768d1a4de7194d2aeb29 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Wed, 27 Feb 2019 16:15:43 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20:=20cr=C3=A9ation=20du=20rapport=20de?= =?UTF-8?q?=20RDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mondumas/models/default.py | 19 + mondumas/models/dossier.py | 36 ++ mondumas/models/parametres.py | 28 +- mondumas/panels.py | 20 +- mondumas/routes.py | 8 +- mondumas/security.py | 4 +- mondumas/templates/agenda/agenda.pt | 2 +- mondumas/templates/agenda/rdv_edit.pt | 2 - mondumas/templates/dossier/dossier_view.pt | 47 +- mondumas/templates/dossier/rdf_edit.pt | 124 ++++ mondumas/templates/layouts/global_layout.pt | 2 +- mondumas/templates/parametres/parametres.pt | 7 + .../templates/parametres/rdf_cause_edit.pt | 72 +++ .../templates/parametres/rdf_causes_list.pt | 52 ++ mondumas/templates/parametres/users_list.pt | 10 +- mondumas/views/agenda.py | 24 +- mondumas/views/default.py | 4 +- mondumas/views/dossier.py | 55 +- mondumas/views/parametres.py | 551 ++++++++++-------- 19 files changed, 772 insertions(+), 295 deletions(-) create mode 100644 mondumas/templates/dossier/rdf_edit.pt create mode 100644 mondumas/templates/parametres/rdf_cause_edit.pt create mode 100644 mondumas/templates/parametres/rdf_causes_list.pt diff --git a/mondumas/models/default.py b/mondumas/models/default.py index aaa863d..f6b4b44 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -34,6 +34,25 @@ def get_member_by_id(request, mbr_id): results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first() return results +def get_member_info(request, logged_in): + # lire le membres par son identifianr + query = """SELECT nom, email, access FROM p_users WHERE CD_UTI=:logged_in;""" + results = request.dbsession.execute(query, {'logged_in': logged_in}).first() + if results.access == 9: + fonction = 'Administrateur' + elif results.access == 8: + fonction = 'Comptabilité' + elif results.access == 5: + fonction = 'Gestion' + else: + fonction = 'Commercial' + + return { + 'nom': results.nom, + 'email': results.email, + 'fonction': fonction, + } + def update_membre_mdp_oublie(request, login): # get a UUID - URL safe, Base64 diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index 6317644..0ece0e7 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -168,3 +168,39 @@ def insert_dossier_attaches(request, nodossier, filename, filesize, user): query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nomfichier, taillefichier, cree_le, usermaj) VALUES('DOCS_ATTACHES',:societe,:nochantier,:filename,:filesize,NOW(),:user);""" execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'filename': filename, 'filesize': filesize, 'user': user}) + +def get_rapport_by_no(request,nodossier): + societe = nodossier[0:2] + nochantier = nodossier[3:] + query = "SELECT * FROM dem_rdf where societe = :societe and nochantier = :nochantier;" + results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first() + return results + +def insert_rapport(request,nodossier,logged_in): + societe = nodossier[0:2] + nochantier = nodossier[3:] + + query = """INSERT INTO dem_rdf (societe, nochantier, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, usermaj) + SELECT societe, no_id, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, :logged_in FROM dem_devis WHERE societe = :societe AND no_id = :nochantier;""" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'logged_in': logged_in}) + +def get_rdf_causes(request, code): + query = "SELECT libelle FROM rdf_causes where code LIKE :code;" + results = request.dbsession.execute(query, {'code': code + '%'}).fetchall() + return results + +def update_rdf(request, nodossier, new_values): + societe = nodossier[0:2] + nochantier = int(nodossier[3:]) + + s = '' + for param in new_values.keys(): + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + new_values['societe'] = societe + new_values['nochantier'] = nochantier + query = u"UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier" % s + execute_query(request, query, new_values) + diff --git a/mondumas/models/parametres.py b/mondumas/models/parametres.py index a34999e..02c1a74 100644 --- a/mondumas/models/parametres.py +++ b/mondumas/models/parametres.py @@ -44,13 +44,23 @@ def get_dossiers_byChantier(request, societe, name): results = request.dbsession.execute(query).fetchall() return results -def update_nochantier(request, societe, nodossier, nochantier): - x = nodossier.split('-') - type = x[0] - no_id = int(x[1]) - - if type == 'DE': - query = "UPDATE devis SET nochantier = :nochantier WHERE societe = :societe and no_id = :no_id;" +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 = "UPDATE facture SET nochantier = :nochantier WHERE societe = :societe and no_id = :no_id;" - execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nochantier': nochantier}) + 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}) diff --git a/mondumas/panels.py b/mondumas/panels.py index a93e67c..0570707 100644 --- a/mondumas/panels.py +++ b/mondumas/panels.py @@ -2,7 +2,7 @@ from pyramid_layout.panel import panel_config from .security import groupfinder -from .models.default import get_member_by_id +from .models.default import get_member_info @panel_config(name='dropdown_menu_panel', renderer='templates/panels/dropdown_menu_panel.pt') def dropdown_menu_panel(context, request): @@ -10,23 +10,13 @@ def dropdown_menu_panel(context, request): if logged_in is None: return { 'logged_in': '' } else: - member = get_member_by_id(request, logged_in) - fullname = member.NOM - email = member.email - if member.access == 9: - logged_in_fonction = 'Administrateur' - elif member.access == 8: - logged_in_fonction = 'Comptabilité' - elif member.access == 5: - logged_in_fonction = 'Gestion' - else: - logged_in_fonction = 'Production' + member_info = get_member_info(request, logged_in) return { 'logged_in': logged_in, - 'logged_in_name': fullname, - 'logged_in_email': email, - 'logged_in_fonction': logged_in_fonction, + 'logged_in_name': member_info['nom'], + 'logged_in_email': member_info['email'], + 'logged_in_fonction': member_info['fonction'], } diff --git a/mondumas/routes.py b/mondumas/routes.py index f73c39c..fe06cab 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -11,20 +11,24 @@ def includeme(config): config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') - config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}') # dossier + config.add_route('devis_view', '/devis_view/{nodossier}') config.add_route('dossier_edit', '/dossier_edit/{nodossier}') config.add_route('dossier_lookup', '/chantier_lookup') config.add_route('dossier_select', '/dossier_select/{date}') config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}') config.add_route('dossier_view', '/dossier_view/{nodossier}') - config.add_route('devis_view', '/devis_view/{nodossier}') + config.add_route('rdf_edit','/rdf_edit/{nodossier}') + config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}') config.add_route('upload_doc', '/upload_doc/{nodossier}') # parametres config.add_route('parametres', '/parametres') + config.add_route('connecter_a', '/connecter_a/{login}') config.add_route('dashboard', '/dashboard') config.add_route('last_emailing', '/last_emailing') config.add_route('orphans_de', '/orphans_de/{societe}') + config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}') + config.add_route('rdf_causes_list', '/rdf_causes_list') config.add_route('user_edit', '/user_edit/{cd_uti}') config.add_route('users_list', '/users_list') config.add_route('users_ua', '/users_ua') diff --git a/mondumas/security.py b/mondumas/security.py index c27e419..b619179 100644 --- a/mondumas/security.py +++ b/mondumas/security.py @@ -5,7 +5,9 @@ def groupfinder(userid, request): if member: # Roles administrateur ? - if member.access == 9: + if member.access <= 1: + return ['group:commerciaux'] + elif member.access == 9: return ['group:administrators'] else: return [] # it means that userid is logged in (it returns None if userid isn't logged in) diff --git a/mondumas/templates/agenda/agenda.pt b/mondumas/templates/agenda/agenda.pt index e1b9b97..2a03dcc 100644 --- a/mondumas/templates/agenda/agenda.pt +++ b/mondumas/templates/agenda/agenda.pt @@ -8,7 +8,7 @@
-
diff --git a/mondumas/templates/agenda/rdv_edit.pt b/mondumas/templates/agenda/rdv_edit.pt index f0da436..9fbc8c7 100644 --- a/mondumas/templates/agenda/rdv_edit.pt +++ b/mondumas/templates/agenda/rdv_edit.pt @@ -60,8 +60,6 @@ - - Dossier
diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index 9b0cfe9..5f4c5d1 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -109,8 +109,8 @@ +
-

@@ -165,7 +165,44 @@

- + + +
+ +
+
+

+ + Nouvelle recherche +

+ + + + + + + + + + + + + + + +
NuméroDateChantierNo sinistreModif le
+ ${rapport.nochantier} + ${rapport.DATE.strftime('%d-%m-%Y')}${rapport.C_QUALITE} ${rapport.C_NOM}${rapport.NOSIN}${rapport.modif_le.strftime('%d-%m-%Y')}
+
+
+
+ +

@@ -198,7 +235,7 @@

-
+

@@ -208,8 +245,8 @@

- -  Télécharger un document + +  Ajouter un document

    diff --git a/mondumas/templates/dossier/rdf_edit.pt b/mondumas/templates/dossier/rdf_edit.pt new file mode 100644 index 0000000..fa59fbb --- /dev/null +++ b/mondumas/templates/dossier/rdf_edit.pt @@ -0,0 +1,124 @@ + +
    +
    + +
    +

    ADRESSE d'INTERVENTION

    + + + + + +
    +

    +

    ${rapport.C_QUALITE} ${rapport.C_NOM}

    + ${rapport.C_ADR}
    + ${rapport.C_ADR2}
    + ${rapport.C_CP} ${rapport.C_VILLE}
    +

    +
    +

    + Assureur : ${rapport.NOMCLI}
    + No Sinistre : ${rapport.NOSIN} +
    + Etage : ${rapport.C_ETAGE}
    + Téléphone : ${rapport.C_TEL1}
    + Mobile: ${rapport.C_TELP}
    +

    +
    +
    + +
    + + +
    + + +
    + +

    ANALYSE

    +
    + + +
    +
    + + +
    + +

    TRAVAUX relatifs à la DETECTION de la fuite

    +
    + + +
    + +

    TRAVAUX relatifs à la REPARATION de la fuite

    +
    + + +
    +

    PHOTOS

    +

    + +  Ajouter une photo +

    + +

    CONCLUSIONS

    +
    + + +
    + +
    + +
    +

    ${rapport.modif_le.strftime('%d-%m-%Y %H:%M')} par ${rapport.USERMAJ}

    +
    +
    +
    +
    +
    + + Annuler + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/mondumas/templates/layouts/global_layout.pt b/mondumas/templates/layouts/global_layout.pt index 909951f..1521787 100644 --- a/mondumas/templates/layouts/global_layout.pt +++ b/mondumas/templates/layouts/global_layout.pt @@ -62,7 +62,7 @@ +
    + +

    RDF : CAUSES

    +
    +
    +
    +

    CONNEXIONS

    diff --git a/mondumas/templates/parametres/rdf_cause_edit.pt b/mondumas/templates/parametres/rdf_cause_edit.pt new file mode 100644 index 0000000..45331c3 --- /dev/null +++ b/mondumas/templates/parametres/rdf_cause_edit.pt @@ -0,0 +1,72 @@ + +
    + +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +

    ${cause.modif_le.strftime('%d-%m-%Y %H:%M')}

    +
    +
    +
    +
    + + Annuler + + +
    +
    + +
    +
    +
    +
    +
    + + + +
    + diff --git a/mondumas/templates/parametres/rdf_causes_list.pt b/mondumas/templates/parametres/rdf_causes_list.pt new file mode 100644 index 0000000..9214cb3 --- /dev/null +++ b/mondumas/templates/parametres/rdf_causes_list.pt @@ -0,0 +1,52 @@ + +
    + +

    + + Retour + + Nouvelle cause +

    + + + + + + + + + +
    CodeLibelle de la causeModif le
    + +
    +
    + + + +
    +
    + + diff --git a/mondumas/templates/parametres/users_list.pt b/mondumas/templates/parametres/users_list.pt index 034f51c..555c96c 100644 --- a/mondumas/templates/parametres/users_list.pt +++ b/mondumas/templates/parametres/users_list.pt @@ -15,7 +15,7 @@ Nom, Prénom Email Agenda - Rôle + Fonction Etat @@ -52,7 +52,13 @@ return ''; } }, - } + }, + { "targets": 4, + "render": function (data, type, row, meta) { + // ajouter un link vers le login + return '' + data + ''; + }, + }, ] }); diff --git a/mondumas/views/agenda.py b/mondumas/views/agenda.py index 2c81e2c..c1e9220 100644 --- a/mondumas/views/agenda.py +++ b/mondumas/views/agenda.py @@ -16,10 +16,9 @@ from datetime import * import hashlib from sqlalchemy.exc import DBAPIError -from ..security import groupfinder - import json +from ..models.default import * from ..models.agenda import * from ..models.dossier import * @@ -92,7 +91,7 @@ def agenda(request): message = '' # récupérer les paramètres de l'appel de la view datePlan = request.matchdict['date'] - logged_in = request.authenticated_userid + logged_in = request.authenticated_userid.upper() if datePlan == 'today': datePlan = date.today().strftime('%Y-%m-%d') @@ -114,12 +113,14 @@ def agenda(request): # liste des users avec agenda agendas = get_users_agenda(request, '') - # le user a-t-il un agenda ? - agenda = 'JMD' - for item in agendas: - if item.CD_UTI == logged_in.upper(): - agenda = item.CD_UTI - + # le user est-il un commercial ? + member = get_member_info(request, logged_in) + if member['fonction'] == 'Commercial': + agenda = logged_in + isCommercial = True + else: + agenda = 'S' + isCommercial = False # prendre en compte les paramètres de saisie if 'agenda' in request.params: @@ -160,16 +161,17 @@ def agenda(request): 'allDay': False, 'color': color, 'textColor': 'Black', - 'url': '/rdv_edit/%s/%s' % (row.nodossier, row.nolig), + 'url': '/dossier_view/%s' % (row.nodossier), } events.append(json_event) return { - 'page_title': 'Agenda', + 'page_title': 'Agenda de %s' % agenda, 'fullcalendar_events': json.dumps(events), 'agendas': agendas, 'agenda': agenda, + 'isCommercial': isCommercial, 'types_rdv': types_rdv, 'type_rdv': type_rdv, 'message': message, diff --git a/mondumas/views/default.py b/mondumas/views/default.py index d2f0190..0034fe4 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -173,8 +173,8 @@ def login(request): referrer = '/' # never use the login form itself as came_from came_from = request.params.get('came_from', referrer) - password = u'' - message = u'' + password = '' + message = '' if 'form.submitted' in request.params: login = request.params['login'] password = request.params['password'] diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index 167e470..a09651b 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -85,6 +85,7 @@ def dossier_lookup(request): def dossier_view(request): nodossier = request.matchdict['nodossier'] societe = nodossier[0:2] + logged_in = request.authenticated_userid.upper() url = request.route_url("dossier_view", nodossier=nodossier) @@ -100,6 +101,9 @@ def dossier_view(request): similaires = get_similaires_byChantier(request, dossier.societe, dossier.C_NOM, dossier.C_ADR, dossier.C_CP, dossier.C_VILLE) # lire tous les documents attachés docs_attaches = get_docs_attaches(request, 'DOCS_ATTACHES', nodossier) + if nodossier.startswith('PL'): + # lire rapport de rdf + rapport = get_rapport_by_no(request, nodossier) # select background color according to society bg_color = "bg-%s" % societe @@ -108,6 +112,7 @@ def dossier_view(request): 'nodossier': nodossier, 'dossier': dossier, 'details': details, + 'rapport': rapport, 'documents': documents, 'similaires': similaires, 'docs_attaches': docs_attaches, @@ -167,7 +172,7 @@ def dossier_selected(request): @view_config(route_name='suivi_edit', renderer='../templates/dossier/suivi_edit.pt', permission='view') def suivi_edit(request): - logged_in = request.authenticated_userid + logged_in = request.authenticated_userid.upper() nodossier = request.matchdict['nodossier'] nolig = request.matchdict['nolig'] url = request.route_url("suivi_edit", nodossier=nodossier, nolig=nolig) @@ -177,7 +182,7 @@ def suivi_edit(request): # nouveau suivi = {} suivi['COMMENT'] = '' - suivi['USERMAJ'] = logged_in.upper() + suivi['USERMAJ'] = logged_in suivi['DATEMAJ'] = datetime.now() page_title= 'Nouveau suivi' else: @@ -196,7 +201,7 @@ def suivi_edit(request): new_values[param] = request.params[param] if new_values: - new_values['USERMAJ'] = logged_in.upper() + new_values['USERMAJ'] = logged_in new_values['DATE'] = date.today() update_suivi(request, nodossier, nolig, new_values) @@ -250,7 +255,7 @@ def dossier_edit(request): @view_config(route_name='upload_doc', renderer='../templates/dossier/upload_doc.pt', permission='view') def upload_doc(request): - logged_in = request.authenticated_userid + logged_in = request.authenticated_userid.upper() nodossier = request.matchdict['nodossier'] societe = nodossier[0:2] nochantier = nodossier[3:] @@ -300,7 +305,7 @@ def upload_doc(request): # Now that we know the file has been fully saved to disk move it into place. os.rename(temp_file_path, file_path) - insert_dossier_attaches(request, nodossier, filename, '%s Ko' % str(filesize), logged_in.upper()) + insert_dossier_attaches(request, nodossier, filename, '%s Ko' % str(filesize), logged_in) request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success') # lire tous les documents attachés docs_attaches = get_docs_attaches(request, 'DOCS_ATTACHES', nodossier) @@ -314,3 +319,43 @@ def upload_doc(request): 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } +@view_config(route_name='rdf_edit', renderer='../templates/dossier/rdf_edit.pt', permission='view') +def rdf_edit(request): + logged_in = request.authenticated_userid.upper() + nodossier = request.matchdict['nodossier'] + url = request.route_url('rdf_edit', nodossier=nodossier) + + # lire le rapport + rapport = get_rapport_by_no(request, nodossier) + if rapport == None: + # si non trouvé, creer un nouveau rapport + insert_rapport(request, nodossier, logged_in) + # lire le rapport + rapport = get_rapport_by_no(request, nodossier) + + caracteristiques = ["Maison individuelle", "Immeuble collectif", u"Copropriété", "Commerce", "Bureaux"] + equipements = get_rdf_causes(request, 'C01') + reseaux_int = get_rdf_causes(request, 'C02') + + if 'form.submitted' in request.params: + new_values = {} + for param, db_value in rapport.items(): + if param in request.params and request.params[param] != db_value: + new_values[param] = request.params[param] + + if new_values: + update_rdf(request, nodossier, new_values) + request.session.flash(u"Le dossier a été mis à jour avec succès.", 'success') + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) + + return { + 'page_title': u"Modifier le rapport de RDF : %s" % nodossier, + 'url': url, + 'logged_in': logged_in, + 'rapport': rapport, + 'nodossier': nodossier, + 'caracteristiques': caracteristiques, + 'equipements': equipements, + 'reseaux_int': reseaux_int, + } + diff --git a/mondumas/views/parametres.py b/mondumas/views/parametres.py index 5470e38..8626728 100644 --- a/mondumas/views/parametres.py +++ b/mondumas/views/parametres.py @@ -1,239 +1,312 @@ -# -*- coding: utf8 -*- -from pyramid.response import Response -from pyramid.renderers import render, get_renderer -from pyramid.view import ( - view_config, - forbidden_view_config, -) -from pyramid.httpexceptions import ( - HTTPFound, - HTTPNotFound, - HTTPForbidden, -) - -from pyramid_mailer.message import Message, Attachment -from datetime import * -import hashlib - -from sqlalchemy.exc import DBAPIError -from ..security import groupfinder - -import json - -from ..models.parametres import * -from ..models.default import * -from ..views.default import * - -@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage') -def parametres(request): - logged_in = request.authenticated_userid.lower() - - return { - 'page_title': u"Paramètres", - 'logged_in': logged_in, - } - -@view_config(route_name='users_list', renderer='../templates/parametres/users_list.pt', permission='manage') -def users_list(request): - # lire les utilisateurs - items = get_member_by_id(request, '0') - - # construire la liste - liste=[] - for item in items: - if item.actif == 0: - etat = 'Inactif' - else: - etat = '' - - if item.access == 0: - role = '' - elif item.access == 8: - role = 'Compta' - elif item.access == 9: - role = 'Admin' - else: - role = 'Gestion' - - d = (item.CD_UTI, item.NOM, item.email, item.agenda, role, etat) - liste.append(d) - - return { - 'page_title': u'Liste des utilisateurs', - 'dt_data': json.dumps(liste), - } - -@view_config(route_name='users_ua', renderer='../templates/parametres/users_ua.pt', permission='manage') -def users_ua(request): - # lire les utilisateurs - items = get_member_by_id(request, '0') - - # construire la liste - liste=[] - for item in items: - # utilisateur a au moins une connexion ? - if item.dern_cnx_le: - der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M') - - d = (der_cnx_le, item.CD_UTI, item.NOM, item.ua_string) - liste.append(d) - - return { - 'page_title': u'Liste des connexions', - 'dt_data': json.dumps(liste), - } - - - -@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage') -def user_edit(request): - cd_uti = request.matchdict['cd_uti'] - url = request.route_url('user_edit', cd_uti=cd_uti) - message = '' - access = ["0 | Production", "5 | Gestion", u"8 | Comptabilité", "9 | Administration"] - - if cd_uti == '0': - # nouveau - individu = {} - individu['CD_UTI'] = '0' - individu['NOM'] = '' - individu['email'] = '' - individu['access'] = '0 | Production' - individu['actif'] = 1 - individu['agenda'] = 0 - page_title= 'Nouvelle Fiche' - else: - # lire la fiche de l'individu - individu = get_member_by_id(request, cd_uti) - if not individu: - request.session.flash(u"Utilisateur non trouvé : %s" % cd_uti, 'warning') - return HTTPFound(location=request.route_url('users_list')) - page_title= u"Fiche de %s" %(individu.NOM) - - if 'form.submitted' in request.params: - new_values = {} - for param, db_value in individu.items(): - if param in request.params and request.params[param] != db_value: - new_values[param] = request.params[param] - - # actif coché ? - if 'actif' in request.params: - new_values['actif'] = 1 - else: - new_values['actif'] = 0 - # agenda coché ? - if 'agenda' in request.params: - new_values['agenda'] = 1 - else: - new_values['agenda'] = 0 - - if new_values: - update_membre(request, cd_uti, new_values) - request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') - return HTTPFound(location=request.route_url('users_list')) - - if 'form.deleted' in request.params: - delete_membre(request, cd_uti) - request.session.flash(u"La fiche a été supprimée avec succès.", 'success') - return HTTPFound(location=request.route_url('users_list')) - - return { - 'page_title': page_title, - 'url': url, - 'individu': individu, - 'access': access, - 'message': message, - } - -@view_config(route_name='dashboard', renderer='../templates/parametres/dashboard.pt', permission='manage') -def dashboard(request): - - # lire le log de nuit - log_nuit = get_log_nuit(request) - - return { - 'page_title': u"Tableau de bord", - 'log_nuit': log_nuit, - } - -@view_config(route_name='last_emailing', renderer='../templates/parametres/last_emailing.pt', permission='manage') -def last_emailing(request): - - items = get_last_emailing(request) - - # construire la liste - liste=[] - for item in items: - if item.rdv_date: - resa_date = item.rdv_date.strftime('%d-%m-%Y') - else: - resa_date = "" - - if item.envoye_le: - envoye_le = item.envoye_le.strftime('%d-%m-%Y %H:%M') - else: - envoye_le = "" - - d = (resa_date, '%s-%s' % (item.societe, item.nochantier), item.nompren, item.email, item.rdv_statut, envoye_le, item.cree_le.strftime('%d-%m-%Y %H:%M')) - liste.append(d) - - return { - 'page_title': u'Liste des derniers emailing', - 'dt_data': json.dumps(liste), - } - -@view_config(route_name='orphans_de', renderer='../templates/parametres/orphans_de.pt', permission='manage') -def orphans_de(request): - - societe = request.matchdict['societe'] - url = request.route_url('orphans_de', societe=societe) - message = u'' - societes = ['PE','ME','PL','PO','CD'] - nochantier = '0' - - # prendre en compte les paramètres de saisie - if 'societe' in request.params: - societe = request.params["societe"] - url = request.route_url('orphans_de', societe=societe) - - if 'form.nochantier' in request.params: - message = '' - nochantier = request.params['nochantier'] - - # oui, NestedMultiDict([('form.submitted', u''), ('id0', u'271246'), ('id1', u'370929')]) - for param in request.params: - if param[:2] == 'id': - update_nochantier(request, societe, request.params[param], int(nochantier)) - message = u"Le numéro de chantier est mis à jour avec succès" - - # lire le premier devis orphelin - devis = get_orphans_DE(request, societe) - - # lire tous les dossiers de ce chantier - dossiers = get_dossiers_byChantier(request, societe, '%s;%s;%s' % (devis.C_NOM, devis.C_ADR, devis.C_VILLE)) - liste=[] - nochantiers=[] - # construire la liste - for item in dossiers: - dossier_id = '%s-%s' % (item.TYPE, item.numero) - if item.nochantier != 0: - nochantiers.append(item.nochantier) - nochantier = item.nochantier - d = (dossier_id, dossier_id, item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant), - item.nosin, item.nochantier) - liste.append(d) - - if len(nochantiers) == 0: - nochantiers.append(1) - - return { - 'page_title': u"DEVIS orphelins", - 'url': url, - 'message': message, - 'devis': devis, - 'dt_data': json.dumps(liste), - 'societes': societes, - 'societe': societe, - 'nochantiers': nochantiers, - 'nochantier': nochantier, - } +# -*- coding: utf8 -*- +from pyramid.response import Response +from pyramid.renderers import render, get_renderer +from pyramid.view import ( + view_config, + forbidden_view_config, +) +from pyramid.httpexceptions import ( + HTTPFound, + HTTPNotFound, + HTTPForbidden, +) + +from pyramid_mailer.message import Message, Attachment +from datetime import * +import hashlib + +from sqlalchemy.exc import DBAPIError +from ..security import groupfinder + +import json + +from ..models.parametres import * +from ..models.default import * +from ..views.default import * + +@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage') +def parametres(request): + logged_in = request.authenticated_userid.lower() + + return { + 'page_title': u"Paramètres", + 'logged_in': logged_in, + } + +@view_config(route_name='users_list', renderer='../templates/parametres/users_list.pt', permission='manage') +def users_list(request): + # lire les utilisateurs + items = get_member_by_id(request, '0') + + # construire la liste + liste=[] + for item in items: + if item.actif == 0: + etat = 'Inactif' + else: + etat = '' + + if item.access == 0: + role = 'Commercial' + elif item.access == 8: + role = 'Compta' + elif item.access == 9: + role = 'Admin' + else: + role = 'Gestion' + + d = (item.CD_UTI, item.NOM, item.email, item.agenda, role, etat) + liste.append(d) + + return { + 'page_title': u'Liste des utilisateurs', + 'dt_data': json.dumps(liste), + } + +@view_config(route_name='users_ua', renderer='../templates/parametres/users_ua.pt', permission='manage') +def users_ua(request): + # lire les utilisateurs + items = get_member_by_id(request, '0') + + # construire la liste + liste=[] + for item in items: + # utilisateur a au moins une connexion ? + if item.dern_cnx_le: + der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M') + + d = (der_cnx_le, item.CD_UTI, item.NOM, item.ua_string) + liste.append(d) + + return { + 'page_title': u'Liste des connexions', + 'dt_data': json.dumps(liste), + } + +@view_config(route_name='connecter_a', permission='manage') +def connecter_a(request): + # paramètre fourni ? + login = request.matchdict["login"] + if len(login) > 0: + request.session.invalidate() + headers = forget(request) + headers = remember(request, login) + return HTTPFound(location="/", headers=headers) + else: + return HTTPFound(location="/") + + + +@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage') +def user_edit(request): + cd_uti = request.matchdict['cd_uti'] + url = request.route_url('user_edit', cd_uti=cd_uti) + message = '' + access = ["0 | Production", "5 | Gestion", u"8 | Comptabilité", "9 | Administration"] + + if cd_uti == '0': + # nouveau + individu = {} + individu['CD_UTI'] = '0' + individu['NOM'] = '' + individu['email'] = '' + individu['access'] = '0 | Production' + individu['actif'] = 1 + individu['agenda'] = 0 + page_title= 'Nouvelle Fiche' + else: + # lire la fiche de l'individu + individu = get_member_by_id(request, cd_uti) + if not individu: + request.session.flash(u"Utilisateur non trouvé : %s" % cd_uti, 'warning') + return HTTPFound(location=request.route_url('users_list')) + page_title= u"Fiche de %s" %(individu.NOM) + + if 'form.submitted' in request.params: + new_values = {} + for param, db_value in individu.items(): + if param in request.params and request.params[param] != db_value: + new_values[param] = request.params[param] + + # actif coché ? + if 'actif' in request.params: + new_values['actif'] = 1 + else: + new_values['actif'] = 0 + # agenda coché ? + if 'agenda' in request.params: + new_values['agenda'] = 1 + else: + new_values['agenda'] = 0 + + if new_values: + update_membre(request, cd_uti, new_values) + request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') + return HTTPFound(location=request.route_url('users_list')) + + if 'form.deleted' in request.params: + delete_membre(request, cd_uti) + request.session.flash(u"La fiche a été supprimée avec succès.", 'success') + return HTTPFound(location=request.route_url('users_list')) + + return { + 'page_title': page_title, + 'url': url, + 'individu': individu, + 'access': access, + 'message': message, + } + +@view_config(route_name='dashboard', renderer='../templates/parametres/dashboard.pt', permission='manage') +def dashboard(request): + + # lire le log de nuit + log_nuit = get_log_nuit(request) + + return { + 'page_title': u"Tableau de bord", + 'log_nuit': log_nuit, + } + +@view_config(route_name='last_emailing', renderer='../templates/parametres/last_emailing.pt', permission='manage') +def last_emailing(request): + + items = get_last_emailing(request) + + # construire la liste + liste=[] + for item in items: + if item.rdv_date: + resa_date = item.rdv_date.strftime('%d-%m-%Y') + else: + resa_date = "" + + if item.envoye_le: + envoye_le = item.envoye_le.strftime('%d-%m-%Y %H:%M') + else: + envoye_le = "" + + d = (resa_date, '%s-%s' % (item.societe, item.nochantier), item.nompren, item.email, item.rdv_statut, envoye_le, item.cree_le.strftime('%d-%m-%Y %H:%M')) + liste.append(d) + + return { + 'page_title': u'Liste des derniers emailing', + 'dt_data': json.dumps(liste), + } + +@view_config(route_name='orphans_de', renderer='../templates/parametres/orphans_de.pt', permission='manage') +def orphans_de(request): + + societe = request.matchdict['societe'] + url = request.route_url('orphans_de', societe=societe) + message = u'' + societes = ['PE','ME','PL','PO','CD'] + nochantier = '0' + + # prendre en compte les paramètres de saisie + if 'societe' in request.params: + societe = request.params["societe"] + url = request.route_url('orphans_de', societe=societe) + + if 'form.nochantier' in request.params: + message = '' + nochantier = request.params['nochantier'] + + # oui, NestedMultiDict([('form.submitted', u''), ('id0', u'271246'), ('id1', u'370929')]) + for param in request.params: + if param[:2] == 'id': + update_nochantier(request, societe, request.params[param], int(nochantier)) + message = u"Le numéro de chantier est mis à jour avec succès" + + # lire le premier devis orphelin + devis = get_orphans_DE(request, societe) + + # lire tous les dossiers de ce chantier + dossiers = get_dossiers_byChantier(request, societe, '%s;%s;%s' % (devis.C_NOM, devis.C_ADR, devis.C_VILLE)) + liste=[] + nochantiers=[] + # construire la liste + for item in dossiers: + dossier_id = '%s-%s' % (item.TYPE, item.numero) + if item.nochantier != 0: + nochantiers.append(item.nochantier) + nochantier = item.nochantier + d = (dossier_id, dossier_id, item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant), + item.nosin, item.nochantier) + liste.append(d) + + if len(nochantiers) == 0: + nochantiers.append(1) + + return { + 'page_title': u"DEVIS orphelins", + 'url': url, + 'message': message, + 'devis': devis, + 'dt_data': json.dumps(liste), + 'societes': societes, + 'societe': societe, + 'nochantiers': nochantiers, + 'nochantier': nochantier, + } + +@view_config(route_name='rdf_causes_list', renderer='../templates/parametres/rdf_causes_list.pt', permission='manage') +def rdf_causes_list(request): + + # lire les causes des RDF + items = get_rdf_causes_by_id(request, '0') + + # construire la liste + liste=[] + for item in items: + modif_le = item.modif_le.strftime('%d/%m/%Y - %H:%M') + d = (item.code, item.libelle, modif_le) + liste.append(d) + + return { + 'page_title': u'RDF : Liste des causes de fuite', + 'dt_data': json.dumps(liste), + } + +@view_config(route_name='rdf_cause_edit', renderer='../templates/parametres/rdf_cause_edit.pt', permission='view') +def rdf_cause_edit(request): + + logged_in = request.authenticated_userid + old_code = request.matchdict['code'] + url = request.route_url("rdf_cause_edit", code=old_code) + + message = '' + if old_code == '0': + # nouveau + cause = {} + cause['code'] = '' + cause['libelle'] = '' + cause['modif_le'] = datetime.now() + page_title= 'Nouvelle cause de fuite' + else: + page_title= "Modification de %s" % (old_code) + # lire la cause + cause = get_rdf_causes_by_id(request, old_code) + if not cause: + request.session.flash(u"Cause non trouvée : %s" % old_code, 'warning') + return HTTPFound(location=request.route_url('rdf_causes_list')) + + if 'form.submitted' in request.params: + code = request.params['code'] + 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_list')) + + if 'form.deleted' in request.params: + delete_rdf_cause(request, old_code) + request.session.flash(u"La cause a été supprimée avec succès.", 'success') + return HTTPFound(location=request.route_url('rdf_causes_list')) + + return { + 'page_title': page_title, + 'url': url, + 'old_code': old_code, + 'cause': cause, + 'message': message, + }