forked from elmau/empresa-libre
Subir plantillas HTML y CSS
This commit is contained in:
parent
0d52e9b570
commit
00bdd2b1a2
|
@ -72,6 +72,7 @@ from .configpac import AUTH
|
||||||
|
|
||||||
# ~ v2
|
# ~ v2
|
||||||
from settings import (
|
from settings import (
|
||||||
|
EXT,
|
||||||
MXN,
|
MXN,
|
||||||
PATHS,
|
PATHS,
|
||||||
)
|
)
|
||||||
|
@ -2124,35 +2125,55 @@ def get_date(value, next_day=False):
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
class UpFile(object):
|
||||||
|
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._init_values()
|
||||||
|
|
||||||
|
def _init_values(self):
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
def upload_file(rfc, opt, file_obj):
|
def upload_file(rfc, opt, file_obj):
|
||||||
if opt == 'txt_plantilla_factura_32':
|
rfc = rfc.lower()
|
||||||
tmp = file_obj.filename.split('.')
|
tmp = file_obj.filename.split('.')
|
||||||
ext = tmp[-1].lower()
|
ext = tmp[-1].lower()
|
||||||
if ext != 'ods':
|
|
||||||
msg = 'Extensión de archivo incorrecta, selecciona un archivo ODS'
|
EXTENSIONS = {
|
||||||
|
'txt_plantilla_factura_32': EXT['ODS'],
|
||||||
|
'txt_plantilla_factura_33': EXT['ODS'],
|
||||||
|
'txt_plantilla_factura_html': EXT['HTML'],
|
||||||
|
'txt_plantilla_factura_css': EXT['CSS'],
|
||||||
|
}
|
||||||
|
|
||||||
|
if opt in EXTENSIONS:
|
||||||
|
if ext != EXTENSIONS[opt]:
|
||||||
|
msg = (
|
||||||
|
f"Extensión de archivo incorrecta, "
|
||||||
|
f"selecciona un archivo {EXTENSIONS[opt].upper()}"
|
||||||
|
)
|
||||||
return {'status': 'server', 'name': msg, 'ok': False}
|
return {'status': 'server', 'name': msg, 'ok': False}
|
||||||
|
|
||||||
name = '{}_3.2.ods'.format(rfc.lower())
|
NAMES = {
|
||||||
path = _join(PATH_MEDIA, 'templates', name)
|
'txt_plantilla_factura_32': f"{rfc}_3.2.ods",
|
||||||
elif opt == 'txt_plantilla_factura_33':
|
'txt_plantilla_factura_33': f"{rfc}_3.3.ods",
|
||||||
tmp = file_obj.filename.split('.')
|
'txt_plantilla_factura_html': f"{rfc}_3.3.html",
|
||||||
ext = tmp[-1].lower()
|
'txt_plantilla_factura_css': f"{rfc}.css"
|
||||||
if ext != 'ods':
|
}
|
||||||
msg = 'Extensión de archivo incorrecta, selecciona un archivo ODS'
|
name = NAMES[opt]
|
||||||
return {'status': 'server', 'name': msg, 'ok': False}
|
paths = {
|
||||||
|
'txt_plantilla_factura_32': _join(PATHS['USER'], name),
|
||||||
|
'txt_plantilla_factura_33': _join(PATHS['USER'], name),
|
||||||
|
'txt_plantilla_factura_html': _join(PATHS['USER'], name),
|
||||||
|
'txt_plantilla_factura_css': _join(PATHS['CSS'], name),
|
||||||
|
}
|
||||||
|
if save_file(paths[opt], file_obj.file.read()):
|
||||||
|
return {'status': 'server', 'name': file_obj.filename, 'ok': True}
|
||||||
|
return {'status': 'error', 'ok': False}
|
||||||
|
|
||||||
name = '{}_3.3.ods'.format(rfc.lower())
|
if opt == 'txt_plantilla_ticket':
|
||||||
path = _join(PATH_MEDIA, 'templates', name)
|
|
||||||
elif opt == 'txt_plantilla_factura_33j':
|
|
||||||
tmp = file_obj.filename.split('.')
|
|
||||||
ext = tmp[-1].lower()
|
|
||||||
if ext != 'json':
|
|
||||||
msg = 'Extensión de archivo incorrecta, selecciona un archivo JSON'
|
|
||||||
return {'status': 'server', 'name': msg, 'ok': False}
|
|
||||||
|
|
||||||
name = '{}_3.3.json'.format(rfc.lower())
|
|
||||||
path = _join(PATH_MEDIA, 'templates', name)
|
|
||||||
elif opt == 'txt_plantilla_ticket':
|
|
||||||
tmp = file_obj.filename.split('.')
|
tmp = file_obj.filename.split('.')
|
||||||
ext = tmp[-1].lower()
|
ext = tmp[-1].lower()
|
||||||
if ext != 'ods':
|
if ext != 'ods':
|
||||||
|
|
|
@ -471,7 +471,8 @@ class Configuracion(BaseModel):
|
||||||
fields = (
|
fields = (
|
||||||
'txt_plantilla_factura_32',
|
'txt_plantilla_factura_32',
|
||||||
'txt_plantilla_factura_33',
|
'txt_plantilla_factura_33',
|
||||||
'txt_plantilla_factura_33j',
|
'txt_plantilla_factura_html',
|
||||||
|
'txt_plantilla_factura_css',
|
||||||
'txt_plantilla_nomina1233',
|
'txt_plantilla_nomina1233',
|
||||||
'txt_plantilla_pagos10',
|
'txt_plantilla_pagos10',
|
||||||
'txt_plantilla_ticket',
|
'txt_plantilla_ticket',
|
||||||
|
@ -846,7 +847,7 @@ class Emisor(BaseModel):
|
||||||
emisor = Emisor.select()[0]
|
emisor = Emisor.select()[0]
|
||||||
rfc = emisor.rfc.lower()
|
rfc = emisor.rfc.lower()
|
||||||
name = f'{rfc}.png'
|
name = f'{rfc}.png'
|
||||||
path = util._join(PATHS['STATIC'], 'img', name)
|
path = util._join(PATHS['IMG'], name)
|
||||||
if util.save_file(path, file_obj.file.read()):
|
if util.save_file(path, file_obj.file.read()):
|
||||||
emisor.logo = file_obj.filename
|
emisor.logo = file_obj.filename
|
||||||
emisor.save()
|
emisor.save()
|
||||||
|
@ -3736,7 +3737,7 @@ class Facturas(BaseModel):
|
||||||
for n in node:
|
for n in node:
|
||||||
d = util.get_dict(n.attrib)
|
d = util.get_dict(n.attrib)
|
||||||
name = VALUES_PDF['TAX'].get(d['impuesto'])
|
name = VALUES_PDF['TAX'].get(d['impuesto'])
|
||||||
tasa = FORMAT.format(float(d['tasaocuota']))
|
tasa = f"{float(d['tasaocuota']):.2f}"
|
||||||
title = f"{type_tax} {name} {tasa}"
|
title = f"{type_tax} {name} {tasa}"
|
||||||
importe = util.format_currency(d['importe'], currency)
|
importe = util.format_currency(d['importe'], currency)
|
||||||
data['totales'].append((title, importe))
|
data['totales'].append((title, importe))
|
||||||
|
|
|
@ -54,6 +54,12 @@ TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION)
|
||||||
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
path_static = os.path.abspath(os.path.join(BASE_DIR, '..', 'static'))
|
path_static = os.path.abspath(os.path.join(BASE_DIR, '..', 'static'))
|
||||||
|
path_docs = os.path.abspath(os.path.join(BASE_DIR, '..', 'docs'))
|
||||||
|
|
||||||
|
path_css = os.path.join(path_static, 'css')
|
||||||
|
path_img = os.path.join(path_static, 'img')
|
||||||
|
path_user_template = os.path.join(path_docs, 'templates')
|
||||||
|
|
||||||
# ~ PATH_STATIC = os.path.abspath(os.path.join(BASE_DIR, '..'))
|
# ~ PATH_STATIC = os.path.abspath(os.path.join(BASE_DIR, '..'))
|
||||||
|
|
||||||
PATH_TEMPLATES = os.path.abspath(os.path.join(BASE_DIR, '..', 'templates'))
|
PATH_TEMPLATES = os.path.abspath(os.path.join(BASE_DIR, '..', 'templates'))
|
||||||
|
@ -190,11 +196,18 @@ CURRENCY_MN = 'MXN'
|
||||||
|
|
||||||
# ~ v2
|
# ~ v2
|
||||||
EXT = {
|
EXT = {
|
||||||
|
'CSS': 'css',
|
||||||
|
'HTML': 'html',
|
||||||
|
'ODS': 'ods',
|
||||||
'PNG': 'png',
|
'PNG': 'png',
|
||||||
}
|
}
|
||||||
MXN = 'MXN'
|
MXN = 'MXN'
|
||||||
PATHS = {
|
PATHS = {
|
||||||
'STATIC': path_static,
|
'STATIC': path_static,
|
||||||
|
'CSS': path_css,
|
||||||
|
'IMG': path_img,
|
||||||
|
'DOCS': path_docs,
|
||||||
|
'USER': path_user_template,
|
||||||
}
|
}
|
||||||
VALUES_PDF = {
|
VALUES_PDF = {
|
||||||
'CANCEL': {True: 'inline', False: 'none'},
|
'CANCEL': {True: 'inline', False: 'none'},
|
||||||
|
|
|
@ -397,7 +397,7 @@ header .cfdi{
|
||||||
float: left;
|
float: left;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 15px;
|
line-height: 15px;
|
||||||
margin: 4px 0;
|
margin: 5px 0;
|
||||||
width: 63%;
|
width: 63%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,19 +424,28 @@ table.subtotal td{
|
||||||
|
|
||||||
.condiciones-pago{
|
.condiciones-pago{
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
line-height: 15px;
|
line-height: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notas{
|
.notas{
|
||||||
|
float: left;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
margin: 20px 0;
|
margin: 20px 0;
|
||||||
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.formapago-metodopago, .moneda-tipocambio, .tiporelacion, .relacionados{
|
.formapago-metodopago, .moneda-tipocambio, .tiporelacion, .relacionados{
|
||||||
float: left;
|
float: left;
|
||||||
font-size: 10px;
|
font-size: 11px;
|
||||||
line-height: 12px;
|
line-height: 12px;
|
||||||
width: 80%;
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.factura-info{
|
||||||
|
float: left;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 13px;
|
||||||
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tipocomite, .tipoproceso, .idcontabilidad{
|
.tipocomite, .tipoproceso, .idcontabilidad{
|
||||||
|
|
|
@ -69,7 +69,8 @@ var controllers = {
|
||||||
tb_options.attachEvent('onChange', tab_options_change)
|
tb_options.attachEvent('onChange', tab_options_change)
|
||||||
$$('txt_plantilla_factura_32').attachEvent('onItemClick', txt_plantilla_factura_32_click)
|
$$('txt_plantilla_factura_32').attachEvent('onItemClick', txt_plantilla_factura_32_click)
|
||||||
$$('txt_plantilla_factura_33').attachEvent('onItemClick', txt_plantilla_factura_33_click)
|
$$('txt_plantilla_factura_33').attachEvent('onItemClick', txt_plantilla_factura_33_click)
|
||||||
$$('txt_plantilla_factura_33j').attachEvent('onItemClick', txt_plantilla_factura_33j_click)
|
$$('txt_plantilla_factura_html').attachEvent('onItemClick', txt_plantilla_factura_html_click)
|
||||||
|
$$('txt_plantilla_factura_css').attachEvent('onItemClick', txt_plantilla_factura_css_click)
|
||||||
$$('txt_plantilla_ticket').attachEvent('onItemClick', txt_plantilla_ticket_click)
|
$$('txt_plantilla_ticket').attachEvent('onItemClick', txt_plantilla_ticket_click)
|
||||||
$$('txt_plantilla_donataria').attachEvent('onItemClick', txt_plantilla_donataria_click)
|
$$('txt_plantilla_donataria').attachEvent('onItemClick', txt_plantilla_donataria_click)
|
||||||
$$('txt_plantilla_nomina1233').attachEvent('onItemClick', txt_plantilla_nomina1233_click)
|
$$('txt_plantilla_nomina1233').attachEvent('onItemClick', txt_plantilla_nomina1233_click)
|
||||||
|
@ -978,13 +979,16 @@ function txt_plantilla_factura_32_click(e){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function txt_plantilla_factura_33j_click(e){
|
function txt_plantilla_factura_html_click(e){
|
||||||
|
|
||||||
var body_elements = [
|
var body_elements = [
|
||||||
{cols: [{width: 100}, {view: 'uploader', id: 'up_template', autosend: true, link: 'lst_files',
|
{cols: [
|
||||||
value: 'Seleccionar archivo', upload: '/files/txt_plantilla_factura_33j',
|
{width: 100},
|
||||||
width: 200}, {width: 100}]},
|
{view: 'uploader', id: 'up_template', autosend: true,
|
||||||
{view: 'list', id: 'lst_files', type: 'uploader', autoheight:true,
|
link: 'lst_files', value: 'Seleccionar archivo',
|
||||||
|
upload: '/files/txt_plantilla_factura_html', width: 200},
|
||||||
|
{width: 100}]},
|
||||||
|
{view: 'list', id: 'lst_files', type: 'uploader', autoheight: true,
|
||||||
borderless: true},
|
borderless: true},
|
||||||
{},
|
{},
|
||||||
{cols: [{}, {view: 'button', label: 'Cerrar', autowidth: true,
|
{cols: [{}, {view: 'button', label: 'Cerrar', autowidth: true,
|
||||||
|
@ -996,7 +1000,7 @@ function txt_plantilla_factura_33j_click(e){
|
||||||
id: 'win_template',
|
id: 'win_template',
|
||||||
modal: true,
|
modal: true,
|
||||||
position: 'center',
|
position: 'center',
|
||||||
head: 'Subir Plantilla 3.3 JSON',
|
head: 'Subir Plantilla 3.3 HTML',
|
||||||
body: {
|
body: {
|
||||||
view: 'form',
|
view: 'form',
|
||||||
elements: body_elements,
|
elements: body_elements,
|
||||||
|
@ -1007,7 +1011,48 @@ function txt_plantilla_factura_33j_click(e){
|
||||||
|
|
||||||
$$('up_template').attachEvent('onUploadComplete', function(response){
|
$$('up_template').attachEvent('onUploadComplete', function(response){
|
||||||
if(response.ok){
|
if(response.ok){
|
||||||
$$('txt_plantilla_factura_33j').setValue(response.name)
|
$$('txt_plantilla_factura_html').setValue(response.name)
|
||||||
|
msg_ok('Plantilla cargada correctamente')
|
||||||
|
}else{
|
||||||
|
msg_error(response.name)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function txt_plantilla_factura_css_click(e){
|
||||||
|
|
||||||
|
var body_elements = [
|
||||||
|
{cols: [
|
||||||
|
{width: 100},
|
||||||
|
{view: 'uploader', id: 'up_template', autosend: true,
|
||||||
|
link: 'lst_files', value: 'Seleccionar archivo',
|
||||||
|
upload: '/files/txt_plantilla_factura_css', width: 200},
|
||||||
|
{width: 100}]},
|
||||||
|
{view: 'list', id: 'lst_files', type: 'uploader', autoheight: true,
|
||||||
|
borderless: true},
|
||||||
|
{},
|
||||||
|
{cols: [{}, {view: 'button', label: 'Cerrar', autowidth: true,
|
||||||
|
click:("$$('win_template').close();")}, {}]}
|
||||||
|
]
|
||||||
|
|
||||||
|
var w = webix.ui({
|
||||||
|
view: 'window',
|
||||||
|
id: 'win_template',
|
||||||
|
modal: true,
|
||||||
|
position: 'center',
|
||||||
|
head: 'Subir Archivo de Estilos CSS',
|
||||||
|
body: {
|
||||||
|
view: 'form',
|
||||||
|
elements: body_elements,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
w.show()
|
||||||
|
|
||||||
|
$$('up_template').attachEvent('onUploadComplete', function(response){
|
||||||
|
if(response.ok){
|
||||||
|
$$('txt_plantilla_factura_css').setValue(response.name)
|
||||||
msg_ok('Plantilla cargada correctamente')
|
msg_ok('Plantilla cargada correctamente')
|
||||||
}else{
|
}else{
|
||||||
msg_error(response.name)
|
msg_error(response.name)
|
||||||
|
|
|
@ -581,31 +581,33 @@ var form_correo = {
|
||||||
|
|
||||||
var options_templates = [
|
var options_templates = [
|
||||||
{maxHeight: 15},
|
{maxHeight: 15},
|
||||||
{cols: [{maxWidth: 15},
|
{cols: [{maxWidth: 20},
|
||||||
{view: 'search', id: 'txt_plantilla_factura_32', name: 'plantilla_factura_32',
|
{view: 'search', id: 'txt_plantilla_factura_32', name: 'plantilla_factura_32',
|
||||||
label: 'Plantilla Factura v3.2 (ODS): ', labelPosition: 'top',
|
label: 'Plantilla Factura v3.2 (ODS): ', labelPosition: 'top',
|
||||||
icon: 'file'}, {}]},
|
icon: 'file'}, {maxWidth: 25},
|
||||||
{maxHeight: 20},
|
|
||||||
{cols: [{maxWidth: 15},
|
|
||||||
{view: 'search', id: 'txt_plantilla_factura_33', labelPosition: 'top',
|
{view: 'search', id: 'txt_plantilla_factura_33', labelPosition: 'top',
|
||||||
label: 'Plantilla Factura v3.3 (ODS): ', icon: 'file'}, {}]},
|
label: 'Plantilla Factura v3.3 (ODS): ', icon: 'file'},
|
||||||
|
{maxWidth: 20} ]},
|
||||||
{maxHeight: 20},
|
{maxHeight: 20},
|
||||||
{cols: [{maxWidth: 15},
|
{cols: [{maxWidth: 20},
|
||||||
{view: 'search', id: 'txt_plantilla_factura_33j', name: 'plantilla_factura_33j',
|
{view: 'search', id: 'txt_plantilla_factura_html', name: 'plantilla_factura_html',
|
||||||
label: 'Plantilla Factura v3.3 (JSON): ', labelPosition: 'top',
|
label: 'Plantilla Factura v3.3 (HTML): ', labelPosition: 'top',
|
||||||
icon: 'file'}, {}]},
|
icon: 'file'}, {maxWidth: 25},
|
||||||
|
{view: 'search', id: 'txt_plantilla_factura_css', name: 'plantilla_factura_css',
|
||||||
|
label: 'Archivo de estilos (CSS): ', labelPosition: 'top',
|
||||||
|
icon: 'file'}, {maxWidth: 20} ]},
|
||||||
{maxHeight: 20},
|
{maxHeight: 20},
|
||||||
{cols: [{maxWidth: 15},
|
{cols: [{maxWidth: 20},
|
||||||
{view: 'search', id: 'txt_plantilla_nomina1233', name: 'plantilla_nomina1233',
|
{view: 'search', id: 'txt_plantilla_nomina1233', name: 'plantilla_nomina1233',
|
||||||
label: 'Plantilla Nomina v1.2 - Cfdi 3.3 (ODS): ', labelPosition: 'top',
|
label: 'Plantilla Nomina v1.2 - Cfdi 3.3 (ODS): ', labelPosition: 'top',
|
||||||
icon: 'file'}, {}]},
|
icon: 'file'}, {maxWidth: 40}, {}]},
|
||||||
{maxHeight: 20},
|
{maxHeight: 20},
|
||||||
{cols: [{maxWidth: 15},
|
{cols: [{maxWidth: 20},
|
||||||
{view: 'search', id: 'txt_plantilla_pagos10', name: 'plantilla_pagos10',
|
{view: 'search', id: 'txt_plantilla_pagos10', name: 'plantilla_pagos10',
|
||||||
label: 'Plantilla Factura de Pagos v1.0 - Cfdi 3.3 (ODS): ',
|
label: 'Plantilla Factura de Pagos v1.0 - Cfdi 3.3 (ODS): ',
|
||||||
labelPosition: 'top', icon: 'file'}, {}]},
|
labelPosition: 'top', icon: 'file'}, {maxWidth: 40}, {}]},
|
||||||
{maxHeight: 20},
|
{maxHeight: 20},
|
||||||
{cols: [{maxWidth: 15},
|
{cols: [{maxWidth: 20},
|
||||||
{view: 'search', id: 'txt_plantilla_ticket', name: 'plantilla_ticket',
|
{view: 'search', id: 'txt_plantilla_ticket', name: 'plantilla_ticket',
|
||||||
label: 'Plantilla para Tickets (ODS): ', labelPosition: 'top',
|
label: 'Plantilla para Tickets (ODS): ', labelPosition: 'top',
|
||||||
icon: 'file'},
|
icon: 'file'},
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<link rel="stylesheet" type="text/css" href="/static/css/${rfc}.css">
|
<link rel="stylesheet" type="text/css" href="/static/css/${rfc}.css">
|
||||||
<title>Empresa Libre</title>
|
<title>Empresa Libre</title>
|
||||||
</head>
|
</head>
|
||||||
<body onload="getQR();">
|
<body>
|
||||||
<div id="plantilla">
|
<div id="plantilla">
|
||||||
<div class="cancelada" style="display: ${cancelada}">
|
<div class="cancelada" style="display: ${cancelada}">
|
||||||
Cancelada
|
Cancelada
|
||||||
|
@ -113,6 +113,36 @@
|
||||||
|
|
||||||
<div class="total-letras">
|
<div class="total-letras">
|
||||||
${cfdi_totalenletras}
|
${cfdi_totalenletras}
|
||||||
|
<!--
|
||||||
|
<div class="condiciones-pago">
|
||||||
|
${cfdi_condicionespago}
|
||||||
|
</div>
|
||||||
|
<div class="formapago-metodopago">
|
||||||
|
${cfdi_formapago}<BR>${cfdi_metodopago}
|
||||||
|
</div>
|
||||||
|
<div class="moneda-tipocambio">
|
||||||
|
${cfdi_moneda}, Tipo de Cambio: ${cfdi_tipocambio}
|
||||||
|
</div>
|
||||||
|
<div class="tiporelacion">
|
||||||
|
TIPO de ${cfdi_tiporelacion}
|
||||||
|
</div>
|
||||||
|
<div class="relacionados">
|
||||||
|
RELACIONADS${cfdi_relacionados}
|
||||||
|
NOFzxd
|
||||||
|
</div>
|
||||||
|
<div class="notas">
|
||||||
|
NOTAS ${cfdi_notas}
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div class="factura-info">
|
||||||
|
${cfdi_condicionespago}<BR>
|
||||||
|
${cfdi_formapago}<BR>
|
||||||
|
${cfdi_metodopago}<BR>
|
||||||
|
${cfdi_moneda}, Tipo de Cambio: ${cfdi_tipocambio}<BR>
|
||||||
|
${cfdi_tiporelacion}<BR>
|
||||||
|
${cfdi_relacionados}<BR>
|
||||||
|
${cfdi_notas}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<table class="subtotal">
|
<table class="subtotal">
|
||||||
% for total in totales:
|
% for total in totales:
|
||||||
|
@ -123,34 +153,18 @@
|
||||||
% endfor
|
% endfor
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<!--
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
<div class="condiciones-pago">
|
|
||||||
${cfdi_condicionespago}
|
|
||||||
</div>
|
|
||||||
<div class="notas">
|
|
||||||
${cfdi_notas}
|
|
||||||
</div>
|
|
||||||
<div class="formapago-metodopago">
|
|
||||||
${cfdi_formapago}<BR>${cfdi_metodopago}
|
|
||||||
</div>
|
|
||||||
<div class="moneda-tipocambio">
|
|
||||||
${cfdi_moneda}, Tipo de Cambio: ${cfdi_tipocambio}
|
|
||||||
</div>
|
|
||||||
<div class="tipocomite">
|
<div class="tipocomite">
|
||||||
{ine.tipocomite}
|
{ine.tipocomite}
|
||||||
</div>
|
</div>
|
||||||
<div class="tiporelacion">
|
|
||||||
{cfdi.tiporelacion}
|
|
||||||
</div>
|
|
||||||
<div class="tipoproceso">
|
<div class="tipoproceso">
|
||||||
{ine.tipoproceso}
|
{ine.tipoproceso}
|
||||||
</div>
|
</div>
|
||||||
<div class="relacionados">
|
|
||||||
{cfdi.relacionados}
|
|
||||||
</div>
|
|
||||||
<div class="idcontabilidad">
|
<div class="idcontabilidad">
|
||||||
{ine.idcontabilidad}
|
{ine.idcontabilidad}
|
||||||
</div>
|
</div>
|
||||||
|
-->
|
||||||
|
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
<div class="sello">
|
<div class="sello">
|
||||||
|
|
Loading…
Reference in New Issue