#This file is part of Tryton. The COPYRIGHT file at the top level of #txhis repository contains the full copyright notices and license terms from trytond.pool import Pool, PoolMeta from trytond.model import ( ModelView, ModelSQL, Workflow, fields) from trytond.pyson import Eval, If, Bool from trytond.exceptions import UserError from trytond.i18n import gettext from .exceptions import ( InvalidNumberPurchases) from trytond.transaction import Transaction class Purchase(metaclass=PoolMeta): __name__ = 'purchase.purchase' equipment_create = fields.Boolean("Equipments Creates", readonly=True) @classmethod def __setup__(cls): super(Purchase, cls).__setup__() cls._buttons.update({ 'create_equipments': { 'invisible': If(Bool(Eval('equipment_create')), True)}, }) @classmethod @ModelView.button def create_equipments(cls, purchases): if len(purchases) == 1: pool = Pool() Equipment = pool.get('optical_equipment.equipment') purchase = purchases[0] for line in purchase.lines: if line.product.equipment: equipment = Equipment( company=line.company, location=line.to_location, equipment_type=line.product.equipment_type, propietary=line.company.party, propietary_address=line.address_equipment, product=line.product, model_category=line.product.model_category, mark_category=line.product.mark_category, useful_life=line.product.useful_life, calibration=line.product.calibration, warranty=line.product.warranty, risk=line.product.risk, origin_country=line.product.origin_country, use=line.product.use, biomedical_class=line.product.biomedical_class, refurbish=line.refurbish, serial=line.serial_equipment, software_version=line.product.software_version) equipment.save() else: continue purchase.equipment_create = True cls.save(purchases) else: raise InvalidNumberPurchases( gettext('purchase.msg_invalid_number_purchases')) class Line(metaclass=PoolMeta): __name__ = 'purchase.line' origin_country = origin_country = fields.Many2One('country.country',"Origin Country") address_equipment = fields.Many2One('party.address', "Direccion", required=True) serial_equipment = fields.Char("Serial", size=None, required=True) refurbish = fields.Boolean("Refurbish") product_equipment = fields.Boolean("Product Equipment", states={'readonly': True}) @classmethod def default_address_equipment(cls): pool = Pool() Company = pool.get('company.company') company = Transaction().context.get('company') if company: company = Company(company) return company.party.addresses[0].id def on_change_product(self): if not self.product: self.product_equipment = False self.address_equipment = None self.serial_equipment = None self.refurbish = None return party = None if self.purchase: party = self.purchase.invoice_party or self.purchase.party # Set taxes before unit_price to have taxes in context of purchase # price self.taxes = self.compute_taxes(party) category = self.product.purchase_uom.category if not self.unit or self.unit.category != category: self.unit = self.product.purchase_uom product_suppliers = list(self.product.product_suppliers_used( **self._get_product_supplier_pattern())) if len(product_suppliers) == 1: self.product_supplier, = product_suppliers elif (self.product_supplier and self.product_supplier not in product_suppliers): self.product_supplier = None self.unit_price = self.compute_unit_price() self.type = 'line' self.amount = self.on_change_with_amount() if self.product.equipment: self.product_equipment = True self.address_equipment = self.default_address_equipment() @classmethod def view_attributes(cls): return super(Line, cls).view_attributes() + [ ('//page[@id="equipment"]', 'states', { 'invisible': ~Eval('product_equipment', True), })]