genere devis en pdf

This commit is contained in:
2020-11-11 15:05:59 +01:00
parent 6bc9d34fde
commit dab24387a2
10 changed files with 173 additions and 130 deletions

View File

@@ -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)

View File

@@ -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))

View File

@@ -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