From 01f3e58c7e960d39c6286848bb98f87c8f5e6bf9 Mon Sep 17 00:00:00 2001 From: sinergia Date: Mon, 10 Oct 2022 18:49:56 -0500 Subject: [PATCH] changes finished --- contract.py | 30 +++++++++++++++++++--- maintenance.py | 44 ++++++++++++++++++++++----------- maintenance.xml | 7 +++++- sale.py | 34 ++++++++++++++++++++----- view/contract_form.xml | 6 ++++- view/maintenance_line_form.xml | 22 +++++++++++++++++ view/maintenance_line_tree.xml | 10 ++++++++ view/sale_form.xml | 6 +++-- view/vmaintenance_line_form.xml | 22 +++++++++++++++++ 9 files changed, 154 insertions(+), 27 deletions(-) create mode 100644 view/maintenance_line_form.xml create mode 100644 view/maintenance_line_tree.xml create mode 100644 view/vmaintenance_line_form.xml diff --git a/contract.py b/contract.py index 0ff6091..0553ffd 100644 --- a/contract.py +++ b/contract.py @@ -39,7 +39,7 @@ class Contract(Workflow, ModelSQL, ModelView): states={ 'readonly': (Eval('state') != 'draft') | Eval('party', True), },help="The party who subscribes.") - contact = fields.Many2One('party.contact_mechanism', "Contact", readonly=True, required=True) + contact = fields.Many2One('party.contact_mechanism', "Contact", required=True) invoice_address = fields.Many2One('party.address', 'Invoice Address', required=True, domain=[('party', '=', Eval('party'))], states={ @@ -60,7 +60,8 @@ class Contract(Workflow, ModelSQL, ModelView): maintenance_services = fields.Many2Many('optical_equipment_maintenance.service-equipment.contract', 'contract', 'maintenance_services', "Prorogues") equipments = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'contract', 'equipment') - #equipments = fields.One2Many('optical_equipment.equipment', "contract_history", "Equipments") + price_contract = Monetary("Price Contract", digits=price_digits, currency='currency', required=True, + states={'readonly': Eval('state') != 'draft'}) state = fields.Selection([ ('draft', "Draft"), ('running', "Running"), @@ -92,11 +93,34 @@ class Contract(Workflow, ModelSQL, ModelView): def default_state(): return 'draft' + @classmethod + def set_number(cls, contracts): + pool = Pool() + Config = pool.get('optical_equipment.configuration') + config = Config(4) + + if config.contract_sequence != None: + if not contracts.number: + try: + contracts.number = config.contract_sequence.get() + cls.save(contracts) + except UserError: + raise UserError(str('Validation Error')) + else: + raise UserError(gettext('optical_equipment.msg_not_sequence_equipment')) + @classmethod @ModelView.button @Workflow.transition('running') def running(cls, contracts): - pass + contract = contracts[0] + for equipment in contract.equipments: + equipment.state = "contrated" + equipment.save() + + cls.set_number(contracts) + contract.state='running' + contract.save() @classmethod @ModelView.button diff --git a/maintenance.py b/maintenance.py index d713f4b..f93b284 100644 --- a/maintenance.py +++ b/maintenance.py @@ -111,16 +111,15 @@ class MaintenanceService(Workflow, ModelSQL, ModelView): def _get_origin_contract(cls): 'Return list of Model names for origin Reference' pool = Pool() - Sale = pool.get('optical_equipment.contract') + Contract = pool.get('optical_equipment.contract') + return [Contract.__name__] + - return [Sale.__name__] - @classmethod def get_origin_contract(cls): Model = Pool().get('ir.model') get_name = Model.get_name - models = cls._get_origin() - + models = cls._get_origin_contract() return [(None, '')] + [(m, get_name(m)) for m in models] @classmethod @@ -211,7 +210,9 @@ class Maintenance(Workflow, ModelSQL, ModelView): }) cls._buttons.update({ 'in_progress': {'invisible': Eval('state').in_(['draft', 'in_progress', 'finished'])}, - 'finished': {'invisible': Eval('state').in_(['finished'])}, + 'finished': {'invisible': (Eval('state').in_(['finished'])) | + ((Eval('maintenance_type') == 'corrective') & (Eval('maintenance_lines') == ())) | + (Eval('calibration_total') == ())}, 'calibrate': {'invisible': (Eval('lines_calibration') == ()) | (Eval('state').in_(['finished'])), 'depends': ['state'],} }) @@ -610,10 +611,11 @@ class MaintenanceLine(ModelSQL, ModelView): depends=['line_replace']) maintenance_activity = fields.Many2One('product.product', 'Maintenance activity', domain=[('maintenance_activity', '=', True)], - states={'invisible': If(Eval('line_replace') == True, True) | (If(Eval('line_maintenance_activity') == False, True)), + states={'invisible': If(Eval('line_replace') == True, True) | + (If(Eval('line_maintenance_activity') == False, True)), 'required': If(Eval('line_maintenance_actitvity') == True, True)}, depends=['line_maintenance_activity']) - quantity = fields.Float("Quantity", digits='unit') + quantity = fields.Float("Quantity", required=True, digits='unit') actual_quantity = fields.Float( "Actual Quantity", digits='unit', readonly=True, states={ @@ -751,6 +753,8 @@ class CreateContract(Wizard): end_date=self.start.end_date, invoice_address=self.start.invoice_address ) + + """ def _create_contract_base(self, dates, subscription): pool = Pool() ContractBase = pool.get('optical_equipment.contract') @@ -767,7 +771,8 @@ class CreateContract(Wizard): equipments=a['equipments'] ) contractBase.save() - + """ + def do_create_contract(self, action): maintenance_service = self.records[0] pool = Pool() @@ -775,13 +780,24 @@ class CreateContract(Wizard): dates = self._subscription_start - prorogues = (maintenance_service,) equipments = [] - for equipment in maintenance_service.lines: - equipments.append(equipment.id) + for line in maintenance_service.lines: + equipments.append(line.equipment.id) - contract = Contract(party=dates['party'], + if maintenance_service.contract_origin: + contract=maintenance_service.contract_origin + contract.invoice_address=dates['invoice_address'] + contract.contact=dates['contact'] + contract.start_date=dates['start_date'] + contract.end_date=dates['end_date'] + contract.maintenance_services+=prorogues + contract.equipments=equipments + contract.state='draft' + contract.price_contract=maintenance_service.sale_origin.sale.total_amount + contract.save() + else: + contract = Contract(party=dates['party'], invoice_address=dates['invoice_address'], contact=dates['contact'], start_date=dates['start_date'], @@ -789,4 +805,4 @@ class CreateContract(Wizard): maintenance_services=prorogues, equipments=equipments ) - contract.save() + contract.save() diff --git a/maintenance.xml b/maintenance.xml index ae2a74f..6e415b2 100644 --- a/maintenance.xml +++ b/maintenance.xml @@ -160,11 +160,16 @@ - + optical_equipment.maintenance.line form maintenance_line_form + + optical_equipment.maintenance.line + tree + maintenance_line_tree + optical_equipment.maintenance.calibration_sample form diff --git a/sale.py b/sale.py index c0167c0..a668a46 100644 --- a/sale.py +++ b/sale.py @@ -22,14 +22,20 @@ class Sale(metaclass=PoolMeta): sale_type = fields.Selection([('maintenance', 'Maintenance'), ('equipments', 'Equipments'), ('replaces', 'Replaces')], "Sale Type", required=True, - states={'readonly': Eval('state') != 'draft'} - ) - contract_base = fields.Many2One('optical_equipment.contract', "Contract Base", + states={'readonly': Eval('state') != 'draft'}) + maintenance_type = fields.Selection([('preventive', 'Preventive'), + ('corrective', 'Corrective') + ], "Maintenance Type", states={'invisible': Eval('sale_type') != "maintenance", + 'required': Eval('sale_type') == "maintenance", + 'readonly': Eval('state') != 'draft'}) + + contract_ref = fields.Reference("Contract Base", selection='get_origin_contract', + domain=[('party', '=', Eval('party')), + ('state', '=', 'closed')], states={'invisible': (Eval('sale_type') != 'maintenance')}, search_context={ 'related_party': Eval('party'), },) - agended = fields.Boolean("Scheduling",states={ 'invisible': (Eval('sale_type') != 'maintenance'), 'readonly': True}) @@ -40,6 +46,21 @@ class Sale(metaclass=PoolMeta): self.lines= [] if self.sale_type != "maintenance": self.agended = False + + @classmethod + def _get_origin(cls): + 'Return list of Model names for origin Reference' + pool = Pool() + Contract = pool.get('optical_equipment.contract') + return [Contract.__name__] + + + @classmethod + def get_origin_contract(cls): + Model = Pool().get('ir.model') + get_name = Model.get_name + models = cls._get_origin() + return [(None, '')] + [(m, get_name(m)) for m in models] @classmethod @ModelView.button @@ -59,11 +80,12 @@ class Sale(metaclass=PoolMeta): if sale.sale_type == 'maintenance': for line in sale.lines: maintenanceService = MaintenanceService( - maintenance_type='preventive', + description=sale.description, + maintenance_type=sale.maintenance_type, state_agended='no_agenda', propietary=sale.party, propietary_address=sale.shipment_address, - #contract_origin=sale.contract_base, + contract_origin=sale.contract_ref if sale.contract_ref else None, sale_origin=line, sale_date=sale.sale_date, state="draft" diff --git a/view/contract_form.xml b/view/contract_form.xml index 1fbc1e7..375cb44 100644 --- a/view/contract_form.xml +++ b/view/contract_form.xml @@ -8,8 +8,10 @@ this repository contains the full copyright notices and license terms. -->