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

81 lines
3.3 KiB
Python

# Copyright 2018 Eficent Business and IT Consulting Services S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models, _
from odoo.exceptions import UserError
class ProcurementOrder(models.Model):
_inherit = "procurement.rule"
@api.multi
def _prepare_mrp_production_request(
self, product_id, product_qty, product_uom, location_id, name,
origin, values, bom):
self.ensure_one()
data = self._prepare_mo_vals(
product_id, product_qty, product_uom, location_id, name,
origin, values, bom)
data['state'] = 'to_approve'
orderpoint = values.get('orderpoint_id')
if orderpoint:
data['orderpoint_id'] = orderpoint.id
return data
@api.multi
def _need_production_request(self, product_id):
return self.action == 'manufacture' \
and product_id.mrp_production_request
@api.multi
def _run_production_request(self, product_id, product_qty, product_uom,
location_id, name, origin, values):
"""Trying to handle this as much similar as possible to Odoo
production orders. See `_run_manufacture` in Odoo standard."""
request_obj = self.env['mrp.production.request']
request_obj_sudo = request_obj.sudo().with_context(
force_company=values['company_id'].id)
bom = self._get_matching_bom(product_id, values)
if not bom:
raise UserError(_(
'There is no Bill of Material found for the product %s. '
'Please define a Bill of Material for this product.') % (
product_id.display_name,))
# create the MR as SUPERUSER because the current user may not
# have the rights to do it (mto product launched by a sale for example)
request = request_obj_sudo.create(
self._prepare_mrp_production_request(
product_id, product_qty, product_uom, location_id, name,
origin, values, bom))
origin_production = values.get('move_dest_ids') and \
values['move_dest_ids'][0].raw_material_production_id or False
orderpoint = values.get('orderpoint_id')
if orderpoint:
request.message_post_with_view(
'mail.message_origin_link',
values={'self': request,
'origin': orderpoint},
subtype_id=self.env.ref('mail.mt_note').id,
)
if origin_production:
request.message_post_with_view(
'mail.message_origin_link',
values={'self': request,
'origin': origin_production},
subtype_id=self.env.ref('mail.mt_note').id,
)
return True
@api.multi
def _run_manufacture(self, product_id, product_qty, product_uom,
location_id, name, origin, values):
if self._need_production_request(product_id):
return self._run_production_request(
product_id, product_qty, product_uom,
location_id, name, origin, values)
return super()._run_manufacture(
product_id, product_qty, product_uom, location_id, name,
origin, values)