From e408fcc9b063690db9b087d4b82af90ca187d6ff Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Mon, 25 Mar 2019 14:20:10 +0100 Subject: [PATCH] mise au point creation rdf --- mondumas/layout.py | 5 +- mondumas/models/dossier.py | 16 +- mondumas/static/css/style.less | 1 - mondumas/templates/dossier/dossier_view.pt | 4 +- mondumas/templates/dossier/rdf_list.pt | 2 +- mondumas/templates/dossier/rdf_rapport.pt | 15 +- mondumas/templates/dossier/rdf_view.pt | 26 ++-- mondumas/templates/dossier/upload_img.pt | 13 +- mondumas/templates/layouts/global_layout.pt | 3 - mondumas/templates/layouts/pdf.pt | 22 --- mondumas/views/dossier.py | 161 ++++++++++---------- 11 files changed, 126 insertions(+), 142 deletions(-) delete mode 100644 mondumas/templates/layouts/pdf.pt diff --git a/mondumas/layout.py b/mondumas/layout.py index 5f31b67..18c032e 100644 --- a/mondumas/layout.py +++ b/mondumas/layout.py @@ -48,9 +48,8 @@ class GlobalLayout(object): return is_admin def isWebPage(self): - # get view name - view_name = self.request.matched_route.name - if view_name == 'rdf_rapport': + # test view name + if self.request.matched_route.name == 'rdf_rapport': # oui, page PDF return False else: diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index ec3d510..a6b490e 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -136,12 +136,16 @@ 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): +def get_docs_attaches(request, nodossier, norapport, filename): societe = nodossier[0:2] nochantier = int(nodossier[3:]) - query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier ORDER BY cree_le;" - results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).fetchall() + if filename == '': + query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier ORDER BY cree_le;" + else: + query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier + AND nodossier = :norapport AND nomfichier = :filename ORDER BY cree_le;""" + results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename}).fetchall() return results @@ -172,8 +176,12 @@ def insert_dossier_attaches(request, nodossier, norapport, filename, filesize, u societe = nodossier[0:2] nochantier = int(nodossier[3:]) + # fichier existe ? + item = get_docs_attaches(request, nodossier, norapport, filename) + if item: + return # enregistrer dans la table dossier_attaches - query = """REPLACE INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nomfichier, taillefichier, cree_le, usermaj) + 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}) diff --git a/mondumas/static/css/style.less b/mondumas/static/css/style.less index 37f3b75..d72b595 100644 --- a/mondumas/static/css/style.less +++ b/mondumas/static/css/style.less @@ -181,5 +181,4 @@ width: 350px; height: 150px; padding: 20px; - border: 1px solid black; } \ No newline at end of file diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index 456d8b5..b07edad 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -170,11 +170,11 @@
-
+
@@ -267,7 +271,7 @@

-
${rapport.modif_le.strftime('%d-%m-%Y')} +
${date_rapport}

@@ -285,8 +289,7 @@


-
-
+
diff --git a/mondumas/templates/layouts/global_layout.pt b/mondumas/templates/layouts/global_layout.pt index e458c91..402564e 100644 --- a/mondumas/templates/layouts/global_layout.pt +++ b/mondumas/templates/layouts/global_layout.pt @@ -42,9 +42,6 @@ - - - diff --git a/mondumas/templates/layouts/pdf.pt b/mondumas/templates/layouts/pdf.pt deleted file mode 100644 index 9b7ee39..0000000 --- a/mondumas/templates/layouts/pdf.pt +++ /dev/null @@ -1,22 +0,0 @@ - - - - ${page_title} - - - - - -
- - - - - diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index b4b5309..18c2299 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -100,7 +100,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) + docs_attaches = get_docs_attaches(request, nodossier, 0, '') if nodossier.startswith('PL'): # lire rapport de rdf rapports = get_rapport_by_no(request, nodossier, '') @@ -271,7 +271,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) + docs_attaches = get_docs_attaches(request, nodossier, 0, '') if 'form.submitted' in request.params: # récupère le fichier lui-même @@ -290,37 +290,34 @@ def upload_doc(request): filename = '%s-DD%s-%s' % (societe, nochantier, request.POST['filename'].filename) # créer le répertoire du chantier s'il n'existe pas encore path = '%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'],societe,nochantier) - try: - os.mkdir(path) - except OSError: - pass # ignorer erreor si déjà créé - finally: - file_path = os.path.join(path, filename) - # We first write to a temporary file to prevent incomplete files - temp_file_path = file_path + '~' + os.makedirs(path, exist_ok=True) - # Finally write the data to a temporary file - input_file.seek(0) - with open(temp_file_path, 'wb') as output_file: - shutil.copyfileobj(input_file, output_file) - - # controler la taille du fichier < 2 Mo - filesize = round(os.path.getsize(temp_file_path) / 1024) - if filesize > 2048 : - os.remove(temp_file_path) - request.session.flash("La taille de ce fichier dépasse la limite autorisée. Téléchargement impossible.", 'warning') - else: - # Now that we know the file has been fully saved to disk move it into place. - try: - os.rename(temp_file_path, file_path) - except OSError: - os.remove(temp_file_path) - request.session.flash('%s : Ce fichier existe déjà dans le rapport.' % input_name, 'danger') - else: - insert_dossier_attaches(request, nodossier, 0, 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, nodossier) + file_path = os.path.join(path, filename) + # We first write to a temporary file to prevent incomplete files + temp_file_path = file_path + '~' + + # Finally write the data to a temporary file + input_file.seek(0) + with open(temp_file_path, 'wb') as output_file: + shutil.copyfileobj(input_file, output_file) + + # controler la taille du fichier < 2 Mo + filesize = round(os.path.getsize(temp_file_path) / 1024) + if filesize > 2048 : + os.remove(temp_file_path) + request.session.flash("La taille de ce fichier dépasse la limite autorisée. Téléchargement impossible.", 'warning') + else: + # Now that we know the file has been fully saved to disk move it into place. + try: + os.rename(temp_file_path, file_path) + except OSError: + os.remove(temp_file_path) + request.session.flash('%s : Ce fichier existe déjà dans le rapport.' % input_name, 'danger') + else: + insert_dossier_attaches(request, nodossier, 0, 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, nodossier, 0, '') return { 'page_title': u"Télécharger un document", @@ -367,37 +364,34 @@ def upload_img(request): # créer le répertoire du chantier s'il n'existe pas encore path = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport) - try: - os.makedirs(path) - except OSError: - pass # ignorer erreor si déjà créé - finally: - file_path = os.path.join('%s/%s' % (path, filename)) - # We first write to a temporary file to prevent incomplete files - temp_file_path = file_path + '~' - - # Finally write the data to a temporary file - input_file.seek(0) - with open(temp_file_path, 'wb') as output_file: - shutil.copyfileobj(input_file, output_file) - - # controler la taille du fichier < 2 Mo - filesize = round(os.path.getsize(temp_file_path) / 1024) - if filesize > 2048 : - os.remove(temp_file_path) - request.session.flash("La taille de ce fichier dépasse la limite autorisée. Téléchargement impossible.", 'warning') - else: - # Now that we know the file has been fully saved to disk move it into place. - try: - os.rename(temp_file_path, file_path) - except OSError: - os.remove(temp_file_path) - request.session.flash('%s : Ce fichier existe déjà dans le rapport.' % input_name, 'danger') - else: - insert_dossier_attaches(request, 'PL-%s' % nochantier, norapport, 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 photos attachées - photos = get_photos(request, nochantier, norapport) + os.makedirs(path, exist_ok=True) + + file_path = os.path.join('%s/%s' % (path, filename)) + # We first write to a temporary file to prevent incomplete files + temp_file_path = file_path + '~' + + # Finally write the data to a temporary file + input_file.seek(0) + with open(temp_file_path, 'wb') as output_file: + shutil.copyfileobj(input_file, output_file) + + # controler la taille du fichier < 2 Mo + filesize = round(os.path.getsize(temp_file_path) / 1024) + if filesize > 2048 : + os.remove(temp_file_path) + request.session.flash("La taille de ce fichier dépasse la limite autorisée. Téléchargement impossible.", 'warning') + else: + # Now that we know the file has been fully saved to disk move it into place. + try: + os.rename(temp_file_path, file_path) + except OSError: + os.remove(temp_file_path) + request.session.flash('%s : Ce fichier existe déjà dans le rapport.' % input_name, 'danger') + else: + insert_dossier_attaches(request, 'PL-%s' % nochantier, norapport, 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 photos attachées + photos = get_photos(request, nochantier, norapport) return { 'page_title': u"Télécharger une photo", @@ -421,9 +415,8 @@ def rdf_edit(request): if not rapport: # creer un nouveau rapport insert_rapport(request, nodossier, logged_in) - else: - # lire le rapport - rapport = get_rapport_by_no(request, nodossier, date_inter) + # lire le rapport + rapport = get_rapport_by_no(request, nodossier, date_inter) url = request.route_url('rdf_edit', nodossier=nodossier, date_inter=date_inter) caracteristiques = ["Maison individuelle", "Immeuble collectif", "Copropriété", "Commerce", "Bureaux"] @@ -524,7 +517,7 @@ def rdf_list(request): else: date_rapport = '' - d = (item.nochantier, item.date_inter.strftime('%d-%m-%Y'), '', '%s %s' % (item.C_QUALITE, item.C_NOM), item.NOMCLI, item.NOSIN, + d = (item.nochantier, item.date_inter.strftime('%d-%m-%Y'), date_rapport, '%s %s' % (item.C_QUALITE, item.C_NOM), item.NOMCLI, item.NOSIN, item.auteur_code, item.no_id) liste.append(d) @@ -542,17 +535,15 @@ def rdf_view(request): # lire le rapport rapport = get_rapport_by_no_id(request, norapport) nodossier = 'PL-' + str(rapport.nochantier) - + if rapport.date_rapport: + date_rapport = rapport.date_rapport.strftime('%d-%m-%Y') + else: + date_rapport = '' + # lire tous les photos attachées photos = get_photos(request, rapport.nochantier, norapport) - if 'form.generate' in request.params: - # génère la page rapport - result = rdf_rapport(request) - result['main_template'] = get_renderer('../templates/layouts/pdf.pt').implementation() - htmlcontent = render('../templates/dossier/rdf_rapport.pt', result, request) - htmlcontent = htmlcontent.encode('iso8859-15') - + if 'form.generate' in request.params: options = { 'page-size': 'A4', 'margin-top': '0.75in', @@ -561,6 +552,9 @@ def rdf_view(request): 'margin-left': '0.75in', } + # créer le répertoire du rapport s'il n'existe pas encore + path = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], 'PL', rapport.nochantier, norapport) + os.makedirs(path, exist_ok=True) # générer le rapport en PDF filename = "PL-DD%s-rapport RDF no %s.PDF" % (str(rapport.nochantier), norapport) dest = "mondumas/static/DEVFAC/DOCS_ATTACHES/PL/%s/%s" % (str(rapport.nochantier), filename) @@ -568,13 +562,16 @@ def rdf_view(request): config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe") try: pdfkit.from_url(origin, dest, configuration=config, options=options) - # pdfkit.from_string(htmlcontent, dest, configuration=config) except: request.session.flash(u"Une erreur est survenue pendant la génération du PDF.", 'danger') return HTTPFound(location=request.route_url('rdf_view', no_id=norapport)) else: insert_dossier_attaches(request, nodossier, 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') return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) @@ -586,6 +583,7 @@ def rdf_view(request): 'nodossier': nodossier, 'nochantier': rapport.nochantier, 'norapport': norapport, + 'date_rapport': date_rapport, 'photos': photos, 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } @@ -593,20 +591,25 @@ def rdf_view(request): @view_config(route_name='rdf_rapport', renderer='../templates/dossier/rdf_rapport.pt') def rdf_rapport(request): norapport = request.matchdict['no_id'] - + # lire le rapport rapport = get_rapport_by_no_id(request, norapport) nodossier = 'PL-' + str(rapport.nochantier) + if rapport.date_rapport: + date_rapport = rapport.date_rapport.strftime('%d-%m-%Y') + else: + date_rapport = '' # lire tous les photos attachées photos = get_photos(request, rapport.nochantier, norapport) - + return { 'page_title': '', 'rapport': rapport, 'nodossier': nodossier, 'nochantier': rapport.nochantier, 'norapport': norapport, + 'date_rapport': date_rapport, 'photos': photos, 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), }