# -*- coding: utf-8 -*- # This file is part of the investment-module from m-ds for Tryton. # The COPYRIGHT file at the top level of this repository contains the # full copyright notices and license terms. from trytond.model import ModelView, ModelSQL, fields from trytond.exceptions import UserError from trytond.i18n import gettext from trytond.transaction import Transaction from trytond.pool import Pool from trytond.pyson import Eval, Bool class Asset(ModelSQL, ModelView): 'Asset' __name__ = 'investment.asset' company = fields.Many2One(string='Company', model_name='company.company', required=True, ondelete="RESTRICT") product = fields.Many2One(string='Product', required=True, model_name='product.product', ondelete='RESTRICT', domain=[('type', '=', 'assets')]) product_uom = fields.Function(fields.Many2One(string='UOM Category', readonly=True, model_name='product.uom.category', help='Category of unit on the product.'), 'on_change_with_product_uom') uom = fields.Many2One(string='UOM', required=True, model_name='product.uom', ondelete='RESTRICT', states={ 'readonly': ~Bool(Eval('product')), }, domain=[ ('category', '=', Eval('product_uom')), ], depends=['product_uom', 'product']) company_currency = fields.Function(fields.Many2One(readonly=True, string='Company Currency', states={'invisible': True}, model_name='currency.currency'), 'on_change_with_company_currency') company_currency_digits = fields.Function(fields.Integer( string='Currency Digits (Ref.)', readonly=True), 'on_change_with_currency_digits') currency = fields.Many2One(string='Currency', select=True, required=True, model_name='currency.currency', ondelete='RESTRICT') currency_digits = fields.Integer(string='Currency Digits', required=True) @classmethod def default_currency(cls): """ currency of company """ Company = Pool().get('company.company') company = cls.default_company() if company: company = Company(company) if company.currency: return company.currency.id @staticmethod def default_company(): return Transaction().context.get('company') or None @classmethod def default_currency_digits(cls): """ default: 2 """ return 2 @fields.depends('product', 'uom') def on_change_product(self): """ update unit by product """ if self.product: self.uom = self.product.default_uom return self.uom = None @fields.depends('currency', 'currency_digits') def on_change_currency(self): """ update currency_digits by value on currency """ if self.currency: self.currency_digits = self.currency.digits @fields.depends('product') def on_change_with_product_uom(self, name=None): """ get category of product-uom """ if self.product: return self.product.default_uom.category.id @fields.depends('currency') def on_change_with_currency_digits(self, name=None): """ currency of cashbook """ if self.currency: return self.currency.digits else: return 2 @fields.depends('company', 'currency') def on_change_with_company_currency(self, name=None): """ get company-currency if its different from current asset-currency """ if self.company: if self.currency: if self.company.currency.id != self.currency.id: return self.company.currency.id def get_rec_name(self, name): if self.product: return self.product.rec_name else: return self.id @classmethod def search_rec_name(cls, name, clause): """ search in rec_name """ return [('product.rec_name',) + tuple(clause[1:])] # end Asset