management maintenances services, maintenances, agended

This commit is contained in:
sinergia 2022-09-27 11:30:21 -05:00
parent 87a843754d
commit e630edb389
19 changed files with 359 additions and 221 deletions

View File

@ -18,6 +18,9 @@ def register():
maintenance.MaintenanceService, maintenance.MaintenanceService,
maintenance.MaintenanceActivity, maintenance.MaintenanceActivity,
maintenance.MaintenanceLine, maintenance.MaintenanceLine,
maintenance.AgendedInitial,
maintenance.ReAgended,
maintenance.ServiceMaintenanceAgended,
move.Move, move.Move,
move.ShipmentOut, move.ShipmentOut,
sale.Sale, sale.Sale,
@ -34,4 +37,6 @@ def register():
subscription.CreateContract, subscription.CreateContract,
subscription.CreateProrogue, subscription.CreateProrogue,
subscription.CreateSubscriptionInvoice, subscription.CreateSubscriptionInvoice,
maintenance.AssingAgended,
maintenance.ReAssingAgended,
module='optical_equipment', type_='wizard') module='optical_equipment', type_='wizard')

View File

@ -8,5 +8,8 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
equipment_sequence = fields.Many2One('ir.sequence', "Equipment Sequence", equipment_sequence = fields.Many2One('ir.sequence', "Equipment Sequence",
domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_equipment')) domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_equipment'))
] ])
) maintenance_sequence = fields.Many2One('ir.sequence', "Maintenance Sequence",
domain=[('sequence_type', '=', Id('optical_equipment', 'sequence_type_maintenances'))
])

View File

@ -1,15 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="6">
<label name="party"/>
<field name="party"/>
<label name="contact"/>
<field name="contact"/>
<label name="number"/>
<field name="number"/>
<label name="description"/>
<field name="description" colspan="3"/>
<label name="reference"/>
<field name="reference"/>
</form>

View File

@ -1,8 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="number"/>
<field name="party"/>
<field name="reference"/>
</tree>

View File

@ -1,10 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="2">
<image name="tryton-question" xexpand="0" xfill="0"/>
<group col="2" xexpand="1" id="create_date">
<label string="Create Subscription Invoices for date" id="create"/>
<field name="date"/>
</group>
</form>

View File

@ -1,25 +0,0 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level
this repository contains the full copyright notices and license terms. -->
<form>
<group id="create_subscription">
<label name="initial_contract" />
<field name="initial_contract" colspan="3"/>
<label name="party"/>
<field name="party"/>
<label name="contact"/>
<field name="contact"/>
<label name="invoice_recurrence"/>
<field name="invoice_recurrence"/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
<label name="invoice_start_date"/>
<field name="invoice_start_date"/>
<label name="unit_price"/>
<field name="unit_price"/>
</group>
<newline/>
<field name="equipments"/>
</form>

View File

@ -3,7 +3,24 @@ from trytond.model import (
class Diary(ModelSQL, ModelView): class Diary(ModelSQL, ModelView):
'Diary' 'Diary'
__name__ = 'optical_equipment.maintenance.diary' __name__ = 'optical_equipment_maintenance.diary'
code = fields.Char( code = fields.Char(
"Code", select=True,states={'readonly': True }) "Code", select=True,states={'readonly': True })
date_expected = fields.DateTime("Expected Date")
date_estimated = fields.DateTime("Estimated Date")
date_end = fields.DateTime("Date End")
maintenance_service = fields.Many2One('optical_equipment.maintenance.service', 'Maintenance Service')
technical = fields.Many2One('company.employee', "Technical")
state = fields.Selection([('draft', "Draft"),
('agended', "Agended"),
('in_progress', "In Progress"),
('failed', "Failed"),
('finished', "Finished")
], "State", required=True, readonly=True, sort=True)
@classmethod
def default_state(self):
return 'draft'

View File

@ -11,6 +11,14 @@
<field name="user" ref="res.user_admin"/> <field name="user" ref="res.user_admin"/>
<field name="group" ref="group_equipment_admin"/> <field name="group" ref="group_equipment_admin"/>
</record> </record>
<record model="res.group" id="group_maintenance_admin">
<field name="name">Maintenance Administration</field>
</record>
<record model="res.user-res.group"
id="user_admin_group_maintenance_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<menuitem <menuitem
name="Equipment" name="Equipment"
sequence="40" sequence="40"
@ -83,13 +91,7 @@
<field name="domain"></field> <field name="domain"></field>
<field name="act_window" ref="act_optical_equipment_form"/> <field name="act_window" ref="act_optical_equipment_form"/>
</record> </record>
<!--
<record model="ir.model.button" id="draft_equipment_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
</record>
-->
<record model="ir.model.button" id="registred_equipment_button"> <record model="ir.model.button" id="registred_equipment_button">
<field name="name">registred</field> <field name="name">registred</field>
<field name="string">Registred</field> <field name="string">Registred</field>
@ -153,6 +155,24 @@
<field name="name">Equipment</field> <field name="name">Equipment</field>
<field name="sequence_type" ref="sequence_type_equipment"/> <field name="sequence_type" ref="sequence_type_equipment"/>
</record> </record>
<record model="ir.sequence.type" id="sequence_type_maintenances">
<field name="name">Maintenances</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_maintenance_group_maintenance_admin">
<field name="sequence_type" ref="sequence_type_maintenances"/>
<field name="group" ref="group_maintenance_admin"/>
</record>
<record model="ir.sequence" id="sequence_maintenances">
<field name="name">Maintenance</field>
<field name="sequence_type" ref="sequence_type_maintenances"/>
</record>
<record model="ir.action.report" id="report_equipment"> <record model="ir.action.report" id="report_equipment">
<field name="name">Equipment</field> <field name="name">Equipment</field>
<field name="model">optical_equipment.equipment</field> <field name="model">optical_equipment.equipment</field>

View File

@ -2,12 +2,130 @@
# this repository contains the full copyright notices and license terms. # this repository contains the full copyright notices and license terms.
from trytond.model import ( from trytond.model import (
Workflow, ModelSQL, ModelView, Unique, fields, sequence_ordered) Workflow, ModelSQL, ModelView, Unique, fields, sequence_ordered)
from trytond.wizard import (
Button, StateAction, StateTransition, StateView, Wizard)
from trytond.transaction import Transaction from trytond.transaction import Transaction
from trytond.pyson import Eval, If, Id from trytond.pyson import Bool, Eval, If, Id
from trytond.pool import Pool from trytond.pool import Pool
from datetime import timedelta
import math as mt import math as mt
import numpy as np import numpy as np
from trytond.exceptions import UserError
class MaintenanceService(Workflow, ModelSQL, ModelView):
'Equipment Maintenance Service'
__name__ = 'optical_equipment.maintenance.service'
_states = {'readonly': If(Eval('state') != 'draft', True)}
code = fields.Char("Code", readonly=True, select=True)
reference = fields.Char("Reference", select=True,
help="The identification of an external origin.")
description = fields.Char("Description",states=_states)
sale_date = fields.Char("Sale Date")
sale_origin = fields.Reference("Sale Origin", selection='get_origin', select=True,
states={'readonly': True})
company = fields.Many2One('company.company', "Company", readonly=True)
maintenance_type = fields.Selection([('preventive', 'Preventive'),
('corrective', 'Corrective')
], "Maintenance Type", states=_states)
propietary = fields.Many2One('party.party', "Propietary", required=True, states=_states)
propietary_address = fields.Many2One('party.address', "Propietary Address", required=True,
domain=[('party', '=', Eval('propietary'))],
states=_states)
lines = fields.One2Many('optical_equipment.maintenance', 'service_maintenance', "Lines",
states={'readonly': If(Eval('state') != 'in_progress', True)})
estimated_agended = fields.DateTime("Date Maintenance", states=_states)
history_agended = fields.Many2Many('optical_equipment.maintenance.service-maintenance.diary', 'maintenance_service', 'agended', "History Agended", readonly=True)
state_agended = fields.Selection([('no_agenda', "No agenda"),
('agended', "Agended"),
('in_progress', "In progress"),
('finish', "Finish"),
('failed', "Failed")], "State Agenda", states=_states)
technical = fields.Many2One('company.employee', "Technical", states=_states)
state = fields.Selection([('draft', "Draft"),
('agended', "Agended"),
('in_progress', "In Progress"),
('failed', "Failed"),
('finished', "Finished")
], "State", required=True, readonly=True, sort=True)
@classmethod
def __setup__(cls):
super(MaintenanceService, cls).__setup__()
cls._transitions = ({
('draft', 'agended'),
('agended', 'in_progress'),
('in_progress', 'finished'),
})
cls._buttons.update({
'in_progress': {'invisible': Eval('state').in_(['draft', 'in_progress', 'finished'])},
'finished': {'invisible': Eval('state').in_(['draft', 'agended', 'finished'])},
})
@staticmethod
def default_company():
return Transaction().context.get('company')
@classmethod
def default_maintenance_type(self):
return 'preventive'
@classmethod
def default_state_agended(self):
return 'no_agenda'
@classmethod
def default_state(self):
return 'draft'
@classmethod
def _get_origin(cls):
'Return list of Model names for origin Reference'
pool = Pool()
Sale = pool.get('sale.line')
return [Sale.__name__]
@classmethod
def get_origin(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
def set_code(cls, maintenance):
pool = Pool()
Config = pool.get('optical_equipment.configuration')
config = Config(2)
if config.maintenance_sequence != None:
if not maintenance.code:
try:
maintenance.code = config.maintenance_sequence.get()
maintenance.save()
except UserError:
raise UserError(str('Validation Error'))
else:
raise UserError(gettext('optical_equipment.msg_not_sequence_equipment'))
@classmethod
@ModelView.button
@Workflow.transition('in_progress')
def in_progress(cls, maintenances):
pass
@classmethod
@ModelView.button
@Workflow.transition('finished')
def finished(cls, maintenances):
pass
class Maintenance(Workflow, ModelSQL, ModelView): class Maintenance(Workflow, ModelSQL, ModelView):
'Equipment Maintenance' 'Equipment Maintenance'
@ -31,18 +149,17 @@ class Maintenance(Workflow, ModelSQL, ModelView):
], "State",required=True, readonly=True, sort=False) ], "State",required=True, readonly=True, sort=False)
company = fields.Many2One('company.company', "Company", readonly=True) company = fields.Many2One('company.company', "Company", readonly=True)
propietary = fields.Many2One('party.party', "Propietary", required=True) propietary = fields.Many2One('party.party', "Propietary",
propietary_address = fields.Many2One('party.address', "Propietary Address", required=True, depends=['service_maintenance'])
domain=[('party', '=', Eval('propietary'))] propietary_address = fields.Many2One('party.address', "Propietary Address",
domain=[('party', '=', Eval('propietary'))],
depends=['service_maintenance']
) )
equipment = fields.Many2One('optical_equipment.equipment', "Equipment", equipment = fields.Many2One('optical_equipment.equipment', "Equipment", required=True,
domain=[('state', '!=', 'draft'), domain=[('propietary', '=', Eval('propietary'))],
('propietary', '=', Eval('propietary'))] depends=['service_maintenance'])
)
#when the maintenance is in agended status #when the maintenance is in agended status
diary = fields.One2Many('optical_equipment.maintenance.diary', 'diary') diary = fields.One2Many('optical_equipment_maintenance.diary', 'diary')
estimated_agended = fields.DateTime("Date Maintenance") estimated_agended = fields.DateTime("Date Maintenance")
state_agended = fields.Selection([('no_agenda', "No agenda"), state_agended = fields.Selection([('no_agenda', "No agenda"),
('agended', "Agended"), ('agended', "Agended"),
@ -59,28 +176,28 @@ class Maintenance(Workflow, ModelSQL, ModelView):
clean_eyes = fields.Boolean("Limpieza de lentes y espejos") clean_eyes = fields.Boolean("Limpieza de lentes y espejos")
optical = fields.Boolean("Optical") optical = fields.Boolean("Optical")
check_calibration = fields.Boolean("Verificar Calibración") check_calibration = fields.Boolean("Verificar Calibración")
maintenance_activity = fields.One2Many('optical_equipment_maintenance.activity', 'maintenance', "Maintenance Activitys")
# maintenance_activity = fields.Many2Many('optical_equipment.maintenance-product.product', 'activity', 'maintenance', "Maintenance Activitys")
maintenance_lines = fields.One2Many('optical_equipment.maintenance.line', 'maintenance', 'Lines') maintenance_lines = fields.One2Many('optical_equipment.maintenance.line', 'maintenance', 'Lines')
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):
super(Maintenance, cls).__setup__() super(Maintenance, cls).__setup__()
cls._transitions.update({ cls._transitions.update({
('draft', 'agended'), ('draft', 'finished')
('agended', 'in_progress'),
('in_progress', 'finished')
}) })
cls._buttons.update({ cls._buttons.update({
'agended': {'invisible': Eval('state').in_(['agended', 'in_progress', 'finished'])},
'in_progress': {'invisible': Eval('state').in_(['draft', 'in_progress', 'finished'])}, 'in_progress': {'invisible': Eval('state').in_(['draft', 'in_progress', 'finished'])},
'finished': {'invisible': Eval('state').in_(['draft', 'agended', 'finished'])},
}) })
@staticmethod @staticmethod
def default_company(): def default_company():
return Transaction().context.get('company') return Transaction().context.get('company')
@fields.depends('service_maintenance')
def on_change_service_maintenance(self):
self.propietary = self.service_maintenance.propietary
self.propietary_address = self.service_maintenance.propietary_address
@classmethod @classmethod
def default_state(cls): def default_state(cls):
return 'draft' return 'draft'
@ -93,13 +210,6 @@ class Maintenance(Workflow, ModelSQL, ModelView):
def default_state_agended(cls): def default_state_agended(cls):
return 'no_agenda' return 'no_agenda'
@classmethod
@ModelView.button
@Workflow.transition('agended')
def agended(cls, maintenances):
pass
@classmethod @classmethod
@ModelView.button @ModelView.button
@Workflow.transition('in_progress') @Workflow.transition('in_progress')
@ -110,6 +220,7 @@ class Maintenance(Workflow, ModelSQL, ModelView):
@ModelView.button @ModelView.button
@Workflow.transition('finished') @Workflow.transition('finished')
def finished(cls, maintenances): def finished(cls, maintenances):
raise UserError(str("Esto es una prueba"))
pass pass
@classmethod @classmethod
@ -123,100 +234,106 @@ class Maintenance(Workflow, ModelSQL, ModelView):
}) })
] ]
class MaintenanceActivity(ModelView, ModelSQL):
'Maintenance Activitys'
__name__ = 'optical_equipment_maintenance.activity'
class MaintenanceService(ModelSQL, ModelView): maintenance = fields.Many2One('optical_equipment.maintenance')
'Equipment Maintenance Service' product = fields.Many2One('product.product', 'Product',
__name__ = 'optical_equipment.maintenance.service' domain=[('maintenance_activity', '=', True)])
code = fields.Char( class AgendedInitial(ModelView):
"Code", select=True,states={'readonly': True }) 'Agended maintenance service'
reference = fields.Char( __name__ = 'optical_equipment_maintenance.agended'
"Reference", select=True,
help="The identification of an external origin.")
description = fields.Char("Description",
states={
'readonly': Eval('state') != 'draft',
})
#sale_date = fields.Function(fields.Char("Sale Date"), 'get_sale_date')
sale_origin = fields.Reference("Sale Origin", selection='get_origin', select=True,
states={'readonly': True})
company = fields.Many2One('company.company', "Company", readonly=True)
maintenance_type = fields.Selection([('preventive', 'Preventive'),
('corrective', 'Corrective')
], "Maintenance Type")
propietary = fields.Many2One('party.party', "Propietary", required=True)
propietary_address = fields.Many2One('party.address', "Propietary Address", required=True,
domain=[('party', '=', Eval('propietary'))]
)
lines = fields.One2Many('optical_equipment.maintenance', 'service_maintenance', "Lines")
estimated_agended = fields.DateTime("Date Maintenance")
state_agended = fields.Selection([('no_agenda', "No agenda"),
('agended', "Agended"),
('in_progress', "In progress"),
('finish', "Finish"),
('failed', "Failed")], "State Agenda")
technical = fields.Many2One('company.employee', "Technical")
state = fields.Selection([('draft', "Draft"), maintenance_service = fields.Many2One('optical_equipment.maintenance.service',"Maintenaince Service",
('agended', "Agended"), required=True, domain=[('state', '=', 'draft')])
('in_progress', "In Progress"), estimated_agended = fields.DateTime("Date Maintenance", required=True)
('failed', "Failed"), technical = fields.Many2One('company.employee', "Technical", required=True)
('finished', "Finished")
], "State",required=True, readonly=True, sort=False)
@staticmethod class AssingAgended(Wizard):
def default_company(): 'Assing Agended'
return Transaction().context.get('company') __name__ = 'optical_equipment_maintenance.assing_agended'
@classmethod start = StateView('optical_equipment_maintenance.agended',
def default_state(self): 'optical_equipment.assing_agended_view_form', [
return 'draft' Button('Cancel', 'end', 'tryton-cancel'),
Button('Assing', 'assing_agended', 'tryton-ok', default=True),
])
@classmethod assing_agended = StateAction('optical_equipment.act_maintenance_service_form')
def get_sale_date(self):
pass
@classmethod def do_assing_agended(self, action):
def _get_origin(cls):
'Return list of Model names for origin Reference'
pool = Pool() pool = Pool()
Sale = pool.get('sale.line') Diary = pool.get('optical_equipment_maintenance.diary')
MaintenanceService = pool.get('optical_equipment.maintenance.service')
diary = Diary(maintenance_service=self.start.maintenance_service,
date_expected=self.start.estimated_agended,
date_estimated=self.start.estimated_agended + timedelta(days=15),
date_end=self.start.estimated_agended + timedelta(days=15),
technical=self.start.technical.id,
state='agended')
diary.save()
return [Sale.__name__] maintenanceService = self.start.maintenance_service
maintenanceService.estimated_agended = self.start.estimated_agended
@classmethod maintenanceService.technical = self.start.technical
def get_origin(cls): maintenanceService.state_agended = 'agended'
Model = Pool().get('ir.model') maintenanceService.state = 'agended'
get_name = Model.get_name maintenanceService.history_agended += (diary.id,)
models = cls._get_origin() maintenanceService.set_code(maintenanceService)
maintenanceService.save()
return [(None, '')] + [(m, get_name(m)) for m in models]
@classmethod class ReAgended(ModelView):
@ModelView.button 'Agended maintenance service'
@Workflow.transition('agended') __name__ = 'optical_equipment_maintenance.reagended'
def agended(cls, maintenances):
pass
@classmethod maintenance_service = fields.Many2One('optical_equipment.maintenance.service',"Maintenaince Service",
@ModelView.button required=True, domain=[('state', '=', 'failed')])
@Workflow.transition('in_progress') estimated_agended = fields.DateTime("Date Maintenance", required=True)
def in_progress(cls, maintenances): technical = fields.Many2One('company.employee', "Technical", required=True)
pass
@classmethod class ReAssingAgended(Wizard):
@ModelView.button 'Assing Agended'
@Workflow.transition('finished') __name__ = 'optical_equipment_maintenance.reassing_agended'
def finished(cls, maintenances):
pass
class MaintenanceActivity(ModelSQL): start = StateView('optical_equipment_maintenance.reagended',
'Maintenance - Products' 'optical_equipment.reassing_agended_view_form', [
__name__ = 'optical_equipment.maintenance-product.product' Button('Cancel', 'end', 'tryton-cancel'),
Button('Assing', 'assing_agended', 'tryton-ok', default=True),
])
assing_agended = StateAction('optical_equipment.act_maintenance_service_form')
def do_assing_agended(self, action):
pool = Pool()
Diary = pool.get('optical_equipment_maintenance.diary')
diary = Diary(maintenance_service=self.start.maintenance_service,
date_expected=self.start.estimated_agended,
date_estimated=self.start.estimated_agended + timedelta(days=15),
date_end=self.start.estimated_agended + timedelta(days=15),
technical=self.start.technical.id,
state='agended')
diary.save()
maintenanceService = self.start.maintenance_service
maintenanceService.estimated_agended = self.start.estimated_agended
maintenanceService.technical = self.start.technical
maintenanceService.state_agended = 'agended'
maintenanceService.state = 'agended'
maintenanceService.history_agended += (diary.id,)
maintenanceService.save()
class ServiceMaintenanceAgended(ModelSQL):
'Service Maintenance - Agended'
__name__ = 'optical_equipment.maintenance.service-maintenance.diary'
maintenance_service = fields.Many2One('optical_equipment.maintenance.service', "Maintenance Service")
agended = fields.Many2One('optical_equipment_maintenance.diary', "Agended")
activity = fields.Many2One('product.product', "Activity", select=True)
maintenance = fields.Many2One('optical_equipment.maintenance', "Maintenance", select=True)
class MaintenanceLine(ModelSQL, ModelView): class MaintenanceLine(ModelSQL, ModelView):
'Maintenance Line' 'Maintenance Line'
@ -372,6 +489,3 @@ class CalibrationSample(sequence_ordered(), ModelView, ModelSQL):
mistake = fields.Float("Mistake") mistake = fields.Float("Mistake")
mistake_rate = fields.Float("% Mistake") mistake_rate = fields.Float("% Mistake")
expanded_uncertainty = fields.Float("Uncertainy Expanded") expanded_uncertainty = fields.Float("Uncertainy Expanded")

View File

@ -33,13 +33,22 @@
<field name="type">form</field> <field name="type">form</field>
<field name="name">maintenance_service_form</field> <field name="name">maintenance_service_form</field>
</record> </record>
<record model="ir.ui.view" id= "maintenance_equipment_view_form"> <record model="ir.ui.view" id= "maintenance_equipment_view_form">
<field name="model">optical_equipment.maintenance-optical_equipment.equipment</field> <field name="model">optical_equipment.maintenance-optical_equipment.equipment</field>
<field name="inherit" ref="maintenance_view_form"/> <field name="inherit" ref="maintenance_view_form"/>
<field name="name">maintenance_equipment_form</field> <field name="name">maintenance_equipment_form</field>
</record> </record>
<record model="ir.ui.view" id="maintenance_activity_view_form">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">form</field>
<field name="name">maintenance_activity_form</field>
</record>
<record model="ir.ui.view" id="maintenance_activity_view_tree">
<field name="model">optical_equipment_maintenance.activity</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">maintenance_activity_tree</field>
</record>
<record model="ir.action.act_window.view" id="act_maintenance_view1"> <record model="ir.action.act_window.view" id="act_maintenance_view1">
<field name="sequence" eval="10"/> <field name="sequence" eval="10"/>
<field name="view" ref="maintenance_view_tree"/> <field name="view" ref="maintenance_view_tree"/>
@ -107,11 +116,6 @@
<field name="string">Draft</field> <field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance.service')]"/> <field name="model" search="[('model', '=', 'optical_equipment.maintenance.service')]"/>
</record> </record>
<record model="ir.model.button" id="maintenance_service_agended_button">
<field name="name">agended</field>
<field name="string">Agended</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance.service')]"/>
</record>
<record model="ir.model.button" id="maintenance_service_in_progress_button"> <record model="ir.model.button" id="maintenance_service_in_progress_button">
<field name="name">in_progress</field> <field name="name">in_progress</field>
<field name="string">In progress</field> <field name="string">In progress</field>
@ -122,6 +126,12 @@
<field name="string">Finished</field> <field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance.service')]"/> <field name="model" search="[('model', '=', 'optical_equipment.maintenance.service')]"/>
</record> </record>
<record model="ir.model.button" id="maintenance_finished_button">
<field name="name">finished</field>
<field name="string">Finished</field>
<field name="model" search="[('model', '=', 'optical_equipment.maintenance')]"/>
</record>
<record model="ir.action.act_window.domain" id="act_maintenance_service_form_domain_draft"> <record model="ir.action.act_window.domain" id="act_maintenance_service_form_domain_draft">
<field name="name">Draft</field> <field name="name">Draft</field>
@ -197,7 +207,7 @@
<field name="name">maintenance_calendar</field> <field name="name">maintenance_calendar</field>
</record> </record>
<record model="ir.action.act_window" id="act_maintenance_service_calendar"> <record model="ir.action.act_window" id="act_maintenance_service_calendar">
<field name="name">Agenda</field> <field name="name">Calendar</field>
<field name="res_model">optical_equipment.maintenance.service</field> <field name="res_model">optical_equipment.maintenance.service</field>
</record> </record>
<record model="ir.action.act_window.view" <record model="ir.action.act_window.view"
@ -212,18 +222,43 @@
<field name="view" ref="maintenance_service_view_form"/> <field name="view" ref="maintenance_service_view_form"/>
<field name="act_window" ref="act_maintenance_service_calendar"/> <field name="act_window" ref="act_maintenance_service_calendar"/>
</record> </record>
<menuitem parent="menu_equipment" <record model="ir.ui.view" id="assing_agended_view_form">
<field name="model">optical_equipment_maintenance.agended</field>
<field name="type">form</field>
<field name="name">assing_agended_form</field>
</record>
<record model="ir.action.wizard" id="act_assing_agended">
<field name="name">Assing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.assing_agended</field>
</record>
<record model="ir.ui.view" id="reassing_agended_view_form">
<field name="model">optical_equipment_maintenance.reagended</field>
<field name="type">form</field>
<field name="name">reassing_agended_form</field>
</record>
<record model="ir.action.wizard" id="act_reassing_agended">
<field name="name">ReAssing Agended</field>
<field name="wiz_name">optical_equipment_maintenance.reassing_agended</field>
</record>
<menuitem parent="menu_diary"
action="act_maintenance_service_calendar" action="act_maintenance_service_calendar"
sequence="10" sequence="10"
id="menu_agenda_form"/> id="menu_agenda_form"/>
<menuitem parent="menu_equipment" <menuitem parent="menu_equipment"
action="act_maintenance_service_form" action="act_maintenance_service_form"
sequence="10" sequence="20"
id="menu_maintenance_service_form"/> id="menu_maintenance_service_form"/>
<menuitem parent="menu_maintenance_service_form" <menuitem parent="menu_maintenance_service_form"
action="act_maintenance_form" action="act_maintenance_form"
sequence="40" sequence="30"
id="menu_maintenance_form"/> id="menu_maintenance_form"/>
<menuitem parent="menu_diary"
action="act_assing_agended"
sequence="10"
id="menu_assing_agended_form"/>
<menuitem parent="menu_diary"
action="act_reassing_agended"
sequence="20"
id="menu_reassing_agended_form"/>
</data> </data>
</tryton> </tryton>

View File

@ -44,6 +44,8 @@ class Template(metaclass=PoolMeta):
'Template' 'Template'
__name__ = 'product.template' __name__ = 'product.template'
product = fields.Many2One('optical_equipment.maintenance', "Maintenance Activity",
ondelete='CASCADE', select=True)
equipment = fields.Boolean('It is equipment', equipment = fields.Boolean('It is equipment',
states={'invisible': Eval('type', 'goods') != 'goods', states={'invisible': Eval('type', 'goods') != 'goods',
},depends=['type'] },depends=['type']

View File

@ -42,11 +42,12 @@ class Sale(metaclass=PoolMeta):
maintenanceService = MaintenanceService( maintenanceService = MaintenanceService(
maintenance_type='preventive', maintenance_type='preventive',
state_agended='no_agenda', state_agended='no_agenda',
propietary=cls.party, propietary=sale.party,
propietary_address=cls.shipment_address, propietary_address=sale.shipment_address,
sale_origin=line,
sale_date=sale.sale_date,
state="draft" state="draft"
) )
#raise UserError(str((maintenanceService)))
maintenanceService.save() maintenanceService.save()
cls.agended = True cls.agended = True
sale.save() sale.save()

View File

@ -105,9 +105,7 @@ class Contract(ModelSQL, ModelView):
else: else:
continue continue
#raise UserError(str((contract[0].prorogues)))
if contract[0].contract and contract[0].prorogues == (): if contract[0].contract and contract[0].prorogues == ():
#raise UserError(str(contract[0].contract))
Subscription.quote([contract[0].contract]) Subscription.quote([contract[0].contract])
Subscription.run([contract[0].contract]) Subscription.run([contract[0].contract])
else: else:
@ -118,8 +116,6 @@ class Contract(ModelSQL, ModelView):
subscription = Subscription.search([('state', '=', 'draft'), subscription = Subscription.search([('state', '=', 'draft'),
('id', 'in', IdProrogues)]) ('id', 'in', IdProrogues)])
raise UserError(str(subscription))
#raise UserError(str(list(contract[0].prorogues)))
raise UserError(str(list(contract[0].prorogues).find(['state', '=', 'draft']))) raise UserError(str(list(contract[0].prorogues).find(['state', '=', 'draft'])))

View File

@ -27,8 +27,9 @@ xml:
sale.xml sale.xml
purchase.xml purchase.xml
uom.xml uom.xml
maintenance.xml
move.xml move.xml
subscription.xml subscription.xml
message.xml message.xml
diary.xml
maintenance.xml

View File

@ -14,6 +14,8 @@
<field name="maintenance_type"/> <field name="maintenance_type"/>
<label name="equipment"/> <label name="equipment"/>
<field name="equipment"/> <field name="equipment"/>
<label name="service_maintenance"/>
<field name="service_maintenance"/>
<notebook colspan="6"> <notebook colspan="6">
<page string="Agended" id="agended"> <page string="Agended" id="agended">
<label name="estimated_agended"/> <label name="estimated_agended"/>
@ -24,20 +26,8 @@
<field name="state_agended"/> <field name="state_agended"/>
</page> </page>
<page string="Preventive" id="preventive"> <page string="Preventive" id="preventive">
<label name="initial_operation"/> <field name="maintenance_activity"/>
<field name="initial_operation"/> <newline/>
<label name="check_equipment"/>
<field name="check_equipment"/>
<label name="check_eletric_system"/>
<field name="check_eletric_system"/>
<label name="clean_int_ext"/>
<field name="clean_int_ext"/>
<label name="clean_eyes"/>
<field name="clean_eyes"/>
<label name="optical"/>
<field name="optical"/>
<label name="check_calibration"/>
<field name="check_calibration"/>
</page> </page>
<page string="Corrective" id="corrective"> <page string="Corrective" id="corrective">
<label name="maintenance_lines"/> <label name="maintenance_lines"/>
@ -53,7 +43,6 @@
<label name="state"/> <label name="state"/>
<field name="state"/> <field name="state"/>
<group id="button"> <group id="button">
<button name="agended"/>
<button name="in_progress"/> <button name="in_progress"/>
<button name="finished"/> <button name="finished"/>
</group> </group>

View File

@ -2,8 +2,6 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of <!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. --> this repository contains the full copyright notices and license terms. -->
<form col="6"> <form col="6">
<label name="maintenance_type"/>
<field name="maintenance_type"/>
<label name="propietary"/> <label name="propietary"/>
<field name="propietary"/> <field name="propietary"/>
<label name="propietary_address"/> <label name="propietary_address"/>
@ -16,6 +14,10 @@
<field name="reference"/> <field name="reference"/>
<label name="sale_origin"/> <label name="sale_origin"/>
<field name="sale_origin"/> <field name="sale_origin"/>
<label name="sale_date"/>
<field name="sale_date"/>
<label name="maintenance_type"/>
<field name="maintenance_type"/>
<newline/> <newline/>
<notebook colspan="6"> <notebook colspan="6">
<page string="General" id="general"> <page string="General" id="general">
@ -29,6 +31,9 @@
<page string="Lines Of Mantenaince" id="lines_maintenance"> <page string="Lines Of Mantenaince" id="lines_maintenance">
<field name="lines"/> <field name="lines"/>
</page> </page>
<page string="Agendes" id="agendes">
<field name="history_agended"/>
</page>
<page string="Other Info" id="other_info"> <page string="Other Info" id="other_info">
<label name="company"/> <label name="company"/>
<field name="company"/> <field name="company"/>
@ -38,7 +43,6 @@
<label name="state"/> <label name="state"/>
<field name="state"/> <field name="state"/>
<group id="button"> <group id="button">
<button name="agended"/>
<button name="in_progress"/> <button name="in_progress"/>
<button name="finished"/> <button name="finished"/>
</group> </group>

View File

@ -3,7 +3,12 @@
this repository contains the full copyright notices and license terms.--> this repository contains the full copyright notices and license terms.-->
<tree> <tree>
<field name="code"/> <field name="code"/>
<field name="company"/> <field name="sale_origin"/>
<field name="sale_date"/>
<field name="estimated_agended" widget="date"/>
<field name="estimated_agended" string="Time" widget="time"/>
<field name="technical"/>
<field name="propietary"/> <field name="propietary"/>
<field name="propietary_address"/> <field name="propietary_address"/>
<field name="lines" string="# Equipments"/>
</tree> </tree>

View File

@ -7,4 +7,6 @@
<field name="propietary"/> <field name="propietary"/>
<field name="propietary_address"/> <field name="propietary_address"/>
<field name="equipment"/> <field name="equipment"/>
<field name="state"/>
<button name="finished"/>
</tree> </tree>

View File

@ -6,5 +6,7 @@ this repository contains the full copyright notices and license terms. -->
<separator id="sequences" string="Sequences" colspan="4"/> <separator id="sequences" string="Sequences" colspan="4"/>
<label name="equipment_sequence"/> <label name="equipment_sequence"/>
<field name="equipment_sequence"/> <field name="equipment_sequence"/>
<label name="maintenance_sequence"/>
<field name="maintenance_sequence"/>
</form> </form>