mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
Before this commit, when a purchase order line was unlinked, the stock request remained open. After this commit, related stock requests are canceled.
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
# Copyright 2017-20 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class PurchaseOrderLine(models.Model):
|
|
_inherit = "purchase.order.line"
|
|
|
|
stock_request_ids = fields.Many2many(
|
|
comodel_name="stock.request", string="Stock Requests", copy=False
|
|
)
|
|
|
|
def unlink(self):
|
|
"""
|
|
Cancel the stock.request
|
|
related to the purchase order line
|
|
because it does not occur automatically
|
|
and causes inconsistency by keeping the SR state as 'In Progress' (open).
|
|
"""
|
|
stock_request_to_cancel = self.env["stock.request"]
|
|
for purchase_line in self:
|
|
stock_request_to_cancel |= purchase_line.stock_request_ids
|
|
res = super().unlink()
|
|
if stock_request_to_cancel:
|
|
stock_request_to_cancel.action_cancel()
|
|
return res
|
|
|
|
def _prepare_stock_moves(self, picking):
|
|
res = super()._prepare_stock_moves(picking)
|
|
|
|
for re in res:
|
|
re["allocation_ids"] = [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"stock_request_id": request.id,
|
|
"requested_product_uom_qty": request.product_qty,
|
|
},
|
|
)
|
|
for request in self.stock_request_ids
|
|
]
|
|
return res
|
|
|
|
@api.model
|
|
def _prepare_purchase_order_line_from_procurement(
|
|
self, product_id, product_qty, product_uom, company_id, values, po
|
|
):
|
|
vals = super()._prepare_purchase_order_line_from_procurement(
|
|
product_id, product_qty, product_uom, company_id, values, po
|
|
)
|
|
if "stock_request_id" in values:
|
|
vals["stock_request_ids"] = [(4, values["stock_request_id"])]
|
|
return vals
|
|
|
|
@api.constrains("stock_request_ids")
|
|
def _check_purchase_company_constrains(self):
|
|
if any(
|
|
any(req.company_id != pol.company_id for req in pol.stock_request_ids)
|
|
for pol in self
|
|
):
|
|
raise ValidationError(
|
|
_(
|
|
"You cannot link a purchase order line "
|
|
"to a stock request that belongs to "
|
|
"another company."
|
|
)
|
|
)
|