From 84357ce48da47e9d23169b9c9182e7171c63bcb1 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Tue, 19 Mar 2019 16:31:20 +0100 Subject: [PATCH] ajout de rdf_view.pt + upload_img.pt --- development.ini | 2 +- mondumas/models/dossier.py | 22 ++- mondumas/routes.py | 2 +- mondumas/templates/dossier/dossier_view.pt | 4 +- mondumas/templates/dossier/rdf_view.pt | 10 +- mondumas/templates/dossier/upload_doc.pt | 6 +- mondumas/templates/dossier/upload_img.pt | 42 +++-- mondumas/templates/layouts/global_layout.pt | 3 + mondumas/views/dossier.py | 165 ++++++++++++-------- production.ini | 2 +- 10 files changed, 150 insertions(+), 108 deletions(-) diff --git a/development.ini b/development.ini index 214ed85..d5f9e54 100644 --- a/development.ini +++ b/development.ini @@ -23,7 +23,7 @@ sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8 # sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8 mondumas.admin_email = ctphuoc@bbox.fr -mondumas.devfac_url = mondumas:static/img/DEVFAC14/ +mondumas.devfac_url = mondumas:static/img/DEVFAC/ mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES # Mailer configuration diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index f1261ef..d7b618e 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -136,15 +136,23 @@ 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, nomrep, nodossier): +def get_docs_attaches(request, nodossier): societe = nodossier[0:2] nochantier = int(nodossier[3:]) - query = "SELECT * FROM dossier_attaches WHERE nomrep = :nomrep AND societe = :societe AND nochantier = :nochantier ORDER BY cree_le;" - results = request.dbsession.execute(query, {'nomrep': nomrep, 'societe': societe, 'nochantier': nochantier}).fetchall() + 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() 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() + + return results + + def update_dossier(request, nodossier, new_values): societe = nodossier[0:2] nochantier = int(nodossier[3:]) @@ -160,14 +168,14 @@ 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, filename, filesize, user): +def insert_dossier_attaches(request, nodossier, norapport, filename, filesize, user): societe = nodossier[0:2] nochantier = int(nodossier[3:]) # enregistrer dans la table dossier_attaches - 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}) + 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}) def get_rapport_by_no(request,nodossier,date_inter): societe = nodossier[0:2] diff --git a/mondumas/routes.py b/mondumas/routes.py index db9e73d..c6c31a1 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -23,7 +23,7 @@ def includeme(config): 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/{nodossier}') + config.add_route('upload_img', '/upload_img/{norapport}') # parametres config.add_route('parametres', '/parametres') config.add_route('connecter_a', '/connecter_a/{login}') diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index cef8b79..456d8b5 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -256,9 +256,9 @@
  • - + onclick="window.open('${docs_url}${detail.nomrep}/${detail.societe}/${detail.nochantier}/${detail.nomfichier},'popup','width=900,height=768'); return false;"> ${detail.nomfichier}  - crée le ${detail.cree_le.strftime('%d-%m-%Y')} par ${detail.usermaj} diff --git a/mondumas/templates/dossier/rdf_view.pt b/mondumas/templates/dossier/rdf_view.pt index ab1cc2a..4485b4b 100644 --- a/mondumas/templates/dossier/rdf_view.pt +++ b/mondumas/templates/dossier/rdf_view.pt @@ -249,10 +249,16 @@

    PHOTOS

    - +  Ajouter une photo

    - +
    +
    + +
    +
    +

    CONCLUSIONS


       ${rapport.conclusions} diff --git a/mondumas/templates/dossier/upload_doc.pt b/mondumas/templates/dossier/upload_doc.pt index 4b8c781..05d881d 100644 --- a/mondumas/templates/dossier/upload_doc.pt +++ b/mondumas/templates/dossier/upload_doc.pt @@ -15,7 +15,7 @@
    - Retiur au dossier + Retour au dossier
    @@ -33,9 +33,9 @@
  • - + onclick="window.open('${docs_url}${detail.nomrep}/${detail.societe}/${detail.nochantier}/${detail.nomfichier},'popup','width=900,height=768'); return false;"> ${detail.nomfichier}  - crée le ${detail.cree_le.strftime('%d-%m-%Y')} par ${detail.usermaj} diff --git a/mondumas/templates/dossier/upload_img.pt b/mondumas/templates/dossier/upload_img.pt index 4b8c781..e7361c0 100644 --- a/mondumas/templates/dossier/upload_img.pt +++ b/mondumas/templates/dossier/upload_img.pt @@ -14,41 +14,37 @@ - - + +
    +
      +
    • Seuls les documents au format PNG, JPG ou JPEG seront acceptés.
    • +
    • La taille de chaque document ne doit pas dépasser 2 Mo.
    • +
    -

    Documents déjà téléchargés dans le dossier

    - + - + $(function () { + $('.fotorama').fotorama(); + }); + diff --git a/mondumas/templates/layouts/global_layout.pt b/mondumas/templates/layouts/global_layout.pt index 5d08ebe..540b74f 100644 --- a/mondumas/templates/layouts/global_layout.pt +++ b/mondumas/templates/layouts/global_layout.pt @@ -42,6 +42,9 @@ + + + diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index 0745b57..bbca354 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, 'DOCS_ATTACHES', nodossier) + docs_attaches = get_docs_attaches(request, nodossier) 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, 'DOCS_ATTACHES', nodossier) + docs_attaches = get_docs_attaches(request, nodossier) if 'form.submitted' in request.params: # récupère le fichier lui-même @@ -288,29 +288,39 @@ def upload_doc(request): else: # récupère le nom du fichier et ajouter le no de dossier 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 + '~' - file_path = os.path.join('%s/%s' % (request.registry.settings['mondumas.devfac_dir'],societe), 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 < 4 Mo - filesize = round(os.path.getsize(temp_file_path) / 1024) - if filesize > 4096 : - 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. - os.rename(temp_file_path, file_path) - - 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) + # 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) return { 'page_title': u"Télécharger un document", @@ -324,20 +334,20 @@ def upload_doc(request): @view_config(route_name='upload_img', renderer='../templates/dossier/upload_img.pt', permission='view') def upload_img(request): logged_in = request.authenticated_userid.upper() - nodossier = request.matchdict['nodossier'] - societe = nodossier[0:2] - nochantier = nodossier[3:] + norapport = request.matchdict['norapport'] - url = request.route_url("upload_img", nodossier=nodossier) + url = request.route_url("upload_img", norapport=norapport) message = "" - 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("dossier_lookup")) + 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")) - # lire tous les documents attachés - docs_attaches = get_docs_attaches(request, 'DOCS_ATTACHES', nodossier) + 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 lui-même @@ -345,45 +355,57 @@ def upload_img(request): # récupère son nom input_name = request.POST['filename'].filename # récupère son extension - input_ext = input_name.split('.')[-1] - + input_ext = input_name.split('.')[-1] + # controler l'extension - ext_allowed = ['jpeg','jpg','png','pdf'] + ext_allowed = ['jpeg','jpg','png'] if input_ext.lower() not in ext_allowed : request.session.flash("Le format de ce fichier n'est pas valide. Téléchargement impossible.", 'warning') else: - # récupère le nom du fichier et ajouter le no de dossier - filename = '%s-DD%s-%s' % (societe, nochantier, request.POST['filename'].filename) + # récupère le nom du fichier et ajouter le no de rapport + filename = '%s-RDF%s-%s' % (societe, norapport, request.POST['filename'].filename) - file_path = os.path.join('%s/%s' % (request.registry.settings['mondumas.devfac_dir'],societe), 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 < 4 Mo - filesize = round(os.path.getsize(temp_file_path) / 1024) - if filesize > 4096 : - 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. - os.rename(temp_file_path, file_path) - - 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) + # 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) return { 'page_title': u"Télécharger une photo", 'url': url, - 'nodossier': nodossier, - 'dossier': dossier, - 'docs_attaches': docs_attaches, + 'nochantier': nochantier, + 'norapport': norapport, + 'rapport': rapport, + 'photos': photos, 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } @@ -514,18 +536,25 @@ def rdf_list(request): @view_config(route_name='rdf_view', renderer='../templates/dossier/rdf_view.pt', permission='view') def rdf_view(request): logged_in = request.authenticated_userid.upper() - no_id = request.matchdict['no_id'] + norapport = request.matchdict['no_id'] + url = request.route_url('rdf_view', no_id=norapport) # lire le rapport - rapport = get_rapport_by_no_id(request, no_id) - url = request.route_url('rdf_view', no_id=no_id) + rapport = get_rapport_by_no_id(request, norapport) nodossier = 'PL-' + str(rapport.nochantier) + + # lire tous les photos attachées + photos = get_photos(request, rapport.nochantier, norapport) return { - 'page_title': "Rapport de RDF : %s du %s" % (nodossier, rapport.date_inter.strftime('%d-%m-%Y')), + 'page_title': "Dossier %s : Rapport no %s du %s" % (nodossier, norapport, rapport.date_inter.strftime('%d-%m-%Y')), 'url': url, 'logged_in': logged_in, 'rapport': rapport, 'nodossier': nodossier, + 'nochantier': rapport.nochantier, + 'norapport': norapport, + 'photos': photos, + 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), } diff --git a/production.ini b/production.ini index 5c9f533..af67674 100644 --- a/production.ini +++ b/production.ini @@ -21,7 +21,7 @@ sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8 sqlalchemy.pool_recycle = 3600 mondumas.admin_email = phuoc@caotek.fr -mondumas.devfac_url = mondumas:static/img/DEVFAC14/ +mondumas.devfac_url = mondumas:static/img/DEVFAC/ mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES # Mailer configuration