trytondo-account_invoice_facho/invoice.py

71 lines
2.4 KiB
Python

from trytond.model import fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.rpc import RPC
from trytond.exceptions import UserError
from facho.fe import form
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
_states = {'invisible': ~Eval('is_fe_colombia', False),
'required': Eval('is_fe_colombia', False)}
_depends = ['is_fe_colombia']
is_fe_colombia = fields.Boolean('FE Colombia?',
states={'invisible': False})
del _states
del _depends
@staticmethod
def default_is_fe_colombia():
return Transaction().context.get('is_fe_colombia', False)
@classmethod
def validate(cls, invoices):
super().validate(invoices)
for invoice in invoices:
for line in invoice.lines:
tax_subtotals = []
for taxes, unit_price, quantity in line.taxable_lines:
for tax in taxes:
if tax.type != 'percentage':
raise UserError('Solo se soporta impuesto tipo porcentaje para producto')
facho_invoice = invoice.tofacho()
validator = form.DianResolucion0001Validator()
validator.validate(facho_invoice)
for (model, field, error) in validator.errors:
raise UserError('model %s in field %s has %s' % (model, field, error))
def tofacho(self):
inv = form.Invoice()
inv.set_period(self.invoice_date, self.invoice_date)
inv.set_issue(self.invoice_date)
inv.set_ident(self.number)
inv.set_customer(self.party.tofacho())
inv.set_supplier(self.company.party.tofacho())
for line in self.lines:
tax_subtotals = []
for taxes, unit_price, quantity in line.taxable_lines:
for tax in taxes:
tax_subtotals.append(form.TaxSubTotal(
percent = tax.rate
))
inv.add_invoice_line(form.InvoiceLine(
quantity = line.quantity,
description = line.description,
price_amount = float(line.unit_price),
item_ident = line.product.code,
tax = form.TaxTotal(
subtotals = tax_subtotals
)
))
inv.calculate()
return inv