%s
' % ligne.libelle
+ dt_html += '
%s ' % ligne.libelle
if ligne.metrage:
- dt_html += '%s ' % ligne.metrage
+ dt_html += ligne.metrage
if ligne.deduction:
- dt_html += 'déduction : '
- dt_html += '%s ' % ligne.deduction
- dt_html += ' '
- dt_html += '' % ligne.qte
- dt_html += '' % to_euro(ligne.prixht)
- dt_html += '' % to_euro(ligne.mtht)
+ dt_html += ' déduction : '
+ dt_html += '%s' % ligne.deduction
+ dt_html += ' | '
+ dt_html += '%s | ' % ligne.qte
+ dt_html += '%s | ' % to_euro(ligne.prixht)
+ dt_html += '%s |
' % to_euro(ligne.mtht)
return {
'page_title': '',
diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py
index 9d2a0f4..96c7b35 100644
--- a/mondumas/views/dossier.py
+++ b/mondumas/views/dossier.py
@@ -96,6 +96,8 @@ def dossier_view(request):
nodossier = request.matchdict['nodossier']
societe = nodossier[0:2]
logged_in = request.authenticated_userid.upper()
+ url = request.route_url('dossier_view', nodossier=nodossier)
+
# lire son niveau d'accès
member = get_member_by_id(request, logged_in)
access = member.access
@@ -108,12 +110,14 @@ def dossier_view(request):
return HTTPFound(location=request.route_url("dossier_lookup"))
# lire tous le suivi du dossier
details = get_dossier_rdv_by_no(request, nodossier, '0')
- # lire toutes les dossiers du chantiers
+ # lire toutes les devis et factures du chantier
documents = get_documents_byChantier(request, nodossier)
# 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, '')
+ docs_attaches = get_docs_attaches(request, nodossier, 0, 0, 'CLT', '')
+ # lire tous les documents techniques
+ docs_techniques = get_docs_attaches(request, nodossier, 0, 0, 'FRN', '')
if nodossier.startswith('PL'):
# lire rapport de rdf
rapports = get_rapport_by_no(request, nodossier, '')
@@ -121,9 +125,15 @@ def dossier_view(request):
rapports = []
# select background color according to society
bg_color = "bg-%s" % societe
-
+
+ if 'form.close' in request.params:
+ update_dossier_cloture(request, nodossier, logged_in)
+ request.session.flash(u"Le dossier a été cloturé avec succès.", 'success')
+ return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier))
+
return {
'page_title': "Dossier : %s" % (nodossier),
+ 'url': url,
'nodossier': nodossier,
'dossier': dossier,
'details': details,
@@ -131,6 +141,7 @@ def dossier_view(request):
'documents': documents,
'similaires': similaires,
'docs_attaches': docs_attaches,
+ 'docs_techniques': docs_techniques,
'docs_url': request.static_url(request.registry.settings['mondumas.devfac_url']),
'bg_color': bg_color,
'access': access,
@@ -264,10 +275,16 @@ def dossier_edit(request):
def upload_doc(request):
logged_in = request.authenticated_userid.upper()
nodossier = request.matchdict['nodossier']
+ origine = request.matchdict['origine']
+ if origine == 'CLT':
+ page_title = "Télécharger un document attaché"
+ else:
+ page_title = "Télécharger un document technique"
+
societe = nodossier[0:2]
nochantier = nodossier[3:]
- url = request.route_url("upload_doc", nodossier=nodossier)
+ url = request.route_url("upload_doc", nodossier=nodossier, origine=origine)
message = ""
dossier = get_dossier_by_no(request, nodossier)
@@ -276,7 +293,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, nodossier, 0, 0, '')
+ docs_attaches = get_docs_attaches(request, nodossier, 0, 0, origine, '')
if 'form.submitted' in request.params:
# récupère le fichier download dans le dossier /tmp
@@ -290,14 +307,14 @@ def upload_doc(request):
# fabriquer le nom du document
filename = '%s-DD%s-%s' % (societe, nochantier, input_name)
- tempFile2Dossier(request, societe, nochantier, '0', 0, temp_file, filename, logged_in)
+ 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')
# lire tous les documents attachés
- docs_attaches = get_docs_attaches(request, nodossier, 0, 0, '')
+ docs_attaches = get_docs_attaches(request, nodossier, 0, 0, origine, '')
return {
- 'page_title': "Télécharger un document",
+ 'page_title': page_title,
'url': url,
'nodossier': nodossier,
'dossier': dossier,
@@ -356,7 +373,7 @@ 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, temp_file, filename, logged_in)
+ tempFile2Dossier(request, societe, nochantier, norapport, nosection, 'CLT', temp_file, filename, logged_in)
request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success')
@@ -594,7 +611,7 @@ def rdf_view(request):
'margin-bottom': '3cm',
'margin-left': '2cm',
'footer-font-size':'7',
- 'footer-right': '[page] of [topage]',
+ 'footer-right': '[page] / [topage]',
}
# créer le répertoire du rapport s'il n'existe pas encore
@@ -603,6 +620,10 @@ def rdf_view(request):
# générer le rapport en PDF
filename = "PL-DD%s-rapport_RDF_no_%s.pdf" % (str(rapport.nochantier), norapport)
dest = "mondumas/static/DEVFAC/DOCS_ATTACHES/PL/%s/%s" % (str(rapport.nochantier), filename)
+
+ # supprimer le fichier s'il existe déjà
+ if os.path.exists(dest):
+ os.remove(dest)
# developpement ou production
if request.registry.settings["mail.username"] == "sas.dumas@orange.fr":
@@ -613,7 +634,7 @@ def rdf_view(request):
config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe")
pdfkit.from_url(origin, dest, configuration=config, options=options)
- insert_dossier_attaches(request, nodossier, 0, 0, filename, '160 Ko', logged_in)
+ insert_dossier_attaches(request, nodossier, 0, 0, 'CLT', filename, '160 Ko', logged_in)
# si generation pdf, maj de la date du rapport
new_values = {}
new_values['date_rapport'] = date.today()
@@ -725,7 +746,7 @@ def rdf_bill(request):
return HTTPFound(location=request.route_url('rdf_view', no_id=norapport))
# lire tous les articles RDF
- articles = get_articles_by_fam(request, 'RDF')
+ articles = get_articles_rdf(request)
article = 'RDF1'
if 'form.submitted' in request.params:
@@ -870,7 +891,7 @@ def demandes(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, temp_file_path, filename, 'EMAIL')
+ tempFile2Dossier(request, societe, nochantier, '0', 0, 'CLT', temp_file_path, filename, 'EMAIL')
traite = 1
return traite
@@ -890,7 +911,7 @@ def demandes(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, temp_file_path, filename, 'EMAIL')
+ tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 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
@@ -908,7 +929,7 @@ def demandes(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, temp_file_path, filename, 'EMAIL')
+ tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', 0, 'CLT', temp_file_path, filename, 'EMAIL')
# insérer une ligne de suivi ANNULATION
insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR DOMUS')
# log de nuit
@@ -1083,7 +1104,7 @@ def downloadFile2Temp(input_file, input_name, ext_allowed):
return temp_file_path
-def tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_file, filename, logged_in):
+def tempFile2Dossier(request, societe, nochantier, norapport, nosection, 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)
@@ -1100,7 +1121,7 @@ def tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_fi
shutil.move(temp_file, filepath)
filesize = round(os.path.getsize(filepath) / 1024)
- insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, nosection, filename, '%s Ko' % str(filesize), logged_in)
+ insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), norapport, nosection, origine, filename, '%s Ko' % str(filesize), logged_in)
def download_pdf_to_tmp(email_message):
# downloading attachments
diff --git a/mondumas/views/parametres.py b/mondumas/views/parametres.py
index c0c3a12..734e263 100644
--- a/mondumas/views/parametres.py
+++ b/mondumas/views/parametres.py
@@ -43,8 +43,8 @@ def infrastructure(request):
'logged_in': logged_in,
}
-@view_config(route_name='users_list', renderer='../templates/parametres/users_list.pt', permission='manage')
-def users_list(request):
+@view_config(route_name='users', renderer='../templates/parametres/users.pt', permission='manage')
+def users(request):
# lire les utilisateurs
items = get_member_by_id(request, '0')
@@ -132,7 +132,7 @@ def user_edit(request):
individu = get_member_by_id(request, cd_uti)
if not individu:
request.session.flash(u"Utilisateur non trouvé : %s" % cd_uti, 'warning')
- return HTTPFound(location=request.route_url('users_list'))
+ return HTTPFound(location=request.route_url('users'))
page_title= "Fiche de %s" %(individu.NOM)
lienmdp = '%s/%s' % (individu.CD_UTI, date.today().strftime('%d%m%Y'))
@@ -151,12 +151,12 @@ def user_edit(request):
if new_values:
update_membre(request, cd_uti, new_values)
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
- return HTTPFound(location=request.route_url('users_list'))
+ return HTTPFound(location=request.route_url('users'))
if 'form.deleted' in request.params:
delete_membre(request, cd_uti)
request.session.flash(u"La fiche a été supprimée avec succès.", 'success')
- return HTTPFound(location=request.route_url('users_list'))
+ return HTTPFound(location=request.route_url('users'))
return {
'page_title': page_title,
@@ -261,8 +261,8 @@ def orphans_de(request):
'nochantier': nochantier,
}
-@view_config(route_name='rdf_causes_list', renderer='../templates/parametres/rdf_causes_list.pt', permission='manage')
-def rdf_causes_list(request):
+@view_config(route_name='rdf_causes', renderer='../templates/parametres/rdf_causes.pt', permission='manage')
+def rdf_causes(request):
# lire les causes des RDF
items = get_rdf_causes_by_id(request, '0')
@@ -300,19 +300,19 @@ def rdf_cause_edit(request):
cause = get_rdf_causes_by_id(request, old_code)
if not cause:
request.session.flash(u"Cause non trouvée : %s" % old_code, 'warning')
- return HTTPFound(location=request.route_url('rdf_causes_list'))
+ return HTTPFound(location=request.route_url('rdf_causes'))
if 'form.submitted' in request.params:
code = request.params['code']
libelle = request.params['libelle']
update_rdf_cause(request, old_code, code, libelle)
request.session.flash(u"La cause a été mise à jour avec succès.", 'success')
- return HTTPFound(location=request.route_url('rdf_causes_list'))
+ return HTTPFound(location=request.route_url('rdf_causes'))
if 'form.deleted' in request.params:
delete_rdf_cause(request, old_code)
request.session.flash(u"La cause a été supprimée avec succès.", 'success')
- return HTTPFound(location=request.route_url('rdf_causes_list'))
+ return HTTPFound(location=request.route_url('rdf_causes'))
return {
'page_title': page_title,
@@ -356,7 +356,7 @@ def emails_msg(request):
item = get_emails_sent(request, '', nolig)
if not item:
request.session.flash("Impossible de lire le message %s" % nolig, 'damger')
- return HTTPFound(location=request.route_url('rdf_causes_list'))
+ return HTTPFound(location=request.route_url('rdf_causes'))
return {
'page_title': item.COMMENT,
@@ -442,3 +442,89 @@ def text_view(request):
'texte': texte,
'text_id': text_id,
}
+
+@view_config(route_name='articles', renderer='../templates/parametres/articles.pt', permission='manage')
+def articles(request):
+
+ familles = ["Article", "Texte"]
+ famille = 'ARticle'
+
+ # si table a changé
+ if 'famille' in request.params:
+ famille = request.params["famille"]
+
+ # lire les articles
+ items = get_articles_byFam(request, famille[0])
+
+ # construire la liste
+ liste=[]
+ for item in items:
+ d = (item.REF, item.LIBART, item.LIBCOMPL1, to_euro(item.PRIXHT1), to_euro(item.PRIXHT2), item.ref_cli1, item.ref_cli2)
+ liste.append(d)
+
+ return {
+ 'page_title': 'Liste des articles',
+ 'dt_data': json.dumps(liste),
+ 'familles': familles,
+ 'famille': famille,
+ }
+
+@view_config(route_name='article_edit', renderer='../templates/parametres/article_edit.pt', permission='manage')
+def article_edit(request):
+ ref = request.matchdict['ref']
+ url = request.route_url('article_edit', ref=ref)
+ logged_in = request.authenticated_userid
+ message = ''
+
+ familles = ["Article", "Texte"]
+
+ if ref == '0':
+ # nouveau
+ item = {}
+ item['REF'] = '0'
+ item['FAM'] = 'A'
+ item['LIBART'] = ''
+ item['PRIXHT1'] = 0
+ item['PRIXHT2'] = 0
+ item['ref_cli1'] = ''
+ item['ref_cli2'] = ''
+ item['LIBCOMPL1'] = ''
+ item['LIBCOMPL2'] = ''
+ item['LIBCOMPL3'] = ''
+ item['LIBCOMPL4'] = ''
+ page_title= 'Nouvel article'
+ else:
+ # lire l'article
+ item = get_article(request, 'REF', ref)
+ if not item:
+ request.session.flash("article non trouvé : %s" % ref, 'warning')
+ return HTTPFound(location=request.route_url('articles'))
+ page_title= "article : %s - %s" %(item.REF, item.LIBART)
+
+ if 'form.submitted' in request.params:
+ new_ref = request.params["REF"]
+ if new_ref == '0':
+ message = "Veuillez saisir un code article valide."
+ else:
+ new_values = {}
+ for param, db_value in item.items():
+ if param in request.params and request.params[param] != db_value:
+ new_values[param] = request.params[param]
+
+ if new_values:
+ update_article(request, ref, new_values)
+ request.session.flash("Le article a été mis à jour avec succès.", 'success')
+ return HTTPFound(location=request.route_url('articles'))
+
+ if 'form.deleted' in request.params:
+ delete_article(request, ref)
+ request.session.flash("Le article a été supprimé avec succès.", 'success')
+ return HTTPFound(location=request.route_url('articles'))
+
+ return {
+ 'page_title': page_title,
+ 'url': url,
+ 'message': message,
+ 'item': item,
+ 'familles': familles,
+ }