diff --git a/delivery_driver/README.rst b/delivery_driver/README.rst new file mode 100644 index 0000000000..63bec251e1 --- /dev/null +++ b/delivery_driver/README.rst @@ -0,0 +1,136 @@ +=============== +Delivery Driver +=============== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c83a6eea62d4e564b60889d82dfa9623fda994e9840613c66d611dbbebadfa70 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdelivery--carrier-lightgray.png?logo=github + :target: https://github.com/OCA/delivery-carrier/tree/18.0/delivery_driver + :alt: OCA/delivery-carrier +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/delivery-carrier-18-0/delivery-carrier-18-0-delivery_driver + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of delivery and to allow you to +assign default driver in delivery carriers and pickings. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Use Cases / Context +=================== + +This module was developed because there is no possibility to assign +drivers in delivery methods or delivery notes. Drivers do not have to be +delivery methods, so it is possible to work with drivers. + +This is useful if you want to be able to assign drivers on delivery +notes independently of the delivery method. + +Usage +===== + +To use this module, you need to: + +1. Go to Inventory / Configuration / Shipping Methods. +2. Create new Shipping Method o choose one already created. +3. Choose a partner as default driver. +4. Click on partner choosen. +5. Go to page Sale & Purchase. +6. Check Driver is marked. + +Sale Flow: + +1. Go to Sales / Orders / Quotations. +2. Create new Sale Order with non Service product with Quantity > 1. +3. Confirm Sale Order. +4. Go to Delivery in Delivery smart button. +5. Driver was automatically assigned in picking from Carrier. +6. You can change the driver without changing the carrier. + +Stock Flow: + +7. Go to Inventory / Operations / Transfer. +8. Create new Transfer. +9. Choose carrier. +10. The driver is automatically assigned. +11. You can change the driver without changing the carrier. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Moduon + +Contributors +------------ + +- Emilio Pascual (`Moduon `__) +- Rafael Blasco (`Moduon `__) +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-EmilioPascual| image:: https://github.com/EmilioPascual.png?size=40px + :target: https://github.com/EmilioPascual + :alt: EmilioPascual +.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px + :target: https://github.com/rafaelbn + :alt: rafaelbn + +Current `maintainers `__: + +|maintainer-EmilioPascual| |maintainer-rafaelbn| + +This module is part of the `OCA/delivery-carrier `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/delivery_driver/__init__.py b/delivery_driver/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/delivery_driver/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/delivery_driver/__manifest__.py b/delivery_driver/__manifest__.py new file mode 100644 index 0000000000..85865aca9f --- /dev/null +++ b/delivery_driver/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + +{ + "name": "Delivery Driver", + "summary": "Allow choose driver in delivery methods", + "version": "18.0.1.0.0", + "development_status": "Alpha", + "category": "Inventory/Delivery", + "website": "https://github.com/OCA/delivery-carrier", + "author": "Moduon, Odoo Community Association (OCA)", + "maintainers": ["EmilioPascual", "rafaelbn"], + "license": "LGPL-3", + "application": False, + "installable": True, + "depends": [ + "stock_delivery", + ], + "data": [ + "views/delivery_carrier.xml", + "views/stock_picking.xml", + "views/stock_move_line.xml", + "views/res_partner.xml", + ], +} diff --git a/delivery_driver/i18n/delivery_driver.pot b/delivery_driver/i18n/delivery_driver.pot new file mode 100644 index 0000000000..b675e0e203 --- /dev/null +++ b/delivery_driver/i18n/delivery_driver.pot @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_driver +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_res_partner +msgid "Contact" +msgstr "" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_delivery_carrier__driver_id +msgid "Default Driver" +msgstr "" + +#. module: delivery_driver +#: model:ir.model.fields,help:delivery_driver.field_delivery_carrier__driver_id +msgid "Default driver for this delivery method" +msgstr "" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_partner__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_users__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_stock_move_line__driver_id +#: model:ir.model.fields,field_description:delivery_driver.field_stock_picking__driver_id +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_delivery_carrier_search_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_partner_form_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_picking_internal_search_inherit_delivery_driver +msgid "Driver" +msgstr "" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_delivery_carrier +msgid "Shipping Methods" +msgstr "" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: delivery_driver +#. odoo-python +#: code:addons/delivery_driver/models/res_partner.py:0 +#, python-format +msgid "" +"You can't remove the driver flag from a partner that is set as driver in a " +"delivery method." +msgstr "" diff --git a/delivery_driver/i18n/es.po b/delivery_driver/i18n/es.po new file mode 100644 index 0000000000..65efc64d06 --- /dev/null +++ b/delivery_driver/i18n/es.po @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_driver +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-27 14:14+0000\n" +"PO-Revision-Date: 2024-03-26 20:34+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_delivery_carrier__driver_id +msgid "Default Driver" +msgstr "Conductor por defecto" + +#. module: delivery_driver +#: model:ir.model.fields,help:delivery_driver.field_delivery_carrier__driver_id +msgid "Default driver for this delivery method" +msgstr "Conductor por defecto para este método de envío" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_partner__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_users__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_stock_move_line__driver_id +#: model:ir.model.fields,field_description:delivery_driver.field_stock_picking__driver_id +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_delivery_carrier_search_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_partner_form_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_picking_internal_search_inherit_delivery_driver +msgid "Driver" +msgstr "Conductor" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de Producto (Stock Move Line)" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_delivery_carrier +msgid "Shipping Methods" +msgstr "Métodos de envío" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_picking +msgid "Transfer" +msgstr "Albarán" + +#. module: delivery_driver +#. odoo-python +#: code:addons/delivery_driver/models/res_partner.py:0 +#, python-format +msgid "" +"You can't remove the driver flag from a partner that is set as driver in a " +"delivery method." +msgstr "" +"No se puede eliminar el indicador de conductor de un contacto que esté " +"establecido como conductor en un método de entrega." diff --git a/delivery_driver/i18n/it.po b/delivery_driver/i18n/it.po new file mode 100644 index 0000000000..6e5de7e940 --- /dev/null +++ b/delivery_driver/i18n/it.po @@ -0,0 +1,69 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_driver +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-08 07:43+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_delivery_carrier__driver_id +msgid "Default Driver" +msgstr "Autista predefinito" + +#. module: delivery_driver +#: model:ir.model.fields,help:delivery_driver.field_delivery_carrier__driver_id +msgid "Default driver for this delivery method" +msgstr "Autista predefinito per questo metodo di consegna" + +#. module: delivery_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_partner__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_res_users__is_driver +#: model:ir.model.fields,field_description:delivery_driver.field_stock_move_line__driver_id +#: model:ir.model.fields,field_description:delivery_driver.field_stock_picking__driver_id +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_delivery_carrier_search_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_partner_form_inherit_delivery_driver +#: model_terms:ir.ui.view,arch_db:delivery_driver.view_picking_internal_search_inherit_delivery_driver +msgid "Driver" +msgstr "Autista" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimenti prodotto (riga movimento di magazzino)" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_delivery_carrier +msgid "Shipping Methods" +msgstr "Metodi di spedizione" + +#. module: delivery_driver +#: model:ir.model,name:delivery_driver.model_stock_picking +msgid "Transfer" +msgstr "Trasferimento" + +#. module: delivery_driver +#. odoo-python +#: code:addons/delivery_driver/models/res_partner.py:0 +#, python-format +msgid "" +"You can't remove the driver flag from a partner that is set as driver in a " +"delivery method." +msgstr "" +"Non è possibile togliere l'ozione autista da un partner che è impostato come " +"autista in un metodo di consegna." diff --git a/delivery_driver/models/__init__.py b/delivery_driver/models/__init__.py new file mode 100644 index 0000000000..5eecd9b460 --- /dev/null +++ b/delivery_driver/models/__init__.py @@ -0,0 +1,4 @@ +from . import delivery_carrier +from . import stock_picking +from . import stock_move_line +from . import res_partner diff --git a/delivery_driver/models/delivery_carrier.py b/delivery_driver/models/delivery_carrier.py new file mode 100644 index 0000000000..43894dc2c1 --- /dev/null +++ b/delivery_driver/models/delivery_carrier.py @@ -0,0 +1,30 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + + +from odoo import api, fields, models + + +class DeliveryCarrier(models.Model): + _inherit = "delivery.carrier" + + driver_id = fields.Many2one( + "res.partner", + "Default Driver", + domain="[('is_company', '=', False)]", + help="Default driver for this delivery method", + ) + + @api.model_create_multi + def create(self, vals_list): + carriers = super().create(vals_list) + partners = carriers.mapped("driver_id") + if partners: + partners.write({"is_driver": True}) + return carriers + + def write(self, vals): + partner = self.env["res.partner"].browse(vals.get("driver_id", False)) + if partner: + partner.write({"is_driver": True}) + return super().write(vals) diff --git a/delivery_driver/models/res_partner.py b/delivery_driver/models/res_partner.py new file mode 100644 index 0000000000..f4bb2cdf88 --- /dev/null +++ b/delivery_driver/models/res_partner.py @@ -0,0 +1,35 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + + +from odoo import api, fields, models +from odoo.exceptions import ValidationError + + +class ResPartner(models.Model): + _inherit = "res.partner" + + is_driver = fields.Boolean("Driver") + + @api.constrains("is_driver") + def _check_is_driver(self): + drivers_in_carrier = self.env["delivery.carrier"].search( + [("driver_id", "in", self.ids)] + ) + if drivers_in_carrier and drivers_in_carrier.filtered_domain( + [("driver_id.is_driver", "=", False)] + ): + raise ValidationError( + self.env._( + "You can't remove the driver flag from a partner that" + " is set as driver in a delivery method." + ) + ) + + def _get_name(self): + """When you see the driver in a list view, the display name is too long. + With this you can see only the name""" + if self.env.context.get("show_driver"): + name = self.name or "" + return f"{name}" + return super()._get_name() diff --git a/delivery_driver/models/stock_move_line.py b/delivery_driver/models/stock_move_line.py new file mode 100644 index 0000000000..2a2ce4f03a --- /dev/null +++ b/delivery_driver/models/stock_move_line.py @@ -0,0 +1,15 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + + +from odoo import fields, models + + +class StockMoveLine(models.Model): + _inherit = "stock.move.line" + + driver_id = fields.Many2one( + related="picking_id.driver_id", + domain="[('is_driver', '=', True)]", + store="True", + ) diff --git a/delivery_driver/models/stock_picking.py b/delivery_driver/models/stock_picking.py new file mode 100644 index 0000000000..ebd6d471b8 --- /dev/null +++ b/delivery_driver/models/stock_picking.py @@ -0,0 +1,26 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + + +from odoo import api, fields, models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + driver_id = fields.Many2one( + "res.partner", + string="Driver", + domain="[('is_driver', '=', True)]", + compute="_compute_driver_id", + recursive=True, + store=True, + readonly=False, + ) + + @api.depends("carrier_id", "move_ids.move_dest_ids.picking_id.driver_id") + def _compute_driver_id(self): + for picking in self: + if picking.state not in {"done", "cancel"}: + driver = picking.move_ids.mapped("move_dest_ids.picking_id.driver_id") + picking.driver_id = driver[:1] or picking.carrier_id.driver_id diff --git a/delivery_driver/pyproject.toml b/delivery_driver/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/delivery_driver/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/delivery_driver/readme/CONTEXT.md b/delivery_driver/readme/CONTEXT.md new file mode 100644 index 0000000000..6c437c84fb --- /dev/null +++ b/delivery_driver/readme/CONTEXT.md @@ -0,0 +1,4 @@ +This module was developed because there is no possibility to assign drivers in delivery methods or delivery notes. +Drivers do not have to be delivery methods, so it is possible to work with drivers. + +This is useful if you want to be able to assign drivers on delivery notes independently of the delivery method. diff --git a/delivery_driver/readme/CONTRIBUTORS.md b/delivery_driver/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..58833bab88 --- /dev/null +++ b/delivery_driver/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- Emilio Pascual ([Moduon](https://www.moduon.team/)) +- Rafael Blasco ([Moduon](https://www.moduon.team/)) +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/delivery_driver/readme/DESCRIPTION.md b/delivery_driver/readme/DESCRIPTION.md new file mode 100644 index 0000000000..5f5751ace7 --- /dev/null +++ b/delivery_driver/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module extends the functionality of delivery and to allow you to assign default driver in delivery carriers and pickings. diff --git a/delivery_driver/readme/USAGE.md b/delivery_driver/readme/USAGE.md new file mode 100644 index 0000000000..21c7a701ae --- /dev/null +++ b/delivery_driver/readme/USAGE.md @@ -0,0 +1,26 @@ +To use this module, you need to: + +1. Go to Inventory / Configuration / Shipping Methods. +2. Create new Shipping Method o choose one already created. +3. Choose a partner as default driver. +4. Click on partner choosen. +5. Go to page Sale & Purchase. +6. Check Driver is marked. + +Sale Flow: + +1. Go to Sales / Orders / Quotations. +2. Create new Sale Order with non Service product with Quantity > 1. +3. Confirm Sale Order. +4. Go to Delivery in Delivery smart button. +5. Driver was automatically assigned in picking from Carrier. +6. You can change the driver without changing the carrier. + +Stock Flow: + +7. Go to Inventory / Operations / Transfer. +8. Create new Transfer. +9. Choose carrier. +10. The driver is automatically assigned. +11. You can change the driver without changing the carrier. + diff --git a/delivery_driver/static/description/icon.png b/delivery_driver/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/delivery_driver/static/description/icon.png differ diff --git a/delivery_driver/static/description/index.html b/delivery_driver/static/description/index.html new file mode 100644 index 0000000000..99a67b35d7 --- /dev/null +++ b/delivery_driver/static/description/index.html @@ -0,0 +1,476 @@ + + + + + +Delivery Driver + + + +
+

Delivery Driver

+ + +

Alpha License: LGPL-3 OCA/delivery-carrier Translate me on Weblate Try me on Runboat

+

This module extends the functionality of delivery and to allow you to +assign default driver in delivery carriers and pickings.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Use Cases / Context

+

This module was developed because there is no possibility to assign +drivers in delivery methods or delivery notes. Drivers do not have to be +delivery methods, so it is possible to work with drivers.

+

This is useful if you want to be able to assign drivers on delivery +notes independently of the delivery method.

+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Inventory / Configuration / Shipping Methods.
  2. +
  3. Create new Shipping Method o choose one already created.
  4. +
  5. Choose a partner as default driver.
  6. +
  7. Click on partner choosen.
  8. +
  9. Go to page Sale & Purchase.
  10. +
  11. Check Driver is marked.
  12. +
+

Sale Flow:

+
    +
  1. Go to Sales / Orders / Quotations.
  2. +
  3. Create new Sale Order with non Service product with Quantity > 1.
  4. +
  5. Confirm Sale Order.
  6. +
  7. Go to Delivery in Delivery smart button.
  8. +
  9. Driver was automatically assigned in picking from Carrier.
  10. +
  11. You can change the driver without changing the carrier.
  12. +
+

Stock Flow:

+
    +
  1. Go to Inventory / Operations / Transfer.
  2. +
  3. Create new Transfer.
  4. +
  5. Choose carrier.
  6. +
  7. The driver is automatically assigned.
  8. +
  9. You can change the driver without changing the carrier.
  10. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Moduon
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainers:

+

EmilioPascual rafaelbn

+

This module is part of the OCA/delivery-carrier project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/delivery_driver/tests/__init__.py b/delivery_driver/tests/__init__.py new file mode 100644 index 0000000000..ce28551cc1 --- /dev/null +++ b/delivery_driver/tests/__init__.py @@ -0,0 +1 @@ +from . import test_delivery_driver diff --git a/delivery_driver/tests/test_delivery_driver.py b/delivery_driver/tests/test_delivery_driver.py new file mode 100644 index 0000000000..520ec27804 --- /dev/null +++ b/delivery_driver/tests/test_delivery_driver.py @@ -0,0 +1,108 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + + +from odoo import Command +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestDeliverDriver(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner_test = cls.env["res.partner"].create({"name": "My Test Customer"}) + cls.driver_test = cls.env["res.partner"].create({"name": "My Test Driver"}) + cls.product_test = cls.env["product.product"].create( + {"name": "A product to deliver"} + ) + cls.product_delivery_test = cls.env["product.product"].create( + { + "name": "Normal Delivery Charges", + "invoice_policy": "order", + "type": "service", + "list_price": 10.0, + "categ_id": cls.env.ref("delivery.product_category_deliveries").id, + } + ) + cls.delivery_test = cls.env["delivery.carrier"].create( + { + "name": "Normal Delivery Charges", + "fixed_price": 10, + "delivery_type": "fixed", + "product_id": cls.product_delivery_test.id, + "driver_id": cls.driver_test.id, + } + ) + + def test_partner_is_driver(self): + self.assertTrue(self.driver_test.is_driver) + self.assertFalse(self.partner_test.is_driver) + with self.assertRaises(ValidationError): + self.driver_test.write({"is_driver": False}) + self.delivery_test.write({"driver_id": self.partner_test.id}) + self.assertTrue(self.partner_test.is_driver) + + def test_sale_flow(self): + sale_order = self.env["sale.order"].create( + { + "partner_id": self.partner_test.id, + "partner_invoice_id": self.partner_test.id, + "partner_shipping_id": self.partner_test.id, + "order_line": [ + Command.create( + { + "product_id": self.product_test.id, + "product_uom_qty": 1, + "product_uom": self.product_test.uom_id.id, + "price_unit": 100, + }, + ) + ], + "carrier_id": self.delivery_test.id, + } + ) + sale_order.action_confirm() + self.assertEqual(sale_order.picking_ids.driver_id, self.driver_test) + + def test_stock_flow(self): + stock_picking = self.env["stock.picking"].create( + { + "partner_id": self.partner_test.id, + "picking_type_id": self.env.ref("stock.picking_type_out").id, + "location_id": self.env.ref("stock.stock_location_stock").id, + "location_dest_id": self.env.ref("stock.stock_location_customers").id, + "move_ids": [ + Command.create( + { + "name": "Test", + "product_id": self.product_test.id, + "product_uom_qty": 1, + "product_uom": self.product_test.uom_id.id, + "location_id": self.env.ref( + "stock.stock_location_stock" + ).id, + "location_dest_id": self.env.ref( + "stock.stock_location_customers" + ).id, + }, + ) + ], + "carrier_id": self.delivery_test.id, + } + ) + self.assertEqual(stock_picking.driver_id, self.driver_test) + + def test_get_name_with_show_driver_context(self): + """Test _get_name method when 'show_driver' is in the context.""" + # Set the context to include 'show_driver' + self.env.context = dict(self.env.context, show_driver=True) + + # Ensure _get_name returns the driver's name + self.assertEqual(self.driver_test._get_name(), "My Test Driver") + + def test_get_name_without_show_driver_context(self): + """Test _get_name method when 'show_driver' is NOT in the context.""" + # Ensure _get_name returns the parent class's _get_name result + # Here we are simulating the default behavior by calling the super method. + self.assertEqual(self.driver_test._get_name(), "My Test Driver") diff --git a/delivery_driver/views/delivery_carrier.xml b/delivery_driver/views/delivery_carrier.xml new file mode 100644 index 0000000000..00bcf1abf0 --- /dev/null +++ b/delivery_driver/views/delivery_carrier.xml @@ -0,0 +1,45 @@ + + + + + Delivery Carrier Driver Tree + delivery.carrier + + + + + + + + + Delivery Carrier Driver Search + delivery.carrier + + + + + + + + + + + + Delivery Carrier Driver Form + delivery.carrier + + + + + + + + diff --git a/delivery_driver/views/res_partner.xml b/delivery_driver/views/res_partner.xml new file mode 100644 index 0000000000..265a9b02e5 --- /dev/null +++ b/delivery_driver/views/res_partner.xml @@ -0,0 +1,17 @@ + + + + + Partner Delivery Driver + res.partner + + + + + + + + + + diff --git a/delivery_driver/views/stock_move_line.xml b/delivery_driver/views/stock_move_line.xml new file mode 100644 index 0000000000..8004a3aaff --- /dev/null +++ b/delivery_driver/views/stock_move_line.xml @@ -0,0 +1,41 @@ + + + + + Stock Move Line Tree Detailed Driver + stock.move.line + + + + + + + + + Stock Move Line Tree Driver + stock.move.line + + + + + + + + diff --git a/delivery_driver/views/stock_picking.xml b/delivery_driver/views/stock_picking.xml new file mode 100644 index 0000000000..5e286aae6a --- /dev/null +++ b/delivery_driver/views/stock_picking.xml @@ -0,0 +1,60 @@ + + + + + Stock Picking Driver Form + stock.picking + + + + + + + + + Stock Picking Driver Tree + stock.picking + + + + + + + + + Stock Picking Driver Tree + stock.picking + + + + + + + + + + +