50 lines
1.7 KiB
Python
Executable File
50 lines
1.7 KiB
Python
Executable File
# Copyright 2017 Denis Leemann, Camptocamp SA
|
|
# Copyright 2021 Iván Todorovich, Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = "sale.order"
|
|
|
|
manual_delivery = fields.Boolean(
|
|
help="If enabled, the deliveries are not created at SO confirmation. "
|
|
"You need to use the Create Delivery button in order to reserve "
|
|
"and ship the goods.",
|
|
)
|
|
|
|
has_pending_delivery = fields.Boolean(
|
|
string="Delivery pending?",
|
|
compute="_compute_delivery_pending",
|
|
)
|
|
|
|
def _compute_delivery_pending(self):
|
|
for rec in self:
|
|
lines_pending = rec.order_line.filtered(
|
|
lambda x: x.product_id.type != "service" and x.qty_to_procure > 0
|
|
)
|
|
rec.has_pending_delivery = bool(lines_pending)
|
|
|
|
@api.onchange("team_id")
|
|
def _onchange_team_id(self):
|
|
self.manual_delivery = self.team_id.manual_delivery
|
|
|
|
def action_manual_delivery_wizard(self):
|
|
self.ensure_one()
|
|
xmlid = "sale_manual_delivery.action_wizard_manual_delivery"
|
|
action = self.env["ir.actions.actions"]._for_xml_id(xmlid)
|
|
action["context"] = {"default_carrier_id": self.carrier_id.id}
|
|
return action
|
|
|
|
@api.constrains("manual_delivery")
|
|
def _check_manual_delivery(self):
|
|
if any(rec.state not in ["draft", "sent"] for rec in self):
|
|
raise UserError(
|
|
_(
|
|
"You can only change to/from manual delivery"
|
|
" in a quote, not a confirmed order"
|
|
)
|
|
)
|