se crea legal monetary total
FossilOrigin-Name: 8ae3dfadfe9b90b8cc5ad59d2a73f4c8a987c5aac498573e56754a2d32e9e2ae
This commit is contained in:
		| @@ -99,7 +99,7 @@ class Amount: | ||||
|             return self.fromNumber(val) | ||||
|         if isinstance(val, Amount): | ||||
|             return val | ||||
|         raise TypeError("cant cast to amount") | ||||
|         raise TypeError("cant cast %s to amount" % (type(val))) | ||||
|      | ||||
|     def __add__(self, rother): | ||||
|         other = self._cast(rother) | ||||
|   | ||||
| @@ -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') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user