diff --git a/mondumas/routes.py b/mondumas/routes.py index 9d3170e..1bc6a6d 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -20,13 +20,13 @@ def includeme(config): config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') config.add_route('init_mdp', '/init_mdp/{user}/{lien}') # devis - config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodossier}/{nolig}') - config.add_route('devis_lig_mv', '/devis_lig_mv/{move}/{nodossier}/{nolig}') + config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodevis}/{nolig}') + config.add_route('devis_lig_mv', '/devis_lig_mv/{move}/{nodevis}/{nolig}') config.add_route('devis_list', '/devis_list') config.add_route('devis_create', '/devis_create/{nodossier}') - config.add_route('devis_web', '/devis_web/{nodossier}') - config.add_route('devis_view', '/devis_view/{nodossier}') - config.add_route('devis_preview', '/devis_preview/{nodossier}') + config.add_route('devis_web', '/devis_web/{nodevis}') + config.add_route('devis_view', '/devis_view/{nodevis}') + config.add_route('devis_preview', '/devis_preview/{nodevis}') # dossier config.add_route('demandes','/demandes') config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') diff --git a/mondumas/static/img/footer_PL.html b/mondumas/static/img/footer_PL.html new file mode 100644 index 0000000..ecdc9eb --- /dev/null +++ b/mondumas/static/img/footer_PL.html @@ -0,0 +1,2 @@ +
+

© 2017 - Entreprise Dumas, 49 Chemin du Bois – 69140 RILLIEUX LA PAPE

diff --git a/mondumas/templates/devis/devis_preview.pt b/mondumas/templates/devis/devis_preview.pt index df825a6..db9cc14 100644 --- a/mondumas/templates/devis/devis_preview.pt +++ b/mondumas/templates/devis/devis_preview.pt @@ -6,37 +6,35 @@
-

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

+

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



-

N° sinistre : ${dossier.NOSIN}

-

N° sinistre : ${dossier.NOPOL}

-

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

-

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

+

N° sinistre : ${devis.NOSIN}

+

N° sinistre : ${devis.NOPOL}

+

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

+

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


-

${dossier.LIBCOMPL}

+

${devis.LIBCOMPL}



-

N° dossier : ${dossier.nochantier}

+

N° dossier : ${devis.nochantier}



-

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

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



-

${dossier.C_QUALITE} ${dossier.C_NOM}

-

${dossier.C_ADR}

-

${dossier.C_ADR2}

-
-

${dossier.C_CP} ${dossier.C_VILLE}

+

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

+

${devis.C_ADR}

+

${devis.C_ADR2}

+

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



-

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

+

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


-

${dossier.QUALITE} ${dossier.NOM}

-

${dossier.ADRESSE}

-

${dossier.ADRESSE2}

-
-

${dossier.CP} ${dossier.VILLE}

+

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

+

${devis.ADRESSE}

+

${devis.ADRESSE2}

+

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


@@ -63,13 +61,13 @@

Total HT

-

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

+

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

Total TTC

-

${layout.to_euro(dossier.TOTALHT)}

-

${layout.to_euro(dossier.TOTALTVA)}

-

${layout.to_euro(dossier.TOTALTTC)}

+

${layout.to_euro(devis.TOTALHT)}

+

${layout.to_euro(devis.TOTALTVA)}

+

${layout.to_euro(devis.TOTALTTC)}


@@ -80,11 +78,11 @@
-

+

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.

diff --git a/mondumas/templates/devis/devis_view.pt b/mondumas/templates/devis/devis_view.pt index c0f5390..2114a6a 100644 --- a/mondumas/templates/devis/devis_view.pt +++ b/mondumas/templates/devis/devis_view.pt @@ -7,14 +7,14 @@
- @@ -24,9 +24,9 @@ Tél. mobile - fax

CHANTIER

${dossier.societe}-${dossier.nochantier}

+

CHANTIER

${devis.societe}-${devis.nochantier}

-

${dossier.C_QUALITE} ${dossier.C_NOM}

- ${dossier.C_ADR}
- ${dossier.C_ADR2}
- ${dossier.C_CP} ${dossier.C_VILLE}
- ${dossier.C_EMAIL} +

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

+ ${devis.C_ADR}
+ ${devis.C_ADR2}
+ ${devis.C_CP} ${devis.C_VILLE}
+ ${devis.C_EMAIL}
- ${dossier.C_ETAGE} - ${dossier.C_CODE}
- ${dossier.C_TEL1} - ${dossier.C_TEL2}
- ${dossier.C_TELP} - ${dossier.C_FAX} + ${devis.C_ETAGE} - ${devis.C_CODE}
+ ${devis.C_TEL1} - ${devis.C_TEL2}
+ ${devis.C_TELP} - ${devis.C_FAX}
@@ -38,10 +38,10 @@

CLIENT

-

${dossier.QUALITE} ${dossier.NOM}

- ${dossier.ADRESSE}
- ${dossier.ADRESSE2}
- ${dossier.CP} ${dossier.VILLE}
+

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

+ ${devis.ADRESSE}
+ ${devis.ADRESSE2}
+ ${devis.CP} ${devis.VILLE}
@@ -51,14 +51,14 @@ Tél. mobile - fax - ${dossier.NOMRESP}
- ${dossier.TEL1} - ${dossier.TEL2}
- ${dossier.TELP} - ${dossier.FAX} + ${devis.NOMRESP}
+ ${devis.TEL1} - ${devis.TEL2}
+ ${devis.TELP} - ${devis.FAX}
-

Statut : ${dossier.STATUS}

+

Statut : ${devis.STATUS}

@@ -69,10 +69,10 @@ - - - - + + + +
TVA
${layout.to_euro(dossier.TOTALHT)}${layout.to_euro(dossier.TOTALTVA)}${layout.to_euro(dossier.TOTALTTC)}${dossier.TAUXTVA} %${layout.to_euro(devis.TOTALHT)}${layout.to_euro(devis.TOTALTVA)}${layout.to_euro(devis.TOTALTTC)}${devis.TAUXTVA} %
diff --git a/mondumas/templates/devis/devis_web.pt b/mondumas/templates/devis/devis_web.pt index 42933bd..cc8b83b 100644 --- a/mondumas/templates/devis/devis_web.pt +++ b/mondumas/templates/devis/devis_web.pt @@ -7,34 +7,35 @@
-

CHANTIER

${dossier.societe}-${dossier.nochantier}

+

CHANTIER

+

${devis.societe}-${devis.nochantier}

-

${dossier.C_QUALITE} ${dossier.C_NOM}

- ${dossier.C_ADR}
- ${dossier.C_ADR2}
- ${dossier.C_CP} ${dossier.C_VILLE}
- ${dossier.C_EMAIL} +

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

+ ${devis.C_ADR}
+ ${devis.C_ADR2}
+ ${devis.C_CP} ${devis.C_VILLE}
+ ${devis.C_EMAIL}
-

CLIENT

-

${dossier.QUALITE} ${dossier.NOM}

- ${dossier.ADRESSE}
- ${dossier.ADRESSE2}
- ${dossier.CP} ${dossier.VILLE}
+

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

+ ${devis.ADRESSE}
+ ${devis.ADRESSE2}
+ ${devis.CP} ${devis.VILLE}
+
@@ -44,19 +45,21 @@ - - - - + + + +
TVA
${layout.to_euro(dossier.TOTALHT)}${layout.to_euro(dossier.TOTALTVA)}${layout.to_euro(dossier.TOTALTTC)}${dossier.TAUXTVA} %${layout.to_euro(devis.TOTALHT)}${layout.to_euro(devis.TOTALTVA)}${layout.to_euro(devis.TOTALTTC)}${devis.TAUXTVA} %
-

- - Prévisualiser -

- - + + + Aperçu PDF + + +
+
@@ -67,7 +70,7 @@ - + @@ -75,10 +78,10 @@ diff --git a/mondumas/templates/dossier/rdf_bill.pt b/mondumas/templates/dossier/rdf_bill.pt index ee64f4d..83a934d 100644 --- a/mondumas/templates/dossier/rdf_bill.pt +++ b/mondumas/templates/dossier/rdf_bill.pt @@ -53,7 +53,7 @@
diff --git a/mondumas/templates/dossier/rdf_view.pt b/mondumas/templates/dossier/rdf_view.pt index eebc1b3..7491a27 100644 --- a/mondumas/templates/dossier/rdf_view.pt +++ b/mondumas/templates/dossier/rdf_view.pt @@ -357,7 +357,7 @@

- Aperçu PDF + Aperçu PDF diff --git a/mondumas/views/default.py b/mondumas/views/default.py index d7ac081..01050e3 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -37,14 +37,14 @@ def to_decimal(x): return decimal.Decimal(str(x)) def to_euro(x): - """Takes a float and returns a string""" + """Takes a float and returns 12 345,67 €""" locale.setlocale(locale.LC_ALL,'') return locale.currency(x, True, True) def to_euroz(x): - """Takes a float and returns a string""" + """Takes a float and returns 12 345,67 € if not zero""" if x == 0: - return "" + return '' else: return to_euro(x) diff --git a/mondumas/views/devis.py b/mondumas/views/devis.py index c19a92a..6532296 100644 --- a/mondumas/views/devis.py +++ b/mondumas/views/devis.py @@ -12,9 +12,11 @@ from pyramid.httpexceptions import ( ) from datetime import * +import pdfkit from ..views.default import * from ..models.default import * +from ..models.dossier import * from ..models.devis import * @view_config(route_name='devis_list', renderer='../templates/devis/devis_list.pt', permission='view') @@ -66,50 +68,51 @@ def devis_create(request): @view_config(route_name='devis_view', renderer='../templates/devis/devis_view.pt', permission='view') def devis_view(request): - nodossier = request.matchdict['nodossier'] - societe = nodossier[0:2] - url = request.route_url("devis_view", nodossier=nodossier) + nodevis = request.matchdict['nodevis'] + societe = nodevis[0:2] + url = request.route_url("devis_view", nodevis=nodevis) - type_doc = nodossier[3:5] + type_doc = nodevis[3:5] if type_doc == 'DE': - page_title = "Devis no : %s" % (nodossier) + page_title = "Devis no : %s" % (nodevis) elif type_doc == 'FA': - page_title = "Facture no : %s" % (nodossier) + page_title = "Facture no : %s" % (nodevis) else: - page_title = "Proforma no : %s" % (nodossier) + page_title = "Proforma no : %s" % (nodevis) - dossier = get_devis_by_no(request, nodossier) - if dossier is None: - request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger') + devis = get_devis_by_no(request, nodevis) + if devis is None: + request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger') return HTTPFound(location=request.route_url("dossier_lookup")) # lire tous les lignes du devis - details = get_devis_lig_by_no(request, nodossier) + details = get_devis_lig_by_no(request, nodevis) # select background color according to society bg_color = "bg-%s" % societe return { 'page_title': page_title, - 'nodossier': nodossier, - 'dossier': dossier, + 'nodevis': nodevis, + 'devis': devis, 'details': details, 'bg_color': bg_color, } @view_config(route_name='devis_web', renderer='../templates/devis/devis_web.pt', permission='view') def devis_web(request): - nodossier = request.matchdict['nodossier'] - societe = nodossier[0:2] - no_id = nodossier[5:] - url = request.route_url("devis_web", nodossier=nodossier) + nodevis = request.matchdict['nodevis'] + societe = nodevis[0:2] + no_id = nodevis[5:] + url = request.route_url("devis_web", nodevis=nodevis) logged_in = request.authenticated_userid.upper() - dossier = get_devis_by_no(request, nodossier) - if dossier is None: - request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger') + devis = get_devis_by_no(request, nodevis) + if devis is None: + request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger') return HTTPFound(location=request.route_url("dossier_lookup")) - + + nochantier = str(devis.nochantier) # lire tous les lignes du devis - details = get_devis_lignes_by_no(request, nodossier, '0') + details = get_devis_lignes_by_no(request, nodevis, '0') # select background color according to society bg_color = "bg-%s" % societe @@ -126,17 +129,53 @@ def devis_web(request): new_values['societe'] = societe new_values['no_id'] = no_id new_values['nolig'] = len(details) + 1 - update_devis_ligne(request, nodossier, '0', new_values) + update_devis_ligne(request, nodevis, '0', new_values) return HTTPFound(location=url) else: - return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodossier=nodossier, nolig='0')) + return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0')) + if 'form.generate' in request.params: + options = { + 'page-size': 'A4', + 'margin-top': '1cm', + 'margin-right': '1cm', + 'margin-bottom': '1cm', + 'margin-left': '1cm', + 'footer-font-size':'7', + 'footer-right': '[page] of [topage]', + } + + # 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) + os.makedirs(path, exist_ok=True) + # 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() + + # supprimer le fichier s'il existe déjà + if os.path.exists(dest): + os.remove(dest) + + # on est en developpement ou en production + if request.registry.settings["mail.username"] == "sas.dumas@orange.fr": + origin = 'https://gestion.entreprise-dumas.com/devis_preview/%s' % nodevis + pdfkit.from_url(origin, dest, options=options) + else: + origin = request.route_url('devis_preview', nodevis=nodevis) + 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) + + 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 { - 'page_title': "Devis no : %s W" % (nodossier), + 'page_title': "Devis no : %s W" % (nodevis), 'url': url, - 'nodossier': nodossier, - 'dossier': dossier, + 'nodevis': nodevis, + 'devis': devis, 'details': details, 'bg_color': bg_color, 'max_no': len(details), @@ -265,27 +304,25 @@ def devis_ligne(request): 'type_ligne': type_ligne, } -@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt', permission='view') +@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt') def devis_preview(request): - nodossier = request.matchdict['nodossier'] - societe = nodossier[0:2] - no_id = nodossier[5:] - url = request.route_url("devis_preview", nodossier=nodossier) - logged_in = request.authenticated_userid.upper() + nodevis = request.matchdict['nodevis'] + societe = nodevis[0:2] + no_id = nodevis[5:] # calculer les totaux HT et TTC - sum_devis_totaux(request, nodossier) + sum_devis_totaux(request, nodevis) # select logo according to society logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe) - dossier = get_devis_by_no(request, nodossier) + devis = get_devis_by_no(request, nodevis) # import pdb;pdb.set_trace() - if dossier is None: - request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger') + if devis is None: + request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger') return HTTPFound(location=request.route_url("dossier_lookup")) # lire tous les lignes du devis - details = get_devis_lignes_by_no(request, nodossier, '0') + details = get_devis_lignes_by_no(request, nodevis, '0') # générer les détails en HTML dt_html = '' @@ -310,10 +347,9 @@ def devis_preview(request): return { 'page_title': '', - 'url': url, 'logo_url': logo_url, - 'nodossier': nodossier, - 'dossier': dossier, + 'nodevis': nodevis, + 'devis': devis, 'details': details, 'dt_html': dt_html, } @@ -321,12 +357,12 @@ def devis_preview(request): @view_config(route_name='devis_lig_mv', permission='view') def devis_lig_mv(request): move = request.matchdict['move'] - nodossier = request.matchdict['nodossier'] + nodevis = request.matchdict['nodevis'] nolig = request.matchdict['nolig'] - societe = nodossier[0:2] - no_id = nodossier[5:] + societe = nodevis[0:2] + no_id = nodevis[5:] logged_in = request.authenticated_userid.upper() - move_devis_ligne(request, nodossier, int(nolig), move) + move_devis_ligne(request, nodevis, int(nolig), move) request.session.flash(u"La ligne de devis a été déplacé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)) diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py index f6cfe10..9d2a0f4 100644 --- a/mondumas/views/dossier.py +++ b/mondumas/views/dossier.py @@ -585,12 +585,16 @@ def rdf_view(request): photos2 = get_photos(request, nodossier, norapport, 2) if 'form.generate' in request.params: + footer_url = request.static_url('mondumas:static/img/footer_PL.html') + # import pdb;pdb.set_trace() options = { 'page-size': 'A4', - 'margin-top': '0.65in', - 'margin-right': '0.75in', - 'margin-bottom': '0.65in', - 'margin-left': '0.75in', + 'margin-top': '2cm', + 'margin-right': '2cm', + 'margin-bottom': '3cm', + 'margin-left': '2cm', + 'footer-font-size':'7', + 'footer-right': '[page] of [topage]', } # créer le répertoire du rapport s'il n'existe pas encore
Réf Désignation
${detail.ref}${detail.ref} ${detail.libelle} ${layout.to_decz(detail.qte)} ${layout.to_euroz(detail.prixht)}${detail.usermaj} + href="${request.route_url('devis_lig_mv',move='up',nodevis=nodevis,nolig=detail.nolig)}"> + href="${request.route_url('devis_lig_mv',move='dn',nodevis=nodevis,nolig=detail.nolig)}">