diff --git a/delivery_carrier_partner_account/__init__.py b/delivery_carrier_partner_account/__init__.py
index 0650744..9b42961 100644
--- a/delivery_carrier_partner_account/__init__.py
+++ b/delivery_carrier_partner_account/__init__.py
@@ -1 +1,2 @@
from . import models
+from . import wizard
diff --git a/delivery_carrier_partner_account/__manifest__.py b/delivery_carrier_partner_account/__manifest__.py
index 7e08806..5b50754 100644
--- a/delivery_carrier_partner_account/__manifest__.py
+++ b/delivery_carrier_partner_account/__manifest__.py
@@ -35,6 +35,7 @@
"views/res_partner_views.xml",
"views/delivery_carrier_views.xml",
"views/delivery_carrier_account_views.xml",
+ "wizard/choose_delivery_carrier_views.xml",
],
"assets": {},
"installable": True,
diff --git a/delivery_carrier_partner_account/models/carrier_account_mixin.py b/delivery_carrier_partner_account/models/carrier_account_mixin.py
index 60be26c..5b43ce1 100644
--- a/delivery_carrier_partner_account/models/carrier_account_mixin.py
+++ b/delivery_carrier_partner_account/models/carrier_account_mixin.py
@@ -39,7 +39,6 @@ class CarrierAccountMixin(models.AbstractModel):
Third Party: A third party will be billed (account information needed)
"""
),
- tracking=1,
string="Delivery Billing Mode",
)
@@ -156,10 +155,12 @@ class CarrierAccountMixin(models.AbstractModel):
if (
not rec.delivery_billing_mode
or rec.delivery_billing_mode == "no charge"
- ) and rec.carrier_account_id:
- raise UserError(
- _("No carrier account should be set for no charge delivery.")
- )
+ ):
+ if rec.carrier_account_id:
+ raise UserError(
+ _("No carrier account should be set for no charge delivery.")
+ )
+ continue
# We allow empty carrier account for third party since we can't always
# set it automatically.
if (
diff --git a/delivery_carrier_partner_account/tests/__init__.py b/delivery_carrier_partner_account/tests/__init__.py
index 26d511d..94c2ac7 100644
--- a/delivery_carrier_partner_account/tests/__init__.py
+++ b/delivery_carrier_partner_account/tests/__init__.py
@@ -1 +1,4 @@
+from . import test_carrier_account_common
from . import test_carrier_account_mixin
+from . import test_choose_delivery_carrier
+from . import test_sale_order
diff --git a/delivery_carrier_partner_account/tests/test_carrier_account_common.py b/delivery_carrier_partner_account/tests/test_carrier_account_common.py
new file mode 100644
index 0000000..cfff7cf
--- /dev/null
+++ b/delivery_carrier_partner_account/tests/test_carrier_account_common.py
@@ -0,0 +1,80 @@
+from odoo.tests import TransactionCase, tagged
+from odoo import Command
+
+
+@tagged("-at_install", "post_install")
+class TestCarrierAccountCommon(TransactionCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.client_partner = cls.env["res.partner"].create(
+ {
+ "name": "Test partner",
+ }
+ )
+ cls.random_partner = cls.env["res.partner"].create(
+ {
+ "name": "Third Party",
+ }
+ )
+ cls.delivery_carrier_1 = cls.env.ref("delivery.free_delivery_carrier")
+ cls.delivery_carrier_2 = cls.env.ref("delivery.delivery_local_delivery")
+ cls.client_account_1 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.client_partner.id,
+ "delivery_carrier_id": cls.delivery_carrier_1.id,
+ "account_number": "1234567890",
+ }
+ )
+ cls.client_account_2 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.client_partner.id,
+ "delivery_carrier_id": cls.delivery_carrier_2.id,
+ "account_number": "0987654321",
+ }
+ )
+ cls.sender_account_1 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.env.company.partner_id.id,
+ "delivery_carrier_id": cls.delivery_carrier_1.id,
+ "account_number": "hijklmn",
+ }
+ )
+ cls.sender_account_2 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.env.company.partner_id.id,
+ "delivery_carrier_id": cls.delivery_carrier_2.id,
+ "account_number": "abcdefg",
+ }
+ )
+ cls.third_party_account_1 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.random_partner.id,
+ "delivery_carrier_id": cls.delivery_carrier_1.id,
+ "account_number": "8910111213",
+ }
+ )
+ cls.third_party_account_2 = cls.env["delivery.carrier.account"].create(
+ {
+ "partner_id": cls.random_partner.id,
+ "delivery_carrier_id": cls.delivery_carrier_2.id,
+ "account_number": "zzzzzzzzz",
+ }
+ )
+
+ def _create_sale_order(self, billing_mode, carrier, account):
+ vals = {
+ "partner_id": self.client_partner.id,
+ "carrier_id": carrier.id,
+ "delivery_billing_mode": billing_mode,
+ "order_line": [
+ Command.create(
+ {
+ "product_id": self.env.ref("product.product_product_4").id,
+ }
+ )
+ ],
+ }
+ if account:
+ vals["carrier_account_id"] = account.id
+ return self.env["sale.order"].create(vals)
diff --git a/delivery_carrier_partner_account/tests/test_carrier_account_mixin.py b/delivery_carrier_partner_account/tests/test_carrier_account_mixin.py
index 0066dcf..bbf6b2e 100644
--- a/delivery_carrier_partner_account/tests/test_carrier_account_mixin.py
+++ b/delivery_carrier_partner_account/tests/test_carrier_account_mixin.py
@@ -1,68 +1,8 @@
-from odoo.tests import TransactionCase, tagged, mute_logger
-from odoo import Command
+from .test_carrier_account_common import TestCarrierAccountCommon
from odoo.exceptions import UserError
-@tagged("-at_install", "post_install")
-class TestCarrierAccountMixin(TransactionCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
- cls.client_partner = cls.env["res.partner"].create(
- {
- "name": "Test partner",
- }
- )
- cls.random_partner = cls.env["res.partner"].create(
- {
- "name": "Third Party",
- }
- )
- cls.delivery_carrier_1 = cls.env.ref("delivery.free_delivery_carrier")
- cls.delivery_carrier_2 = cls.env.ref("delivery.delivery_local_delivery")
- cls.client_account_1 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.client_partner.id,
- "delivery_carrier_id": cls.delivery_carrier_1.id,
- "account_number": "1234567890",
- }
- )
- cls.client_account_2 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.client_partner.id,
- "delivery_carrier_id": cls.delivery_carrier_2.id,
- "account_number": "0987654321",
- }
- )
- cls.sender_account_1 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.env.company.partner_id.id,
- "delivery_carrier_id": cls.delivery_carrier_1.id,
- "account_number": "hijklmn",
- }
- )
- cls.sender_account_2 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.env.company.partner_id.id,
- "delivery_carrier_id": cls.delivery_carrier_2.id,
- "account_number": "abcdefg",
- }
- )
- cls.third_party_account_1 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.random_partner.id,
- "delivery_carrier_id": cls.delivery_carrier_1.id,
- "account_number": "8910111213",
- }
- )
- cls.third_party_account_2 = cls.env["delivery.carrier.account"].create(
- {
- "partner_id": cls.random_partner.id,
- "delivery_carrier_id": cls.delivery_carrier_2.id,
- "account_number": "zzzzzzzzz",
- }
- )
-
+class TestCarrierAccountMixin(TestCarrierAccountCommon):
def test_compute_account_collect_order(self):
order = self._create_sale_order(
"collect",
@@ -145,20 +85,3 @@ class TestCarrierAccountMixin(TransactionCase):
self._create_sale_order(
"third party", self.delivery_carrier_1, self.sender_account_1
)
-
- def _create_sale_order(self, billing_mode, carrier, account):
- vals = {
- "partner_id": self.client_partner.id,
- "carrier_id": carrier.id,
- "delivery_billing_mode": billing_mode,
- "order_line": [
- Command.create(
- {
- "product_id": self.env.ref("product.product_product_4").id,
- }
- )
- ],
- }
- if account:
- vals["carrier_account_id"] = account.id
- return self.env["sale.order"].create(vals)
diff --git a/delivery_carrier_partner_account/tests/test_choose_delivery_carrier.py b/delivery_carrier_partner_account/tests/test_choose_delivery_carrier.py
new file mode 100644
index 0000000..8449a87
--- /dev/null
+++ b/delivery_carrier_partner_account/tests/test_choose_delivery_carrier.py
@@ -0,0 +1,23 @@
+from .test_carrier_account_common import TestCarrierAccountCommon
+
+
+class TestChooseDeliveryCarrier(TestCarrierAccountCommon):
+ def test_sale_order_add_transport(self):
+ order = self.env["sale.order"].create(
+ {
+ "partner_id": self.client_partner.id,
+ }
+ )
+ wizard_action = order.action_open_delivery_wizard()
+
+ wizard = (
+ self.env[wizard_action["res_model"]]
+ .with_context(wizard_action["context"])
+ .create({})
+ )
+ wizard.carrier_id = self.delivery_carrier_1
+ wizard.delivery_billing_mode = "collect"
+ wizard.button_confirm()
+ self.assertEqual(order.carrier_id, self.delivery_carrier_1)
+ self.assertEqual(order.carrier_account_id, self.client_account_1)
+ self.assertEqual(order.delivery_billing_mode, "collect")
diff --git a/delivery_carrier_partner_account/tests/test_sale_order.py b/delivery_carrier_partner_account/tests/test_sale_order.py
new file mode 100644
index 0000000..288cc98
--- /dev/null
+++ b/delivery_carrier_partner_account/tests/test_sale_order.py
@@ -0,0 +1,8 @@
+from .test_carrier_account_common import TestCarrierAccountCommon
+
+
+class TestSalesOrder(TestCarrierAccountCommon):
+ def test_sales_order_creation_with_default_account(self):
+ self.client_partner.property_delivery_carrier_id = self.delivery_carrier_1
+ self.client_partner.default_carrier_account_id = self.client_account_1
+ self.env["sale.order"].create({"partner_id": self.client_partner.id})
diff --git a/delivery_carrier_partner_account/views/sale_order_views.xml b/delivery_carrier_partner_account/views/sale_order_views.xml
new file mode 100644
index 0000000..da2d039
--- /dev/null
+++ b/delivery_carrier_partner_account/views/sale_order_views.xml
@@ -0,0 +1,11 @@
+
+
+
+ sale.order.view.form
+
+ sale.order
+
+
+
+
+
\ No newline at end of file
diff --git a/delivery_carrier_partner_account/wizard/__init__.py b/delivery_carrier_partner_account/wizard/__init__.py
new file mode 100644
index 0000000..d052299
--- /dev/null
+++ b/delivery_carrier_partner_account/wizard/__init__.py
@@ -0,0 +1 @@
+from . import choose_delivery_carrier
diff --git a/delivery_carrier_partner_account/wizard/choose_delivery_carrier.py b/delivery_carrier_partner_account/wizard/choose_delivery_carrier.py
new file mode 100644
index 0000000..92257c5
--- /dev/null
+++ b/delivery_carrier_partner_account/wizard/choose_delivery_carrier.py
@@ -0,0 +1,21 @@
+from odoo import models, fields
+
+
+class ChooseDeliveryCarrier(models.TransientModel):
+ """Add options to select the carrier account and billing mode."""
+
+ _inherit = ["choose.delivery.carrier", "carrier.account.mixin"]
+ _name = "choose.delivery.carrier"
+
+ sender_id = fields.Many2one(related="company_id.partner_id")
+ recipient_id = fields.Many2one(related="partner_id")
+
+ def button_confirm(self):
+ res = super().button_confirm()
+ extra_vals = {}
+ if self.delivery_billing_mode:
+ extra_vals.update(delivery_billing_mode=self.delivery_billing_mode)
+ if self.carrier_account_id:
+ extra_vals.update(carrier_account_id=self.carrier_account_id)
+ self.order_id.write(extra_vals)
+ return res
diff --git a/delivery_carrier_partner_account/wizard/choose_delivery_carrier_views.xml b/delivery_carrier_partner_account/wizard/choose_delivery_carrier_views.xml
new file mode 100644
index 0000000..8cb2291
--- /dev/null
+++ b/delivery_carrier_partner_account/wizard/choose_delivery_carrier_views.xml
@@ -0,0 +1,18 @@
+
+
+
+ choose.delivery.carrier.view.form
+ choose.delivery.carrier
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file