diff --git a/development.ini b/development.ini index db3d97b..214ed85 100644 --- a/development.ini +++ b/development.ini @@ -17,12 +17,14 @@ pyramid.includes = pyramid_layout pyramid_mailer pyramid_tm + 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.DEVFAC14 = mondumas:static/img/DEVFAC14/ +mondumas.devfac_url = mondumas:static/img/DEVFAC14/ +mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES # Mailer configuration mail.host = smtp.free.fr diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index a907564..6317644 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -159,3 +159,12 @@ def update_dossier(request, nodossier, new_values): new_values['nochantier'] = nochantier query = u"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): + 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}) diff --git a/mondumas/routes.py b/mondumas/routes.py index deeb331..f73c39c 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -19,6 +19,7 @@ def includeme(config): config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}') config.add_route('dossier_view', '/dossier_view/{nodossier}') config.add_route('devis_view', '/devis_view/{nodossier}') + config.add_route('upload_doc', '/upload_doc/{nodossier}') # parametres config.add_route('parametres', '/parametres') config.add_route('dashboard', '/dashboard') diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index db9487c..44b3ca4 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -206,6 +206,10 @@
+

+ +  Télécharger un document +

diff --git a/mondumas/templates/dossier/upload_doc.pt b/mondumas/templates/dossier/upload_doc.pt new file mode 100644 index 0000000..9fb888a --- /dev/null +++ b/mondumas/templates/dossier/upload_doc.pt @@ -0,0 +1,52 @@ + +
+ +
+
+ +
+ +
+ + +
+
+ + Retiur au dossier + +
+
+
    +
  • Seuls les documents au format PDF, PNG, JPEG, ou DOC seront acceptés.
  • +
  • La taille de chaque document ne doit pas dépasser 4 Mo.
  • +
+ +
+ +

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

+ + +
+ diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index ad51044..ca4662d 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -17,12 +17,13 @@ from pyramid.httpexceptions import ( 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 +import os +import uuid +import shutil from ..views.default import * from ..models.default import * @@ -110,7 +111,7 @@ def dossier_view(request): 'documents': documents, 'similaires': similaires, 'docs_attaches': docs_attaches, - 'docs_url': request.static_url(request.registry.settings['mondumas.DEVFAC14']), + 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), 'bg_color': bg_color, } @@ -247,3 +248,55 @@ def dossier_edit(request): 'nodossier': nodossier, } +@view_config(route_name='upload_doc', renderer='../templates/dossier/upload_doc.pt', permission='view') +def upload_doc(request): + logged_in = request.authenticated_userid + nodossier = request.matchdict['nodossier'] + societe = nodossier[0:2] + nochantier = nodossier[3:] + + url = request.route_url("upload_doc", nodossier=nodossier) + 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")) + + # lire tous les documents attachés + docs_attaches = get_docs_attaches(request, 'DOCS_ATTACHES', nodossier) + + if 'form.submitted' in request.params: + # récupère le fichier lui-même + input_file = request.POST['filename'].file + + # récupère le nom du fichier et ajouter le no de dossier + filename = '%s-DD%s-%s' % (societe, nochantier, 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) + + # Now that we know the file has been fully saved to disk move it into place. + os.rename(temp_file_path, file_path) + filesize = round(os.path.getsize(file_path) / 1024) + + insert_dossier_attaches(request, nodossier, filename, '%s Ko' % str(filesize), logged_in.upper()) + + message = 'Le fichier est téléchargé avec succès.' + + return { + 'page_title': u"Télécharger un document", + 'message': message, + 'url': url, + 'nodossier': nodossier, + 'dossier': dossier, + 'docs_attaches': docs_attaches, + 'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']), + } +