diff --git a/purchase_delivery_carrier/__init__.py b/purchase_delivery_carrier/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/purchase_delivery_carrier/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/purchase_delivery_carrier/__manifest__.py b/purchase_delivery_carrier/__manifest__.py new file mode 100644 index 0000000..5320bad --- /dev/null +++ b/purchase_delivery_carrier/__manifest__.py @@ -0,0 +1,36 @@ +# +# Bemade Inc. +# +# Copyright (C) 2023-June Bemade Inc. (). +# Author: Marc Durepos (Contact : marc@bemade.org) +# +# This program is under the terms of the GNU Lesser General Public License, +# version 3. +# +# For full license details, see https://www.gnu.org/licenses/lgpl-3.0.en.html. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +{ + "name": "Purchase Delivery Carrier", + "version": "18.0.1.0.0", + "summary": "Adds delivery carrier information to vendors, purchase orders and receipts", + "category": "Purchase", + "author": "Bemade Inc.", + "website": "http://www.bemade.org", + "license": "LGPL-3", + "depends": ["purchase", "delivery", "stock"], + "data": [ + "views/purchase_order_views.xml", + "views/res_partner_views.xml", + ], + "assets": {}, + "installable": True, + "auto_install": False, +} diff --git a/purchase_delivery_carrier/models/__init__.py b/purchase_delivery_carrier/models/__init__.py new file mode 100644 index 0000000..327d893 --- /dev/null +++ b/purchase_delivery_carrier/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_partner +from . import purchase_order diff --git a/purchase_delivery_carrier/models/purchase_order.py b/purchase_delivery_carrier/models/purchase_order.py new file mode 100644 index 0000000..d081f10 --- /dev/null +++ b/purchase_delivery_carrier/models/purchase_order.py @@ -0,0 +1,26 @@ +from odoo import models, fields, api + + +class PurchaseOrder(models.Model): + _inherit = "purchase.order" + + delivery_carrier_id = fields.Many2one( + comodel_name="delivery.carrier", + string="Delivery Carrier", + compute="_compute_delivery_carrier_id", + inverse="_inverse_delivery_carrier_id", + store=True, + ) + + @api.depends("partner_id") + def _compute_delivery_carrier_id(self): + for rec in self: + rec.delivery_carrier_id = rec.partner_id.delivery_carrier_id + + def _inverse_delivery_carrier_id(self): + pass + + def _prepare_picking(self): + res = super()._prepare_picking() + res.update(carrier_id=self.delivery_carrier_id.id) + return res diff --git a/purchase_delivery_carrier/models/res_partner.py b/purchase_delivery_carrier/models/res_partner.py new file mode 100644 index 0000000..c26bbbd --- /dev/null +++ b/purchase_delivery_carrier/models/res_partner.py @@ -0,0 +1,10 @@ +from odoo import models, fields, api + + +class ResPartner(models.Model): + _inherit = "res.partner" + + delivery_carrier_id = fields.Many2one( + comodel_name="delivery.carrier", + string="Default Carrier", + ) diff --git a/purchase_delivery_carrier/tests/__init__.py b/purchase_delivery_carrier/tests/__init__.py new file mode 100644 index 0000000..c80c093 --- /dev/null +++ b/purchase_delivery_carrier/tests/__init__.py @@ -0,0 +1 @@ +from . import test_purchase_delivery diff --git a/purchase_delivery_carrier/tests/test_purchase_delivery.py b/purchase_delivery_carrier/tests/test_purchase_delivery.py new file mode 100644 index 0000000..8067a96 --- /dev/null +++ b/purchase_delivery_carrier/tests/test_purchase_delivery.py @@ -0,0 +1,71 @@ +from odoo.tests import TransactionCase, tagged +from odoo import Command + + +@tagged("post_install", "-at_install") +class TestPurchaseDelivery(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.carrier_1 = cls.env.ref("delivery.delivery_local_delivery") + cls.carrier_2 = cls.env.ref("delivery.free_delivery_carrier") + + cls.partner_1 = cls.env["res.partner"].create( + { + "name": "Test 1", + "delivery_carrier_id": cls.carrier_1.id, + } + ) + cls.partner_2 = cls.env["res.partner"].create( + { + "name": "Test 2", + } + ) + cls.product = cls.env["product.product"].create( + { + "name": "Test product", + "seller_ids": [ + Command.create( + { + "partner_id": cls.partner_1.id, + "price": 100.0, + } + ), + Command.create( + { + "partner_id": cls.partner_2.id, + "price": 200.0, + } + ), + ], + } + ) + + def test_carrier_set_on_purchase_order_when_default_is_set(self): + purchase_order = self.env["purchase.order"].create( + { + "partner_id": self.partner_1.id, + "order_line": [Command.create({"product_id": self.product.id})], + } + ) + + self.assertEqual(purchase_order.delivery_carrier_id, self.carrier_1) + + def test_carrier_not_set_on_purchase_order_when_default_is_not_set(self): + purchase_order = self.env["purchase.order"].create( + { + "partner_id": self.partner_2.id, + } + ) + self.assertFalse(purchase_order.delivery_carrier_id) + + def test_carrier_trickles_down_to_picking(self): + purchase_order = self.env["purchase.order"].create( + { + "partner_id": self.partner_1.id, + "order_line": [Command.create({"product_id": self.product.id})], + } + ) + purchase_order.button_confirm() + picking = purchase_order.picking_ids + self.assertEqual(picking.carrier_id, self.carrier_1) diff --git a/purchase_delivery_carrier/views/purchase_order_views.xml b/purchase_delivery_carrier/views/purchase_order_views.xml new file mode 100644 index 0000000..50b3e90 --- /dev/null +++ b/purchase_delivery_carrier/views/purchase_order_views.xml @@ -0,0 +1,14 @@ + + + + purchase.order.delivery.form.inherit + purchase.order + + + + + + + + + \ No newline at end of file diff --git a/purchase_delivery_carrier/views/res_partner_views.xml b/purchase_delivery_carrier/views/res_partner_views.xml new file mode 100644 index 0000000..e4942e3 --- /dev/null +++ b/purchase_delivery_carrier/views/res_partner_views.xml @@ -0,0 +1,13 @@ + + + + res.partner.carrier.property.form.inherit + res.partner + + + + + + + + \ No newline at end of file