Skip to content

Commit 52622d4

Browse files
committedFeb 26, 2025
fixup! [MIG] delivery_postlogistics: Migration to 18.0
1 parent 894894d commit 52622d4

File tree

5 files changed

+60
-60
lines changed

5 files changed

+60
-60
lines changed
 

‎delivery_postlogistics/__manifest__.py

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"data/partner.xml",
2323
"data/product.xml",
2424
"data/delivery.xml",
25+
"data/package_type.xml",
2526
"views/delivery.xml",
2627
"views/stock_package_type_view.xml",
2728
"views/stock_quant_package_view.xml",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<!-- Copyright 2025 Camptocamp SA
3+
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
4+
<odoo noupdate="1">
5+
<record id="postlogistics_default_package_type" model="stock.package.type">
6+
<field name="name">PostLogistics Default Package Type</field>
7+
<field name="shipper_package_code">ECO</field>
8+
<field name="package_carrier_type">postlogistics</field>
9+
<field name="company_id" ref="base.main_company" />
10+
</record>
11+
</odoo>

‎delivery_postlogistics/models/delivery_carrier.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ class DeliveryCarrier(models.Model):
9696
string="ZPL Patch String", default="^XA^CW0,E:TT0003M_.TTF^XZ^XA^CI28"
9797
)
9898

99+
def default_get(self, fields_list):
100+
res = super().default_get(fields_list)
101+
res["postlogistics_default_package_type_id"] = self.env.ref(
102+
"delivery_postlogistics.postlogistics_default_package_type",
103+
raise_if_not_found=False,
104+
).id
105+
return res
106+
99107
@api.onchange("prod_environment")
100108
def onchange_prod_environment(self):
101109
"""
@@ -133,9 +141,18 @@ def postlogistics_send_shipping(self, pickings):
133141
It will generate the labels for all the packages of the picking.
134142
Packages are mandatory in this case
135143
"""
136-
for pick in pickings:
137-
pick._set_a_default_package()
138-
pick._generate_postlogistics_label()
144+
for picking in pickings:
145+
carrier = picking.carrier_id
146+
move_lines = picking.move_line_ids.filtered(
147+
lambda s: not (s.package_id or s.result_package_id)
148+
)
149+
if move_lines:
150+
default_packaging = carrier.postlogistics_default_package_type_id
151+
package = self.env["stock.quant.package"].create(
152+
[{"package_type_id": default_packaging.id}]
153+
)
154+
move_lines.write({"result_package_id": package.id})
155+
picking._generate_postlogistics_label()
139156

140157
return [{"exact_price": False, "tracking_number": False}]
141158

‎delivery_postlogistics/models/stock_picking.py

+5-30
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,6 @@ def attach_shipping_label(self, label):
7272
self.env["shipping.label"].with_context(**context_attachment).create(data)
7373
)
7474

75-
def _set_a_default_package(self):
76-
"""Pickings using this module must have a package
77-
If not this method put it one silently
78-
"""
79-
# TODO: consider to depends on base_delivery_carrier_label
80-
for picking in self:
81-
move_lines = picking.move_line_ids.filtered(
82-
lambda s: not (s.package_id or s.result_package_id)
83-
)
84-
if move_lines:
85-
carrier = picking.carrier_id
86-
default_packaging = carrier.postlogistics_default_package_type_id
87-
package = self.env["stock.quant.package"].create(
88-
{
89-
"package_type_id": default_packaging
90-
and default_packaging.id
91-
or False
92-
}
93-
)
94-
move_lines.write({"result_package_id": package.id})
95-
9675
def postlogistics_cod_amount(self):
9776
"""Return the PostLogistics Cash on Delivery amount of a picking
9877
@@ -183,7 +162,7 @@ def write_tracking_number_label(self, label_result, packages):
183162
return labels
184163

185164
def _generate_postlogistics_label(
186-
self, webservice_class=None, package_ids=None, skip_attach_file=False
165+
self, webservice_class=None, packages=None, skip_attach_file=False
187166
):
188167
"""Generate labels and write tracking numbers received"""
189168
self.ensure_one()
@@ -192,13 +171,9 @@ def _generate_postlogistics_label(
192171
if webservice_class is None:
193172
webservice_class = PostlogisticsWebService
194173

195-
if package_ids is None:
174+
if packages is None:
196175
packages = self._get_quant_packages_from_picking()
197-
packages = packages.sorted(key=attrgetter("name"))
198-
else:
199-
# restrict on the provided packages
200-
package_obj = self.env["stock.quant.package"]
201-
packages = package_obj.browse(package_ids)
176+
packages = packages.sorted(key=attrgetter("name"))
202177

203178
web_service = webservice_class(company)
204179

@@ -242,10 +217,10 @@ def _cleanup_error_message(self, error_message):
242217
texts = [text for text in texts_no_html.split("\n") if text]
243218
return "\n".join(texts)
244219

245-
def generate_postlogistics_shipping_labels(self, package_ids=None):
220+
def generate_postlogistics_shipping_labels(self, packages=None):
246221
"""Add label generation for PostLogistics"""
247222
self.ensure_one()
248-
return self._generate_postlogistics_label(package_ids=package_ids)
223+
return self._generate_postlogistics_label(packages=packages)
249224

250225
def action_generate_carrier_label(self):
251226
self.ensure_one()

‎delivery_postlogistics/postlogistics/web_service.py

+23-27
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,15 @@ def _prepare_attributes(
224224
and pack.package_type_id
225225
or picking.carrier_id.postlogistics_default_package_type_id
226226
)
227-
services = package_type._get_shipper_package_code_list()
227+
package_codes = package_type._get_shipper_package_code_list()
228228

229229
if pack_weight:
230230
total_weight = pack_weight
231231
else:
232232
total_weight = pack.shipping_weight if pack else picking.shipping_weight
233233
total_weight *= 1000
234234

235-
if not services:
235+
if not package_codes:
236236
raise UserError(
237237
picking.env._(
238238
"No PostLogistics packaging services found "
@@ -243,51 +243,51 @@ def _prepare_attributes(
243243
# Activate phone notification ZAW3213
244244
# if phone call notification is set on partner
245245
if picking.partner_id.postlogistics_notification == "phone":
246-
services.append("ZAW3213")
246+
package_codes.append("ZAW3213")
247247

248248
attributes = {
249249
"weight": int(total_weight),
250250
}
251251

252252
# Remove the services if the delivery fixed date is not set
253-
if "ZAW3217" in services:
253+
if "ZAW3217" in package_codes:
254254
if picking.delivery_fixed_date:
255255
attributes["deliveryDate"] = picking.delivery_fixed_date
256256
else:
257-
services.remove("ZAW3217")
257+
package_codes.remove("ZAW3217")
258258

259259
# parcelNo / parcelTotal cannot be used if service ZAW3218 is not activated
260-
if "ZAW3218" in services:
260+
if "ZAW3218" in package_codes:
261261
if pack_total > 1:
262262
attributes.update(
263263
{"parcelTotal": pack_total - 1, "parcelNo": pack_num - 1}
264264
)
265265
else:
266-
services.remove("ZAW3218")
266+
package_codes.remove("ZAW3218")
267267

268-
if "ZAW3219" in services and picking.delivery_place:
268+
if "ZAW3219" in package_codes and picking.delivery_place:
269269
attributes["deliveryPlace"] = picking.delivery_place
270270
if picking.carrier_id.postlogistics_proclima_logo:
271271
attributes["proClima"] = True
272272
else:
273273
attributes["proClima"] = False
274274

275-
attributes["przl"] = services
275+
attributes["przl"] = package_codes
276276

277277
return attributes
278278

279-
def _get_itemid(self, picking, pack_no):
279+
def _get_itemid(self, picking, package):
280280
"""Allowed characters are alphanumeric plus `+`, `-` and `_`
281281
Last `+` separates picking name and package number (if any)
282282
283283
:return string: itemid
284284
285285
"""
286286
name = _compile_itemid.sub("", picking.name)
287-
if not pack_no:
287+
if not package:
288288
return name
289289

290-
pack_no = _compile_itemid.sub("", pack_no)
290+
pack_no = _compile_itemid.sub("", package.name)
291291
codes = [name, pack_no]
292292
return "+".join(c for c in codes if c)
293293

@@ -312,7 +312,7 @@ def _get_item_additional_data(self, picking, package=None):
312312
result += cod_attributes
313313
return result
314314

315-
def _get_item_number(self, picking, pack_num):
315+
def _get_item_number(self, picking, package):
316316
"""Generate the tracking reference for the last 8 digits
317317
of tracking number of the label.
318318
@@ -322,15 +322,14 @@ def _get_item_number(self, picking, pack_num):
322322
e.g. 03000042 for 3rd pack of picking OUT/19000042
323323
"""
324324
picking_num = _compile_itemnum.sub("", picking.name)
325-
return "%02d%s" % (pack_num, picking_num[-6:].zfill(6))
325+
return "%02d%s" % (package.name, picking_num[-6:].zfill(6))
326326

327327
def _prepare_item_list(self, picking, recipient, packages):
328328
"""Return a list of item made from the pickings"""
329329
carrier = picking.carrier_id
330330
item_list = []
331-
pack_counter = 1
332331

333-
def add_item(package=None):
332+
def add_item(counter=1, package=None):
334333
assert picking or package
335334
itemid = self._get_itemid(picking, package.name if package else None)
336335
item = {
@@ -345,7 +344,7 @@ def add_item(package=None):
345344
picking_num = _compile_itemnum.sub("", picking.name)
346345
item_number = f"9{picking_num[-7:].zfill(7)}"
347346
else:
348-
item_number = self._get_item_number(picking, pack_counter)
347+
item_number = self._get_item_number(picking, counter)
349348
item["itemNumber"] = item_number
350349

351350
additional_data = self._get_item_additional_data(picking, package=package)
@@ -354,18 +353,15 @@ def add_item(package=None):
354353

355354
item_list.append(item)
356355

357-
if not packages:
358-
attributes = self._prepare_attributes(picking)
359-
add_item()
360-
return item_list
361-
362-
pack_total = len(packages)
363-
for pack in packages:
356+
total_packages = len(packages)
357+
for index, package in enumerate(packages):
364358
attributes = self._prepare_attributes(
365-
picking, pack, pack_counter, pack_total
359+
picking, package, index, total_packages
366360
)
367-
add_item(package=pack)
368-
pack_counter += 1
361+
add_item(counter=index, package=package)
362+
else:
363+
attributes = self._prepare_attributes(picking)
364+
add_item()
369365
return item_list
370366

371367
def _prepare_label_definition(self, picking):

0 commit comments

Comments
 (0)