From 1faed4cb37fe28a1510a2bf368b7c4cecd0918f1 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Sun, 26 Jan 2020 21:51:37 +0100 Subject: [PATCH] =?UTF-8?q?am=C3=A9liorer=20gestion=20des=20photos=20dans?= =?UTF-8?q?=20RDF=20et=20dossier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mondumas/models/dossier.py | 35 +++-- mondumas/routes.py | 4 +- mondumas/templates/dossier/demandes.pt | 11 ++ mondumas/templates/dossier/dossier_view.pt | 4 +- mondumas/templates/dossier/rdf_view.pt | 23 +++- mondumas/templates/dossier/upload_img.pt | 10 +- mondumas/views/dossier.py | 153 ++++++++++++++------- 7 files changed, 163 insertions(+), 77 deletions(-) diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index e04ee88..1318075 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -154,7 +154,7 @@ def get_devis_lig_by_no(request,nodossier): results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() return results -def get_docs_attaches(request, nodossier, norapport, filename): +def get_docs_attaches(request, nodossier, norapport, nosection, filename): societe = nodossier[0:2] nochantier = int(nodossier[3:]) @@ -167,15 +167,19 @@ def get_docs_attaches(request, nodossier, norapport, filename): return results -def get_photos(request, nochantier, norapport): - - query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = 'PL' AND nochantier = :nochantier AND nodossier = :norapport ORDER BY cree_le;" - results = request.dbsession.execute(query, {'nochantier': nochantier, 'norapport': norapport}).fetchall() +def get_photos(request, nodossier, norapport, nosection): + societe = nodossier[0:2] + nochantier = int(nodossier[3:]) + query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = societe AND nochantier = :nochantier + AND nodossier = :norapport AND nosection = :nosection AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;""" + results = request.dbsession.execute(query, {'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection}).fetchall() return results -def delete_photos(request, nochantier, norapport, nomfic): - query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe='PL' AND nochantier=:nochantier AND nodossier=:norapport AND nomfichier=:nomfic;" - execute_query(request, query, {'nochantier': nochantier, 'norapport': norapport, 'nomfic': nomfic}) +def delete_photos(request, nodossier, norapport, nosection, nomfic): + societe = nodossier[0:2] + nochantier = int(nodossier[3:]) + query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND nosection=:nosection AND nomfichier=:nomfic;" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'nomfic': nomfic}) def update_dossier(request, nodossier, new_values): @@ -196,18 +200,18 @@ def update_dossier(request, nodossier, new_values): query = "UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s execute_query(request, query, new_values) -def insert_dossier_attaches(request, nodossier, norapport, filename, filesize, user): +def insert_dossier_attaches(request, nodossier, norapport, nosection, filename, filesize, user): societe = nodossier[0:2] nochantier = int(nodossier[3:]) # fichier existe ? - item = get_docs_attaches(request, nodossier, norapport, filename) + item = get_docs_attaches(request, nodossier, norapport, nosection, filename) if item: return # enregistrer dans la table dossier_attaches - query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nomfichier, taillefichier, cree_le, usermaj) - VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:filename,:filesize,NOW(),:user);""" - execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename, 'filesize': filesize, 'user': user}) + query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, nomfichier, taillefichier, cree_le, usermaj) + VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:filename,:filesize,NOW(),:user);""" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'filename': filename, 'filesize': filesize, 'user': user}) def get_rapport_by_no(request,nodossier,date_inter): societe = nodossier[0:2] @@ -307,3 +311,8 @@ def insert_log_nuit(request, proc, msg): query = "INSERT INTO t_log_nuit (proc,msg) VALUES (:proc, :msg);" execute_query(request, query, {'proc': proc, 'msg': msg}) +def get_log_demandes(request, ): + # lire le log de nuit + query = """SELECT * FROM t_log_nuit WHERE proc = 'GENERER';""" + results = request.dbsession.execute(query, ) + return results.fetchall() diff --git a/mondumas/routes.py b/mondumas/routes.py index 0e1f987..9bb406b 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -16,6 +16,7 @@ def includeme(config): config.add_route('init_mdp', '/init_mdp/{user}/{lien}') # dossier config.add_route('demandes','/demandes') + config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') config.add_route('devis_view', '/devis_view/{nodossier}') config.add_route('dossier_edit', '/dossier_edit/{nodossier}') config.add_route('dossier_lookup', '/dossier_lookup') @@ -24,13 +25,12 @@ def includeme(config): config.add_route('dossier_view', '/dossier_view/{nodossier}') config.add_route('rdf_bill','/rdf_bill/{no_id}') config.add_route('rdf_edit','/rdf_edit/{nodossier}/{date_inter}') - config.add_route('rdf_imgdel','/rdf_imgdel/{nochantier}/{norapport}/{nomfic}') config.add_route('rdf_list','/rdf_list') config.add_route('rdf_rapport','/rdf_rapport/{no_id}') config.add_route('rdf_view','/rdf_view/{no_id}') config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}') config.add_route('upload_doc', '/upload_doc/{nodossier}') - config.add_route('upload_img', '/upload_img/{norapport}') + config.add_route('upload_img', '/upload_img/{norapport}/{nosection}') # parametres config.add_route('parametres', '/parametres') config.add_route('connecter_a', '/connecter_a/{login}') diff --git a/mondumas/templates/dossier/demandes.pt b/mondumas/templates/dossier/demandes.pt index 28ff409..9fd2b56 100644 --- a/mondumas/templates/dossier/demandes.pt +++ b/mondumas/templates/dossier/demandes.pt @@ -33,6 +33,17 @@ +
+

Derniers traitements effectués

+ + + + + + +
${item.date.strftime('%d %b, %H:%M')}${item.proc}${item.msg}
+
+

diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index f8a0b5a..e7f29ab 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -122,7 +122,7 @@
  • SUIVI du DOSSIER
  • DEVIS - FACTURES
  • -
  • +
  • DOCUMENTS ATTACHES
  • RAPPORTS DE RDF
  • @@ -204,6 +204,8 @@

     Ajouter un document + +  Gérer les photos

    diff --git a/mondumas/templates/dossier/rdf_view.pt b/mondumas/templates/dossier/rdf_view.pt index 909516d..08d9164 100644 --- a/mondumas/templates/dossier/rdf_view.pt +++ b/mondumas/templates/dossier/rdf_view.pt @@ -160,6 +160,17 @@
       ${rapport.degats} +
    +

    + +  Gérer les photos 1 +

    +
    +
    +

    + +


    TRAVAUX relatifs à la DETECTION de la fuite

    @@ -289,15 +300,15 @@

    - -  Gérer les photos + +  Gérer les photos 2


    -

    - -

    +

    + +


    .

    diff --git a/mondumas/templates/dossier/upload_img.pt b/mondumas/templates/dossier/upload_img.pt index 9d08e22..0a406ef 100644 --- a/mondumas/templates/dossier/upload_img.pt +++ b/mondumas/templates/dossier/upload_img.pt @@ -20,7 +20,7 @@
    - + Retour au rapport @@ -45,9 +45,11 @@
    diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index a5c24f2..aaa199e 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -122,7 +122,7 @@ def dossier_view(request): # lire toutes les dossiers similaires 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, nodossier, 0, '') + docs_attaches = get_docs_attaches(request, nodossier, 0, 0, '') if nodossier.startswith('PL'): # lire rapport de rdf rapports = get_rapport_by_no(request, nodossier, '') @@ -205,6 +205,7 @@ def suivi_edit(request): if nolig == '0': # nouveau suivi = {} + suivi['attached_text'] = '' suivi['COMMENT'] = '' suivi['USERMAJ'] = logged_in suivi['DATEMAJ'] = datetime.now() @@ -297,7 +298,7 @@ def upload_doc(request): return HTTPFound(location=request.route_url("dossier_lookup")) # lire tous les documents attachés - docs_attaches = get_docs_attaches(request, nodossier, 0, '') + docs_attaches = get_docs_attaches(request, nodossier, 0, 0, '') if 'form.submitted' in request.params: # récupère le fichier download dans le dossier /tmp @@ -311,11 +312,11 @@ def upload_doc(request): # fabriquer le nom du document filename = '%s-DD%s-%s' % (societe, nochantier, input_name) - tempFile2Dossier(request, societe, nochantier, '0', temp_file, filename, logged_in) + tempFile2Dossier(request, societe, nochantier, '0', 0, temp_file, filename, 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, nodossier, 0, '') + docs_attaches = get_docs_attaches(request, nodossier, 0, 0, '') return { 'page_title': "Télécharger un document", @@ -328,30 +329,40 @@ def upload_doc(request): @view_config(route_name='upload_img', renderer='../templates/dossier/upload_img.pt', permission='view') def upload_img(request): - def photos_size(photos): - # calculer la taille totale des photos - sum_size = 0 - for photo in photos : - # récupère la taille sans ' Ko' - sum_size += int(photo.taillefichier[:-3]) - - return '%s Mo' % round(sum_size / 1024, 1) + # Paramètres d'appel : + # - gérer images d'un dossier : upload_img/nodossier/0 + # - gérer images d'un rapport RDF : upload_img/norapport/nosection + nosection = request.matchdict['nosection'] + # Gérer les photos d'un dossier (nosection=0) ? + if nosection == '0': + norapport = '0' + # oui, lire le dossier + nodossier = request.matchdict['norapport'] + rapport = get_dossier_by_no(request, nodossier) + if rapport is None: + request.session.flash(u"Le dossier no %s est introuvable" % (norapport), 'danger') + return HTTPFound(location=request.route_url("rdf_list")) + societe = rapport.societe + nochantier = rapport.NO_ID + url = request.route_url("upload_img", norapport=nodossier, nosection=nosection) + url_retour = request.route_url('dossier_view', nodossier=nodossier) + titre = "Gérer les photos du dossier %s/%s" % (nodossier, nosection) + else: + norapport = request.matchdict['norapport'] + rapport = get_rapport_by_no_id(request, norapport) + if rapport is None: + request.session.flash(u"Le rapport no %s est introuvable" % (norapport), 'danger') + return HTTPFound(location=request.route_url("rdf_list")) + societe = 'PL' + nochantier = rapport.nochantier + nodossier = '%s-%s' % (societe, nochantier) + url = request.route_url("upload_img", norapport=norapport, nosection=nosection) + url_retour = request.route_url('rdf_view', no_id=norapport) + titre = "Gérer les photos du rapport %s-%s/%s" % (societe, norapport, nosection) logged_in = request.authenticated_userid.upper() - norapport = request.matchdict['norapport'] - - url = request.route_url("upload_img", norapport=norapport) message = "" - rapport = get_rapport_by_no_id(request, norapport) - if rapport is None: - request.session.flash(u"Le rapport no %s est introuvable" % (norapport), 'danger') - return HTTPFound(location=request.route_url("rdf_list")) - - societe = rapport.societe - nochantier = rapport.nochantier - # lire tous les photos attachées - photos = get_photos(request, nochantier, norapport) if 'form.submitted' in request.params: # récupère le fichier download dans le dossier /tmp @@ -364,19 +375,22 @@ def upload_img(request): return HTTPFound(location=url) # fabriquer le nom du rapport - filename = '%s-RDF%s-%s' % (societe, norapport, input_name) - tempFile2Dossier(request, societe, nochantier, norapport, temp_file, filename, logged_in) + filename = '%s-DD%s-%s-%s' % (societe, nochantier, norapport, input_name) + tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_file, filename, logged_in) request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success') - # lire tous les photos attachées - photos = get_photos(request, nochantier, norapport) + + # lire tous les photos attachées + photos = get_photos(request, nodossier, norapport, nosection) return { - 'page_title': "Gérer les photos", + 'page_title': titre, 'url': url, + 'url_retour': url_retour, + 'nodossier': nodossier, 'nochantier': nochantier, 'norapport': norapport, - 'rapport': rapport, + 'nosection': nosection, 'photos': photos, 'total_size' : photos_size(photos), 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), @@ -535,7 +549,8 @@ def rdf_view(request): date_rapport = '' # lire tous les photos attachées - photos = get_photos(request, rapport.nochantier, norapport) + photos1 = get_photos(request, nodossier, norapport, 1) + photos2 = get_photos(request, nodossier, norapport, 2) if 'form.generate' in request.params: options = { @@ -562,18 +577,19 @@ def rdf_view(request): config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe") pdfkit.from_url(origin, dest, configuration=config, options=options) - insert_dossier_attaches(request, nodossier, 0, filename, '160 Ko', logged_in) + insert_dossier_attaches(request, nodossier, 0, 0, filename, '160 Ko', logged_in) # si generation pdf, maj de la date du rapport new_values = {} new_values['date_rapport'] = date.today() update_rapport(request, nodossier, rapport.date_inter.strftime('%Y-%m-%d'), new_values) - request.session.flash(u"Le rapport a été génré avec succès.", 'success') + request.session.flash(u"Le rapport a été généré avec succès.", 'success') return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) if 'form.validate' in request.params: validate_rapport(request, norapport) request.session.flash(u"Le rapporta été validé avec succès.", 'success') + return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) if 'form.delete' in request.params: delete_rapport(request, norapport) @@ -591,7 +607,8 @@ def rdf_view(request): 'norapport': norapport, 'date_rapport': date_rapport, 'date_relu': date_relu, - 'photos': photos, + 'photos1': photos1, + 'photos2': photos2, 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } @@ -614,7 +631,8 @@ def rdf_rapport(request): date_relu = '' # lire tous les photos attachées - photos = get_photos(request, rapport.nochantier, norapport) + photos1 = get_photos(request, nodossier, norapport, 1) + photos2 = get_photos(request, nodossier, norapport, 2) return { 'page_title': '', @@ -626,25 +644,34 @@ def rdf_rapport(request): 'norapport': norapport, 'date_rapport': date_rapport, 'date_relu': date_relu, - 'photos': photos, + 'photos1': photos1, + 'photos2': photos2, 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } -@view_config(route_name='rdf_imgdel', permission='view') -def rdf_imgdel(request): +@view_config(route_name='delete_img', permission='view') +def delete_img(request): logged_in = request.authenticated_userid.upper() - nochantier = request.matchdict['nochantier'] + nodossier = request.matchdict['nodossier'] + societe = nodossier[0:2] + nochantier = nodossier[3:] norapport = request.matchdict['norapport'] + nosection = request.matchdict['nosection'] nomfic = request.matchdict['nomfic'] + if nosection == '0': + url_retour = location=request.route_url("upload_img", norapport=nodossier, nosection=nosection) + else: + url_retour = location=request.route_url("upload_img", norapport=norapport, nosection=nosection) + # supprimer le fichier - file_path = '%s/PL/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], nochantier, norapport, nomfic) + file_path = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, nomfic) if os.path.exists(file_path): os.remove(file_path) - delete_photos(request, nochantier, norapport, nomfic) + delete_photos(request, nodossier, norapport, nosection, nomfic) request.session.flash(u"La photo %s a été supprimé avec succès" % (nomfic), 'success') - return HTTPFound(location=request.route_url("upload_img", norapport=norapport)) + return HTTPFound(url_retour) @view_config(route_name='rdf_bill', renderer='../templates/dossier/rdf_bill.pt', permission='view') def rdf_bill(request): @@ -780,17 +807,29 @@ def demandes(request): # extraction OK ? oui, créer une dem_devis et récupèrer son no_id if dem_info['c_nom'] != '': + # oui, rechercher la dem_devis concerné par le no de sinistre nosin = dem_info['no_sinistre'] - nochantier = insert_dossier(request, societe, cd_cli, dem_info['c_nom'], dem_info['c_adr'], dem_info['c_adr2'], \ + dem_devis = get_dossier_by_sinistre(request,societe, nosin) + if dem_devis: + # dem_devis existe, ajouter le PDF dans ce dossier + nochantier = dem_devis.NO_ID + nodossier = "%s-%s" % (societe, nochantier) + # insérer une ligne de suivi ANNULATION + insert_suivi(request, nodossier, '!!MISSION MODIFIEE PAR la MAIF') + # log de nuit + insert_log_nuit(request, 'GENERER', '--> MODIFIER DOSSIER sinistre %s - MAIF : No %s' % (nosin, nodossier)) + else: + # dem_devis n'existe pas, creer nouveau dossier + nochantier = insert_dossier(request, societe, cd_cli, dem_info['c_nom'], dem_info['c_adr'], dem_info['c_adr2'], \ dem_info['c_cp'], dem_info['c_ville'], dem_info['c_telp'], nosin, dem_info['c_obs'], dem_info['tx_trav']) - nodossier = "%s-%s" % (societe, nochantier) + nodossier = "%s-%s" % (societe, nochantier) + # log de nuit + insert_log_nuit(request, 'GENERER', '--> CREER DOSSIER sinistre %s - MAIF : No %s' % (nosin, nodossier)) # récupère le nom du fichier et ajouter le no de dossier filename = os.path.basename(temp_file_path) filename = '%s-DD%s-%s' % (societe, nochantier, filename) - tempFile2Dossier(request, societe, nochantier, '0', temp_file_path, filename, 'EMAIL') - # log de nuit - insert_log_nuit(request, 'GENERER', '--> CREER DOSSIER sinistre %s - MAIF : No %s' % (nosin, nodossier)) + tempFile2Dossier(request, societe, nochantier, '0', 0, temp_file_path, filename, 'EMAIL') traite = 1 else: traite = 0 @@ -812,7 +851,7 @@ def demandes(request): # récupère le nom du fichier et ajouter le no de dossier filename = '%s-DD%s-%s' % (societe, dem_devis.NO_ID, 'ANNULATION.pdf') - tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 0, temp_file_path, filename, 'EMAIL') # insérer une ligne de suivi ANNULATION insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR la MAIF') # log de nuit @@ -832,7 +871,7 @@ def demandes(request): # récupère le nom du fichier et ajouter le no de dossier filename = '%s-DD%s-%s' % (societe, dem_devis.NO_ID, 'ANNULATION.pdf') - tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 0, temp_file_path, filename, 'EMAIL') # insérer une ligne de suivi ANNULATION insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR DOMUS') # log de nuit @@ -953,6 +992,8 @@ def demandes(request): # messages lus msglus = bool(liste) + # lire le log + log_creation = get_log_demandes(request) return { 'page_title': "Liste des emails de demandes d'intervention", @@ -960,6 +1001,7 @@ def demandes(request): 'dt_data': json.dumps(liste), 'msglus': msglus, 'message': message, + 'log_creation': log_creation, } @@ -993,7 +1035,7 @@ def downloadFile2Temp(input_file, input_name, ext_allowed): return temp_file_path -def tempFile2Dossier(request, societe, nochantier, norapport, temp_file, filename, logged_in): +def tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_file, filename, logged_in): # créer le répertoire du chantier if norapport == '0': path = '%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier) @@ -1010,7 +1052,7 @@ def tempFile2Dossier(request, societe, nochantier, norapport, temp_file, filenam shutil.move(temp_file, filepath) filesize = round(os.path.getsize(filepath) / 1024) - insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, filename, '%s Ko' % str(filesize), logged_in) + insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, nosection, filename, '%s Ko' % str(filesize), logged_in) def download_pdf_to_tmp(email_message): # downloading attachments @@ -1212,3 +1254,12 @@ def resize_photos(image_file): return +def photos_size(photos): + # calculer la taille totale des photos + sum_size = 0 + for photo in photos : + # récupère la taille sans ' Ko' + sum_size += int(photo.taillefichier[:-3]) + + return '%s Mo' % round(sum_size / 1024, 1) +