diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index 4bd8fe9..142b202 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -121,7 +121,7 @@ WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_V return results -def get_docs_attaches(request, nodossier, norapport, nosection, origine, filename): +def get_docs_attaches(request, nodossier, norapport, origine, filename): societe = nodossier[0:2] nochantier = int(nodossier[3:]) @@ -134,26 +134,38 @@ def get_docs_attaches(request, nodossier, norapport, nosection, origine, filenam 'norapport': norapport, 'origine': origine, 'filename': filename}).fetchall() return results -def get_photos(request, nodossier, norapport, nosection): +def get_photos(request, nodossier, norapport, origine): 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, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection}).fetchall() + AND nodossier = :norapport AND origine = :origine AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;""" + results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine}).fetchall() return results -def delete_photos(request, nodossier, norapport, nosection, nomfic): +def delete_photos(request, nodossier, norapport, origine, nomfic): societe = nodossier[0:2] nochantier = int(nodossier[3:]) - # supprimer d'abord le fichier - file_path = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, nomfic) + if len(origine) > 1: + file_path = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, nomfic) + else: + 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) - 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}) - + query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic;" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine, 'nomfic': nomfic}) + +def rename_photos(request, nodossier, norapport, origine, nomfic, new_nomfic): + societe = nodossier[0:2] + nochantier = int(nodossier[3:]) + + query = """ + UPDATE dossier_attaches SET nomfichier = :new_nomfic + WHERE nomrep='DOCS_ATTACHES' AND societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic; + """ + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, + 'origine': origine, 'nomfic': nomfic, 'new_nomfic': new_nomfic}) def update_dossier(request, nodossier, new_values): societe = nodossier[0:2] @@ -183,19 +195,19 @@ def update_dossier_cloture(request, nodossier, logged_in): query = "UPDATE dem_devis SET mtregl = 0.01, USERMAJ = :logged_in WHERE societe=:societe AND no_id=:nochantier" execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'logged_in': logged_in}) -def insert_dossier_attaches(request, nodossier, norapport, nosection, origine, filename, filesize, user): +def insert_dossier_attaches(request, nodossier, norapport, origine, filename, filesize, user): societe = nodossier[0:2] nochantier = int(nodossier[3:]) # fichier existe ? - item = get_docs_attaches(request, nodossier, norapport, nosection, origine, filename) + item = get_docs_attaches(request, nodossier, norapport, origine, filename) if item: return # enregistrer dans la table dossier_attaches - query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, origine, nomfichier, taillefichier, cree_le, usermaj) - VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:origine,:filename,:filesize,NOW(),:user);""" + query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, origine, nomfichier, taillefichier, cree_le, usermaj) + VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:origine,:filename,:filesize,NOW(),:user);""" execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, - 'nosection': nosection, 'origine': origine, 'filename': filename, 'filesize': filesize, 'user': user}) + 'origine': origine, 'filename': filename, 'filesize': filesize, 'user': user}) def get_rapport_by_no(request,nodossier,date_inter): societe = nodossier[0:2] diff --git a/mondumas/routes.py b/mondumas/routes.py index 57c9cfb..582856c 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -30,7 +30,7 @@ def includeme(config): # dossier config.add_route('demandes','/demandes') config.add_route('demandes_dl','/demandes_dl/{societe}/{email_from}/{email_uid}') - config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') + config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{origine}/{nomfic}') config.add_route('dossier_edit', '/dossier_edit/{nodossier}') config.add_route('dossier_lookup', '/dossier_lookup') config.add_route('dossier_select', '/dossier_select/{date}') @@ -42,9 +42,10 @@ def includeme(config): 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('rotate_img','/rotate_img/{nodossier}/{norapport}/{origine}/{nomfic}/{angle}') config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}') config.add_route('upload_doc', '/upload_doc/{nodossier}/{origine}') - config.add_route('upload_img', '/upload_img/{norapport}/{nosection}') + config.add_route('upload_img', '/upload_img/{norapport}/{origine}') config.add_route('upload_om', '/upload_om') # parametres config.add_route('parametres', '/parametres') diff --git a/mondumas/static/img/Logo-ME.jpg b/mondumas/static/img/Logo-ME.jpg index e143bf0..240f4b3 100644 Binary files a/mondumas/static/img/Logo-ME.jpg and b/mondumas/static/img/Logo-ME.jpg differ diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index 6ea1a58..1c0ae82 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -221,8 +221,8 @@

 Ajouter document - -  Gérer les photos + +  Gérer photos dossiers

@@ -254,6 +254,8 @@

 Document technique + +  Gérer photos techniques

diff --git a/mondumas/templates/dossier/upload_doc.pt b/mondumas/templates/dossier/upload_doc.pt index bbabc37..774227d 100644 --- a/mondumas/templates/dossier/upload_doc.pt +++ b/mondumas/templates/dossier/upload_doc.pt @@ -10,7 +10,7 @@
- +
@@ -20,7 +20,7 @@
diff --git a/mondumas/templates/dossier/upload_img.pt b/mondumas/templates/dossier/upload_img.pt index 565de66..50f73cf 100644 --- a/mondumas/templates/dossier/upload_img.pt +++ b/mondumas/templates/dossier/upload_img.pt @@ -23,7 +23,7 @@
- Retour au rapport + Retour
@@ -44,17 +44,58 @@
-
- - +
+ + + + +
+ + + +

+ ${detail.nomfichier}
+ Taille : ${detail.taillefichier} +

+

+ + Suppimer +

+

+ + Pivoter -90° +

+

+ + Pivoter +90° +

+
+ + + + + diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index 73265b2..2037dd1 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -115,9 +115,9 @@ 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, 0, 'CLT', '') + docs_attaches = get_docs_attaches(request, nodossier, 0, 'CLT', '') # lire tous les documents techniques - docs_techniques = get_docs_attaches(request, nodossier, 0, 0, 'FRN', '') + docs_techniques = get_docs_attaches(request, nodossier, 0, 'FRN', '') if nodossier.startswith('PL'): # lire rapport de rdf rapports = get_rapport_by_no(request, nodossier, '') @@ -278,7 +278,7 @@ def upload_doc(request): nodossier = request.matchdict['nodossier'] origine = request.matchdict['origine'] if origine == 'CLT': - page_title = "Télécharger un document attaché" + page_title = "Télécharger un document PDF" else: page_title = "Télécharger un document technique" @@ -294,25 +294,29 @@ 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, 0, origine, '') + docs_attaches = get_docs_attaches(request, nodossier, 0, origine, '') if 'form.submitted' in request.params: - # récupère le fichier download dans le dossier /tmp - input_file = request.POST['filename'].file - input_name = request.POST['filename'].filename - ext_allowed = ['jpeg','jpg','png','pdf'] - temp_file = downloadFile2Temp(input_file, input_name, ext_allowed) - if temp_file[:8] == 'ERREUR: ': - request.session.flash(temp_file, 'danger') - return HTTPFound(location=url) - - # fabriquer le nom du document - filename = '%s-DD%s-%s' % (societe, nochantier, input_name) - tempFile2Dossier(request, societe, nochantier, '0', 0, origine, temp_file, filename, logged_in) - - request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success') + # récupère le(s) fichier(s) download dans le dossier /tmp + fileslist = request.POST.getall('files') + for f in fileslist: + # récupère le fichier download dans le dossier /tmp + input_file = f.file + input_name = f.filename + ext_allowed = ['pdf',] + temp_file = downloadFile2Temp(input_file, input_name, ext_allowed) + if temp_file[:8] == 'ERREUR: ': + request.session.flash(temp_file, 'danger') + return HTTPFound(location=url) + + # fabriquer le nom du document + filename = '%s-DD%s-%s' % (societe, nochantier, input_name) + tempFile2Dossier(request, societe, nochantier, '0', origine, 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, 0, origine, '') + docs_attaches = get_docs_attaches(request, nodossier, 0, origine, '') return { 'page_title': page_title, @@ -325,12 +329,20 @@ def upload_doc(request): @view_config(route_name='upload_img', renderer='../templates/dossier/upload_img.pt', permission='view') def upload_img(request): - # Paramètres d'appel : - # - gérer images d'un dossier : upload_img/nodossier/z0 - # - 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': + """ + Paramètres d'appel : + - gestion images d'un dossier : + norapport = numero du dossier + origine = 'CLT' si images du dossier + 'FRN' si images techniques + - gestion images d'un rapport RDF : + norapport = numéro du rapport de RDF + origine = '1' ou '2', numéro du de la section du rapport + + """ + origine = request.matchdict['origine'] + # Gérer les photos d'un dossier ? + if len(origine) > 1: norapport = '0' # oui, lire le dossier nodossier = request.matchdict['norapport'] @@ -340,9 +352,9 @@ def upload_img(request): 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 = request.route_url("upload_img", norapport=nodossier, origine=origine) url_retour = request.route_url('dossier_view', nodossier=nodossier) - titre = "Gérer les photos du dossier %s/%s" % (nodossier, nosection) + titre = "Gérer les photos du dossier %s" % (nodossier) else: norapport = request.matchdict['norapport'] rapport = get_rapport_by_no_id(request, norapport) @@ -352,9 +364,9 @@ def upload_img(request): societe = 'PL' nochantier = rapport.nochantier nodossier = '%s-%s' % (societe, nochantier) - url = request.route_url("upload_img", norapport=norapport, nosection=nosection) + url = request.route_url("upload_img", norapport=norapport, origine=origine) url_retour = request.route_url('rdf_view', no_id=norapport) - titre = "Gérer les photos du rapport %s-%s/%s" % (societe, norapport, nosection) + titre = "Gérer les photos du rapport %s-%s/%s" % (societe, norapport, origine) logged_in = request.authenticated_userid.upper() message = "" @@ -374,12 +386,12 @@ def upload_img(request): # fabriquer le nom du rapport filename = '%s-DD%s-%s-%s' % (societe, nochantier, norapport, input_name) - tempFile2Dossier(request, societe, nochantier, norapport, nosection, 'CLT', temp_file, filename, logged_in) + tempFile2Dossier(request, societe, nochantier, norapport, origine, 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, nodossier, int(norapport), int(nosection)) + photos = get_photos(request, nodossier, int(norapport), origine) return { 'page_title': titre, @@ -388,7 +400,7 @@ def upload_img(request): 'nodossier': nodossier, 'nochantier': nochantier, 'norapport': norapport, - 'nosection': nosection, + 'origine': origine, 'photos': photos, 'total_size' : photos_size(photos), 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), @@ -599,8 +611,8 @@ def rdf_view(request): date_facture = '' # lire tous les photos attachées - photos1 = get_photos(request, nodossier, norapport, 1) - photos2 = get_photos(request, nodossier, norapport, 2) + photos1 = get_photos(request, nodossier, norapport, '1') + photos2 = get_photos(request, nodossier, norapport, '2') if 'form.generate' in request.params: footer_url = request.static_url('mondumas:static/img/footer_PL.html') @@ -695,8 +707,8 @@ def rdf_rapport(request): date_relu = '' # lire tous les photos attachées - photos1 = get_photos(request, nodossier, norapport, 1) - photos2 = get_photos(request, nodossier, norapport, 2) + photos1 = get_photos(request, nodossier, norapport, '1') + photos2 = get_photos(request, nodossier, norapport, '2') return { 'page_title': '', @@ -720,18 +732,56 @@ def delete_img(request): societe = nodossier[0:2] nochantier = nodossier[3:] norapport = request.matchdict['norapport'] - nosection = request.matchdict['nosection'] + origine = request.matchdict['origine'] nomfic = request.matchdict['nomfic'] - if nosection == '0': - url_retour = location=request.route_url("upload_img", norapport=nodossier, nosection=nosection) + # origine de l'image ? + if len(origine) > 1: + url_retour = location=request.route_url("upload_img", norapport=nodossier, origine=origine) else: - url_retour = location=request.route_url("upload_img", norapport=norapport, nosection=nosection) + url_retour = location=request.route_url("upload_img", norapport=norapport, origine=origine) - delete_photos(request, nodossier, norapport, nosection, nomfic) - request.session.flash(u"La photo %s a été supprimé avec succès" % (nomfic), 'success') + delete_photos(request, nodossier, norapport, origine, nomfic) + request.session.flash(u"La photo %s a été supprimée avec succès" % (nomfic), 'success') return HTTPFound(url_retour) +@view_config(route_name='rotate_img', permission='view') +def rotate_img(request): + + nodossier = request.matchdict['nodossier'] + societe = nodossier[0:2] + nochantier = nodossier[3:] + norapport = request.matchdict['norapport'] + origine = request.matchdict['origine'] + nomfic = request.matchdict['nomfic'] + angle = int(request.matchdict['angle']) + + # afin de refresh l'image, il faut lui donner un nouveau nom + n = nomfic.split('.') + new_nomfic = n[0] + 'r.' + n[1] + + # origine de l'image ? + if len(origine) > 1: + url_retour = location=request.route_url("upload_img", norapport=nodossier, origine=origine) + image_file = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, nomfic) + new_file = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, new_nomfic) + else: + url_retour = location=request.route_url("upload_img", norapport=norapport, origine=origine) + image_file = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, nomfic) + new_file = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, new_nomfic) + + # using the Python Image Library (PIL) to rotate an image + img_in = Image.open(image_file) + img_out = img_in.rotate(angle, expand=True) + # create a new file name for saving the result + img_out.save(new_file) + + # rename dans la BD + rename_photos(request, nodossier, norapport, origine, nomfic, new_nomfic) + + return HTTPFound(url_retour) + + @view_config(route_name='rdf_bill', renderer='../templates/dossier/rdf_bill.pt', permission='view') def rdf_bill(request): logged_in = request.authenticated_userid.upper() @@ -933,7 +983,7 @@ def demandes_dl(request): # 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', 0, 'CLT', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, nochantier, '0', 'CLT', temp_file_path, filename, 'EMAIL') traite = 1 return traite @@ -953,7 +1003,7 @@ def demandes_dl(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', 0, 'CLT', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 'CLT', temp_file_path, filename, 'EMAIL') # insérer une ligne de suivi ANNULATION insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR la MAIF') # log de nuit @@ -971,7 +1021,7 @@ def demandes_dl(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', 0, 'CLT', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 'CLT', temp_file_path, filename, 'EMAIL') #import pdb;pdb.set_trace() # insérer une ligne de suivi ANNULATION @@ -1092,7 +1142,7 @@ def downloadFile2Temp(input_file, input_name, ext_allowed): return temp_file_path -def tempFile2Dossier(request, societe, nochantier, norapport, nosection, origine, temp_file, filename, logged_in): +def tempFile2Dossier(request, societe, nochantier, norapport, origine, 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) @@ -1109,7 +1159,7 @@ def tempFile2Dossier(request, societe, nochantier, norapport, nosection, origine shutil.move(temp_file, filepath) filesize = round(os.path.getsize(filepath) / 1024) - insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, nosection, origine, filename, '%s Ko' % str(filesize), logged_in) + insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, origine, filename, '%s Ko' % str(filesize), logged_in) def download_pdf_to_tmp(email_message): # import pdb;pdb.set_trace() @@ -1448,7 +1498,7 @@ def upload_om(request): # 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', 0, 'CLT', temp_file_path, filename, 'EMAIL') + tempFile2Dossier(request, societe, nochantier, '0', 'CLT', temp_file_path, filename, 'EMAIL') return message