management maintenances services, maintenances, agended
This commit is contained in:
parent
87a843754d
commit
e630edb389
@ -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')
|
||||||
|
@ -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'))
|
||||||
|
])
|
||||||
|
|
||||||
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
19
diary.py
19
diary.py
@ -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'
|
||||||
|
@ -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>
|
||||||
|
328
maintenance.py
328
maintenance.py
@ -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")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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']
|
||||||
|
7
sale.py
7
sale.py
@ -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()
|
||||||
|
@ -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'])))
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user