Skip to content

Commit 221fdb3

Browse files
committed
[IMP] delivery_driver: Flag driver in partner
- When a driver is assigned in a shipping method, the partner is marked as a driver. - Unmarking partners as drivers is not allowed if it is associated with a sending method. - In pickings and move lines add domain in driver. Only partners marked as driver. - When selecting a partner driver, only the name of the partner is displayed. MT-5232 @moduon
1 parent d19cd50 commit 221fdb3

16 files changed

+202
-41
lines changed

delivery_driver/README.rst

+15-12
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,27 @@ To use this module, you need to:
5858

5959
1. Go to Inventory / Configuration / Shipping Methods.
6060
2. Create new Shipping Method o choose one already created.
61-
3. Choose Default Driver.
61+
3. Choose a partner as default driver.
62+
4. Click on partner choosen.
63+
5. Go to page Sale & Purchase.
64+
6. Check Driver is marked.
6265

6366
Sale Flow:
6467

65-
4. Go to Sales / Orders / Quotations.
66-
5. Create new Sale Order with non Service product with Quantity > 1.
67-
6. Confirm Sale Order.
68-
7. Go to Delivery in Delivery smart button.
69-
8. Driver was automatically assigned in picking from Carrier.
70-
9. You can change the driver without changing the carrier.
68+
1. Go to Sales / Orders / Quotations.
69+
2. Create new Sale Order with non Service product with Quantity > 1.
70+
3. Confirm Sale Order.
71+
4. Go to Delivery in Delivery smart button.
72+
5. Driver was automatically assigned in picking from Carrier.
73+
6. You can change the driver without changing the carrier.
7174

7275
Stock Flow:
7376

74-
10. Go to Inventory / Operations / Transfer.
75-
11. Create new Transfer.
76-
12. Choose carrier.
77-
13. The driver is automatically assigned.
78-
14. You can change the driver without changing the carrier.
77+
7. Go to Inventory / Operations / Transfer.
78+
8. Create new Transfer.
79+
9. Choose carrier.
80+
10. The driver is automatically assigned.
81+
11. You can change the driver without changing the carrier.
7982

8083
Bug Tracker
8184
===========

delivery_driver/__manifest__.py

+1
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
"views/delivery_carrier.xml",
2121
"views/stock_picking.xml",
2222
"views/stock_move_line.xml",
23+
"views/res_partner.xml",
2324
],
2425
}

delivery_driver/i18n/delivery_driver.pot

+20-1
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,22 @@
44
#
55
msgid ""
66
msgstr ""
7-
"Project-Id-Version: Odoo Server 16.0\n"
7+
"Project-Id-Version: Odoo Server 16.0+e\n"
88
"Report-Msgid-Bugs-To: \n"
9+
"POT-Creation-Date: 2024-02-27 14:14+0000\n"
10+
"PO-Revision-Date: 2024-02-27 14:14+0000\n"
911
"Last-Translator: \n"
1012
"Language-Team: \n"
1113
"MIME-Version: 1.0\n"
1214
"Content-Type: text/plain; charset=UTF-8\n"
1315
"Content-Transfer-Encoding: \n"
1416
"Plural-Forms: \n"
1517

18+
#. module: delivery_driver
19+
#: model:ir.model,name:delivery_driver.model_res_partner
20+
msgid "Contact"
21+
msgstr ""
22+
1623
#. module: delivery_driver
1724
#: model:ir.model.fields,field_description:delivery_driver.field_delivery_carrier__driver_id
1825
msgid "Default Driver"
@@ -24,9 +31,12 @@ msgid "Default driver for this delivery method"
2431
msgstr ""
2532

2633
#. module: delivery_driver
34+
#: model:ir.model.fields,field_description:delivery_driver.field_res_partner__is_driver
35+
#: model:ir.model.fields,field_description:delivery_driver.field_res_users__is_driver
2736
#: model:ir.model.fields,field_description:delivery_driver.field_stock_move_line__driver_id
2837
#: model:ir.model.fields,field_description:delivery_driver.field_stock_picking__driver_id
2938
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_delivery_carrier_search_inherit_delivery_driver
39+
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_partner_form_inherit_delivery_driver
3040
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_picking_internal_search_inherit_delivery_driver
3141
msgid "Driver"
3242
msgstr ""
@@ -45,3 +55,12 @@ msgstr ""
4555
#: model:ir.model,name:delivery_driver.model_stock_picking
4656
msgid "Transfer"
4757
msgstr ""
58+
59+
#. module: delivery_driver
60+
#. odoo-python
61+
#: code:addons/delivery_driver/models/res_partner.py:0
62+
#, python-format
63+
msgid ""
64+
"You can't remove the driver flag from a partner that is set as driver in a "
65+
"delivery method."
66+
msgstr ""

delivery_driver/i18n/es.po

+22-3
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@ msgid ""
66
msgstr ""
77
"Project-Id-Version: Odoo Server 16.0+e\n"
88
"Report-Msgid-Bugs-To: \n"
9-
"POT-Creation-Date: 2024-01-03 10:00+0000\n"
10-
"PO-Revision-Date: 2024-01-03 11:02+0100\n"
9+
"POT-Creation-Date: 2024-02-27 14:14+0000\n"
10+
"PO-Revision-Date: 2024-02-27 15:19+0100\n"
1111
"Last-Translator: Emilio Pascual <emilio@moduom.team>\n"
1212
"Language-Team: \n"
1313
"Language: es\n"
1414
"MIME-Version: 1.0\n"
1515
"Content-Type: text/plain; charset=UTF-8\n"
1616
"Content-Transfer-Encoding: 8bit\n"
1717
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
18-
"X-Generator: Poedit 3.4\n"
18+
"X-Generator: Poedit 3.4.2\n"
19+
20+
#. module: delivery_driver
21+
#: model:ir.model,name:delivery_driver.model_res_partner
22+
msgid "Contact"
23+
msgstr ""
1924

2025
#. module: delivery_driver
2126
#: model:ir.model.fields,field_description:delivery_driver.field_delivery_carrier__driver_id
@@ -28,9 +33,12 @@ msgid "Default driver for this delivery method"
2833
msgstr "Conductor por defecto para este método de envío"
2934

3035
#. module: delivery_driver
36+
#: model:ir.model.fields,field_description:delivery_driver.field_res_partner__is_driver
37+
#: model:ir.model.fields,field_description:delivery_driver.field_res_users__is_driver
3138
#: model:ir.model.fields,field_description:delivery_driver.field_stock_move_line__driver_id
3239
#: model:ir.model.fields,field_description:delivery_driver.field_stock_picking__driver_id
3340
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_delivery_carrier_search_inherit_delivery_driver
41+
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_partner_form_inherit_delivery_driver
3442
#: model_terms:ir.ui.view,arch_db:delivery_driver.view_picking_internal_search_inherit_delivery_driver
3543
msgid "Driver"
3644
msgstr "Conductor"
@@ -49,3 +57,14 @@ msgstr "Métodos de envío"
4957
#: model:ir.model,name:delivery_driver.model_stock_picking
5058
msgid "Transfer"
5159
msgstr "Albarán"
60+
61+
#. module: delivery_driver
62+
#. odoo-python
63+
#: code:addons/delivery_driver/models/res_partner.py:0
64+
#, python-format
65+
msgid ""
66+
"You can't remove the driver flag from a partner that is set as driver in a "
67+
"delivery method."
68+
msgstr ""
69+
"No se puede eliminar el indicador de conductor de un contacto que esté "
70+
"establecido como conductor en un método de entrega."
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright 2024 Moduon Team S.L.
2+
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
3+
4+
import logging
5+
6+
from odoo import SUPERUSER_ID, api
7+
8+
_logger = logging.getLogger(__name__)
9+
10+
11+
def migrate(cr, version):
12+
with api.Environment.manage():
13+
env = api.Environment(cr, SUPERUSER_ID, {})
14+
partners = (
15+
env["carrier.driver"]
16+
.search([("driver_id", "!=", False)])
17+
.mapped("driver_id")
18+
)
19+
partners.write({"is_driver": True})

delivery_driver/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from . import delivery_carrier
22
from . import stock_picking
33
from . import stock_move_line
4+
from . import res_partner

delivery_driver/models/delivery_carrier.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
33

44

5-
from odoo import fields, models
5+
from odoo import api, fields, models
66

77

88
class DeliveryCarrier(models.Model):
@@ -14,3 +14,17 @@ class DeliveryCarrier(models.Model):
1414
domain="[('is_company', '=', False)]",
1515
help="Default driver for this delivery method",
1616
)
17+
18+
@api.model_create_multi
19+
def create(self, vals_list):
20+
carriers = super().create(vals_list)
21+
partners = carriers.mapped("driver_id")
22+
if partners:
23+
partners.write({"is_driver": True})
24+
return carriers
25+
26+
def write(self, vals):
27+
partner = self.env["res.partner"].browse(vals.get("driver_id", False))
28+
if partner:
29+
partner.write({"is_driver": True})
30+
return super().write(vals)

delivery_driver/models/res_partner.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Copyright 2024 Moduon Team S.L.
2+
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
3+
4+
5+
from odoo import _, api, fields, models
6+
from odoo.exceptions import ValidationError
7+
8+
9+
class ResPartner(models.Model):
10+
_inherit = "res.partner"
11+
12+
is_driver = fields.Boolean("Driver")
13+
14+
@api.constrains("is_driver")
15+
def _check_is_driver(self):
16+
drivers_in_carrier = self.env["delivery.carrier"].search(
17+
[("driver_id", "in", self.ids)]
18+
)
19+
if drivers_in_carrier and not self.is_driver:
20+
raise ValidationError(
21+
_(
22+
"You can't remove the driver flag from a partner that"
23+
" is set as driver in a delivery method."
24+
)
25+
)
26+
27+
def _get_name(self):
28+
"""When you see the driver in a list view, the display name is too long.
29+
With this you can see only the name"""
30+
if self.env.context.get("show_driver"):
31+
name = self.name or ""
32+
return f"{name}"
33+
return super()._get_name()

delivery_driver/models/stock_move_line.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ class StockMoveLine(models.Model):
1010

1111
driver_id = fields.Many2one(
1212
related="picking_id.driver_id",
13-
domain="[('is_company', '=', False)]",
13+
domain="[('is_driver', '=', True)]",
1414
store="True",
1515
)

delivery_driver/models/stock_picking.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@ class StockPicking(models.Model):
1111
driver_id = fields.Many2one(
1212
"res.partner",
1313
string="Driver",
14-
domain="[('is_company', '=', False)]",
14+
domain="[('is_driver', '=', True)]",
1515
compute="_compute_driver_id",
16+
recursive=True,
1617
store=True,
1718
readonly=False,
1819
)
1920

20-
@api.depends("carrier_id")
21+
@api.depends("carrier_id", "move_ids.move_dest_ids.picking_id.driver_id")
2122
def _compute_driver_id(self):
2223
for picking in self:
2324
if picking.state not in {"done", "cancel"}:
24-
picking.driver_id = picking.carrier_id.driver_id
25+
driver = picking.move_ids.mapped("move_dest_ids.picking_id.driver_id")
26+
picking.driver_id = driver[:1] or picking.carrier_id.driver_id

delivery_driver/readme/USAGE.md

+15-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@ To use this module, you need to:
22

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

710
Sale Flow:
811

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

1619
Stock Flow:
1720

18-
10. Go to Inventory / Operations / Transfer.
19-
11. Create new Transfer.
20-
12. Choose carrier.
21-
13. The driver is automatically assigned.
22-
14. You can change the driver without changing the carrier.
21+
7. Go to Inventory / Operations / Transfer.
22+
8. Create new Transfer.
23+
9. Choose carrier.
24+
10. The driver is automatically assigned.
25+
11. You can change the driver without changing the carrier.
2326

delivery_driver/static/description/index.html

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
<?xml version="1.0" encoding="utf-8"?>
21
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
32
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
43
<head>
@@ -406,10 +405,13 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
406405
<ol class="arabic simple">
407406
<li>Go to Inventory / Configuration / Shipping Methods.</li>
408407
<li>Create new Shipping Method o choose one already created.</li>
409-
<li>Choose Default Driver.</li>
408+
<li>Choose a partner as default driver.</li>
409+
<li>Click on partner choosen.</li>
410+
<li>Go to page Sale &amp; Purchase.</li>
411+
<li>Check Driver is marked.</li>
410412
</ol>
411413
<p>Sale Flow:</p>
412-
<ol class="arabic simple" start="4">
414+
<ol class="arabic simple">
413415
<li>Go to Sales / Orders / Quotations.</li>
414416
<li>Create new Sale Order with non Service product with Quantity &gt; 1.</li>
415417
<li>Confirm Sale Order.</li>
@@ -418,7 +420,7 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
418420
<li>You can change the driver without changing the carrier.</li>
419421
</ol>
420422
<p>Stock Flow:</p>
421-
<ol class="arabic simple" start="10">
423+
<ol class="arabic simple" start="7">
422424
<li>Go to Inventory / Operations / Transfer.</li>
423425
<li>Create new Transfer.</li>
424426
<li>Choose carrier.</li>

delivery_driver/tests/test_delivery_driver.py

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
33

44

5+
from odoo.exceptions import ValidationError
56
from odoo.tests.common import TransactionCase
67

78

@@ -33,6 +34,14 @@ def setUpClass(cls):
3334
}
3435
)
3536

37+
def test_partner_is_driver(self):
38+
self.assertTrue(self.driver_test.is_driver)
39+
self.assertFalse(self.partner_test.is_driver)
40+
with self.assertRaises(ValidationError):
41+
self.driver_test.write({"is_driver": False})
42+
self.delivery_test.write({"driver_id": self.partner_test.id})
43+
self.assertTrue(self.partner_test.is_driver)
44+
3645
def test_sale_flow(self):
3746
sale_order = self.env["sale.order"].create(
3847
{

delivery_driver/views/res_partner.xml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<!-- Copyright 2024 Moduon Team S.L.
3+
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) -->
4+
<odoo>
5+
<record id="view_partner_form_inherit_delivery_driver" model="ir.ui.view">
6+
<field name="name">Partner Delivery Driver</field>
7+
<field name="model">res.partner</field>
8+
<field name="inherit_id" ref="base.view_partner_form" />
9+
<field name="arch" type="xml">
10+
<xpath expr="//page[@name='sales_purchases']/group" position="inside">
11+
<group name="Driver" string="Driver">
12+
<field name="is_driver" />
13+
</group>
14+
</xpath>
15+
</field>
16+
</record>
17+
</odoo>

0 commit comments

Comments
 (0)