genere devis en pdf
This commit is contained in:
@@ -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}')
|
||||
|
||||
2
mondumas/static/img/footer_PL.html
Normal file
2
mondumas/static/img/footer_PL.html
Normal file
@@ -0,0 +1,2 @@
|
||||
<hr>
|
||||
<p claas="text-center">© 2017 - Entreprise Dumas, 49 Chemin du Bois – 69140 RILLIEUX LA PAPE</p>
|
||||
@@ -6,37 +6,35 @@
|
||||
<div class="row">
|
||||
<!-- colonne gauche : REFERENCES -->
|
||||
<div class="col-sm-6">
|
||||
<p tal:condition="dossier.no_agrement">N° Agrément : ${dossier.no_agrement}</p>
|
||||
<p tal:condition="devis.no_agrement">N° Agrément : ${devis.no_agrement}</p>
|
||||
<br/><br/>
|
||||
<p tal:condition="dossier.NOSIN">N° sinistre : ${dossier.NOSIN}</p>
|
||||
<p tal:condition="dossier.NOPOL">N° sinistre : ${dossier.NOPOL}</p>
|
||||
<p tal:condition="dossier.REF_EXPERT">Réf. expert : ${dossier.REF_EXPERT}</p>
|
||||
<p tal:condition="dossier.VREF">V/Référence : ${dossier.VREF}</p>
|
||||
<p tal:condition="devis.NOSIN">N° sinistre : ${devis.NOSIN}</p>
|
||||
<p tal:condition="devis.NOPOL">N° sinistre : ${devis.NOPOL}</p>
|
||||
<p tal:condition="devis.REF_EXPERT">Réf. expert : ${devis.REF_EXPERT}</p>
|
||||
<p tal:condition="devis.VREF">V/Référence : ${devis.VREF}</p>
|
||||
<br />
|
||||
<p>${dossier.LIBCOMPL}</p>
|
||||
<p>${devis.LIBCOMPL}</p>
|
||||
<br/><br/>
|
||||
<p>N° dossier : ${dossier.nochantier}</p>
|
||||
<p>N° dossier : ${devis.nochantier}</p>
|
||||
<br/><br/>
|
||||
<H3>DEVIS N° ${dossier.societe}-${dossier.NO_ID}<h/H3>
|
||||
<H3>DEVIS N° ${devis.societe}-${devis.NO_ID}<h/H3>
|
||||
|
||||
</div>
|
||||
<!-- colonne droite : ADRESSES -->
|
||||
<div class="col-sm-6">
|
||||
<br/><br/>
|
||||
<h4>${dossier.C_QUALITE} ${dossier.C_NOM}</h4>
|
||||
<h4>${dossier.C_ADR}</h4>
|
||||
<h4 tal:condition="dossier.C_ADR2">${dossier.C_ADR2}<br /></h4>
|
||||
<br />
|
||||
<h4>${dossier.C_CP} ${dossier.C_VILLE}</h4>
|
||||
<h4>${devis.C_QUALITE} ${devis.C_NOM}</h4>
|
||||
<h4>${devis.C_ADR}</h4>
|
||||
<h4 tal:condition="devis.C_ADR2">${devis.C_ADR2}<br /></h4>
|
||||
<h4>${devis.C_CP} ${devis.C_VILLE}</h4>
|
||||
<br />
|
||||
<br />
|
||||
<p>Rilieux-la-Pape, le ${dossier.DATE.strftime('%d-%m-%Y')}</p>
|
||||
<p>Rilieux-la-Pape, le ${devis.DATE.strftime('%d-%m-%Y')}</p>
|
||||
<br />
|
||||
<h4>${dossier.QUALITE} ${dossier.NOM}</h4>
|
||||
<h4>${dossier.ADRESSE}</h4>
|
||||
<h4 tal:condition="dossier.ADRESSE2">${dossier.ADRESSE2}<br /></h4>
|
||||
<br />
|
||||
<h4>${dossier.CP} ${dossier.VILLE}</h4>
|
||||
<h4>${devis.QUALITE} ${devis.NOM}</h4>
|
||||
<h4>${devis.ADRESSE}</h4>
|
||||
<h4 tal:condition="devis.ADRESSE2">${devis.ADRESSE2}<br /></h4>
|
||||
<h4>${devis.CP} ${devis.VILLE}</h4>
|
||||
</div>
|
||||
</div> <!-- row : entête-->
|
||||
<br/>
|
||||
@@ -63,13 +61,13 @@
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<h4>Total HT</h4>
|
||||
<h4>TVA ${layout.to_percent(dossier.TAUXTVA)}</h4>
|
||||
<h4>TVA ${layout.to_percent(devis.TAUXTVA)}</h4>
|
||||
<h4>Total TTC</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<h4 class="text-right">${layout.to_euro(dossier.TOTALHT)}</h4>
|
||||
<h4 class="text-right">${layout.to_euro(dossier.TOTALTVA)}</h4>
|
||||
<h4 class="text-right">${layout.to_euro(dossier.TOTALTTC)}</h4>
|
||||
<h4 class="text-right">${layout.to_euro(devis.TOTALHT)}</h4>
|
||||
<h4 class="text-right">${layout.to_euro(devis.TOTALTVA)}</h4>
|
||||
<h4 class="text-right">${layout.to_euro(devis.TOTALTTC)}</h4>
|
||||
</div>
|
||||
<br />
|
||||
<div class="col-sm-12">
|
||||
@@ -80,11 +78,11 @@
|
||||
</div> <!-- row : bas de devis-->
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<p tal:condition="dossier.TYPECLI == 'P'">
|
||||
<p tal:condition="devis.TYPECLI == 'P'">
|
||||
<b>Conditions de réglement :</b><br />
|
||||
Acompte de 30 % à la commande, Le solde à réception de la facture.
|
||||
</p>
|
||||
<p tal:condition="dossier.CODETVA == 4">
|
||||
<p tal:condition="devis.CODETVA == 4">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
<div class="col-md-6">
|
||||
<table class="table table-condensed">
|
||||
<tr>
|
||||
<td><h4>CHANTIER</h4><h4 class="text-primary">${dossier.societe}-${dossier.nochantier}</h4>
|
||||
<td><h4>CHANTIER</h4><h4 class="text-primary">${devis.societe}-${devis.nochantier}</h4>
|
||||
</td>
|
||||
<td>
|
||||
<h4>${dossier.C_QUALITE} ${dossier.C_NOM}</h4>
|
||||
${dossier.C_ADR}<br />
|
||||
<span tal:condition="dossier.C_ADR2">${dossier.C_ADR2}<br /></span>
|
||||
${dossier.C_CP} ${dossier.C_VILLE}<br />
|
||||
${dossier.C_EMAIL}
|
||||
<h4>${devis.C_QUALITE} ${devis.C_NOM}</h4>
|
||||
${devis.C_ADR}<br />
|
||||
<span tal:condition="devis.C_ADR2">${devis.C_ADR2}<br /></span>
|
||||
${devis.C_CP} ${devis.C_VILLE}<br />
|
||||
${devis.C_EMAIL}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -24,9 +24,9 @@
|
||||
Tél. mobile - fax
|
||||
</td>
|
||||
<td>
|
||||
${dossier.C_ETAGE} - ${dossier.C_CODE}<br />
|
||||
${dossier.C_TEL1} - ${dossier.C_TEL2}<br />
|
||||
${dossier.C_TELP} - ${dossier.C_FAX}
|
||||
${devis.C_ETAGE} - ${devis.C_CODE}<br />
|
||||
${devis.C_TEL1} - ${devis.C_TEL2}<br />
|
||||
${devis.C_TELP} - ${devis.C_FAX}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -38,10 +38,10 @@
|
||||
<tr>
|
||||
<td><h4>CLIENT</h4></td>
|
||||
<td>
|
||||
<h4>${dossier.QUALITE} ${dossier.NOM}</h4>
|
||||
${dossier.ADRESSE}<br />
|
||||
<span tal:condition="dossier.ADRESSE2">${dossier.ADRESSE2}<br /></span>
|
||||
${dossier.CP} ${dossier.VILLE}<br />
|
||||
<h4>${devis.QUALITE} ${devis.NOM}</h4>
|
||||
${devis.ADRESSE}<br />
|
||||
<span tal:condition="devis.ADRESSE2">${devis.ADRESSE2}<br /></span>
|
||||
${devis.CP} ${devis.VILLE}<br />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -51,14 +51,14 @@
|
||||
Tél. mobile - fax
|
||||
</td>
|
||||
<td>
|
||||
${dossier.NOMRESP}<br />
|
||||
${dossier.TEL1} - ${dossier.TEL2}<br />
|
||||
${dossier.TELP} - ${dossier.FAX}
|
||||
${devis.NOMRESP}<br />
|
||||
${devis.TEL1} - ${devis.TEL2}<br />
|
||||
${devis.TELP} - ${devis.FAX}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<h4>Statut : ${dossier.STATUS}</h4>
|
||||
<h4>Statut : ${devis.STATUS}</h4>
|
||||
</div> <!-- row -->
|
||||
<!-- ENTETE DEVIS -->
|
||||
<table class="table table-bordered table-condensed">
|
||||
@@ -69,10 +69,10 @@
|
||||
<th class="text-right">TVA</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALHT)}</td>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALTVA)}</td>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALTTC)}</td>
|
||||
<td class="text-right">${dossier.TAUXTVA} %</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALHT)}</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALTVA)}</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALTTC)}</td>
|
||||
<td class="text-right">${devis.TAUXTVA} %</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -7,34 +7,35 @@
|
||||
<div class="col-md-6">
|
||||
<table class="table table-condensed">
|
||||
<tr>
|
||||
<td><h4>CHANTIER</h4><h4 class="text-primary">${dossier.societe}-${dossier.nochantier}</h4>
|
||||
<td><h4>CHANTIER</h4>
|
||||
<p><a href="/dossier_view/${devis.societe}-${devis.nochantier}">${devis.societe}-${devis.nochantier}</a></p>
|
||||
</td>
|
||||
<td>
|
||||
<h4>${dossier.C_QUALITE} ${dossier.C_NOM}</h4>
|
||||
${dossier.C_ADR}<br />
|
||||
<span tal:condition="dossier.C_ADR2">${dossier.C_ADR2}<br /></span>
|
||||
${dossier.C_CP} ${dossier.C_VILLE}<br />
|
||||
${dossier.C_EMAIL}
|
||||
<h4>${devis.C_QUALITE} ${devis.C_NOM}</h4>
|
||||
${devis.C_ADR}<br />
|
||||
<span tal:condition="devis.C_ADR2">${devis.C_ADR2}<br /></span>
|
||||
${devis.C_CP} ${devis.C_VILLE}<br />
|
||||
${devis.C_EMAIL}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Mon compte -->
|
||||
<div class="col-md-6 ${bg_color}">
|
||||
<table class="table table-condensed ">
|
||||
<tr>
|
||||
<td><h4>CLIENT</h4></td>
|
||||
<td>
|
||||
<h4>${dossier.QUALITE} ${dossier.NOM}</h4>
|
||||
${dossier.ADRESSE}<br />
|
||||
<span tal:condition="dossier.ADRESSE2">${dossier.ADRESSE2}<br /></span>
|
||||
${dossier.CP} ${dossier.VILLE}<br />
|
||||
<h4>${devis.QUALITE} ${devis.NOM}</h4>
|
||||
${devis.ADRESSE}<br />
|
||||
<span tal:condition="devis.ADRESSE2">${devis.ADRESSE2}<br /></span>
|
||||
${devis.CP} ${devis.VILLE}<br />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div> <!-- row -->
|
||||
<br />
|
||||
<!-- ENTETE DEVIS -->
|
||||
<table class="table table-bordered table-condensed">
|
||||
<tr class="well">
|
||||
@@ -44,19 +45,21 @@
|
||||
<th class="text-right">TVA</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALHT)}</td>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALTVA)}</td>
|
||||
<td class="text-right">${layout.to_euro(dossier.TOTALTTC)}</td>
|
||||
<td class="text-right">${dossier.TAUXTVA} %</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALHT)}</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALTVA)}</td>
|
||||
<td class="text-right">${layout.to_euro(devis.TOTALTTC)}</td>
|
||||
<td class="text-right">${devis.TAUXTVA} %</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
<a class="btn btn-primary" role="button" href="${request.route_url('devis_preview', nodossier=nodossier)}">
|
||||
<span class="glyphicon glyphicon-plus"></span> Prévisualiser</a>
|
||||
</p>
|
||||
|
||||
<table class="table table-bordered table-condensed">
|
||||
<form id="devis_web-form" action="${url}" method="post">
|
||||
<a class="btn btn-default" role="button" href="${request.route_url('devis_preview', nodevis=nodevis)}">
|
||||
<span class="glyphicon glyphicon-eye-open"></span> Aperçu PDF</a>
|
||||
<button id="generateButton" class="btn btn-warning" type="submit" name="form.generate">
|
||||
<i class="glyphicon glyphicon-refresh"></i> Générer PDF</button>
|
||||
</form>
|
||||
<br />
|
||||
<table class="table table-bordered table-condensed">
|
||||
<tr class="well">
|
||||
<th>Réf</th>
|
||||
<th>Désignation</th>
|
||||
@@ -67,7 +70,7 @@
|
||||
<th></th>
|
||||
</tr>
|
||||
<tr tal:repeat="detail details">
|
||||
<td><a href="/devis_ligne/${detail.type_ligne}/${nodossier}/${detail.nolig}">${detail.ref}</a></td>
|
||||
<td><a href="/devis_ligne/${detail.type_ligne}/${nodevis}/${detail.nolig}">${detail.ref}</a></td>
|
||||
<td>${detail.libelle}</td>
|
||||
<td class="text-right">${layout.to_decz(detail.qte)}</td>
|
||||
<td class="text-right">${layout.to_euroz(detail.prixht)}</td>
|
||||
@@ -75,10 +78,10 @@
|
||||
<td class="text-center">${detail.usermaj}</td>
|
||||
<td class="text-center">
|
||||
<a class="btn btn-primary btn-xs" role="button" tal:condition="detail.nolig>1"
|
||||
href="${request.route_url('devis_lig_mv',move='up',nodossier=nodossier,nolig=detail.nolig)}">
|
||||
href="${request.route_url('devis_lig_mv',move='up',nodevis=nodevis,nolig=detail.nolig)}">
|
||||
<span class="glyphicon glyphicon-arrow-up"></span></a>
|
||||
<a class="btn btn-primary btn-xs" role="button" tal:condition="detail.nolig < max_no"
|
||||
href="${request.route_url('devis_lig_mv',move='dn',nodossier=nodossier,nolig=detail.nolig)}">
|
||||
href="${request.route_url('devis_lig_mv',move='dn',nodevis=nodevis,nolig=detail.nolig)}">
|
||||
<span class="glyphicon glyphicon-arrow-down"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<div class="col-sm-8">
|
||||
<select class="form-control" name="article">
|
||||
<div tal:repeat="item articles">
|
||||
<option value="${item.REF}" tal:attributes="selected article==item.LIBART and 'selected' or None">${item.LIBART} ${item.PRIXHT1} €</option>
|
||||
<option value="${item.REF}" tal:attributes="selected article==item.LIBART and 'selected' or None">${item.LIBART} ${layout.to_euro(item.PRIXHT1)}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
<div tal:condition="access > 0 and date_relu!=''">
|
||||
<br />
|
||||
<a class="btn btn-default" href="/rdf_rapport/${rapport.no_id}">
|
||||
<span class="glyphicon glyphicon-file"></span> Aperçu PDF</a>
|
||||
<span class="glyphicon glyphicon-eye-open"></span> Aperçu PDF</a>
|
||||
<button id="generateButton" class="btn btn-warning" type="submit" name="form.generate">
|
||||
<i class="glyphicon glyphicon-refresh"></i> Générer PDF</button>
|
||||
<a class="btn btn-primary" href="/rdf_bill/${rapport.no_id}">
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user