Skip to content

Commit 7bd6e57

Browse files
fixup! [ADD] sale_stock_partner_delivery_window
1 parent 654d272 commit 7bd6e57

3 files changed

Lines changed: 56 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from . import res_partner
2+
from . import sale_order
23
from . import sale_order_line
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Copyright 2026 Camptocamp SA (https://www.camptocamp.com).
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import api, models
5+
from odoo.tools.misc import format_datetime
6+
7+
8+
class SaleOrder(models.Model):
9+
_inherit = "sale.order"
10+
11+
@api.onchange("commitment_date")
12+
def _onchange_commitment_date_delivery_window(self):
13+
# OVERRIDE: warn if the commitment date doesn't fit the delivery window
14+
if not self.commitment_date or not self.partner_id.delivery_time_preference:
15+
return
16+
next_date = self.partner_id._next_available_delivery_date(self.commitment_date)
17+
if self.commitment_date != next_date:
18+
return {
19+
"warning": {
20+
"title": self.env._("Customer delivery preference not met"),
21+
"message": self.env._(
22+
"The requested date doesn't fit with the customer delivery "
23+
"preference. The next available delivery date is "
24+
"%(next_date)s.",
25+
next_date=format_datetime(self.env, next_date),
26+
),
27+
}
28+
}

sale_stock_partner_delivery_window/tests/test_partner_delivery_window.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from freezegun import freeze_time
55

66
from odoo import Command, fields
7+
from odoo.tests import Form
78

89
from odoo.addons.stock_partner_delivery_window.tests.common import (
910
PartnerDeliveryWindowCommon,
@@ -229,3 +230,29 @@ def test_no_warning_on_picking_scheduled_date(self):
229230
"The scheduled date is the expected date",
230231
)
231232
self.assertFalse(order.picking_ids.partner_delivery_window_warning)
233+
234+
@freeze_time("2020-04-01 10:00:00") # Wednesday
235+
def test_warning_on_commitment_date_not_fitting_delivery_window(self):
236+
"""Verify warning is shown if commitment date doesn't fit the delivery window.
237+
238+
The chosen date is Friday, not fitting the delivery window.
239+
"""
240+
order = self._create_order(self.customer_time_window)
241+
with Form(order) as form, self.assertLogs("odoo.tests.form") as cm:
242+
form.commitment_date = "2020-04-03 10:00:00" # Friday
243+
self.assertTrue(
244+
cm.output[0].startswith("WARNING:odoo.tests.form.onchange:")
245+
)
246+
self.assertIn("Customer delivery preference not met", cm.output[0])
247+
self.assertEqual(
248+
form.commitment_date,
249+
"2020-04-03 10:00:00",
250+
"The user input is respected, though",
251+
)
252+
253+
@freeze_time("2020-04-01 10:00:00") # Wednesday
254+
def test_warning_on_commitment_date_fitting_delivery_window(self):
255+
"""No warning is shown if commitment date fits the delivery window."""
256+
order = self._create_order(self.customer_time_window)
257+
with Form(order) as form, self.assertNoLogs("odoo.tests.form"):
258+
form.commitment_date = "2020-04-02 10:00:00"

0 commit comments

Comments
 (0)