ajout de rdf_view.pt + upload_img.pt

This commit is contained in:
2019-03-19 16:31:20 +01:00
parent fbbb087fb9
commit 84357ce48d
10 changed files with 150 additions and 108 deletions

View File

@@ -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

View File

@@ -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]

View File

@@ -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}')

View File

@@ -256,9 +256,9 @@
<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}"
<a href="${docs_url}${detail.nomrep}/${detail.societe}/${detail.nochantier}/${detail.nomfichier}"
target="popup"
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.nochantier}/${detail.nomfichier},'popup','width=900,height=768'); return false;">
${detail.nomfichier}
</a>
&nbsp;-&nbsp;crée le ${detail.cree_le.strftime('%d-%m-%Y')}&nbsp;par&nbsp;${detail.usermaj}

View File

@@ -249,10 +249,16 @@
<br />
<h4 class="text-center text-primary">PHOTOS</h4>
<p>
<a href="${request.application_url}/upload_img/${nodossier}" class="btn btn-success" role="button">
<a href="${request.application_url}/upload_img/${norapport}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-cloud-upload"></span>&nbsp;Ajouter une photo</a>
</p>
<div class="fotorama" data-nav="thumbs">
<div tal:repeat="detail photos">
<img src="${docs_url}${detail.nomrep}/${detail.societe}/${nochantier}/${norapport}/${detail.nomfichier}"
data-caption="${detail.nomfichier}" align="center" />
</div>
</div>
<br />
<h4 class="text-center text-primary">CONCLUSIONS</h4>
<div class="form-group">
<br />&nbsp;&nbsp;&nbsp;${rapport.conclusions}

View File

@@ -15,7 +15,7 @@
</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>
<span class="glyphicon glyphicon-arrow-left"></span> Retour au dossier</a>
<button id="uploadButton" class="btn btn-primary" type="submit" name="form.submitted">
<i class="glyphicon glyphicon-refresh"></i> Télécharger</button>
</div>
@@ -33,9 +33,9 @@
<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}"
<a href="${docs_url}${detail.nomrep}/${detail.societe}/${detail.nochantier}/${detail.nomfichier}"
target="popup"
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.nochantier}/${detail.nomfichier},'popup','width=900,height=768'); return false;">
${detail.nomfichier}
</a>
&nbsp;-&nbsp;crée le ${detail.cree_le.strftime('%d-%m-%Y')}&nbsp;par&nbsp;${detail.usermaj}

View File

@@ -14,40 +14,36 @@
<input id="uploadfile" name="filename" type="file" value="" required />
</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>
<a class="btn btn-default" href="${request.route_url('rdf_view', no_id=norapport)}">
<span class="glyphicon glyphicon-arrow-left"></span> Retour au rapport</a>
<button id="uploadButton" class="btn btn-primary" type="submit" name="form.submitted">
<i class="glyphicon glyphicon-refresh"></i> Télécharger</button>
</div>
</form>
</div> <!-- row -->
<div class="row">
<ul>
<li>Seuls les documents au format <b>PDF, PNG, JPG ou JPEG</b> seront acceptés.</li>
<li>La taille de chaque document ne doit <b>pas dépasser 4 Mo</b>.</li>
<li>Seuls les documents au format <b>PNG, JPG ou JPEG</b> seront acceptés.</li>
<li>La taille de chaque document ne doit <b>pas dépasser 2 Mo</b>.</li>
</ul>
</div> <!-- row -->
<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>
&nbsp;-&nbsp;crée le ${detail.cree_le.strftime('%d-%m-%Y')}&nbsp;par&nbsp;${detail.usermaj}
</li>
<h3>Photos déjà téléchargées</h3>
<div class="fotorama" data-nav="thumbs">
<div tal:repeat="detail photos">
<img src="${docs_url}${detail.nomrep}/${detail.societe}/${nochantier}/${norapport}/${detail.nomfichier}"
data-caption="${detail.nomfichier}" align="center" />
</div>
</div>
</ul>
<script type="text/javascript">
$('#uploadButton').on('click', function(){
$('i.gly-spin').removeClass('gly-spin');
$('i').addClass('gly-spin');
});
$(function () {
$('.fotorama').fotorama();
});
</script>
</div>

View File

@@ -42,6 +42,9 @@
<script src="${request.static_url('mondumas:static/dist/formvalidation/js/language/fr_FR.js')}" type="text/javascript"></script>
<!-- JSignature plugin -->
<script src="${request.static_url('mondumas:static/dist/jSignature/libs/jSignature.min.js')}"></script>
<!-- fotorama.css & fotorama.js. -->
<link href="http://cdnjs.cloudflare.com/ajax/libs/fotorama/4.6.4/fotorama.css" rel="stylesheet"> <!-- 3 KB -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/fotorama/4.6.4/fotorama.js"></script> <!-- 16 KB -->
<!-- Less -->
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js" type="text/javascript"></script>

View File

@@ -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,8 +288,14 @@ 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)
file_path = os.path.join('%s/%s' % (request.registry.settings['mondumas.devfac_dir'],societe), 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 + '~'
@@ -298,19 +304,23 @@ def upload_doc(request):
with open(temp_file_path, 'wb') as output_file:
shutil.copyfileobj(input_file, output_file)
# controler la taille du fichier < 4 Mo
# controler la taille du fichier < 2 Mo
filesize = round(os.path.getsize(temp_file_path) / 1024)
if filesize > 4096 :
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)
insert_dossier_attaches(request, nodossier, filename, '%s Ko' % str(filesize), logged_in)
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, 'DOCS_ATTACHES', nodossier)
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
@@ -348,14 +358,21 @@ def upload_img(request):
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)
# 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 + '~'
@@ -364,26 +381,31 @@ def upload_img(request):
with open(temp_file_path, 'wb') as output_file:
shutil.copyfileobj(input_file, output_file)
# controler la taille du fichier < 4 Mo
# controler la taille du fichier < 2 Mo
filesize = round(os.path.getsize(temp_file_path) / 1024)
if filesize > 4096 :
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)
insert_dossier_attaches(request, nodossier, filename, '%s Ko' % str(filesize), logged_in)
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 documents attachés
docs_attaches = get_docs_attaches(request, 'DOCS_ATTACHES', nodossier)
# 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']),
}

View File

@@ -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