1
1
# Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
4
5
from unittest import mock
5
6
6
7
from lxml import etree
7
8
8
- from odoo .tests .common import SavepointCase
9
+ from odoo .tests .common import Form , SavepointCase
9
10
from odoo .tools .safe_eval import safe_eval
10
11
11
12
SEND_SHIPPING_RETURN_VALUE = [{"exact_price" : 10.0 , "tracking_number" : "TEST" }]
@@ -15,7 +16,11 @@ class TestDeliverySendToShipper(SavepointCase):
15
16
@classmethod
16
17
def setUpClass (cls ):
17
18
super ().setUpClass ()
18
- cls .env = cls .env (context = dict (cls .env .context , tracking_disable = True ))
19
+ cls .env = cls .env (
20
+ context = dict (
21
+ cls .env .context , tracking_disable = True , set_default_package = False
22
+ )
23
+ )
19
24
cls .wh = cls .env .ref ("stock.warehouse0" )
20
25
cls .wh .delivery_steps = "pick_pack_ship"
21
26
cls .stock_location = cls .env .ref ("stock.stock_location_stock" )
@@ -82,10 +87,19 @@ def setUpClass(cls):
82
87
)
83
88
(cls .picking | cls .packing | cls .shipping ).sale_id = cls .order
84
89
85
- def _validate_picking (self , picking ):
90
+ def _validate_picking (self , picking , qty_done = None ):
86
91
for ml in picking .move_line_ids :
87
- ml .qty_done = ml .product_uom_qty
88
- picking ._action_done ()
92
+ ml .qty_done = qty_done or ml .product_uom_qty
93
+ action_data = picking .button_validate ()
94
+ if not action_data or action_data is True :
95
+ return picking .browse ()
96
+ backorder_wizard = Form (
97
+ self .env ["stock.backorder.confirmation" ].with_context (
98
+ action_data ["context" ]
99
+ )
100
+ ).save ()
101
+ backorder_wizard .process ()
102
+ return self .env ["stock.picking" ].search ([("backorder_id" , "=" , picking .id )])
89
103
90
104
def test_send_to_shipper_on_ship (self ):
91
105
"""Check sending of delivery notification on ship.
@@ -195,3 +209,47 @@ def test_picking_fields_view_get(self):
195
209
attrs_str = button_send_to_shipper .attrib ["attrs" ]
196
210
attrs = safe_eval (attrs_str )
197
211
self .assertIn (("delivery_notification_sent" , "=" , True ), attrs ["invisible" ])
212
+
213
+ def test_send_to_shipper_on_partial_pack (self ):
214
+ """Check that the field delivery_notification_sent
215
+ is not set on a pack backorder
216
+ but on the ship transfer
217
+ """
218
+ with mock .patch .object (
219
+ type (self .carrier_on_pack ),
220
+ "send_shipping" ,
221
+ return_value = SEND_SHIPPING_RETURN_VALUE ,
222
+ ):
223
+ self .shipping .carrier_id = self .carrier_on_pack
224
+ self ._validate_picking (self .picking )
225
+ pack_backorder = self ._validate_picking (self .packing , 5 )
226
+ self .assertTrue (self .shipping .delivery_notification_sent )
227
+ self .assertFalse (pack_backorder .delivery_notification_sent )
228
+ self ._validate_picking (pack_backorder , 5 )
229
+ self .assertTrue (self .shipping .delivery_notification_sent )
230
+ backorder = self ._validate_picking (self .shipping , 5 )
231
+ self .assertEqual (self .shipping .state , "done" )
232
+ self .assertTrue (self .shipping .delivery_notification_sent )
233
+ self .assertTrue (backorder .delivery_notification_sent )
234
+ backorder2 = self ._validate_picking (backorder , 5 )
235
+ self .assertFalse (backorder2 )
236
+ self .assertTrue (backorder .delivery_notification_sent )
237
+
238
+ def test_send_to_shipper_on_pack_partial_shipping (self ):
239
+ """Check that delivery_notification_sent is set on a ship backorder"""
240
+ with mock .patch .object (
241
+ type (self .carrier_on_pack ),
242
+ "send_shipping" ,
243
+ return_value = SEND_SHIPPING_RETURN_VALUE ,
244
+ ):
245
+ self .shipping .carrier_id = self .carrier_on_pack
246
+ self ._validate_picking (self .picking )
247
+ self ._validate_picking (self .packing )
248
+ self .assertTrue (self .shipping .delivery_notification_sent )
249
+ backorder = self ._validate_picking (self .shipping , 5 )
250
+ self .assertEqual (self .shipping .state , "done" )
251
+ self .assertTrue (self .shipping .delivery_notification_sent )
252
+ self .assertTrue (backorder .delivery_notification_sent )
253
+ backorder2 = self ._validate_picking (backorder , 5 )
254
+ self .assertFalse (backorder2 )
255
+ self .assertTrue (backorder .delivery_notification_sent )
0 commit comments