Corregir error al generar factura del día por ticket

This commit is contained in:
El Mau 2021-12-10 14:11:54 -06:00
parent ef2314880f
commit db77f6972d
1 changed files with 42 additions and 20 deletions

View File

@ -5461,7 +5461,6 @@ class Facturas(BaseModel):
retenciones = [] retenciones = []
if invoice.tipo_comprobante != 'T': if invoice.tipo_comprobante != 'T':
if is_global: if is_global:
ticket = (Tickets ticket = (Tickets
.get(fn.Concat(Tickets.serie, Tickets.folio)==row.clave) .get(fn.Concat(Tickets.serie, Tickets.folio)==row.clave)
@ -5474,9 +5473,11 @@ class Facturas(BaseModel):
product_taxes = row.producto.impuestos product_taxes = row.producto.impuestos
for impuesto in product_taxes: for impuesto in product_taxes:
if is_global:
impuesto = impuesto.impuesto
base = float(row.importe - row.descuento) base = float(row.importe - row.descuento)
if is_global:
base = float(impuesto.base)
impuesto = impuesto.impuesto
if impuesto.tipo == 'E': if impuesto.tipo == 'E':
tax = { tax = {
'Base': FORMAT.format(base), 'Base': FORMAT.format(base),
@ -5518,6 +5519,7 @@ class Facturas(BaseModel):
taxes['traslados'] = traslados taxes['traslados'] = traslados
if retenciones: if retenciones:
taxes['retenciones'] = retenciones taxes['retenciones'] = retenciones
concepto['impuestos'] = taxes concepto['impuestos'] = taxes
conceptos.append(concepto) conceptos.append(concepto)
@ -5612,6 +5614,7 @@ class Facturas(BaseModel):
'edu': is_edu, 'edu': is_edu,
'complementos': complementos, 'complementos': complementos,
} }
return utils.make_xml(data, certificado) return utils.make_xml(data, certificado)
@classmethod @classmethod
@ -7898,6 +7901,8 @@ class Tickets(BaseModel):
rows = Tickets.select().where(Tickets.id.in_(ids)) rows = Tickets.select().where(Tickets.id.in_(ids))
tax_sum = {}
for row in rows: for row in rows:
details = DEFAULT_GLOBAL.copy() details = DEFAULT_GLOBAL.copy()
details['clave'] = row.serie + str(row.folio) details['clave'] = row.serie + str(row.folio)
@ -7918,28 +7923,44 @@ class Tickets(BaseModel):
FacturasDetalle.create(**details) FacturasDetalle.create(**details)
rows = (TicketsImpuestos taxes = (TicketsImpuestos
.select( .select(
TicketsImpuestos.impuesto, TicketsImpuestos.impuesto,
fn.Sum(TicketsImpuestos.base), TicketsImpuestos.base,
fn.Sum(TicketsImpuestos.importe)) TicketsImpuestos.importe)
.where(TicketsImpuestos.ticket.in_(ids)) .where(TicketsImpuestos.ticket == row.id)
.group_by(TicketsImpuestos.impuesto) )
.order_by(TicketsImpuestos.impuesto)
) for r in taxes:
for tax in rows: tax_id = r.impuesto.id
tasa = r.impuesto.tasa
tax_importe = round(tasa * r.base, DECIMALES)
if tax_id in tax_sum:
tax_sum[tax_id]['base'] += r.base
tax_sum[tax_id]['importe'] += tax_importe
else:
values = {
'tipo': r.impuesto.tipo,
'key': r.impuesto.key,
'base': r.base,
'importe': tax_importe}
tax_sum[tax_id] = values
for i, tax in tax_sum.items():
tax_importe = round(tax['importe'], DECIMALES)
invoice_tax = { invoice_tax = {
'factura': invoice.id, 'factura': invoice.id,
'impuesto': tax.impuesto.id, 'impuesto': i,
'base': tax.base, 'base': tax['base'],
'importe': tax.importe, 'importe': tax_importe
} }
FacturasImpuestos.create(**invoice_tax) FacturasImpuestos.create(**invoice_tax)
if tax.impuesto.tipo == 'T' and tax.impuesto.key != '000': if tax['tipo'] == 'T' and tax['key'] != '000':
total_trasladados = (total_trasladados or 0) + tax.importe total_trasladados = (total_trasladados or 0) + tax_importe
elif tax.impuesto.tipo == 'R' and tax.impuesto.key != '000': elif tax['tipo'] == 'R' and tax['key'] != '000':
total_retenciones = (total_retenciones or 0) + tax.importe total_retenciones = (total_retenciones or 0) + tax_importe
total = subtotal - descuento_cfdi + \ total = subtotal - descuento_cfdi + \
(total_trasladados or 0) - (total_retenciones or 0) (total_trasladados or 0) - (total_retenciones or 0)
@ -7955,6 +7976,7 @@ class Tickets(BaseModel):
'total_retenciones': total_retenciones, 'total_retenciones': total_retenciones,
'notas': notes, 'notas': notes,
} }
return data return data
@classmethod @classmethod