diff --git a/mondumas/layout.py b/mondumas/layout.py index 1c09146..784bc66 100644 --- a/mondumas/layout.py +++ b/mondumas/layout.py @@ -58,7 +58,7 @@ class GlobalLayout(object): def isWebPage(self): # test view name if self.request.matched_route: - if self.request.matched_route.name == 'rdf_rapport': + if self.request.matched_route.name in ['rdf_rapport', 'devis_preview']: # oui, page PDF return False else: @@ -67,3 +67,4 @@ class GlobalLayout(object): else: # non, page web return True + diff --git a/mondumas/models/devis.py b/mondumas/models/devis.py index 302a184..76f47ed 100644 --- a/mondumas/models/devis.py +++ b/mondumas/models/devis.py @@ -144,5 +144,15 @@ def update_devis_ligne(request, nodossier, nolig, new_values): new_values['no_id'] = no_id new_values['nolig'] = nolig query = "UPDATE devis_lignes SET %s WHERE societe = :societe and no_id=:no_id and nolig = :nolig;" % s - import pdb;pdb.set_trace() + # import pdb;pdb.set_trace() execute_query(request, query, new_values) + +def sum_devis_totaux(request, nodossier): + societe = nodossier[0:2] + no_id = nodossier[5:] + + query = """UPDATE devis SET totalht = (SELECT SUM(mtht) FROM devis_lignes WHERE societe=:societe AND no_id=:no_id), + totaltva = ROUND(totalht * tauxtva / 100,2), + totalttc = totalht + totaltva + WHERE societe=:societe AND no_id=:no_id;""" + execute_query(request, query, {'societe': societe, 'no_id': no_id}) diff --git a/mondumas/routes.py b/mondumas/routes.py index e261ffb..e8fd940 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -25,6 +25,7 @@ def includeme(config): 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}') # dossier config.add_route('demandes','/demandes') config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') diff --git a/mondumas/static/img/Logo-CD.jpg b/mondumas/static/img/Logo-CD.jpg new file mode 100644 index 0000000..d52ebe2 Binary files /dev/null and b/mondumas/static/img/Logo-CD.jpg differ diff --git a/mondumas/static/img/Logo-ME.jpg b/mondumas/static/img/Logo-ME.jpg new file mode 100644 index 0000000..e143bf0 Binary files /dev/null and b/mondumas/static/img/Logo-ME.jpg differ diff --git a/mondumas/static/img/Logo-PE.jpg b/mondumas/static/img/Logo-PE.jpg new file mode 100644 index 0000000..ea2ae9f Binary files /dev/null and b/mondumas/static/img/Logo-PE.jpg differ diff --git a/mondumas/static/img/LogoVerSanit.jpg b/mondumas/static/img/Logo-PL.jpg similarity index 100% rename from mondumas/static/img/LogoVerSanit.jpg rename to mondumas/static/img/Logo-PL.jpg diff --git a/mondumas/static/img/Logo-PO.jpg b/mondumas/static/img/Logo-PO.jpg new file mode 100644 index 0000000..387cc4f Binary files /dev/null and b/mondumas/static/img/Logo-PO.jpg differ diff --git a/mondumas/templates/devis/devis_ligne.pt b/mondumas/templates/devis/devis_ligne.pt index 9c29e01..8700008 100644 --- a/mondumas/templates/devis/devis_ligne.pt +++ b/mondumas/templates/devis/devis_ligne.pt @@ -10,7 +10,7 @@ data-fv-icon-validating="glyphicon glyphicon-refresh"> -
+
@@ -24,44 +24,55 @@
-
+
-
-
- -
- -
-
+
-
- +
+
-
+
-
+
-
- -
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
@@ -133,6 +144,8 @@ $(document).ready(function() { $("#"+cas).show(); }); $('#libelle').autocomplete({ + minLength: 3, + appendTo: "#TX", source: function (request, response) { $.ajax({ url:'/ajax_texte', @@ -145,12 +158,10 @@ $(document).ready(function() { }, }); }, - minLength: 3, - appendTo: "#TX" }); - $('#article').autocomplete({ + $('#ref').autocomplete({ minLength: 3, - appendTo: "#TX", + appendTo: "#AR", source: function (request, response) { $.ajax({ url:'/ajax_texte', @@ -164,7 +175,7 @@ $(document).ready(function() { }); }, select: function(event, ui) { - var ref = ui.item.value.split(' ')[0]; // selected ref + var ref = ui.item.value.split(" ")[0]; // selected ref // lecture de l'article $.ajax({ @@ -180,7 +191,6 @@ $(document).ready(function() { var prixht = response[0]['prixht']; // Set value to textboxes - document.getElementById('article').value = ref; document.getElementById('ref').value = ref; document.getElementById('libelle').value = libelle; document.getElementById('prixht').value = prixht; diff --git a/mondumas/templates/devis/devis_preview.pt b/mondumas/templates/devis/devis_preview.pt new file mode 100644 index 0000000..d8dc88e --- /dev/null +++ b/mondumas/templates/devis/devis_preview.pt @@ -0,0 +1,108 @@ + +
+ + +
+
+ +
+

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

+

+

N° sinistre : ${dossier.NOSIN}

+

N° sinistre : ${dossier.NOPOL}

+

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

+

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

+
+

${dossier.LIBCOMPL}

+

+

N° dossier : ${dossier.nochantier}

+

+

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

+ +
+

+

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

+

${dossier.C_ADR}

+

${dossier.C_ADR2}

+
+

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

+
+
+

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

+
+

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

+

${dossier.ADRESSE}

+

${dossier.ADRESSE2}

+
+

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

+
+
+
+
+ +
+
+

Surface

+
+
+

P.U. HT

+
+
+

Montant HT

+
+
+
+ +
+
+
+
+
+
+
+
+

Total HT

+

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

+

Total TTC

+
+
+

${layout.to_euro(dossier.TOTALHT)}

+

${layout.to_euro(dossier.TOTALTVA)}

+

${layout.to_euro(dossier.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 980c7cc..c30a850 100644 --- a/mondumas/templates/devis/devis_web.pt +++ b/mondumas/templates/devis/devis_web.pt @@ -51,6 +51,11 @@ +

+ + Prévisualiser +

+ diff --git a/mondumas/templates/dossier/rdf_view.pt b/mondumas/templates/dossier/rdf_view.pt index 3114d66..eebc1b3 100644 --- a/mondumas/templates/dossier/rdf_view.pt +++ b/mondumas/templates/dossier/rdf_view.pt @@ -6,7 +6,7 @@
- +

Rapport de recherche de fuite

diff --git a/mondumas/views/default.py b/mondumas/views/default.py index 175e6ff..4409c39 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -47,7 +47,7 @@ def to_euroz(x): if x == 0: return "" else: - return ("%.2f €" % x).replace('.', ',') + return ("%9.2f €" % x).replace('.', ',') def to_decz(x): """Takes a decimal and returns a string""" @@ -326,7 +326,10 @@ def ajax_texte(request): liste=[] for row in items: - d = '%s | %s | %s' % (row.ref_cli2, row.LIBART, to_euro(row.PRIXHT2)) + if type == 'AR': + d = '%s | %s | %s' % (row.ref_cli2, row.LIBART, to_euro(row.PRIXHT2)) + else: + d = row.LIBART liste.append(d) return Response(json.dumps(liste)) @@ -335,9 +338,9 @@ def ajax_texte(request): def ajax_article(request): ref = request.GET['ref'] - # lire les articles commencant par + # lire l'article items = get_article(request, 'REF', ref) - + # puis retourne son libellé et son prixht liste=[] d = {} d['ref'] = items.ref_cli2 diff --git a/mondumas/views/devis.py b/mondumas/views/devis.py index 6e2de72..ef58610 100644 --- a/mondumas/views/devis.py +++ b/mondumas/views/devis.py @@ -167,6 +167,8 @@ def devis_ligne(request): ligne['ref'] = '' if type_ligne == 'AR': ligne['qte'] = 1 + ligne['metrage'] = '' + ligne['deduction'] = '' else: ligne['qte'] = 0 ligne['prixht'] = 0 @@ -178,7 +180,6 @@ def devis_ligne(request): # lire la ligne du devis ligne = get_devis_lignes_by_no(request, nodossier, nolig) page_title= "Modification de la ligne %s" % (nolig) - article = '%s | %s | %s' % (ligne.ref, ligne.libelle, to_euro(ligne.prixht)) # import pdb;pdb.set_trace() # -- ajouter une ligne @@ -199,7 +200,7 @@ def devis_ligne(request): else: new_values['nolig'] = nolig update_devis_ligne(request, nodossier, nolig, new_values) - request.session.flash(u"La ligne de texte a été mis à jour avec succès.", 'success') + 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)) elif type_ligne == 'AR': @@ -209,6 +210,24 @@ def devis_ligne(request): if param in request.params and request.params[param] != db_value: new_values[param] = request.params[param] + # calcul métrage + metrage = 0 + try: + metrage = eval(request.params['metrage']) + except SyntaxError: + request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger') + return HTTPFound(location=url) + deduc = 0 + try: + deduc = eval(request.params['deduction']) + except SyntaxError: + request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger') + return HTTPFound(location=url) + if deduc < 0 : + metrage += deduc + else: + metrage -= deduc + new_values['qte'] = metrage new_values['type_ligne'] = type_ligne new_values['usermaj'] = logged_in new_values['societe'] = societe @@ -230,6 +249,37 @@ def devis_ligne(request): 'nolig': nolig, 'dossier': dossier, 'ligne': ligne, - 'article': article, - 'type_ligne': type_ligne, + 'type_ligne': type_ligne, } + +@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt', permission='view') +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() + + # calculer les totaux HT et TTC + sum_devis_totaux(request, nodossier) + + dossier = get_devis_by_no(request, nodossier) + # import pdb;pdb.set_trace() + if dossier is None: + request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger') + return HTTPFound(location=request.route_url("dossier_lookup")) + + # lire tous les lignes du devis + details = get_devis_lignes_by_no(request, nodossier, '0') + # select logo according to society + logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe) + + return { + 'page_title': '', + 'url': url, + 'logo_url': logo_url, + 'nodossier': nodossier, + 'dossier': dossier, + 'details': details, + } +
Réf