ajout upload_doc.pt
This commit is contained in:
@@ -17,12 +17,14 @@ pyramid.includes =
|
|||||||
pyramid_layout
|
pyramid_layout
|
||||||
pyramid_mailer
|
pyramid_mailer
|
||||||
pyramid_tm
|
pyramid_tm
|
||||||
|
|
||||||
|
|
||||||
sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8
|
sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8
|
||||||
# sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8
|
# sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8
|
||||||
|
|
||||||
mondumas.admin_email = ctphuoc@bbox.fr
|
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
|
# Mailer configuration
|
||||||
mail.host = smtp.free.fr
|
mail.host = smtp.free.fr
|
||||||
|
|||||||
@@ -159,3 +159,12 @@ def update_dossier(request, nodossier, new_values):
|
|||||||
new_values['nochantier'] = nochantier
|
new_values['nochantier'] = nochantier
|
||||||
query = u"UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s
|
query = u"UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s
|
||||||
execute_query(request, query, new_values)
|
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})
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ def includeme(config):
|
|||||||
config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}')
|
config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}')
|
||||||
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
||||||
config.add_route('devis_view', '/devis_view/{nodossier}')
|
config.add_route('devis_view', '/devis_view/{nodossier}')
|
||||||
|
config.add_route('upload_doc', '/upload_doc/{nodossier}')
|
||||||
# parametres
|
# parametres
|
||||||
config.add_route('parametres', '/parametres')
|
config.add_route('parametres', '/parametres')
|
||||||
config.add_route('dashboard', '/dashboard')
|
config.add_route('dashboard', '/dashboard')
|
||||||
|
|||||||
@@ -206,6 +206,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="panel-attaches" class="panel-collapse collapse">
|
<div id="panel-attaches" class="panel-collapse collapse">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<p>
|
||||||
|
<a href="${request.application_url}/upload_doc/${nodossier}" class="btn btn-primary" role="button">
|
||||||
|
<span class="glyphicon glyphicon-cloud-upload"></span> Télécharger un document</a>
|
||||||
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<div tal:repeat="detail docs_attaches">
|
<div tal:repeat="detail docs_attaches">
|
||||||
<li>
|
<li>
|
||||||
@@ -216,7 +220,7 @@
|
|||||||
onclick="window.open('${docs_url}${detail.nomrep}/${detail.societe}/${detail.nomfichier},'popup','width=900,height=768'); return false;">
|
onclick="window.open('${docs_url}${detail.nomrep}/${detail.societe}/${detail.nomfichier},'popup','width=900,height=768'); return false;">
|
||||||
${detail.nomfichier}
|
${detail.nomfichier}
|
||||||
</a>
|
</a>
|
||||||
- ${detail.cree_le.strftime('%d-%m-%Y')} - ${detail.taillefichier}
|
- crée le ${detail.cree_le.strftime('%d-%m-%Y')} par ${detail.usermaj}
|
||||||
</li>
|
</li>
|
||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
52
mondumas/templates/dossier/upload_doc.pt
Normal file
52
mondumas/templates/dossier/upload_doc.pt
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div tal:condition="message" tal:content="message" class="alert alert-success" />
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<form action="${url}" method="post" accept-charset="utf-8" enctype="multipart/form-data"
|
||||||
|
data-fv-framework="bootstrap"
|
||||||
|
data-fv-icon-valid="glyphicon glyphicon-ok"
|
||||||
|
data-fv-icon-invalid="glyphicon glyphicon-remove"
|
||||||
|
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="uploadfile">Séléctionner un fichier</label>
|
||||||
|
<input id="uploadfile" name="filename" type="file" value="" required
|
||||||
|
data-fv-file___extension="jpeg, jpg,png,pdf,doc"
|
||||||
|
data-fv-file___type="image/jpeg,image/png,application/pdf,application/msword"
|
||||||
|
data-fv-file___max-size="4194304"
|
||||||
|
data-fv-file___message="Le format du fichier sélectionné n'est pas valide" />
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<a class="btn btn-default" href="${request.route_url('dossier_view', nodossier=nodossier)}">
|
||||||
|
<span class="glyphicon glyphicon-arrow-left"></span> Retiur au dossier</a>
|
||||||
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
<span class="glyphicon glyphicon-cloud-upload"></span> Télécharger</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<ul>
|
||||||
|
<li>Seuls les documents au format <b>PDF, PNG, JPEG, ou DOC</b> seront acceptés.</li>
|
||||||
|
<li>La taille de chaque document ne doit <b>pas dépasser 4 Mo</b>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Documents déjà téléchargés dans le dossier</h3>
|
||||||
|
<ul>
|
||||||
|
<div tal:repeat="detail docs_attaches">
|
||||||
|
<li>
|
||||||
|
<span class="glyphicon glyphicon-file" tal:condition="detail.nomfichier[-3:]=='pdf'"></span>
|
||||||
|
<span class="glyphicon glyphicon-picture" tal:condition="detail.nomfichier[-3:]=='jpg'"></span>
|
||||||
|
<a href="${docs_url}${detail.nomrep}/${detail.societe}/${detail.nomfichier}"
|
||||||
|
target="popup"
|
||||||
|
onclick="window.open('${docs_url}${detail.nomrep}/${detail.societe}/${detail.nomfichier},'popup','width=900,height=768'); return false;">
|
||||||
|
${detail.nomfichier}
|
||||||
|
</a>
|
||||||
|
- crée le ${detail.cree_le.strftime('%d-%m-%Y')} par ${detail.usermaj}
|
||||||
|
</li>
|
||||||
|
</div>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
@@ -17,12 +17,13 @@ from pyramid.httpexceptions import (
|
|||||||
from pyramid_mailer import get_mailer
|
from pyramid_mailer import get_mailer
|
||||||
from pyramid_mailer.message import Message, Attachment
|
from pyramid_mailer.message import Message, Attachment
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import hashlib
|
|
||||||
|
|
||||||
from sqlalchemy.exc import DBAPIError
|
from sqlalchemy.exc import DBAPIError
|
||||||
from ..security import groupfinder
|
from ..security import groupfinder
|
||||||
|
|
||||||
import json
|
import os
|
||||||
|
import uuid
|
||||||
|
import shutil
|
||||||
|
|
||||||
from ..views.default import *
|
from ..views.default import *
|
||||||
from ..models.default import *
|
from ..models.default import *
|
||||||
@@ -110,7 +111,7 @@ def dossier_view(request):
|
|||||||
'documents': documents,
|
'documents': documents,
|
||||||
'similaires': similaires,
|
'similaires': similaires,
|
||||||
'docs_attaches': docs_attaches,
|
'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,
|
'bg_color': bg_color,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,3 +248,55 @@ def dossier_edit(request):
|
|||||||
'nodossier': nodossier,
|
'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']),
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user