Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][IMP] delivery_driver: Flag driver in partner #774

Merged
merged 1 commit into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions delivery_driver/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
===========
Expand Down
1 change: 1 addition & 0 deletions delivery_driver/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@
"views/delivery_carrier.xml",
"views/stock_picking.xml",
"views/stock_move_line.xml",
"views/res_partner.xml",
],
}
21 changes: 20 additions & 1 deletion delivery_driver/i18n/delivery_driver.pot
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,22 @@
#
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"
"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"
Expand All @@ -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 ""
Expand All @@ -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 ""
25 changes: 22 additions & 3 deletions delivery_driver/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@ 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 <emilio@moduom.team>\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: 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
Expand All @@ -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"
Expand All @@ -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."
19 changes: 19 additions & 0 deletions delivery_driver/migrations/16.0.1.0.1/post-migration.py
Original file line number Diff line number Diff line change
@@ -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})
1 change: 1 addition & 0 deletions delivery_driver/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from . import delivery_carrier
from . import stock_picking
from . import stock_move_line
from . import res_partner
16 changes: 15 additions & 1 deletion delivery_driver/models/delivery_carrier.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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)
33 changes: 33 additions & 0 deletions delivery_driver/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -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}"

Check warning on line 32 in delivery_driver/models/res_partner.py

View check run for this annotation

Codecov / codecov/patch

delivery_driver/models/res_partner.py#L31-L32

Added lines #L31 - L32 were not covered by tests
return super()._get_name()
2 changes: 1 addition & 1 deletion delivery_driver/models/stock_move_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
8 changes: 5 additions & 3 deletions delivery_driver/models/stock_picking.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
27 changes: 15 additions & 12 deletions delivery_driver/readme/USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

10 changes: 6 additions & 4 deletions delivery_driver/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand Down Expand Up @@ -406,10 +405,13 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<ol class="arabic simple">
<li>Go to Inventory / Configuration / Shipping Methods.</li>
<li>Create new Shipping Method o choose one already created.</li>
<li>Choose Default Driver.</li>
<li>Choose a partner as default driver.</li>
<li>Click on partner choosen.</li>
<li>Go to page Sale &amp; Purchase.</li>
<li>Check Driver is marked.</li>
</ol>
<p>Sale Flow:</p>
<ol class="arabic simple" start="4">
<ol class="arabic simple">
<li>Go to Sales / Orders / Quotations.</li>
<li>Create new Sale Order with non Service product with Quantity &gt; 1.</li>
<li>Confirm Sale Order.</li>
Expand All @@ -418,7 +420,7 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<li>You can change the driver without changing the carrier.</li>
</ol>
<p>Stock Flow:</p>
<ol class="arabic simple" start="10">
<ol class="arabic simple" start="7">
<li>Go to Inventory / Operations / Transfer.</li>
<li>Create new Transfer.</li>
<li>Choose carrier.</li>
Expand Down
9 changes: 9 additions & 0 deletions delivery_driver/tests/test_delivery_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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(
{
Expand Down
17 changes: 17 additions & 0 deletions delivery_driver/views/res_partner.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Moduon Team S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) -->
<odoo>
<record id="view_partner_form_inherit_delivery_driver" model="ir.ui.view">
<field name="name">Partner Delivery Driver</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<xpath expr="//page[@name='sales_purchases']/group" position="inside">
<group name="Driver" string="Driver">
<field name="is_driver" />
</group>
</xpath>
</field>
</record>
</odoo>
Loading
Loading