From 209a2083b335dbd9c22c01ee3221b29ad6741cfd Mon Sep 17 00:00:00 2001 From: sinergia Date: Mon, 18 Jul 2022 23:19:17 -0500 Subject: [PATCH] correction to bugs and add complete behaviors --- __init__.py | 2 +- equipment.py | 114 ++++++++++++++++++++++---------- exceptions.py | 4 ++ message.xml | 3 + purchase.py | 12 ++-- sale.py | 8 ++- view/optical_equipment_form.xml | 4 +- view/purchase_line_form.xml | 6 ++ 8 files changed, 109 insertions(+), 44 deletions(-) diff --git a/__init__.py b/__init__.py index 5ffbd9e..e78d257 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,6 @@ from trytond.pool import Pool from . import (address, diary, party, product, purchase, sale, - equipment, configuration_equipment, maintenance, subscription) + equipment, configuration_equipment, maintenance, subscription, exceptions) def register(): Pool.register( diff --git a/equipment.py b/equipment.py index 404ed92..7006231 100644 --- a/equipment.py +++ b/equipment.py @@ -4,6 +4,8 @@ from trytond.model import ( Workflow, ModelSQL, ModelView, Unique, fields) from trytond.pyson import Eval, If from trytond.transaction import Transaction +from trytond.i18n import gettext +#from .exceptions import NotSequenceEquipment from trytond.exceptions import UserError class OpticalEquipment(Workflow, ModelSQL, ModelView): @@ -22,43 +24,60 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView): required=True, readonly=True, sort=False) company = fields.Many2One('company.company', "Company", readonly=True) - location = fields.Many2One('stock.location', "Location") - propietary = fields.Many2One('party.party', "Propietary") + location = fields.Many2One('stock.location', "Location", + states={'readonly': Eval('state') != 'draft',},) + propietary = fields.Many2One('party.party', "Propietary", + states={'readonly': Eval('state') != 'draft',},) propietary_address = fields.Many2One('party.address', "Propietary Address", required=True, - domain=[('party', '=', Eval('propietary'))] + domain=[('party', '=', Eval('propietary'))], + states={'readonly': Eval('state') != 'draft',} ) product = fields.Many2One('product.product', "Product", domain=[('equipment', '=', True)], + states={'readonly': Eval('state') != 'draft',}, depends=['equipment'] ) - refurbish = fields.Boolean("Refurbish", readonly=True) + refurbish = fields.Boolean("Refurbish", + states={'readonly': Eval('state') != 'draft',},) equipment_type = fields.Char('type', readonly=True) - risk = fields.Char('Type risk') - use = fields.Char('Use') - biomedical_class = fields.Char('Biomedical Class') - main_tecnology = fields.Char('Main tecnology') + risk = fields.Char('Type risk',readonly=True) + use = fields.Char('Use', readonly=True) + biomedical_class = fields.Char('Biomedical Class', readonly=True) + main_tecnology = fields.Char('Main tecnology', readonly=True) calibration = fields.Boolean("Apply calibration", readonly=True) mark_category = fields.Many2One('product.category', 'Mark', required=True, domain=[('parent', '=', None), ('accounting', '=', False)], + states={'readonly': Eval('state') != 'draft',} ) model_category = fields.Many2One('product.category', "Model", required=True, domain=[('parent', '=', Eval('mark_category')), - ('accounting', '=', False)],) - reference = fields.Char("Reference", size=None) - origin_country = fields.Many2One('country.country',"Origin Country") - software_version = fields.Char("Software version", size=None) - useful_life = fields.Integer("Useful life") - warranty = fields.Integer("Warranty") - serial = fields.Char("Serial", size=None) - health_register = fields.Char("Health Register", size=None) + ('accounting', '=', False)], + states={'readonly': Eval('state') != 'draft',},) + reference_category = fields.Many2One('product.category', "Reference", + domain=[('parent', '=', Eval('model_category'))], + states={'readonly': Eval('state') != 'draft',}, + depends=['model_category'] + ) + origin_country = fields.Many2One('country.country',"Origin Country", + states={'readonly': Eval('state') != 'draft',},) + software_version = fields.Char("Software version", size=None, + states={'readonly': Eval('state') != 'draft',},) + useful_life = fields.Integer("Useful life", + states={'readonly': Eval('state') != 'draft',},) + warranty = fields.Integer("Warranty", + states={'readonly': Eval('state') != 'draft',},) + serial = fields.Char("Serial", size=None, + states={'readonly': Eval('state') != 'draft',},) + health_register = fields.Char("Health Register", size=None, + states={'readonly': Eval('state') != 'draft',},) subscription_history = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'equipment','subscription', "Subscriptions", - states={'readonly': True}) - - current_subscription = fields.Many2One('sale.subscription') - software_version = fields.Char("Software version", size=None) + states={'readonly': True} + ) + software_version = fields.Char("Software version", size=None, + states={'readonly': Eval('state') != 'draft',},) @classmethod @@ -67,7 +86,9 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView): t = cls.__table__() cls._sql_constraints = [ ('serial_unique', Unique(t, t.serial), - 'optical_equipment.msg_serial_unique') + 'optical_equipment.msg_serial_unique'), + ('code_unique', Unique(t, t.code), + 'optical_equipment.msg_code_unique') ] cls._transitions = ({ ('draft', 'registred'), @@ -86,13 +107,16 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView): Config = pool.get('optical_equipment.configuration') config = Config(1) for equipment in equipments: - if not equipment.code: + if config.equipment_sequence != None and not equipment.code: + #if not equipment.code: try: equipment.code = config.equipment_sequence.get() equipment.state = 'registred' cls.save(equipments) #Revisar except UserError: raise UserError(str('Validation Error')) + else: + raise UserError(gettext('optical_equipment.msg_not_sequence_equipment')) @classmethod def default_state(cls): @@ -107,20 +131,40 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView): 'mark_category', 'model_category') def on_change_product(self): if self.product: - self.equipment_type = self.product.equipment_type - self.use = self.product.use - self.biomedical_class = self.product.biomedical_class - self.calibration = self.product.calibration - self.mark_category = self.product.mark_category - self.model_category = self.product.model_category + self.equipment_type=self.product.equipment_type + self.use=self.product.use + self.biomedical_class=self.product.biomedical_class + self.calibration=self.product.calibration + self.mark_category=self.product.mark_category + self.model_category=self.product.model_category + self.reference_category=self.product.reference_category + self.useful_life=self.product.useful_life if self.product.useful_life else int(0) + self.calibration=True if self.product.calibration else False + self.warranty=self.product.warranty if self.product.warranty else int(0) + self.risk=self.product.risk + self.origin_country=self.product.origin_country + self.use=self.product.use + self.biomedical_class=self.product.biomedical_class else: - self.equipment_type = None - self.use = None - self.biomedical_class = None - self.calibration = None - self.mark_category = None - self.model_category = None - + self.equipment_type=None + self.use=None + self.biomedical_class=None + self.calibration=None + self.mark_category=None + self.model_category=None + self.reference_category=None + self.useful_life=None + self.calibration=False + self.warranty=None + self.risk=None + self.origin_country=None + self.use=None + self.biomedical_class=None + self.refurbish=None + self.serial=None + self.health_register=None + self.software_version=None + @classmethod @ModelView.button @Workflow.transition('draft') diff --git a/exceptions.py b/exceptions.py index d9e6dad..e250476 100644 --- a/exceptions.py +++ b/exceptions.py @@ -2,6 +2,10 @@ # this repository contains the full copyright notices and license terms. from trytond.exceptions import UserError +from trytond.model.exceptions import ValidationError class InvalidNumberPurchases(UserError): pass + +class NotSequenceEquipment(ValidationError): + pass diff --git a/message.xml b/message.xml index d333f80..f60b522 100644 --- a/message.xml +++ b/message.xml @@ -11,5 +11,8 @@ this repository contains the full copyright notices and license terms. --> The serial number of equipment, should be unique. + + You do not have a sequence assigned for equipments + diff --git a/purchase.py b/purchase.py index 186bbcc..33e2374 100644 --- a/purchase.py +++ b/purchase.py @@ -43,16 +43,18 @@ class Purchase(metaclass=PoolMeta): 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, + reference_category=line.product.reference_category, + useful_life=line.product.useful_life if line.product.useful_life else 0, + calibration=True if line.product.calibration else False, + warranty=line.product.warranty if line.product.warranty else 0, 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) + health_register=line.health_register, + software_version=line.software_version) equipment.save() else: continue @@ -72,6 +74,8 @@ class Line(metaclass=PoolMeta): refurbish = fields.Boolean("Refurbish") product_equipment = fields.Boolean("Product Equipment", states={'readonly': True}) + software_version = fields.Char("Software version") + health_register = fields.Char("Registro Medico") @classmethod def default_address_equipment(cls): diff --git a/sale.py b/sale.py index 1224557..134f1ab 100644 --- a/sale.py +++ b/sale.py @@ -6,6 +6,7 @@ from decimal import Decimal from trytond.modules.product import price_digits from trytond.transaction import Transaction from trytond.exceptions import UserError +#from collections import setdefault from trytond.wizard import ( Button, StateAction, StateTransition, StateView, Wizard) @@ -51,9 +52,12 @@ class CreateSubscription(Wizard): ]) create_subscription = StateAction('sale_subscription.act_subscription_form') + done_ = StateView('sale.create.subscription.start', + 'optical_equipment.create_subscription_view_form',[ + Button('Done', 'end', 'tryton-cancel'), + ]) @property def _subscription_start(self): - subscription_lines = [] return dict(start_date=self.start.start_date, end_date=self.start.end_date, invoice_recurrence=self.start.invoice_recurrence, @@ -105,7 +109,7 @@ class CreateSubscription(Wizard): ) subscription.save() - + return 'done_' class SaleLine(metaclass=PoolMeta): 'SaleLine' diff --git a/view/optical_equipment_form.xml b/view/optical_equipment_form.xml index 3648c1e..fc82100 100644 --- a/view/optical_equipment_form.xml +++ b/view/optical_equipment_form.xml @@ -27,6 +27,8 @@