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. -->
+
+
@@ -31,8 +33,10 @@ this repository contains the full copyright notices and license terms. -->
-
+
+
+
diff --git a/view/maintenance_line_form.xml b/view/maintenance_line_form.xml
new file mode 100644
index 0000000..4c82303
--- /dev/null
+++ b/view/maintenance_line_form.xml
@@ -0,0 +1,22 @@
+
+
+
diff --git a/view/maintenance_line_tree.xml b/view/maintenance_line_tree.xml
new file mode 100644
index 0000000..c10e7a1
--- /dev/null
+++ b/view/maintenance_line_tree.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/view/sale_form.xml b/view/sale_form.xml
index b3d815c..1ac81f9 100644
--- a/view/sale_form.xml
+++ b/view/sale_form.xml
@@ -6,9 +6,11 @@
+
+
-
-
+
+
diff --git a/view/vmaintenance_line_form.xml b/view/vmaintenance_line_form.xml
new file mode 100644
index 0000000..dfd071b
--- /dev/null
+++ b/view/vmaintenance_line_form.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+