62 lines
2.3 KiB
Python
Executable File
62 lines
2.3 KiB
Python
Executable File
# 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
|