mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
81 lines
3.3 KiB
Python
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)
|