Skip to content

Commit

Permalink
sale_order_carrier_auto_assign: fix all service
Browse files Browse the repository at this point in the history
  • Loading branch information
jbaudoux committed Apr 19, 2024
1 parent 622322f commit 3279619
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 16 deletions.
4 changes: 2 additions & 2 deletions sale_order_carrier_auto_assign/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
"name": "Sale Order Carrier Auto Assign",
"summary": "Auto assign delivery carrier on sale order confirmation",
"version": "16.0.1.1.0",
"development_status": "Alpha",
"category": "Operations/Inventory/Delivery",
"website": "https://github.com/OCA/sale-workflow",
"author": "Camptocamp, Odoo Community Association (OCA)",
"author": "Camptocamp, BCIM, Odoo Community Association (OCA)",
"maintainers": ["jbaudoux"],
"license": "AGPL-3",
"data": ["views/res_config_settings_views.xml"],
"application": False,
Expand Down
3 changes: 3 additions & 0 deletions sale_order_carrier_auto_assign/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@
class ResCompany(models.Model):
_inherit = "res.company"

# Migration note 17.0: rename field to sale_auto_assign_carrier_on_confirm
# and integrate sale_auto_assign_carier_on_create from
# delivery_auto_refresh module in OCA/delivery-carrier
carrier_auto_assign = fields.Boolean()
3 changes: 2 additions & 1 deletion sale_order_carrier_auto_assign/models/sale_order.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2020 Camptocamp SA
# Copyright 2024 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import models

Expand All @@ -9,7 +10,7 @@ class SaleOrder(models.Model):

def action_confirm(self):
for rec in self:
if not rec.company_id.carrier_auto_assign:
if not rec.company_id.carrier_auto_assign or rec.is_all_service:
continue
rec._add_delivery_carrier_on_confirmation()
return super().action_confirm()
Expand Down
4 changes: 2 additions & 2 deletions sale_order_carrier_auto_assign/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
To enable sale order carrier auto assign:
#. Go to *Settings > Sales > Shipping*.

#. Go to *Settings > Sales > Carrier Auto Assign*.
* Enable on confirmation: the carrier and delivery line will be set.
2 changes: 1 addition & 1 deletion sale_order_carrier_auto_assign/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
* Akim Juillerat <akim.juillerat@camptocamp.com>
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
* Son (Ho Dac) <hodacson.6491@gmail.com>
* Phuc (Tran Thanh) <phuc@trobz.com>
* Telmo Santos <telmo.santos@camptocamp.com>
* Tris Doan <tridm@trobz.com>

4 changes: 4 additions & 0 deletions sale_order_carrier_auto_assign/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
This module assigns automatically delivery carrier on sale order confirmation.

You may also have a look at the module delivery_auto_refresh in
delivery-carrier repository that assigns the carrier on creation and
automatically refresh the cost line while editing the sales quotation.
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,31 @@
from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT


class TestSaleOrderCarrierAutoAssign(TransactionCase):
class TestSaleOrderCarrierAutoAssignCommon(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env["base"].with_context(**DISABLED_MAIL_CONTEXT).env
cls.settings = cls.env["res.config.settings"].create({})
cls.settings.carrier_auto_assign = True
cls.settings.set_values()

cls.partner = cls.env.ref("base.res_partner_2")
product = cls.env.ref("product.product_product_9")
cls.product_storable = cls.env.ref("product.product_product_9")
cls.product_service = cls.env.ref("product.expense_product")
cls.delivery_local_delivery = cls.env.ref("delivery.delivery_local_delivery")
cls.delivery_local_delivery.fixed_price = 10
sale_order_form = Form(cls.env["sale.order"])
sale_order_form.partner_id = cls.partner
with sale_order_form.order_line.new() as line_form:
line_form.product_id = product
cls.sale_order = sale_order_form.save()


class TestSaleOrderCarrierAutoAssignOnConfirm(TestSaleOrderCarrierAutoAssignCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.settings = cls.env["res.config.settings"].create({})
cls.settings.carrier_auto_assign_on_confirm = True
cls.settings.set_values()
cls.sale_order_form = Form(cls.env["sale.order"])
cls.sale_order_form.partner_id = cls.partner
with cls.sale_order_form.order_line.new() as line_form:
line_form.product_id = cls.product_storable
cls.sale_order = cls.sale_order_form.save()

def test_sale_order_carrier_auto_assign(self):
self.assertEqual(
Expand All @@ -36,9 +43,42 @@ def test_sale_order_carrier_auto_assign(self):
delivery_rate = self.delivery_local_delivery.rate_shipment(self.sale_order)
self.assertEqual(delivery_line.price_unit, delivery_rate["carrier_price"])

def test_sale_order_carrier_auto_assign_disabled(self):
self.assertEqual(
self.partner.property_delivery_carrier_id, self.delivery_local_delivery
)
self.assertFalse(self.sale_order.carrier_id)
self.settings.carrier_auto_assign_on_confirm = False
self.settings.set_values()
self.sale_order.action_confirm()
self.assertEqual(self.sale_order.state, "sale")
self.assertFalse(self.sale_order.carrier_id)

def test_sale_order_carrier_auto_assign_no_carrier(self):
self.partner.property_delivery_carrier_id = False
self.assertFalse(self.sale_order.carrier_id)
self.sale_order.action_confirm()
self.assertEqual(self.sale_order.state, "sale")
self.assertFalse(self.sale_order.carrier_id)

def test_sale_order_carrier_auto_assign_carrier_already_set(self):
self.assertEqual(
self.partner.property_delivery_carrier_id, self.delivery_local_delivery
)
carrier = self.env.ref("delivery.delivery_carrier")
self.sale_order.carrier_id = carrier
self.sale_order.action_confirm()
self.assertEqual(self.sale_order.state, "sale")
self.assertEqual(self.sale_order.carrier_id, carrier)

def test_sale_order_carrier_auto_assign_all_service(self):
self.assertEqual(
self.partner.property_delivery_carrier_id, self.delivery_local_delivery
)
self.sale_order.order_line.unlink()
with self.sale_order_form.order_line.new() as line_form:
line_form.product_id = self.product_service
self.sale_order = self.sale_order_form.save()
self.sale_order.action_confirm()
self.assertEqual(self.sale_order.state, "sale")
self.assertFalse(self.sale_order.carrier_id)

0 comments on commit 3279619

Please sign in to comment.