132 lines
3.3 KiB
Python
132 lines
3.3 KiB
Python
import facho.model as model
|
|
import facho.model.fields as fields
|
|
from datetime import date, datetime
|
|
|
|
class Name(model.Model):
|
|
__name__ = 'Name'
|
|
|
|
class Date(model.Model):
|
|
__name__ = 'Date'
|
|
|
|
def __default_set__(self, value):
|
|
if isinstance(value, str):
|
|
return value
|
|
if isinstance(value, date):
|
|
return value.isoformat()
|
|
|
|
class Time(model.Model):
|
|
__name__ = 'Time'
|
|
|
|
def __default_set__(self, value):
|
|
if isinstance(value, str):
|
|
return value
|
|
if isinstance(value, date):
|
|
return value.strftime('%H:%M%S-05:00')
|
|
|
|
class InvoicePeriod(model.Model):
|
|
__name__ = 'InvoicePeriod'
|
|
|
|
start_date = fields.Many2One(Date, name='StartDate')
|
|
|
|
end_date = fields.Many2One(Date, name='EndDate')
|
|
|
|
class ID(model.Model):
|
|
__name__ = 'ID'
|
|
|
|
class Party(model.Model):
|
|
__name__ = 'Party'
|
|
|
|
id = fields.Many2One(ID)
|
|
|
|
class AccountingCustomerParty(model.Model):
|
|
__name__ = 'AccountingCustomerParty'
|
|
|
|
party = fields.Many2One(Party)
|
|
|
|
class AccountingSupplierParty(model.Model):
|
|
__name__ = 'AccountingSupplierParty'
|
|
|
|
party = fields.Many2One(Party)
|
|
|
|
class InvoicedQuantity(model.Model):
|
|
__name__ = 'InvoiceQuantity'
|
|
|
|
code = fields.Attribute('unitCode', default='NAR')
|
|
|
|
|
|
class Amount(model.Model):
|
|
__name__ = 'Amount'
|
|
|
|
currency = fields.Attribute('currencyID', default='COP')
|
|
|
|
class Price(model.Model):
|
|
__name__ = 'Price'
|
|
|
|
amount = fields.Many2One(Amount, name='PriceAmount')
|
|
|
|
def __default_set__(self, value):
|
|
self.amount = value
|
|
|
|
class Percent(model.Model):
|
|
__name__ = 'Percent'
|
|
|
|
class TaxScheme(model.Model):
|
|
__name__ = 'TaxScheme'
|
|
|
|
id = fields.Many2One(ID)
|
|
name= fields.Many2One(Name)
|
|
|
|
class TaxCategory(model.Model):
|
|
__name__ = 'TaxCategory'
|
|
|
|
percent = fields.Many2One(Percent, default='19.0')
|
|
tax_scheme = fields.Many2One(TaxScheme)
|
|
|
|
class TaxSubTotal(model.Model):
|
|
__name__ = 'TaxSubTotal'
|
|
|
|
taxable_amount = fields.Many2One(Amount, name='TaxableAmount')
|
|
tax_amount = fields.Many2One(Amount, name='TaxAmount')
|
|
tax_category = fields.Many2One(TaxCategory)
|
|
|
|
percent = fields.Virtual(setter='set_percent')
|
|
|
|
def set_percent(self, name, value):
|
|
self.tax_category.percent = value
|
|
# TODO(bit4bit) hacer variable
|
|
self.tax_category.tax_scheme.id = '01'
|
|
self.tax_category.tax_scheme.name = 'IVA'
|
|
|
|
class TaxTotal(model.Model):
|
|
__name__ = 'TaxTotal'
|
|
|
|
tax_amount = fields.Many2One(Amount, name='TaxAmount')
|
|
subtotals = fields.One2Many(TaxSubTotal)
|
|
|
|
class InvoiceLine(model.Model):
|
|
__name__ = 'InvoiceLine'
|
|
|
|
quantity = fields.Many2One(InvoicedQuantity)
|
|
taxtotal = fields.Many2One(TaxTotal)
|
|
price = fields.Many2One(Price)
|
|
|
|
class Invoice(model.Model):
|
|
__name__ = 'Invoice'
|
|
|
|
id = fields.Many2One(ID)
|
|
issue = fields.Virtual(setter='set_issue')
|
|
issue_date = fields.Many2One(Date, name='IssueDate')
|
|
issue_time = fields.Many2One(Time, name='IssueTime')
|
|
|
|
period = fields.Many2One(InvoicePeriod)
|
|
|
|
supplier = fields.Many2One(AccountingSupplierParty)
|
|
customer = fields.Many2One(AccountingCustomerParty)
|
|
lines = fields.One2Many(InvoiceLine)
|
|
|
|
def set_issue(self, name, value):
|
|
if not isinstance(value, datetime):
|
|
raise ValueError('expected type datetime')
|
|
self.issue_date = value
|
|
self.issue_time = value
|