Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] base_delivery_carrier_label: Externalize automatic package creation #643

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .copier-answers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ odoo_test_flavor: Both
odoo_version: 16.0
org_name: Odoo Community Association (OCA)
org_slug: OCA
rebel_module_groups: []
rebel_module_groups:
- delivery_postlogistics
repo_description: 'TODO: add repo description.'
repo_name: delivery-carrier
repo_slug: delivery-carrier
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,17 @@ jobs:
matrix:
include:
- container: ghcr.io/oca/oca-ci/py3.10-odoo16.0:latest
include: "delivery_postlogistics"
name: test with Odoo
- container: ghcr.io/oca/oca-ci/py3.10-ocb16.0:latest
include: "delivery_postlogistics"
name: test with OCB
- container: ghcr.io/oca/oca-ci/py3.10-odoo16.0:latest
exclude: "delivery_postlogistics"
makepot: "true"
name: test with Odoo
- container: ghcr.io/oca/oca-ci/py3.10-ocb16.0:latest
exclude: "delivery_postlogistics"
name: test with OCB
makepot: "true"
services:
Expand All @@ -49,6 +58,9 @@ jobs:
POSTGRES_DB: odoo
ports:
- 5432:5432
env:
INCLUDE: "${{ matrix.include }}"
EXCLUDE: "${{ matrix.exclude }}"
steps:
- uses: actions/checkout@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion base_delivery_carrier_label/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Base module for carrier labels
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0e3f544d15b8a8af6e102e1395183b4b0b410f0b7645d584c7c08ddf15db6329
!! source digest: sha256:f7ed36a9e9527712e936283360ca4ba30399410f3201bba3ef04069d54a3c8a3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down
1 change: 1 addition & 0 deletions base_delivery_carrier_label/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"category": "Delivery",
"depends": [
"delivery",
"delivery_automatic_package",
"delivery_carrier_info",
],
"website": "https://github.com/OCA/delivery-carrier",
Expand Down
13 changes: 0 additions & 13 deletions base_delivery_carrier_label/models/stock_picking.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,8 @@ def attach_shipping_label(self, label):
self.env["shipping.label"].with_context(**context_attachment).create(data)
)

def _set_a_default_package(self):
"""Pickings using this module must have a package
If not this method put it one silently
"""
for picking in self:
move_lines = picking.move_line_ids.filtered(
lambda s: not s.result_package_id
)
if move_lines:
picking._put_in_pack(move_lines)

def send_to_shipper(self):
self.ensure_one()
if self.env.context.get("set_default_package", True):
self._set_a_default_package()
# We consider that label has already been generated in case we have a
# carrier tracking ref, this way we may print the labels before shipping
# and not generated in second time during shipment
Expand Down
3 changes: 2 additions & 1 deletion base_delivery_carrier_label/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand Down Expand Up @@ -366,7 +367,7 @@ <h1 class="title">Base module for carrier labels</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0e3f544d15b8a8af6e102e1395183b4b0b410f0b7645d584c7c08ddf15db6329
!! source digest: sha256:f7ed36a9e9527712e936283360ca4ba30399410f3201bba3ef04069d54a3c8a3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/delivery-carrier/tree/16.0/base_delivery_carrier_label"><img alt="OCA/delivery-carrier" src="https://img.shields.io/badge/github-OCA%2Fdelivery--carrier-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/delivery-carrier-16-0/delivery-carrier-16-0-base_delivery_carrier_label"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module adds some function and generic stuff to help for carrier label generation.
Expand Down
11 changes: 7 additions & 4 deletions base_delivery_carrier_label/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from . import test_get_weight
from . import test_manifest_wizard
from . import test_helper_functions
from . import test_send
from . import (
test_get_weight,
test_helper_functions,
test_manifest_wizard,
test_packages,
test_send,
)
8 changes: 8 additions & 0 deletions base_delivery_carrier_label/tests/carrier_label_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,11 @@ def test_labels(self):
"""Test if labels are created by the button"""
self.picking.send_to_shipper()
self._assert_labels()

def test_labels_with_packages(self):
"""Test if labels are created by the button"""
self.picking.send_to_shipper()
if self.picking.carrier_id.automatic_package_creation:
self.assertTrue(self.picking.has_packages)
else:
self.assertFalse(self.picking.has_packages)
27 changes: 27 additions & 0 deletions base_delivery_carrier_label/tests/models/carrier_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from odoo import fields, models


# pylint: disable=consider-merging-classes-inherited
class DeliveryCarrierTest(models.Model):

_inherit = "delivery.carrier"

delivery_type = fields.Selection(
selection_add=[("base_delivery_carrier_label", "Base Delivery Carrier Label")],
ondelete={"base_delivery_carrier_label": "cascade"},
)

def base_delivery_carrier_label_send_shipping(self, pickings):
res = []
for picking in pickings:
tracking_number = "123231"
res += [
{
"tracking_number": "123231",
"exact_price": 0.0,
"labels": picking._get_base_delivery_carrier_labels(
tracking_base=tracking_number
),
}
]
return res
27 changes: 27 additions & 0 deletions base_delivery_carrier_label/tests/models/stock_picking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import base64

from odoo import models


# pylint: disable=consider-merging-classes-inherited
class StockPicking(models.Model):

_inherit = "stock.picking"

def _get_base_delivery_carrier_labels(self, tracking_base):
self.ensure_one()
i = 1
result = list()
for package in self.move_line_ids.package_level_id.package_id:
number = tracking_base + "-" + str(i)
result.append(
{
"package_id": package.id,
"tracking_number": number,
"name": number,
"file": base64.b64encode(b"test"),
"file_type": "zpl2",
}
)
i += 1
return result
12 changes: 11 additions & 1 deletion base_delivery_carrier_label/tests/test_get_weight.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging

from odoo.tests.common import TransactionCase

Expand Down Expand Up @@ -217,7 +218,16 @@ def test_get_weight_with_uom(self):
# end of prepare data

# because uom conversion is not implemented
self.assertEqual(package.weight, False)
with self.assertLogs(
"odoo.addons.base_delivery_carrier_label", level=logging.WARNING
) as cm:
self.assertEqual(package.weight, False)
msg = cm.output[0]
self.assertIn(
"odoo.addons.base_delivery_carrier_label.models.stock_move_line:"
"Type conversion not implemented for product",
msg,
)

# if one day, uom conversion is implemented:
# self.assertEqual(package.get_weight(), products_weight)
Expand Down
65 changes: 65 additions & 0 deletions base_delivery_carrier_label/tests/test_packages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright 2020 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo_test_helper import FakeModelLoader

from .carrier_label_case import CarrierLabelCase


class TestCarrierPackages(CarrierLabelCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
from .models.carrier_test import DeliveryCarrierTest
from .models.stock_picking import StockPicking

cls.loader.update_registry(
(
DeliveryCarrierTest,
StockPicking,
)
)
product = cls.env["product.product"].create(
{
"name": "Test Delivery Product",
"type": "service",
}
)
cls.carrier = cls.env["delivery.carrier"].create(
{
"name": "Test Carrier Packages",
"product_id": product.id,
"delivery_type": "base_delivery_carrier_label",
}
)

@classmethod
def tearDownClass(cls) -> None:
cls.loader.restore_registry()
super().tearDownClass()

def _get_carrier(self):
return self.carrier

def test_labels_with_packages(self):
"""
Test an example of label assignation to a picking's package
"""
self.picking.carrier_id.automatic_package_creation_at_delivery = True
self.picking.send_to_shipper()

self.assertTrue(self.picking.has_packages)

lines = self.picking.move_line_ids.filtered("package_level_id")

self.assertEqual("123231-1", lines.package_level_id.package_id.parcel_tracking)

def test_labels_without_packages(self):
"""
Test an example of label assignation to a picking without package
"""
self.picking.carrier_id.automatic_package_creation_at_delivery = False
self.picking.send_to_shipper()
self.assertFalse(self.picking.has_packages)
self.assertEqual("123231", self.picking.carrier_tracking_ref)
1 change: 1 addition & 0 deletions delivery_roulier/tests/test_delivery_roulier.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def setUp(self):
"delivery_type": "test",
"product_id": delivery_product.id,
"carrier_account_id": self.account.id,
"automatic_package_creation_at_delivery": True,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@florian-dacosta I've updated the test here to get the same behavior as before.

Copy link
Contributor

@mt-software-de mt-software-de Mar 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A migration script is missing to set the value also on existing carriers,
otherwise it is a breaking change.

}
)
partner = self.env["res.partner"].create(
Expand Down