#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, 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_available = fields.Boolean("Equipments Availables", readonly=True) @classmethod def __setup__(cls): super(Purchase, cls).__setup__() cls._buttons.update({ 'create_equipments': { 'invisible': If(Bool(Eval('equipment_available')), 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, 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_available = 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") """ def default_origin_country(self): if self.product: return self.product.origin_country """ def on_change_product(self): if not self.product: self.product_equipment = False 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() self.product_equipment = True def default_address_equipment(): pool = Pool() Company = pool.get('company.company') company = Transaction().context.get('company') if company: company = Company(company) return company.party.addresses[0].id @classmethod def view_attributes(cls): return super(Line, cls).view_attributes() + [ ('//page[@id="equipment"]', 'states', { 'invisible': ~Eval('product_equipment', True), })]