From d03e90b7b8c17089a55aa28f8165b644ae9052e8 Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Fri, 20 Nov 2020 09:47:20 +0100 Subject: [PATCH] ajout Doc techniques dans dossier_view.pt et articles.pt --- mondumas/layout.py | 2 +- mondumas/models/default.py | 7 +- mondumas/models/devis.py | 10 + mondumas/models/dossier.py | 34 ++-- mondumas/models/parametres.py | 33 ++++ mondumas/routes.py | 8 +- mondumas/templates/default/home.pt | 2 +- mondumas/templates/devis/devis_ligne.pt | 2 +- mondumas/templates/devis/devis_preview.pt | 184 +++++++++--------- mondumas/templates/devis/devis_web.pt | 13 +- mondumas/templates/dossier/dossier_view.pt | 70 ++++++- mondumas/templates/dossier/rdf_list.pt | 4 +- mondumas/templates/dossier/upload_doc.pt | 2 +- .../templates/{layouts => }/global_layout.pt | 0 mondumas/templates/parametres/article_edit.pt | 166 ++++++++++++++++ mondumas/templates/parametres/articles.pt | 70 +++++++ mondumas/templates/parametres/parametres.pt | 12 +- .../templates/parametres/rdf_cause_edit.pt | 2 +- .../{rdf_causes_list.pt => rdf_causes.pt} | 4 +- mondumas/templates/parametres/user_edit.pt | 2 +- .../parametres/{users_list.pt => users.pt} | 0 mondumas/templates/parametres/users_ua.pt | 4 +- mondumas/views/default.py | 5 +- mondumas/views/devis.py | 64 +++--- mondumas/views/dossier.py | 55 ++++-- mondumas/views/parametres.py | 108 ++++++++-- 26 files changed, 665 insertions(+), 198 deletions(-) rename mondumas/templates/{layouts => }/global_layout.pt (100%) create mode 100644 mondumas/templates/parametres/article_edit.pt create mode 100644 mondumas/templates/parametres/articles.pt rename mondumas/templates/parametres/{rdf_causes_list.pt => rdf_causes.pt} (92%) rename mondumas/templates/parametres/{users_list.pt => users.pt} (100%) diff --git a/mondumas/layout.py b/mondumas/layout.py index 784bc66..8e6e850 100644 --- a/mondumas/layout.py +++ b/mondumas/layout.py @@ -9,7 +9,7 @@ from .views.default import ( to_decz, ) -@layout_config(template='templates/layouts/global_layout.pt') +@layout_config(template='templates/global_layout.pt') class GlobalLayout(object): # page_title = "Pagode Tinh-Do" diff --git a/mondumas/models/default.py b/mondumas/models/default.py index 659a0db..cbff819 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -120,8 +120,11 @@ def get_article(request, type, libelle): elif type == 'AR': query = "SELECT * FROM articles WHERE ref_cli2 like :libelle;" results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall() + elif type == 'REF': + query = "SELECT * FROM articles WHERE ref = :ref;" + results = request.dbsession.execute(query, {'ref': libelle}).first() else: - query = "SELECT * FROM articles WHERE ref_cli2 = :ref_cli2;" - results = request.dbsession.execute(query, {'ref_cli2': libelle}).first() + query = "SELECT * FROM articles WHERE ref_cli2 = :ref;" + results = request.dbsession.execute(query, {'ref': libelle}).first() return results diff --git a/mondumas/models/devis.py b/mondumas/models/devis.py index 15d7dd1..9381b19 100644 --- a/mondumas/models/devis.py +++ b/mondumas/models/devis.py @@ -193,3 +193,13 @@ def move_devis_ligne(request, nodossier, nolig, move): # remettre le précédent ou suivant à la place de la ligne déplacée query = """UPDATE devis_lignes SET nolig = :nolig WHERE societe = :societe and no_id=:no_id and nolig = :max_no;""" execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no}) + +def get_societes(request, societe): + + if societe == '0': + query = "SELECT * FROM p_societe;" + results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() + else: + query = "SELECT * FROM p_societe WHERE societe = :societe;" + results = request.dbsession.execute(query, {'societe': societe}).first() + return results diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py index 8386823..f910570 100644 --- a/mondumas/models/dossier.py +++ b/mondumas/models/dossier.py @@ -121,17 +121,17 @@ WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_V return results -def get_docs_attaches(request, nodossier, norapport, nosection, filename): +def get_docs_attaches(request, nodossier, norapport, nosection, origine, filename): societe = nodossier[0:2] nochantier = int(nodossier[3:]) if filename == '': - query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier=0 ORDER BY cree_le;" + query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier=0 AND origine = :origine ORDER BY cree_le;" else: query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier - AND nodossier = :norapport AND nomfichier = :filename ORDER BY cree_le;""" - results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename}).fetchall() - + AND nodossier = :norapport AND origine = :origine AND nomfichier = :filename ORDER BY cree_le;""" + results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, + 'norapport': norapport, 'origine': origine, 'filename': filename}).fetchall() return results def get_photos(request, nodossier, norapport, nosection): @@ -176,18 +176,26 @@ def update_dossier(request, nodossier, new_values): query = "CALL spUPD_CHANTIER_COORD(:societe, :nochantier);" execute_query(request, query, {'societe': societe, 'nochantier': nochantier}) -def insert_dossier_attaches(request, nodossier, norapport, nosection, filename, filesize, user): +def update_dossier_cloture(request, nodossier, logged_in): + societe = nodossier[0:2] + nochantier = int(nodossier[3:]) + # met le montant regle à 1 centime pour terminé le dossier + query = "UPDATE dem_devis SET mtregl = 0.01, USERMAJ = :logged_in WHERE societe=:societe AND no_id=:nochantier" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'logged_in': logged_in}) + +def insert_dossier_attaches(request, nodossier, norapport, nosection, origine, filename, filesize, user): societe = nodossier[0:2] nochantier = int(nodossier[3:]) # fichier existe ? - item = get_docs_attaches(request, nodossier, norapport, nosection, filename) + item = get_docs_attaches(request, nodossier, norapport, nosection, origine, filename) if item: return # enregistrer dans la table dossier_attaches - query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, nomfichier, taillefichier, cree_le, usermaj) - VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:filename,:filesize,NOW(),:user);""" - execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'filename': filename, 'filesize': filesize, 'user': user}) + query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, origine, nomfichier, taillefichier, cree_le, usermaj) + VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:origine,:filename,:filesize,NOW(),:user);""" + execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, + 'nosection': nosection, 'origine': origine, 'filename': filename, 'filesize': filesize, 'user': user}) def get_rapport_by_no(request,nodossier,date_inter): societe = nodossier[0:2] @@ -205,9 +213,9 @@ def get_rapport_by_no_id(request,no_id): results = request.dbsession.execute(query, {'no_id': no_id}).first() return results -def get_articles_by_fam(request, fam): - query = "SELECT * FROM articles WHERE FAM = :fam;" - results = request.dbsession.execute(query, {'fam': fam}).fetchall() +def get_articles_rdf(request): + query = "SELECT * FROM articles WHERE REF LIKE 'RDF%';" + results = request.dbsession.execute(query).fetchall() return results def get_rapport_rdf(request): diff --git a/mondumas/models/parametres.py b/mondumas/models/parametres.py index 006f7af..ff99c7e 100644 --- a/mondumas/models/parametres.py +++ b/mondumas/models/parametres.py @@ -109,3 +109,36 @@ def delete_text(request, text_id): """supprimer la text""" query = "delete from p_texts where text_id = :text_id;" execute_query(request, query, {'text_id': text_id}) + +def get_articles_byFam(request, fam): + if fam == 'T': + query = "SELECT * FROM articles WHERE FAM = 'T';" + else: + query = "SELECT * FROM articles WHERE FAM != 'T';" + results = request.dbsession.execute(query, ).fetchall() + return results + +def update_article(request, ref, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if param == 'FAM': + ' ne prend que 2 premiers caractères' + new_values['FAM'] = new_values['FAM'][0:2].upper() + + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if ref == '0': + query = "INSERT INTO articles SET %s" % s + else: + new_values['ref'] = ref + query = "UPDATE articles SET %s WHERE ref = :ref;" % s + execute_query(request, query, new_values) + +def delete_article(request, ref): + query = "DELETE FROM articles WHERE ref = :ref ;" + execute_query(request, query, {'ref': ref}) + diff --git a/mondumas/routes.py b/mondumas/routes.py index 1bc6a6d..33ff06e 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -42,10 +42,12 @@ def includeme(config): config.add_route('rdf_rapport','/rdf_rapport/{no_id}') 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_doc', '/upload_doc/{nodossier}/{origine}') config.add_route('upload_img', '/upload_img/{norapport}/{nosection}') # parametres config.add_route('parametres', '/parametres') + config.add_route('article_edit', '/article_edit/{ref}') + config.add_route('articles', '/articles') config.add_route('connecter_a', '/connecter_a/{login}') config.add_route('dashboard', '/dashboard') config.add_route('emails_msg', '/emails_msg/{nolig}') @@ -54,10 +56,10 @@ def includeme(config): config.add_route('last_emailing', '/last_emailing') config.add_route('orphans_de', '/orphans_de/{societe}') config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}') - config.add_route('rdf_causes_list', '/rdf_causes_list') + config.add_route('rdf_causes', '/rdf_causes') config.add_route('text_edit', '/text_edit/{text_id}') config.add_route('text_list', '/text_list') config.add_route('text_view', '/text_view/{text_id}') config.add_route('user_edit', '/user_edit/{cd_uti}') - config.add_route('users_list', '/users_list') + config.add_route('users', '/users') config.add_route('users_ua', '/users_ua') diff --git a/mondumas/templates/default/home.pt b/mondumas/templates/default/home.pt index 66e6125..62eac17 100644 --- a/mondumas/templates/default/home.pt +++ b/mondumas/templates/default/home.pt @@ -15,7 +15,7 @@

RAPPORTS RDF

-
+

E-DEVIS

diff --git a/mondumas/templates/devis/devis_ligne.pt b/mondumas/templates/devis/devis_ligne.pt index 8700008..783e904 100644 --- a/mondumas/templates/devis/devis_ligne.pt +++ b/mondumas/templates/devis/devis_ligne.pt @@ -97,7 +97,7 @@
- + Annuler diff --git a/mondumas/templates/devis/devis_preview.pt b/mondumas/templates/devis/devis_preview.pt index db9cc14..f516efc 100644 --- a/mondumas/templates/devis/devis_preview.pt +++ b/mondumas/templates/devis/devis_preview.pt @@ -3,99 +3,105 @@
-
- -
-

N° Agrément : ${devis.no_agrement}

-

-

N° sinistre : ${devis.NOSIN}

-

N° sinistre : ${devis.NOPOL}

-

Réf. expert : ${devis.REF_EXPERT}

-

V/Référence : ${devis.VREF}

-
-

${devis.LIBCOMPL}

-

-

N° dossier : ${devis.nochantier}

-

-

DEVIS N° ${devis.societe}-${devis.NO_ID} - -

- -
-

-

${devis.C_QUALITE} ${devis.C_NOM}

-

${devis.C_ADR}

-

${devis.C_ADR2}

-

${devis.C_CP} ${devis.C_VILLE}

-
-
-

Rilieux-la-Pape, le ${devis.DATE.strftime('%d-%m-%Y')}

-
-

${devis.QUALITE} ${devis.NOM}

-

${devis.ADRESSE}

-

${devis.ADRESSE2}

-

${devis.CP} ${devis.VILLE}

-
-
+ + + + + +
+

N° Agrément : ${devis.no_agrement}

+

+

N° sinistre : ${devis.NOSIN}

+

N° sinistre : ${devis.NOPOL}

+

Réf. expert : ${devis.REF_EXPERT}

+

V/Référence : ${devis.VREF}

+
+

${devis.LIBCOMPL}

+

+

N° dossier : ${devis.nochantier}

+

+

DEVIS N° ${devis.societe}-${devis.NO_ID} +

+

+

${devis.C_QUALITE} ${devis.C_NOM}

+

${devis.C_ADR}

+

${devis.C_ADR2}

+

${devis.C_CP} ${devis.C_VILLE}

+
+
+

Rilieux-la-Pape, le ${devis.DATE.strftime('%d-%m-%Y')}

+
+

${devis.QUALITE} ${devis.NOM}

+

${devis.ADRESSE}

+

${devis.ADRESSE2}

+

${devis.CP} ${devis.VILLE}

+


-
-
-

Surf./ Qté

-
-
-

P.U. HT

-
-
-

Montant HT

-
-
- -
-
Page text goes here.
-
+ + + + + + + + + + + +
Les lignes du devis ici
-
-
-
-
-

Total HT

-

TVA ${layout.to_percent(devis.TAUXTVA)}

-

Total TTC

-
-
-

${layout.to_euro(devis.TOTALHT)}

-

${layout.to_euro(devis.TOTALTVA)}

-

${layout.to_euro(devis.TOTALTTC)}

-
-
-
-

- Si vous acceptez ce devis, veuillez nous en retourner un exemplaire signé et précédé de la mention "Bon pour Accord". -

-
-
-
-
-

- Conditions de réglement :
- Acompte de 30 % à la commande, Le solde à réception de la facture. -

-

- NOTA : Pour bénéficier du taux réduit de T.V.A. à 7%, vous devez nous fournir en même temps que l'acceptation du devis, une attestation sur papier libre, stipulant que votre habitation est construite depuis plus de deux ans. -

-
-
-
-
-

- Le
- Nom et Signature du Client
- BON POUR ACCORD -

-
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Surf./ QtéP.U. HTMontant HT

Total HT${layout.to_euro(devis.TOTALHT)}
TVA ${layout.to_percent(devis.TAUXTVA)}${layout.to_euro(devis.TOTALTVA)}
Total TTC${layout.to_euro(devis.TOTALTTC)}
 
+ Si vous acceptez ce devis, veuillez nous en retourner un exemplaire signé et précédé de la mention "Bon pour Accord". +
 
+

+ Conditions de réglement :
+ Acompte de 30 % à la commande, Le solde à réception de la facture. +

+

+ NOTA : Pour bénéficier du taux réduit de T.V.A. à 7%, vous devez nous fournir en même temps que l'acceptation du devis, une attestation sur papier libre, stipulant que votre habitation est construite depuis plus de deux ans. +

+
+

+ Le
+ Nom et Signature du Client
+ BON POUR ACCORD +

+


diff --git a/mondumas/templates/devis/devis_web.pt b/mondumas/templates/devis/devis_web.pt index cc8b83b..c4a5612 100644 --- a/mondumas/templates/devis/devis_web.pt +++ b/mondumas/templates/devis/devis_web.pt @@ -103,12 +103,7 @@

Statut : ${dossier.STATUS}

- Dernière modif. le ${dossier.DATEMAJ.strftime('%d/%m/%Y à %H:%M')} par ${dossier.USERMAJ} +

Dernière modif. le ${dossier.DATEMAJ.strftime('%d/%m/%Y à %H:%M')} par ${dossier.USERMAJ}

+

+ Clôturer dossier +

+
@@ -137,7 +142,7 @@

Nouvelle ligne - + Nouveau rendez-vous

@@ -210,10 +215,10 @@
-

DOCUMENTS ATTACHES

+

DOCUMENTS ATTACHES

- -  Ajouter un document + +  Ajouter document  Gérer les photos

@@ -242,6 +247,37 @@
${detail.usermaj}
+ +

DOCUMENTS TECHNIQUES

+

+ +  Document technique +

+ + + + + + + + + + + + + + + +
Nom du fichierTailleCrée lepar
+ + + + + ${detail.nomfichier} + + ${detail.taillefichier}${detail.cree_le.strftime('%d-%m-%Y')}${detail.usermaj}
@@ -274,6 +310,30 @@
+ + +
diff --git a/mondumas/templates/dossier/rdf_list.pt b/mondumas/templates/dossier/rdf_list.pt index 60468a8..ae56b2c 100644 --- a/mondumas/templates/dossier/rdf_list.pt +++ b/mondumas/templates/dossier/rdf_list.pt @@ -6,7 +6,7 @@ Retour

- +
@@ -29,7 +29,7 @@ $(document).ready(function() { $.fn.dataTable.moment('DD-MM-YYYY'); - $('#users_list').DataTable({ + $('#rdf_list').DataTable({ data: dataSet, pageLength: 50, bLengthChange: false, diff --git a/mondumas/templates/dossier/upload_doc.pt b/mondumas/templates/dossier/upload_doc.pt index 05d881d..9f64427 100644 --- a/mondumas/templates/dossier/upload_doc.pt +++ b/mondumas/templates/dossier/upload_doc.pt @@ -2,7 +2,7 @@
- +
+
+ +
+
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+

${item.modif_le.strftime('%d/%m/%Y - %H:%M')}

+
+
+
+ +
+
+
+ + Annuler + + +
+
+
+ + +
+
+ + + +
+ diff --git a/mondumas/templates/parametres/articles.pt b/mondumas/templates/parametres/articles.pt new file mode 100644 index 0000000..71d79c5 --- /dev/null +++ b/mondumas/templates/parametres/articles.pt @@ -0,0 +1,70 @@ + +
+ +
+
+ +
+ +
+
+ +

+ + Retour + + Nouvel article +

+ +
Rapport
+ + + + + + + + + + + +
RéférenceLibelléLibellé 2Prix HT 1Prix HT 2Réf. client 1Réf. client 2
+ +
+
+ + + + + + + diff --git a/mondumas/templates/parametres/parametres.pt b/mondumas/templates/parametres/parametres.pt index a06ca05..1b9d4ae 100644 --- a/mondumas/templates/parametres/parametres.pt +++ b/mondumas/templates/parametres/parametres.pt @@ -1,18 +1,22 @@ -
+
logged_in
- +

UTILISATEURS

- + +

ARTICLES

+
+
+

RDF : CAUSES

- +

TEXTES EMAIL

diff --git a/mondumas/templates/parametres/rdf_cause_edit.pt b/mondumas/templates/parametres/rdf_cause_edit.pt index 7dbf1d6..ada7d08 100644 --- a/mondumas/templates/parametres/rdf_cause_edit.pt +++ b/mondumas/templates/parametres/rdf_cause_edit.pt @@ -44,7 +44,7 @@
- + Annuler diff --git a/mondumas/templates/parametres/rdf_causes_list.pt b/mondumas/templates/parametres/rdf_causes.pt similarity index 92% rename from mondumas/templates/parametres/rdf_causes_list.pt rename to mondumas/templates/parametres/rdf_causes.pt index 9214cb3..aa20d27 100644 --- a/mondumas/templates/parametres/rdf_causes_list.pt +++ b/mondumas/templates/parametres/rdf_causes.pt @@ -8,7 +8,7 @@ Nouvelle cause

- +
@@ -26,7 +26,7 @@ $(document).ready(function() { $.fn.dataTable.moment('DD/MM/YYYY - HH:mm'); - $('#rdf_causes_list').DataTable({ + $('#rdf_causes').DataTable({ data: dataSet, pageLength: 50, bLengthChange: false, diff --git a/mondumas/templates/parametres/user_edit.pt b/mondumas/templates/parametres/user_edit.pt index b5b1390..d94576e 100644 --- a/mondumas/templates/parametres/user_edit.pt +++ b/mondumas/templates/parametres/user_edit.pt @@ -92,7 +92,7 @@
- Retour + Retour
Code
+
@@ -27,7 +27,7 @@ $(document).ready(function() { $.fn.dataTable.moment('DD/MM/YYYY - HH:mm'); - $('#users_list_ua').DataTable({ + $('#users_ua').DataTable({ data: dataSet, pageLength: 50, bLengthChange: false, diff --git a/mondumas/views/default.py b/mondumas/views/default.py index 01050e3..f916b6f 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -82,6 +82,7 @@ def home(request): 'page_title': 'Bienvenue sur %s' % request.host, 'project': 'mondumas', 'access': access, + 'logged_in': logged_in, } @view_config(route_name='envoyer_mdp', renderer='../templates/default/envoyer_mdp.pt') @@ -338,12 +339,12 @@ def ajax_article(request): ref = request.GET['ref'] # lire l'article - items = get_article(request, 'REF', ref) + items = get_article(request, 'REF2', ref) # puis retourne son libellé et son prixht liste=[] d = {} d['ref'] = items.ref_cli2 - d['libelle'] = items.LIBART + d['libelle'] = items.libelle d['prixht'] = "%.2f" % items.PRIXHT2 liste.append(d) diff --git a/mondumas/views/devis.py b/mondumas/views/devis.py index 6532296..071d2cb 100644 --- a/mondumas/views/devis.py +++ b/mondumas/views/devis.py @@ -135,6 +135,9 @@ def devis_web(request): return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0')) if 'form.generate' in request.params: + # lire la societe + soc = get_societes(request, societe) + options = { 'page-size': 'A4', 'margin-top': '1cm', @@ -142,7 +145,8 @@ def devis_web(request): 'margin-bottom': '1cm', 'margin-left': '1cm', 'footer-font-size':'7', - 'footer-right': '[page] of [topage]', + 'footer-center': soc.code_ape, + 'footer-right': '[page] / [topage]', } # créer le répertoire du chantier s'il n'existe pas encore @@ -151,7 +155,7 @@ def devis_web(request): # générer le devis en PDF filename = "%s-DD%s-DE%s-devis.pdf" % (societe, nochantier, no_id) dest = "mondumas/static/DEVFAC/DOCS_ATTACHES/%s/%s/%s" % (societe, nochantier, filename) - import pdb;pdb.set_trace() + # import pdb;pdb.set_trace() # supprimer le fichier s'il existe déjà if os.path.exists(dest): @@ -166,10 +170,10 @@ def devis_web(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, '%s-%s' % (societe, nochantier), 0, 0, filename, '160 Ko', logged_in) + insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), 0, 0, 'CLT', filename, '160 Ko', logged_in) request.session.flash(u"Le devis a été généré avec succès.", 'success') - return HTTPFound(location=request.route_url('devis_web', nodevis=nodevis)) + return HTTPFound(location=request.route_url('dossier_view', nodossier='%s-%s' % (societe, nochantier))) return { 'page_title': "Devis no : %s W" % (nodevis), @@ -184,20 +188,20 @@ def devis_web(request): @view_config(route_name='devis_ligne', renderer='../templates/devis/devis_ligne.pt', permission='view') def devis_ligne(request): type_ligne = request.matchdict['type_ligne'] - nodossier = request.matchdict['nodossier'] + nodevis = request.matchdict['nodevis'] nolig = request.matchdict['nolig'] - societe = nodossier[0:2] - no_id = nodossier[5:] - url = request.route_url("devis_ligne", type_ligne=type_ligne, nodossier=nodossier, nolig=nolig) + societe = nodevis[0:2] + no_id = nodevis[5:] + url = request.route_url("devis_ligne", type_ligne=type_ligne, nodevis=nodevis, nolig=nolig) logged_in = request.authenticated_userid.upper() message = '' - dossier = get_devis_by_no(request, nodossier) + dossier = get_devis_by_no(request, nodevis) if dossier is None: - request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger') + request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger') return HTTPFound(location=request.route_url("dossier_lookup")) # lire le nombre total de lignes du devis - lignes = get_devis_lignes_by_no(request, nodossier, '0') + lignes = get_devis_lignes_by_no(request, nodevis, '0') nb_lignes = len(lignes) if nolig == '0': @@ -218,7 +222,7 @@ def devis_ligne(request): page_title= 'Nouvelle ligne %s' % type_ligne else: # lire la ligne du devis - ligne = get_devis_lignes_by_no(request, nodossier, nolig) + ligne = get_devis_lignes_by_no(request, nodevis, nolig) page_title= "Modification de la ligne %s" % (nolig) # import pdb;pdb.set_trace() @@ -239,9 +243,9 @@ def devis_ligne(request): new_values['nolig'] = nb_lignes + 1 else: new_values['nolig'] = nolig - update_devis_ligne(request, nodossier, nolig, new_values) + update_devis_ligne(request, nodevis, nolig, new_values) request.session.flash("La ligne de texte a été mis à jour avec succès.", 'success') - return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier)) + return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis)) elif type_ligne == 'AR': # ajout d'un article @@ -282,22 +286,22 @@ def devis_ligne(request): new_values['nolig'] = nb_lignes + 1 else: new_values['nolig'] = nolig - update_devis_ligne(request, nodossier, nolig, new_values) + update_devis_ligne(request, nodevis, nolig, new_values) request.session.flash(u"La ligne de devis a été mis à jour avec succès.", 'success') - return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier)) + return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis)) # -- ajouter une ligne if 'form.deleted' in request.params: - delete_devis_ligne(request, nodossier, nolig) + delete_devis_ligne(request, nodevis, nolig) request.session.flash(u"La ligne de devis a été supprimée avec succès.", 'success') - return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier)) + return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis)) return { 'page_title': page_title, 'url': url, 'message': message, - 'nodossier': nodossier, + 'nodevis': nodevis, 'nolig': nolig, 'dossier': dossier, 'ligne': ligne, @@ -328,22 +332,22 @@ def devis_preview(request): dt_html = '' for ligne in details: if ligne.ref == 'T1': - dt_html += '

%s

' % ligne.libelle + dt_html += '' % ligne.libelle elif ligne.ref == 'T2': - dt_html += '

%s

' % ligne.libelle + dt_html += '' % ligne.libelle elif ligne.ref == 'TX': - dt_html += '

%s

' % ligne.libelle + dt_html += '' % ligne.libelle elif ligne.type_ligne == 'AR': - dt_html += '

%s
' % ligne.libelle + dt_html += '

' + dt_html += '' % ligne.qte + dt_html += '' % to_euro(ligne.prixht) + dt_html += '' % 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, + }
Dern cnx

%s

%s

%s

%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 += '

%s

' % ligne.qte - dt_html += '

%s

' % to_euro(ligne.prixht) - dt_html += '

%s

' % to_euro(ligne.mtht) + dt_html += '
déduction :
' + dt_html += '%s' % ligne.deduction + dt_html += '
%s%s%s