Skip to content

Commit 072d8e8

Browse files
author
Hadrien Huvelle
committed
[14.0][FIX] delivery_carrier_label_batch: new environmenent execution ordering leads to false behavior on labels regeneration
1 parent 6fdd815 commit 072d8e8

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

delivery_carrier_label_batch/models/stock_batch_picking.py

+33-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Copyright 2013-2019 Camptocamp SA
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3-
from odoo import _, api, fields, models
3+
from contextlib import contextmanager
4+
5+
from odoo import _, api, fields, models, registry, tools
46

57

68
class StockBatchPicking(models.Model):
@@ -36,6 +38,19 @@ def _get_options_to_add(self, carrier=None):
3638
options = carrier.available_option_ids
3739
return options.filtered(lambda rec: rec.mandatory or rec.by_default)
3840

41+
@contextmanager
42+
@api.model
43+
def _do_in_new_env(self):
44+
# Be careful with the test_enable flag, as this behavior won't be the same on tests.
45+
# If in test mode, there won't be any concurrent threading.
46+
if tools.config["test_enable"]:
47+
yield self.env
48+
return
49+
50+
with api.Environment.manage():
51+
with registry(self.env.cr.dbname).cursor() as new_cr:
52+
yield api.Environment(new_cr, self.env.uid, self.env.context)
53+
3954
@api.onchange("carrier_id")
4055
def carrier_id_change(self):
4156
"""Inherit this method in your module"""
@@ -106,10 +121,11 @@ def create(self, values):
106121
return super().create(values)
107122

108123
def purge_tracking_references(self):
109-
"""Purge tracking for each picking and destination package"""
110124
for batch in self:
111125
move_lines = batch.move_line_ids
112-
packs = move_lines.result_package_id.filtered(lambda p: p.parcel_tracking)
126+
packs = move_lines.result_package_id.filtered(
127+
lambda p: p.parcel_tracking
128+
)
113129
if packs:
114130
packs.write({"parcel_tracking": False})
115131
pickings = self.env["stock.picking"].search(
@@ -120,3 +136,17 @@ def purge_tracking_references(self):
120136
)
121137
if pickings:
122138
pickings.write({"carrier_tracking_ref": False})
139+
140+
#WARNING ! Do not call this function unless you know what you do ;-)
141+
def purge_tracking_references_in_new_env(self):
142+
"""Purge tracking for each picking and destination package"""
143+
with self._do_in_new_env() as new_env:
144+
145+
# labels = new_env['shipping.label']
146+
new_self = self.with_env(new_env)
147+
new_self.purge_tracking_references()
148+
# may not be necessary but we leave it here for now
149+
self.env.cr.commit()
150+
151+
152+

delivery_carrier_label_batch/wizard/generate_labels.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ def _find_pack_label(self, pack):
6262
@contextmanager
6363
@api.model
6464
def _do_in_new_env(self):
65+
# Be careful with the test_enable flag, as this behavior won't be the same on tests.
66+
# If in test mode, there won't be any concurrent threading.
6567
if tools.config["test_enable"]:
6668
yield self.env
6769
return
@@ -252,7 +254,7 @@ def action_generate_labels(self):
252254
lambda rec: rec.id not in already_generated_ids
253255
)
254256
else:
255-
to_generate.purge_tracking_references()
257+
to_generate.purge_tracking_references_in_new_env()
256258

257259
for batch in to_generate:
258260
labels = self._get_all_files(batch)

0 commit comments

Comments
 (0)