Files
manufacture/mrp_production_request/models/procurement.py
2020-04-03 16:43:56 +05:30

57 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2017 Eficent Business and IT Consulting Services S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, _
class ProcurementOrder(models.Model):
_inherit = "procurement.order"
mrp_production_request_id = fields.Many2one(
comodel_name="mrp.production.request", string="Manufacturing Request",
copy=False)
@api.multi
def _prepare_mrp_production_request(self):
self.ensure_one()
data = self._prepare_mo_vals(self._get_matching_bom())
data['procurement_id'] = self.id
data['state'] = 'to_approve'
return data
@api.multi
def _run(self):
self.ensure_one()
if (self.rule_id and
self.rule_id.action == 'manufacture' and
self.product_id.mrp_production_request):
if not self._get_matching_bom():
self.message_post(
body=_("No BoM exists for this product!"))
return False
if not self.mrp_production_request_id:
request_data = self._prepare_mrp_production_request()
req = self.env['mrp.production.request'].create(request_data)
self.message_post(body=_(
"Manufacturing Request created"))
self.mrp_production_request_id = req.id
return True
return super(ProcurementOrder, self)._run()
@api.multi
def propagate_cancels(self):
result = super(ProcurementOrder, self).propagate_cancels()
for procurement in self:
mrp_production_requests = \
self.env['mrp.production.request'].sudo().search([
('procurement_id', '=', procurement.id)])
if mrp_production_requests and not self.env.context.get(
'from_mrp_production_request'):
mrp_production_requests.sudo().button_cancel()
for mr in mrp_production_requests:
mr.sudo().message_post(
body=_("Related procurement has been cancelled."))
procurement.write({'mrp_production_request_id': None})
return result