Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
61
sale_stock_picking_blocking/models/sale_order.py
Executable file
61
sale_stock_picking_blocking/models/sale_order.py
Executable file
@@ -0,0 +1,61 @@
|
||||
# Copyright 2024 ForgeFlow S.L.
|
||||
# (http://www.forgeflow.com)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = "sale.order"
|
||||
|
||||
delivery_block_id = fields.Many2one(
|
||||
comodel_name="sale.delivery.block.reason",
|
||||
tracking=True,
|
||||
string="Delivery Block Reason",
|
||||
compute="_compute_delivery_block_id",
|
||||
store=True,
|
||||
)
|
||||
|
||||
@api.constrains("delivery_block_id")
|
||||
def _check_not_auto_done(self):
|
||||
auto_done = self.env.user.has_group("sale.group_auto_done_setting")
|
||||
if auto_done and any(so.delivery_block_id for so in self):
|
||||
raise ValidationError(
|
||||
_('You cannot block a sale order with "auto_done_setting" active.')
|
||||
)
|
||||
|
||||
@api.depends("partner_id", "payment_term_id")
|
||||
def _compute_delivery_block_id(self):
|
||||
"""Add the 'Default Delivery Block Reason' if set in the partner
|
||||
or in the payment term."""
|
||||
for so in self:
|
||||
if so.partner_id.default_delivery_block:
|
||||
so.delivery_block_id = so.partner_id.default_delivery_block
|
||||
else:
|
||||
so.delivery_block_id = (
|
||||
so.payment_term_id.default_delivery_block_reason_id or False
|
||||
)
|
||||
|
||||
def action_remove_delivery_block(self):
|
||||
"""Remove the delivery block and create procurements as usual."""
|
||||
order_to_unblock = self.filtered(
|
||||
lambda so: so.state == "sale" or not so.delivery_block_id
|
||||
)
|
||||
order_to_unblock.write({"delivery_block_id": False})
|
||||
order_to_unblock.order_line._action_launch_stock_rule()
|
||||
return True
|
||||
|
||||
def copy(self, default=None):
|
||||
new_so = super().copy(default=default)
|
||||
for so in new_so:
|
||||
if so.partner_id.default_delivery_block and not so.delivery_block_id:
|
||||
so.delivery_block_id = so.partner_id.default_delivery_block
|
||||
elif (
|
||||
so.payment_term_id.default_delivery_block_reason_id
|
||||
and not so.delivery_block_id
|
||||
):
|
||||
so.delivery_block_id = (
|
||||
so.payment_term_id.default_delivery_block_reason_id
|
||||
)
|
||||
return new_so
|
||||
Reference in New Issue
Block a user