diff --git a/delivery_driver/README.rst b/delivery_driver/README.rst index 8e760d17f9..fde892b219 100644 --- a/delivery_driver/README.rst +++ b/delivery_driver/README.rst @@ -58,24 +58,27 @@ 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 Default Driver. +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: -4. Go to Sales / Orders / Quotations. -5. Create new Sale Order with non Service product with Quantity > 1. -6. Confirm Sale Order. -7. Go to Delivery in Delivery smart button. -8. Driver was automatically assigned in picking from Carrier. -9. You can change the driver without changing the carrier. +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: -10. Go to Inventory / Operations / Transfer. -11. Create new Transfer. -12. Choose carrier. -13. The driver is automatically assigned. -14. You can change the driver without changing the carrier. +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 =========== diff --git a/delivery_driver/__manifest__.py b/delivery_driver/__manifest__.py index 5f9fd03ccd..44b8ad9115 100644 --- a/delivery_driver/__manifest__.py +++ b/delivery_driver/__manifest__.py @@ -20,5 +20,6 @@ "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 index 3cf7e01e60..dc0765983f 100644 --- a/delivery_driver/i18n/delivery_driver.pot +++ b/delivery_driver/i18n/delivery_driver.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"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-02-27 14:14+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -13,6 +15,11 @@ msgstr "" "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" @@ -24,9 +31,12 @@ 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 "" @@ -45,3 +55,12 @@ msgstr "" #: 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 index e9e51629c7..ae64531619 100644 --- a/delivery_driver/i18n/es.po +++ b/delivery_driver/i18n/es.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0+e\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-01-03 10:00+0000\n" -"PO-Revision-Date: 2024-01-03 11:02+0100\n" +"POT-Creation-Date: 2024-02-27 14:14+0000\n" +"PO-Revision-Date: 2024-02-27 15:19+0100\n" "Last-Translator: Emilio Pascual \n" "Language-Team: \n" "Language: es\n" @@ -15,7 +15,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.4.2\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 @@ -28,9 +33,12 @@ 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" @@ -49,3 +57,14 @@ msgstr "Métodos de envío" #: 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/migrations/16.0.1.0.1/post-migration.py b/delivery_driver/migrations/16.0.1.0.1/post-migration.py new file mode 100644 index 0000000000..eb644e20d2 --- /dev/null +++ b/delivery_driver/migrations/16.0.1.0.1/post-migration.py @@ -0,0 +1,19 @@ +# Copyright 2024 Moduon Team S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) + +import logging + +from odoo import SUPERUSER_ID, api + +_logger = logging.getLogger(__name__) + + +def migrate(cr, version): + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + partners = ( + env["carrier.driver"] + .search([("driver_id", "!=", False)]) + .mapped("driver_id") + ) + partners.write({"is_driver": True}) diff --git a/delivery_driver/models/__init__.py b/delivery_driver/models/__init__.py index 69bd1e2911..5eecd9b460 100644 --- a/delivery_driver/models/__init__.py +++ b/delivery_driver/models/__init__.py @@ -1,3 +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 index a77a74a682..43894dc2c1 100644 --- a/delivery_driver/models/delivery_carrier.py +++ b/delivery_driver/models/delivery_carrier.py @@ -2,7 +2,7 @@ # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) -from odoo import fields, models +from odoo import api, fields, models class DeliveryCarrier(models.Model): @@ -14,3 +14,17 @@ class DeliveryCarrier(models.Model): 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..f34f4f20cf --- /dev/null +++ b/delivery_driver/models/res_partner.py @@ -0,0 +1,33 @@ +# 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 not self.is_driver: + raise ValidationError( + _( + "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 index a2debdfa3b..2a2ce4f03a 100644 --- a/delivery_driver/models/stock_move_line.py +++ b/delivery_driver/models/stock_move_line.py @@ -10,6 +10,6 @@ class StockMoveLine(models.Model): driver_id = fields.Many2one( related="picking_id.driver_id", - domain="[('is_company', '=', False)]", + domain="[('is_driver', '=', True)]", store="True", ) diff --git a/delivery_driver/models/stock_picking.py b/delivery_driver/models/stock_picking.py index 5b690adade..ebd6d471b8 100644 --- a/delivery_driver/models/stock_picking.py +++ b/delivery_driver/models/stock_picking.py @@ -11,14 +11,16 @@ class StockPicking(models.Model): driver_id = fields.Many2one( "res.partner", string="Driver", - domain="[('is_company', '=', False)]", + domain="[('is_driver', '=', True)]", compute="_compute_driver_id", + recursive=True, store=True, readonly=False, ) - @api.depends("carrier_id") + @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"}: - picking.driver_id = picking.carrier_id.driver_id + 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/readme/USAGE.md b/delivery_driver/readme/USAGE.md index a673880638..21c7a701ae 100644 --- a/delivery_driver/readme/USAGE.md +++ b/delivery_driver/readme/USAGE.md @@ -2,22 +2,25 @@ 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 Default Driver. +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: -4. Go to Sales / Orders / Quotations. -5. Create new Sale Order with non Service product with Quantity > 1. -6. Confirm Sale Order. -7. Go to Delivery in Delivery smart button. -8. Driver was automatically assigned in picking from Carrier. -9. You can change the driver without changing the carrier. +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: -10. Go to Inventory / Operations / Transfer. -11. Create new Transfer. -12. Choose carrier. -13. The driver is automatically assigned. -14. You can change the driver without changing the carrier. +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/index.html b/delivery_driver/static/description/index.html index 37a63af844..f21b232e4a 100644 --- a/delivery_driver/static/description/index.html +++ b/delivery_driver/static/description/index.html @@ -1,4 +1,3 @@ - @@ -406,10 +405,13 @@

Usage

  1. Go to Inventory / Configuration / Shipping Methods.
  2. Create new Shipping Method o choose one already created.
  3. -
  4. Choose Default Driver.
  5. +
  6. Choose a partner as default driver.
  7. +
  8. Click on partner choosen.
  9. +
  10. Go to page Sale & Purchase.
  11. +
  12. 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. @@ -418,7 +420,7 @@

      Usage

    5. You can change the driver without changing the carrier.

    Stock Flow:

    -
      +
      1. Go to Inventory / Operations / Transfer.
      2. Create new Transfer.
      3. Choose carrier.
      4. diff --git a/delivery_driver/tests/test_delivery_driver.py b/delivery_driver/tests/test_delivery_driver.py index 5bde08952a..68bc7a4453 100644 --- a/delivery_driver/tests/test_delivery_driver.py +++ b/delivery_driver/tests/test_delivery_driver.py @@ -2,6 +2,7 @@ # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) +from odoo.exceptions import ValidationError from odoo.tests.common import TransactionCase @@ -33,6 +34,14 @@ def setUpClass(cls): } ) + 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( { 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 index 4961355296..847335ba29 100644 --- a/delivery_driver/views/stock_move_line.xml +++ b/delivery_driver/views/stock_move_line.xml @@ -11,7 +11,12 @@ - + @@ -21,7 +26,12 @@ - + diff --git a/delivery_driver/views/stock_picking.xml b/delivery_driver/views/stock_picking.xml index 7b15b38cc6..0394af1acc 100644 --- a/delivery_driver/views/stock_picking.xml +++ b/delivery_driver/views/stock_picking.xml @@ -11,7 +11,11 @@ - + @@ -21,7 +25,12 @@ - +