diff --git a/source/app/controllers/helper.py b/source/app/controllers/helper.py
index efc7274..c6bc2c5 100644
--- a/source/app/controllers/helper.py
+++ b/source/app/controllers/helper.py
@@ -340,6 +340,7 @@ class SendMail(object):
class NumberedCanvas(canvas.Canvas):
X = 20.59 * cm
+ XC = 21.6 * cm / 2 + 1.5 * cm
Y = 1.5 * cm
def __init__(self, *args, **kwargs):
@@ -363,10 +364,14 @@ class NumberedCanvas(canvas.Canvas):
def draw_page_number(self, page_count):
self.setFont('Helvetica', 8)
- self.setFillColor(colors.darkred)
- text = 'Página {} de {}'.format(self._pageNumber, page_count)
+ # ~ self.setFillColor(colors.darkred)
+ text = f'Página {self._pageNumber} de {page_count}'
self.drawRightString(self.X, self.Y, text)
- text = 'Factura elaborada con software libre: www.empresalibre.net'
+
+ text = 'Este documento es una representación impresa de un CFDI'
+ self.drawCentredString(self.XC, self.Y, text)
+
+ text = 'Factura elaborada con software libre'
self.drawString(1.5 * cm, 1.5 * cm, text)
return
@@ -418,6 +423,8 @@ class TemplateInvoice(BaseDocTemplate):
def _emisor(self, styles, data):
logo_path = data.pop('logo', '')
logo_style = styles.pop('logo', {})
+ logo_path2 = data.pop('logo2', '')
+ logo_style2 = styles.pop('logo2', {})
for k, v in styles.items():
self._set_text(styles[k], data.get(k, ''))
@@ -428,6 +435,14 @@ class TemplateInvoice(BaseDocTemplate):
for k in keys:
rect[k] = rect[k] * cm
self.canv.drawImage(logo_path, **rect)
+
+ if logo_path2 and logo_style2:
+ rect = logo_style2['rectangulo']
+ keys = ('x', 'y', 'width', 'height')
+ for k in keys:
+ rect[k] = rect[k] * cm
+ self.canv.drawImage(logo_path2, **rect)
+
return
def _receptor(self, styles, data):
@@ -449,6 +464,7 @@ class TemplateInvoice(BaseDocTemplate):
def _comprobante1(self, styles, data):
title = styles.pop('titulo', {})
+ self.canv.setTitle(f"Factura {data.get('seriefolio', '')}")
for k, v in styles.items():
self._set_text(styles[k], data.get(k, ''))
@@ -480,6 +496,12 @@ class TemplateInvoice(BaseDocTemplate):
fields = ('valorunitario', 'importe')
if field in fields:
return self._currency(value)
+
+ if field == 'descripcion':
+ html = '{}'
+ style_bt = getSampleStyleSheet()['BodyText']
+ return Paragraph(html.format(value), style_bt)
+
return value
def _conceptos(self, conceptos):
@@ -515,8 +537,8 @@ class TemplateInvoice(BaseDocTemplate):
('GRID', (0, 0), (-1, -1), 0.05 * cm, colors.white),
('ALIGN', (1, 0), (-1, -1), 'RIGHT'),
('FONTSIZE', (0, 0), (-1, -1), 8),
- ('BACKGROUND', (1, 0), (-1, -1), colors.linen),
- ('TEXTCOLOR', (1, 0), (-1, -1), colors.darkred),
+ ('BACKGROUND', (1, 0), (-1, -1), colors.lightgrey),
+ ('TEXTCOLOR', (1, 0), (-1, -1), colors.black),
('FACE', (1, 0), (-1, -1), 'Helvetica-Bold'),
]
table = Table(rows, colWidths=widths, spaceBefore=0.25*cm)
@@ -524,7 +546,7 @@ class TemplateInvoice(BaseDocTemplate):
return table
def _comprobante2(self, styles, data):
- leyenda = styles.pop('leyenda', {})
+ leyendas = styles.pop('leyendas', {})
ls = []
for k, v in styles.items():
@@ -542,7 +564,7 @@ class TemplateInvoice(BaseDocTemplate):
style_bt = getSampleStyleSheet()['BodyText']
style_bt.leading = 8
html_t = '{}'
- html = '{}'
+ html = '{}'
msg = 'Cadena original del complemento de certificación digital del SAT'
rows = [
(cbb, Paragraph(html_t.format('Sello Digital del CFDI'), style_bt)),
@@ -558,13 +580,13 @@ class TemplateInvoice(BaseDocTemplate):
('FONTSIZE', (0, 0), (-1, -1), 6),
('SPAN', (0, 0), (0, -1)),
('FACE', (1, 0), (1, 0), 'Helvetica-Bold'),
- ('BACKGROUND', (1, 1), (1, 1), colors.linen),
+ ('BACKGROUND', (1, 1), (1, 1), colors.lightgrey),
('TEXTCOLOR', (1, 1), (1, 1), colors.darkred),
('FACE', (1, 2), (1, 2), 'Helvetica-Bold'),
- ('BACKGROUND', (1, 3), (1, 3), colors.linen),
+ ('BACKGROUND', (1, 3), (1, 3), colors.lightgrey),
('TEXTCOLOR', (1, 3), (1, 3), colors.darkred),
('FACE', (1, 4), (1, 4), 'Helvetica-Bold'),
- ('BACKGROUND', (1, 5), (1, 5), colors.linen),
+ ('BACKGROUND', (1, 5), (1, 5), colors.lightgrey),
('TEXTCOLOR', (1, 5), (1, 5), colors.darkred),
('ALIGN', (0, 0), (0, 0), 'CENTER'),
('VALIGN', (0, 0), (0, 0), 'MIDDLE'),
@@ -573,14 +595,14 @@ class TemplateInvoice(BaseDocTemplate):
table.setStyle(TableStyle(table_styles))
ls.append(table)
- if leyenda:
- if 'spaceBefore' in leyenda['estilo']:
- leyenda['estilo']['spaceBefore'] = \
- leyenda['estilo']['spaceBefore'] * cm
- msg = 'Este documento es una representación impresa de un CFDI'
- ps = ParagraphStyle(**leyenda['estilo'])
- p = Paragraph(msg, ps)
- ls.append(p)
+ if leyendas:
+ if 'spaceBefore' in leyendas['estilo']:
+ leyendas['estilo']['spaceBefore'] = \
+ leyendas['estilo']['spaceBefore'] * cm
+ for t in leyendas['textos']:
+ ps = ParagraphStyle(**leyendas['estilo'])
+ p = Paragraph(t, ps)
+ ls.append(p)
return ls
@@ -607,13 +629,13 @@ class TemplateInvoice(BaseDocTemplate):
('ALIGN', (0, 0), (-1, 0), 'CENTER'),
('TEXTCOLOR', (0, 0), (-1, 0), colors.white),
('FACE', (0, 0), (-1, 0), 'Helvetica-Bold'),
- ('BACKGROUND', (0, 0), (-1, 0), colors.darkred),
+ ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('FONTSIZE', (0, 1), (-1, -1), 7),
('VALIGN', (0, 1), (-1, -1), 'TOP'),
('ALIGN', (0, 1), (0, -1), 'CENTER'),
('ALIGN', (2, 1), (2, -1), 'CENTER'),
('ALIGN', (3, 1), (5, -1), 'RIGHT'),
- ('LINEBELOW', (0, 1), (-1, -1), 0.05 * cm, colors.darkred),
+ ('LINEBELOW', (0, 1), (-1, -1), 0.05 * cm, colors.grey),
('LINEBEFORE', (0, 1), (-1, -1), 0.05 * cm, colors.white),
]
table_conceptos = Table(rows, colWidths=widths, repeatRows=1)
diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py
index dd38ed8..673b7ea 100644
--- a/source/app/controllers/util.py
+++ b/source/app/controllers/util.py
@@ -1592,9 +1592,15 @@ def to_pdf(data, emisor_rfc, ods=False, pdf_from='1'):
def to_pdf_from_json(rfc, version, data):
+ rfc = rfc.lower()
name = '{}_{}.json'.format(rfc, version)
custom_styles = get_custom_styles(name)
+ path_logo = _join(PATHS['IMG'], f"{rfc}.png")
+ data['emisor']['logo'] = path_logo
+ path_logo = _join(PATHS['IMG'], f"{rfc}_2.png")
+ data['emisor']['logo2'] = path_logo
+
path = get_path_temp()
pdf = TemplateInvoice(path)
pdf.custom_styles = custom_styles
diff --git a/source/app/models/main.py b/source/app/models/main.py
index c42f14a..db985fe 100644
--- a/source/app/models/main.py
+++ b/source/app/models/main.py
@@ -3719,6 +3719,7 @@ class Facturas(BaseModel):
values['receptor'] = {}
for k, v in receptor.items():
values['receptor'][k] = v
+
return values
@classmethod
diff --git a/source/templates/plantilla_factura.json b/source/templates/plantilla_factura.json
index 2dff441..18dfca1 100644
--- a/source/templates/plantilla_factura.json
+++ b/source/templates/plantilla_factura.json
@@ -1,4 +1,5 @@
{
+"colores": {"piepagina": "darkred"},
"encabezado": {
"emisor": {
"direccion": {
@@ -208,10 +209,9 @@
"estilo": {"name": "tipocambio", "fontName": "Helvetica",
"fontSize": 7, "alignment": 0, "textColor": "black"}
},
- "leyenda": {
- "estilo": {"name": "leyenda", "fontName": "Helvetica-Bold",
- "fontSize": 6, "alignment": 1, "textColor": "black",
- "spaceBefore": 0.2}
+ "notas": {
+ "estilo": {"name": "notas", "fontName": "Helvetica",
+ "fontSize": 7, "alignment": 0, "textColor": "black"}
}
}
}