diff --git a/exceptions.py b/exceptions.py new file mode 100644 index 0000000..d9e6dad --- /dev/null +++ b/exceptions.py @@ -0,0 +1,7 @@ +# This file is part of Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.exceptions import UserError + +class InvalidNumberPurchases(UserError): + pass diff --git a/message.xml b/message.xml new file mode 100644 index 0000000..b7d0dbf --- /dev/null +++ b/message.xml @@ -0,0 +1,12 @@ + + + + + + + + Please, select only one purchase. + + + diff --git a/product.py b/product.py index 8012d5f..d23389d 100644 --- a/product.py +++ b/product.py @@ -57,7 +57,7 @@ class Template(metaclass=PoolMeta): useful_life = fields.Char( "Useful life", size=None) warranty = fields.Char( - "Warranty", size=None) + "Warranty") serial = fields.Char( "Serial", size=None) health_register = fields.Char( diff --git a/purchase.py b/purchase.py index 68efbb7..d75e41e 100644 --- a/purchase.py +++ b/purchase.py @@ -2,11 +2,60 @@ #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 from trytond.exceptions import UserError +from trytond.i18n import gettext +from .exceptions import ( + InvalidNumberPurchases) 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': Eval('equipment_avalaible')}, + }) + + + @classmethod + @ModelView.button + def create_equipments(cls, purchases): + if len(purchases) > 1: + raise InvalidNumberPurchases( + gettext('purchase.msg_invalid_number_purchases')) + else: + pool = Pool() + Equipment = pool.get('optical_equipment.equipment') + Line = pool.get('purchase.line') + lines = [] + purchase = purchases[0] + + for line in purchase.lines: + equipment = Equipment( + company=line.company, + equipment_type=line.product.equipment_type, + party_address=line.address_equipment, + product=line.product, + risk=line.product.risk, + use=line.product.use, + biomedical_class=line.product.biomedical_class, + calibration=line.product.calibration, + refurbish=line.refurbish, + serial=line.serial_equipment, + software_version=line.product.software_version) + + equipment.save() + purchase.equipment_available = True + cls.save(purchases) + + + + """ @classmethod @ModelView.button def process(cls, purchases): @@ -18,7 +67,7 @@ class Purchase(metaclass=PoolMeta): process, done = [], [] cls.lock(purchases) for purchase in purchases: - """if purchase.state not in {'confirmed', 'processing', 'done'}: + if purchase.state not in {'confirmed', 'processing', 'done'}: continue purchase.create_invoice() purchase.set_invoice_state() @@ -27,7 +76,6 @@ class Purchase(metaclass=PoolMeta): if return_moves: purchase.create_return_shipment(return_moves) purchase.set_shipment_state() - """ #raise UserError(str(dir(purchase))) #equipment = Equipment() for line in purchase.lines: @@ -47,7 +95,7 @@ class Purchase(metaclass=PoolMeta): ) equipment.save() #raise UserError(str([equipment.serial, equipment.software_version])) - """ line.set_actual_quantity() + line.set_actual_quantity() lines.append(line) if purchase.is_done(): @@ -61,7 +109,8 @@ class Purchase(metaclass=PoolMeta): if process: cls.proceed(process) if done: - cls.do(done)""" + cls.do(done) + """ class Line(metaclass=PoolMeta): __name__ = 'purchase.line' diff --git a/purchase.xml b/purchase.xml index 88f41a7..dcbaaff 100644 --- a/purchase.xml +++ b/purchase.xml @@ -8,5 +8,15 @@ this repository contains the full copyright notices and license terms. --> purchase_line_form + + purchase.purchase + + purchase_form + + + create_equipments + Create Equipments + + diff --git a/view/purchase_form.xml b/view/purchase_form.xml new file mode 100644 index 0000000..d2adb11 --- /dev/null +++ b/view/purchase_form.xml @@ -0,0 +1,10 @@ + + + + + +