se crea legal monetary total

FossilOrigin-Name: 8ae3dfadfe9b90b8cc5ad59d2a73f4c8a987c5aac498573e56754a2d32e9e2ae
This commit is contained in:
bit4bit
2021-06-27 02:16:16 +00:00
parent 2e8aa35b29
commit 507ddbe558
5 changed files with 94 additions and 12 deletions

View File

@@ -1,6 +1,8 @@
import facho.model as model
import facho.model.fields as fields
import facho.fe.form as form
from datetime import date, datetime
from copy import copy
class Name(model.Model):
__name__ = 'Name'
@@ -48,24 +50,44 @@ class AccountingSupplierParty(model.Model):
party = fields.Many2One(Party)
class InvoicedQuantity(model.Model):
__name__ = 'InvoiceQuantity'
class Quantity(model.Model):
__name__ = 'Quantity'
code = fields.Attribute('unitCode', default='NAR')
value = fields.Virtual(default=0, update_internal=True)
def __default_set__(self, value):
self.value = value
return value
def __mul__(self, other):
return form.Amount(self.value) * other.value
class Amount(model.Model):
__name__ = 'Amount'
currency = fields.Attribute('currencyID', default='COP')
value = fields.Virtual(default=form.Amount(0), update_internal=True)
def __default_set__(self, value):
self.value = value
return value
class Price(model.Model):
__name__ = 'Price'
amount = fields.Many2One(Amount, name='PriceAmount')
value = fields.Virtual(default=form.Amount(0))
def __default_set__(self, value):
self.amount = value
self.value = value
return value
def __mul__(self, other):
return self.value * other.value
class Percent(model.Model):
__name__ = 'Percent'
@@ -102,13 +124,52 @@ class TaxTotal(model.Model):
tax_amount = fields.Many2One(Amount, name='TaxAmount')
subtotals = fields.One2Many(TaxSubTotal)
class AllowanceCharge(model.Model):
__name__ = 'AllowanceCharge'
amount = fields.Many2One(Amount)
is_discount = fields.Virtual(default=False)
def isCharge(self):
return self.is_discount == False
def isDiscount(self):
return self.is_discount == True
class InvoiceLine(model.Model):
__name__ = 'InvoiceLine'
quantity = fields.Many2One(InvoicedQuantity)
quantity = fields.Many2One(Quantity, name='InvoicedQuantity')
taxtotal = fields.Many2One(TaxTotal)
price = fields.Many2One(Price)
amount = fields.Many2One(Amount, name='LineExtensionAmount')
allowance_charge = fields.One2Many(AllowanceCharge)
@fields.on_change(['price', 'quantity'])
def update_amount(self, name, value):
charge = form.AmountCollection(self.allowance_charge)\
.filter(lambda charge: charge.isCharge())\
.map(lambda charge: charge.amount)\
.sum()
discount = form.AmountCollection(self.allowance_charge)\
.filter(lambda charge: charge.isDiscount())\
.map(lambda charge: charge.amount)\
.sum()
total = self.quantity * self.price
self.amount = total + charge - discount
class LegalMonetaryTotal(model.Model):
__name__ = 'LegalMonetaryTotal'
line_extension_amount = fields.Many2One(Amount, name='LineExtensionAmount', default=form.Amount(0))
tax_exclusive_amount = fields.Many2One(Amount, name='TaxExclusiveAmount')
tax_inclusive_amount = fields.Many2One(Amount, name='TaxInclusiveAmount')
charge_total_amount = fields.Many2One(Amount, name='ChargeTotalAmount')
payable_amount = fields.Many2One(Amount, name='PayableAmount')
class Invoice(model.Model):
__name__ = 'Invoice'
@@ -123,7 +184,13 @@ class Invoice(model.Model):
supplier = fields.Many2One(AccountingSupplierParty)
customer = fields.Many2One(AccountingCustomerParty)
lines = fields.One2Many(InvoiceLine)
legal_monetary_total = fields.Many2One(LegalMonetaryTotal)
@fields.on_change(['lines'])
def update_legal_monetary_total(self, name, value):
for line in self.lines:
self.legal_monetary_total.line_extension_amount.value += line.amount.value
def set_issue(self, name, value):
if not isinstance(value, datetime):
raise ValueError('expected type datetime')