Hay un error en los calculos de base de impuestos, este error se da cuando en la factura tengo:
Primera linea con impuesto de IVA incluido en el precio
La ultima linea con impuesto Exento.
El orden de las lineas es importante, ya que solo se da cuando la linea con impuesto exenta es la ultima en ingresarse y la linea con IVA incluido es la primera.
El error esta en esta funcion, consideraria que es mas bien un error en la identacion del codigo, pero es un error logico muy grave.
La funcion esta asi:
def _compute_base_amount(self):
included = False
for tax in self:
if tax.tax_id.price_include:
included = True
if included:
neto = self._getNeto()
tax.base = neto
else:
super(AccountInvoiceTax, self)._compute_base_amount()
Cuando hay dos impuestos como planteo arriba en el ejemplo, el for itera dos veces, guardando en la variable tax el ultimo impuesto(aca seria el exento).
Primer error, acceder a la variable tax fuera del scope del for
Segundo error, fuera del for asignar a la variable tax.base el valor de self._getNeto(), por que es error aca......., simple, la varaible tax tiene el ultimo impuesto(exento), pero al llamar a la funcion _getNeto con self, se esta llamando con los dos impuestos, entonces asigno en el ultimo impuesto la base de todos los recordset en self.
La funcion correcta deberia ser
def _compute_base_amount(self):
for tax in self:
if tax.tax_id.price_include:
tax.base = tax._getNeto()
else:
super(AccountInvoiceTax, tax)._compute_base_amount()
Asi en cada iteracion de cada impuesto calculo la base correcta para cada impuesto, no al final.
Hay un error en los calculos de base de impuestos, este error se da cuando en la factura tengo: Primera linea con impuesto de IVA incluido en el precio La ultima linea con impuesto Exento. El orden de las lineas es importante, ya que solo se da cuando la linea con impuesto exenta es la ultima en ingresarse y la linea con IVA incluido es la primera.
El error esta en esta funcion, consideraria que es mas bien un error en la identacion del codigo, pero es un error logico muy grave.
La funcion esta asi: def _compute_base_amount(self): included = False for tax in self: if tax.tax_id.price_include: included = True if included: neto = self._getNeto() tax.base = neto else: super(AccountInvoiceTax, self)._compute_base_amount()
Cuando hay dos impuestos como planteo arriba en el ejemplo, el for itera dos veces, guardando en la variable tax el ultimo impuesto(aca seria el exento). Primer error, acceder a la variable tax fuera del scope del for Segundo error, fuera del for asignar a la variable tax.base el valor de self._getNeto(), por que es error aca......., simple, la varaible tax tiene el ultimo impuesto(exento), pero al llamar a la funcion _getNeto con self, se esta llamando con los dos impuestos, entonces asigno en el ultimo impuesto la base de todos los recordset en self. La funcion correcta deberia ser def _compute_base_amount(self): for tax in self: if tax.tax_id.price_include: tax.base = tax._getNeto() else: super(AccountInvoiceTax, tax)._compute_base_amount()
Asi en cada iteracion de cada impuesto calculo la base correcta para cada impuesto, no al final.