From d8827bcba82c32347dcdd4f4b52399e5c356c8c1 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Wed, 28 Nov 2018 16:42:30 +0100 Subject: [PATCH] ajout module Dossier et devis_view.pt + creer_rdv.pt --- mondumas/models/agenda.py | 17 +- mondumas/models/default.py | 60 ------ mondumas/models/dossier.py | 83 ++++++++ mondumas/static/css/style.less | 8 + mondumas/templates/agenda/agenda.pt | 73 ++++++- mondumas/templates/agenda/rdv_edit.pt | 6 + mondumas/templates/dossier/devis_view.pt | 164 +++++++++++++++ .../{default => dossier}/dossier_lookup.pt | 0 .../{default => dossier}/dossier_view.pt | 6 +- mondumas/views/agenda.py | 28 ++- mondumas/views/default.py | 147 +------------ mondumas/views/dossier.py | 195 ++++++++++++++++++ 12 files changed, 572 insertions(+), 215 deletions(-) create mode 100644 mondumas/models/dossier.py create mode 100644 mondumas/templates/dossier/devis_view.pt rename mondumas/templates/{default => dossier}/dossier_lookup.pt (100%) rename mondumas/templates/{default => dossier}/dossier_view.pt (96%) create mode 100644 mondumas/views/dossier.py diff --git a/mondumas/models/agenda.py b/mondumas/models/agenda.py index c61c4fc..53b5675 100644 --- a/mondumas/models/agenda.py +++ b/mondumas/models/agenda.py @@ -26,6 +26,12 @@ def get_users_agenda(request): results = request.dbsession.execute(query).fetchall() 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) @@ -33,7 +39,7 @@ def get_rendez_vous(request, itc): 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_nom, e.c_ville FROM dem_lig l + 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 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 """ @@ -71,3 +77,12 @@ def update_rdv(request, nodossier, nolig, new_values): 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/default.py b/mondumas/models/default.py index 8586ff1..261d0b9 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -81,63 +81,3 @@ def delete_membre(request, cd_uti): query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;" execute_query(request, query, {'cd_uti': cd_uti}) -def get_chantiers_byName(request, societe, name, tous): - - query = "CALL spGET_CHANTIERS_byName('%s','%s');" % (societe, name) - results = request.dbsession.execute(query).fetchall() - return results - -def get_dossier_by_no(request,nodossier): - societe = nodossier[0:2] - no_id = nodossier[3:] - query = """ -SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM dem_devis d -INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli -INNER JOIN p_cabinet a ON d.cabinet = a.code -INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp -where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id); - results = request.dbsession.execute(query).first() - return results - -def get_dossier_rdv_by_no(request,nodossier, nolig): - societe = nodossier[0:2] - no_id = nodossier[3:] - - if nolig == '0': - query = "SELECT * FROM dem_lig where societe = '%s' and no_id=%s;" % (societe, no_id) - results = request.dbsession.execute(query).fetchall() - else: - query = "SELECT * FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig) - results = request.dbsession.execute(query).first() - - return results - -def get_documents_byChantier(request,nodossier): - societe = nodossier[0:2] - no_id = nodossier[3:] - - query = "CALL spGET_DOSSIERS_byNumeo('%s',%s);" % (societe, no_id) - results = request.dbsession.execute(query).fetchall() - return results - -def update_suivi(request, nodossier, nolig, new_values): - societe = nodossier[0:2] - no_id = nodossier[3:] - - new_values['societe'] = societe - new_values['NO_ID'] = no_id - s = '' - for param in new_values.keys(): - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if nolig == '0': - query = "INSERT INTO dem_lig SET %s" % s - else: - 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) - diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py new file mode 100644 index 0000000..7d4c292 --- /dev/null +++ b/mondumas/models/dossier.py @@ -0,0 +1,83 @@ +# -*- 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 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_chantiers_byName(request, societe, name, tous): + + query = "CALL spGET_CHANTIERS_byName('%s','%s');" % (societe, name) + results = request.dbsession.execute(query).fetchall() + return results + +def get_dossier_by_no(request,nodossier): + societe = nodossier[0:2] + no_id = nodossier[3:] + query = """ +SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM dem_devis d +INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli +INNER JOIN p_cabinet a ON d.cabinet = a.code +INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp +where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id); + results = request.dbsession.execute(query).first() + return results + +def get_dossier_rdv_by_no(request,nodossier, nolig): + societe = nodossier[0:2] + no_id = nodossier[3:] + + if nolig == '0': + query = "SELECT * FROM dem_lig WHERE societe = :societe AND no_id = :no_id;" + results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() + else: + query = """ +SELECT l.*, d.C_QUALITE, d.C_NOM FROM dem_lig l INNER JOIN dem_devis d ON l.societe = d.societe and l.no_id = d.no_id +where l.societe = '%s' and l.no_id=%s and l.nolig=%s;""" % (societe, no_id, nolig) + results = request.dbsession.execute(query).first() + + return results + +def get_documents_byChantier(request,nodossier): + societe = nodossier[0:2] + no_id = nodossier[3:] + + query = "CALL spGET_DOSSIERS_byNumeo('%s',%s);" % (societe, no_id) + results = request.dbsession.execute(query).fetchall() + return results + +def update_suivi(request, nodossier, nolig, new_values): + societe = nodossier[0:2] + no_id = nodossier[3:] + + new_values['societe'] = societe + new_values['NO_ID'] = no_id + s = '' + for param in new_values.keys(): + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if nolig == '0': + query = "INSERT INTO dem_lig SET %s" % s + else: + 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) + diff --git a/mondumas/static/css/style.less b/mondumas/static/css/style.less index 5f41384..4e0c942 100644 --- a/mondumas/static/css/style.less +++ b/mondumas/static/css/style.less @@ -46,6 +46,14 @@ color: #000000 !important; } +.modal-dialog { + position: absolute; + margin-left: 200px; + height: 500px; + top: 80px; + +} + #footer { text-align: center; color: #428BCA; diff --git a/mondumas/templates/agenda/agenda.pt b/mondumas/templates/agenda/agenda.pt index fd2216c..19aef5d 100644 --- a/mondumas/templates/agenda/agenda.pt +++ b/mondumas/templates/agenda/agenda.pt @@ -17,7 +17,7 @@
- +
@@ -39,9 +39,61 @@ RDV Plomberie 


+ + +
diff --git a/mondumas/templates/agenda/rdv_edit.pt b/mondumas/templates/agenda/rdv_edit.pt index f80854c..12fa5f8 100644 --- a/mondumas/templates/agenda/rdv_edit.pt +++ b/mondumas/templates/agenda/rdv_edit.pt @@ -10,6 +10,12 @@ data-fv-icon-invalid="glyphicon glyphicon-remove" data-fv-icon-validating="glyphicon glyphicon-refresh"> +
+ +
+ ${nodossier}  |  ${rdv.C_QUALITE} ${rdv.C_NOM} +
+
diff --git a/mondumas/templates/dossier/devis_view.pt b/mondumas/templates/dossier/devis_view.pt new file mode 100644 index 0000000..079a5ab --- /dev/null +++ b/mondumas/templates/dossier/devis_view.pt @@ -0,0 +1,164 @@ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + +

CHANTIER

+

${dossier.C_QUALITE} ${dossier.C_NOM}

+ ${dossier.C_ADR}
+ ${dossier.C_ADR2}
+ ${dossier.C_CP} ${dossier.C_VILLE}
+
+ Etage - Code
+ Tél. domicile - prof.
+ Tél. mobile - fax +
+ ${dossier.C_ETAGE} - ${dossier.C_CODE}
+ ${dossier.C_TEL1} - ${dossier.C_TEL2}
+ ${dossier.C_TELP} - ${dossier.C_FAX} +
+ Cabinet
+ Expert
+ Référence expert +
+ ${dossier.nom_cabinet}
+ ${dossier.nom_expert}
+ ${dossier.REF_EXPERT}
+
+ Police
+ Sinistre
+ Votre référence
+
+ ${dossier.NOPOL}
+ ${dossier.NOSIN}
+ ${dossier.VREF}
+
+
+ + +
+ + + + + + + + + +

CLIENT

+

${dossier.QUALITE} ${dossier.NOM}

+ ${dossier.ADRESSE}
+ ${dossier.ADRESSE2}
+ ${dossier.CP} ${dossier.VILLE}
+
+ Responsable
+ Tél. 1 - 2
+ Tél. mobile - fax +
+ ${dossier.NOMRESP}
+ ${dossier.TEL1} - ${dossier.TEL2}
+ ${dossier.TELP} - ${dossier.FAX} +
+
+

Statut : ${dossier.STATUS}

+
+ +
+ +
+
+

+ +  SUIVI +

+
+
+
+

+ Nouvelle ligne

+ + + + + + + + + + + + + + + + +
DateActionRendez-vousRéf. lettrePar
+ + ${detail.DATE.strftime('%d-%m-%Y')} + + ${detail.COMMENT} ${detail.COMMENTVI} + + ${detail.COMMENT} ${detail.COMMENTVI} + + + + ${detail.rdv_debut.strftime('%d-%m-%Y %H:%M')} avec ${detail.LISTE} + + ${detail.REF_LET}${detail.USERMAJ}
+
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + + +
NuméroDateClientMontantStatut
${detail.TYPE}-${detail.numero}${detail.date.strftime('%d-%m-%Y')}${detail.nomcli}${layout.to_euro(detail.montant)}${detail.status}
+
+
+
+
+ + +
+
diff --git a/mondumas/templates/default/dossier_lookup.pt b/mondumas/templates/dossier/dossier_lookup.pt similarity index 100% rename from mondumas/templates/default/dossier_lookup.pt rename to mondumas/templates/dossier/dossier_lookup.pt diff --git a/mondumas/templates/default/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt similarity index 96% rename from mondumas/templates/default/dossier_view.pt rename to mondumas/templates/dossier/dossier_view.pt index da7600a..8bc5ace 100644 --- a/mondumas/templates/default/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -147,8 +147,10 @@ Statut - ${detail.TYPE}-${detail.numero} - ${detail.date.strftime('%d-%m/-%Y')} + + ${detail.nodossier} + + ${detail.date.strftime('%d-%m-%Y')} ${detail.nomcli} ${layout.to_euro(detail.montant)} ${detail.status} diff --git a/mondumas/views/agenda.py b/mondumas/views/agenda.py index f77ea65..881a19a 100644 --- a/mondumas/views/agenda.py +++ b/mondumas/views/agenda.py @@ -21,7 +21,7 @@ from ..security import groupfinder import json from ..models.agenda import * -from ..models.default import * +from ..models.dossier import * @view_config(route_name='rdv_edit', renderer='../templates/agenda/rdv_edit.pt', permission='view') @@ -39,6 +39,9 @@ def rdv_edit(request): request.session.flash(u"Rendez-vous non trouvé : %s" % nodossier, 'warning') return HTTPFound(location=request.route_url('agenda', date='today')) + # memorize nodossier et nom dossier + request.session['mem_nodossier'] = nodossier + request.session['mem_nomdossier'] = '%s %s' % (rdv.C_QUALITE, rdv.C_NOM) page_title= u"Modification du rdv du %s" % (rdv.rdv_debut.strftime('%d-%m-%Y %H:%M')) if 'form.submitted' in request.params: @@ -79,7 +82,7 @@ def agenda(request): if datePlan == 'today': datePlan = date.today().strftime('%Y-%m-%d') - url = request.route_url('planning', date=datePlan) + url = request.route_url('agenda', date=datePlan) url_select = request.route_url('dossier_select', date=datePlan) # recall code et nom élève @@ -90,6 +93,10 @@ def agenda(request): mem_nodossier = 'Aucun' mem_nomdossier = u'dossier sélectionné' + # liste des types de rdv + types_rdv = get_types_rdv(request) + type_rdv = u'RDV DEVIS' + # liste des users avec agenda agendas = get_users_agenda(request) @@ -104,8 +111,17 @@ def agenda(request): if 'agenda' in request.params: agenda = request.params["agenda"] - rows = get_rendez_vous(request, agenda) + # -- CREER un rendez-vous + if 'form.submitted' in request.params and mem_nodossier != 'Aucun': + dateRDV = request.params['dateRDV'] + heureRDV = request.params['heureRDV'] + type_rdv = request.params['type_rdv'] + + create_rdv(request, mem_nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in.upper()) + request.session.flash(u"Le rendez-vous a été CREE avec succès.", 'success') + rows = get_rendez_vous(request, agenda) + # construire la liste des events events = [] for row in rows: @@ -121,7 +137,7 @@ def agenda(request): color = "Gold" json_event = { - 'title': row.c_nom, + 'title': '%s %s' % (row.c_qualite, row.c_nom), 'description': row.c_ville.capitalize(), 'start': row.rdv_debut.strftime('%Y-%m-%d %H:%M:%S'), 'end': row.rdv_fin.strftime('%Y-%m-%d %H:%M:%S'), @@ -138,10 +154,14 @@ def agenda(request): 'fullcalendar_events': json.dumps(events), 'agendas': agendas, 'agenda': agenda, + 'types_rdv': types_rdv, + 'type_rdv': type_rdv, 'message': message, 'mem_nodossier': mem_nodossier, 'mem_nomdossier': mem_nomdossier, + 'url': url, 'url_select': url_select, + 'datePlan': datePlan, } @view_config(route_name='planning', renderer='../templates/agenda/planning.pt', permission='view') diff --git a/mondumas/views/default.py b/mondumas/views/default.py index d00fb95..e6d176f 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -146,7 +146,7 @@ def redefinir_mdp(request): @view_config(route_name='login', renderer='../templates/default/login.pt', permission='view') -@forbidden_view_config(renderer='../templates/login.pt') +@forbidden_view_config(renderer='../templates/default/login.pt') def login(request): current_route_path = request.current_route_path() @@ -214,148 +214,3 @@ gestion.entreprise-dumas.com mailer.send_immediately(message) -@view_config(route_name='dossier_lookup', renderer='../templates/default/dossier_lookup.pt', permission='view') -@view_config(route_name='dossier_select', renderer='../templates/default/dossier_lookup.pt', permission='view') -def dossier_lookup(request): - - if 'dossier_select' in request.current_route_path() : - # récupérer les paramètres de l'appel de la view - datePlan = request.matchdict['date'] - # sélectionner dossier -> goto planning - goto_url = '/dossier_selected/agenda/%s/' % datePlan - url = request.route_url('dossier_select', date=datePlan) - else: - # recherche dossier -> goto fiche dossier - goto_url = '/dossier_selected/dossier_view/%s/' % date.today().strftime('%Y-%m-%d') - url = request.route_url('dossier_lookup') - - message = u'' - societes = ['PE','ME','PL','PO','CD'] - societe = 'PE' - liste=[] - name = u'' - cb_tous = "non" - - if 'form.submitted' in request.params: - name = request.params['name'] - societe = request.params['societe'] - # si afficher tous les fiches ? - if 'cb_tous' in request.params: - cb_tous = "oui" - chantiers = get_chantiers_byName(request, societe, name, True) - else: - cb_tous = "non" - chantiers = get_chantiers_byName(request, societe, name, False) - if len(chantiers) == 0: - message = u"Chantier non trouvé : %s" % name - # construire la liste - for item in chantiers: - d = ('%s-%s' % (societe, item.numero),item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant), - item.nosin, item.status) - liste.append(d) - - return { - 'page_title': u"Rechercher un chantier", - 'url': url, - 'goto_url': goto_url, - 'message': message, - 'dt_data': json.dumps(liste), - 'societes': societes, - 'societe': societe, - 'name': name, - 'cb_tous': cb_tous, - } - -@view_config(route_name='dossier_view', renderer='../templates/default/dossier_view.pt', permission='view') -def dossier_view(request): - nodossier = request.matchdict['nodossier'] - url = request.route_url("dossier_view", nodossier=nodossier) - - dossier = get_dossier_by_no(request, nodossier) - if dossier is None: - request.session.flash(u"Le dossier no %s est introuvable" % (nodossier), 'danger') - return HTTPFound(location=request.route_url("chantier_lookup")) - # lire tous le suivi du dossier - details = get_dossier_rdv_by_no(request, nodossier, '0') - # lire toutes les dossiers du chantiers - documents = get_documents_byChantier(request, nodossier) - return { - 'page_title': u"Dossier : %s" % (nodossier), - 'nodossier': nodossier, - 'dossier': dossier, - 'details': details, - 'documents': documents, - } - -@view_config(route_name='dossier_selected', permission='view') -def dossier_selected(request): - - # récupérer les paramètres de l'appel de la view - goto = request.matchdict['goto'] - datePlan = request.matchdict['date'] - nodossier = request.matchdict['nodossier'] - - # fiche dossier - dossier = get_dossier_by_no(request, nodossier) - # memorize nodossier et nom dossier - request.session['mem_nodossier'] = nodossier - request.session['mem_nomdossier'] = dossier.C_NOM - if goto == 'dossier_view': - return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) - else: - return HTTPFound(location=request.route_url('agenda', date=datePlan)) - -@view_config(route_name='suivi_edit', renderer='../templates/default/suivi_edit.pt', permission='view') -def suivi_edit(request): - - logged_in = request.authenticated_userid - nodossier = request.matchdict['nodossier'] - nolig = request.matchdict['nolig'] - url = request.route_url("suivi_edit", nodossier=nodossier, nolig=nolig) - - message = '' - if nolig == '0': - # nouveau - suivi = {} - suivi['COMMENT'] = '' - suivi['COMMENTVI'] = '' - suivi['USERMAJ'] = logged_in.upper() - suivi['DATEMAJ'] = datetime.now() - page_title= 'Nouveau suivi' - else: - # lire le suivi - suivi = get_dossier_rdv_by_no(request, nodossier, nolig) - if not suivi: - request.session.flash(u"Suivi non trouvé : %s" % nodossier, 'warning') - return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) - - page_title= u"Modification du suivi %s" % (nolig) - - if 'form.submitted' in request.params: - new_values = {} - for param, db_value in suivi.items(): - if param in request.params and request.params[param] != db_value: - new_values[param] = request.params[param] - - if new_values: - new_values['USERMAJ'] = logged_in.upper() - new_values['DATE'] = date.today() - - update_suivi(request, nodossier, nolig, new_values) - request.session.flash(u"Le suivi a été mis à jour avec succès.", 'success') - - return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) - - if 'form.deleted' in request.params: - delete_rdv(request, nodossier, nolig) - request.session.flash(u"Le suivi a été supprimé avec succès.", 'success') - return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) - - return { - 'page_title': page_title, - 'url': url, - 'nodossier': nodossier, - 'nolig': nolig, - 'suivi': suivi, - 'message': message, - } diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py new file mode 100644 index 0000000..896a7b7 --- /dev/null +++ b/mondumas/views/dossier.py @@ -0,0 +1,195 @@ +# -*- 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.security import ( + remember, + forget, +) +from pyramid.httpexceptions import ( + HTTPFound, + HTTPNotFound, + HTTPForbidden, +) +from pyramid_mailer import get_mailer +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.default import * +from ..models.dossier import * + +@view_config(route_name='dossier_lookup', renderer='../templates/dossier/dossier_lookup.pt', permission='view') +@view_config(route_name='dossier_select', renderer='../templates/dossier/dossier_lookup.pt', permission='view') +def dossier_lookup(request): + + if 'dossier_select' in request.current_route_path() : + # récupérer les paramètres de l'appel de la view + datePlan = request.matchdict['date'] + # sélectionner dossier -> goto planning + goto_url = '/dossier_selected/agenda/%s/' % datePlan + url = request.route_url('dossier_select', date=datePlan) + else: + # recherche dossier -> goto fiche dossier + goto_url = '/dossier_selected/dossier_view/%s/' % date.today().strftime('%Y-%m-%d') + url = request.route_url('dossier_lookup') + + message = u'' + societes = ['PE','ME','PL','PO','CD'] + societe = 'PE' + liste=[] + name = u'' + cb_tous = "non" + + if 'form.submitted' in request.params: + name = request.params['name'] + societe = request.params['societe'] + # si afficher tous les fiches ? + if 'cb_tous' in request.params: + cb_tous = "oui" + chantiers = get_chantiers_byName(request, societe, name, True) + else: + cb_tous = "non" + chantiers = get_chantiers_byName(request, societe, name, False) + if len(chantiers) == 0: + message = u"Chantier non trouvé : %s" % name + # construire la liste + for item in chantiers: + d = ('%s-%s' % (societe, item.numero),item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant), + item.nosin, item.status) + liste.append(d) + + return { + 'page_title': u"Rechercher un chantier", + 'url': url, + 'goto_url': goto_url, + 'message': message, + 'dt_data': json.dumps(liste), + 'societes': societes, + 'societe': societe, + 'name': name, + 'cb_tous': cb_tous, + } + +@view_config(route_name='dossier_view', renderer='../templates/dossier/dossier_view.pt', permission='view') +def dossier_view(request): + nodossier = request.matchdict['nodossier'] + url = request.route_url("dossier_view", nodossier=nodossier) + + dossier = get_dossier_by_no(request, nodossier) + if dossier is None: + request.session.flash(u"Le dossier no %s est introuvable" % (nodossier), 'danger') + return HTTPFound(location=request.route_url("chantier_lookup")) + # lire tous le suivi du dossier + details = get_dossier_rdv_by_no(request, nodossier, '0') + # lire toutes les dossiers du chantiers + documents = get_documents_byChantier(request, nodossier) + return { + 'page_title': u"Dossier : %s" % (nodossier), + 'nodossier': nodossier, + 'dossier': dossier, + 'details': details, + 'documents': documents, + } + +@view_config(route_name='devis_view', renderer='../templates/dossier/devis_view.pt', permission='view') +def devis_view(request): + nodossier = request.matchdict['nodossier'] + url = request.route_url("devis_view", nodossier=nodossier) + + dossier = get_dossier_by_no(request, nodossier) + if dossier is None: + request.session.flash(u"Le dossier no %s est introuvable" % (nodossier), 'danger') + return HTTPFound(location=request.route_url("chantier_lookup")) + # lire tous le suivi du dossier + details = get_dossier_rdv_by_no(request, nodossier, '0') + # lire toutes les dossiers du chantiers + documents = get_documents_byChantier(request, nodossier) + return { + 'page_title': u"Dossier : %s" % (nodossier), + 'nodossier': nodossier, + 'dossier': dossier, + 'details': details, + 'documents': documents, + } + +@view_config(route_name='dossier_selected', permission='view') +def dossier_selected(request): + + # récupérer les paramètres de l'appel de la view + goto = request.matchdict['goto'] + datePlan = request.matchdict['date'] + nodossier = request.matchdict['nodossier'] + + # fiche dossier + dossier = get_dossier_by_no(request, nodossier) + # memorize nodossier et nom dossier + request.session['mem_nodossier'] = nodossier + request.session['mem_nomdossier'] = '%s %s' % (dossier.C_QUALITE, dossier.C_NOM) + if goto == 'dossier_view': + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) + else: + return HTTPFound(location=request.route_url('agenda', date=datePlan)) + +@view_config(route_name='suivi_edit', renderer='../templates/dossier/suivi_edit.pt', permission='view') +def suivi_edit(request): + + logged_in = request.authenticated_userid + nodossier = request.matchdict['nodossier'] + nolig = request.matchdict['nolig'] + url = request.route_url("suivi_edit", nodossier=nodossier, nolig=nolig) + + message = '' + if nolig == '0': + # nouveau + suivi = {} + suivi['COMMENT'] = '' + suivi['COMMENTVI'] = '' + suivi['USERMAJ'] = logged_in.upper() + suivi['DATEMAJ'] = datetime.now() + page_title= 'Nouveau suivi' + else: + # lire le suivi + suivi = get_dossier_rdv_by_no(request, nodossier, nolig) + if not suivi: + request.session.flash(u"Suivi non trouvé : %s" % nodossier, 'warning') + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) + + page_title= u"Modification du suivi %s" % (nolig) + + if 'form.submitted' in request.params: + new_values = {} + for param, db_value in suivi.items(): + if param in request.params and request.params[param] != db_value: + new_values[param] = request.params[param] + + if new_values: + new_values['USERMAJ'] = logged_in.upper() + new_values['DATE'] = date.today() + + update_suivi(request, nodossier, nolig, new_values) + request.session.flash(u"Le suivi a été mis à jour avec succès.", 'success') + + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) + + if 'form.deleted' in request.params: + delete_rdv(request, nodossier, nolig) + request.session.flash(u"Le suivi a été supprimé avec succès.", 'success') + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) + + return { + 'page_title': page_title, + 'url': url, + 'nodossier': nodossier, + 'nolig': nolig, + 'suivi': suivi, + 'message': message, + }