Skip to content

Commit 17f02ac

Browse files
Ernesto Tejedadalonsod
Ernesto Tejeda
authored andcommitted
[IMP] purchase_order_secondary_unit: Compatibility with product variants
1 parent 0c7aa1e commit 17f02ac

File tree

9 files changed

+52
-34
lines changed

9 files changed

+52
-34
lines changed

purchase_order_secondary_unit/README.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ Purchase Order Secondary Unit
1919
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
2020
:target: https://translation.odoo-community.org/projects/purchase-workflow-15-0/purchase-workflow-15-0-purchase_order_secondary_unit
2121
:alt: Translate me on Weblate
22-
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
23-
:target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/purchase-workflow&target_branch=15.0
24-
:alt: Try me on Runboat
22+
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
23+
:target: https://runbot.odoo-community.org/runbot/142/15.0
24+
:alt: Try me on Runbot
2525

2626
|badge1| |badge2| |badge3| |badge4| |badge5|
2727

purchase_order_secondary_unit/i18n/purchase_order_secondary_unit.pot

+7-13
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
msgid ""
66
msgstr ""
7-
"Project-Id-Version: Odoo Server 14.0\n"
7+
"Project-Id-Version: Odoo Server 15.0\n"
88
"Report-Msgid-Bugs-To: \n"
99
"Last-Translator: \n"
1010
"Language-Team: \n"
@@ -20,21 +20,15 @@ msgid "Default secondary unit for purchases"
2020
msgstr ""
2121

2222
#. module: purchase_order_secondary_unit
23-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_product_template__display_name
24-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_purchase_order_line__display_name
25-
msgid "Display Name"
26-
msgstr ""
27-
28-
#. module: purchase_order_secondary_unit
29-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_product_template__id
30-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_purchase_order_line__id
31-
msgid "ID"
23+
#: model:ir.model.fields,help:purchase_order_secondary_unit.field_product_product__purchase_secondary_uom_id
24+
msgid ""
25+
"In order to set a value, please first add at least one record in 'Secondary "
26+
"Unit of Measure'"
3227
msgstr ""
3328

3429
#. module: purchase_order_secondary_unit
35-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_product_template____last_update
36-
#: model:ir.model.fields,field_description:purchase_order_secondary_unit.field_purchase_order_line____last_update
37-
msgid "Last Modified on"
30+
#: model:ir.model,name:purchase_order_secondary_unit.model_product_product
31+
msgid "Product"
3832
msgstr ""
3933

4034
#. module: purchase_order_secondary_unit
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
2+
from . import product_product
23
from . import product_template
34
from . import purchase_order
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright 2023 Tecnativa - Ernesto Tejeda
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
from odoo import fields, models
4+
5+
6+
class ProductProduct(models.Model):
7+
_inherit = "product.product"
8+
9+
purchase_secondary_uom_id = fields.Many2one(
10+
comodel_name="product.secondary.unit",
11+
string="Default secondary unit for purchases",
12+
help="In order to set a value, please first add at least one record"
13+
" in 'Secondary Unit of Measure'",
14+
domain="['|', ('product_id', '=', id),"
15+
"'&', ('product_tmpl_id', '=', product_tmpl_id),"
16+
" ('product_id', '=', False)]",
17+
)

purchase_order_secondary_unit/models/product_template.py

+1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ class ProductTemplate(models.Model):
99
purchase_secondary_uom_id = fields.Many2one(
1010
comodel_name="product.secondary.unit",
1111
string="Default secondary unit for purchases",
12+
domain="[('product_tmpl_id', '=', id), ('product_id', '=', False)]",
1213
)

purchase_order_secondary_unit/static/description/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
44
<head>
55
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6-
<meta name="generator" content="Docutils: http://docutils.sourceforge.net/" />
6+
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
77
<title>Purchase Order Secondary Unit</title>
88
<style type="text/css">
99

@@ -367,7 +367,7 @@ <h1 class="title">Purchase Order Secondary Unit</h1>
367367
!! This file is generated by oca-gen-addon-readme !!
368368
!! changes will be overwritten. !!
369369
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
370-
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/purchase-workflow/tree/15.0/purchase_order_secondary_unit"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/purchase-workflow-15-0/purchase-workflow-15-0-purchase_order_secondary_unit"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runboat.odoo-community.org/webui/builds.html?repo=OCA/purchase-workflow&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
370+
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/purchase-workflow/tree/15.0/purchase_order_secondary_unit"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/purchase-workflow-15-0/purchase-workflow-15-0-purchase_order_secondary_unit"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/142/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
371371
<p>This module extends the functionality of purchase orders to allow buy products
372372
in secondary unit of distinct category.</p>
373373
<p><strong>Table of contents</strong></p>

purchase_order_secondary_unit/tests/test_purchase_order_secondary_unit.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ def setUpClass(cls):
1414
cls.product_uom_kg = cls.env.ref("uom.product_uom_kgm")
1515
cls.product_uom_gram = cls.env.ref("uom.product_uom_gram")
1616
cls.product_uom_unit = cls.env.ref("uom.product_uom_unit")
17-
with Form(cls.env["product.product"]) as form:
18-
form.name = "Test"
19-
form.uom_id = cls.product_uom_kg
20-
form.uom_po_id = cls.product_uom_kg
21-
with form.secondary_uom_ids.new() as line:
22-
line.name = "unit-700"
23-
line.uom_id = cls.product_uom_unit
24-
line.factor = 0.7
25-
cls.product = form.save()
26-
cls.secondary_unit = cls.product.secondary_uom_ids
17+
# Create a product
18+
product_form = Form(cls.env["product.product"])
19+
product_form.name = "Test"
20+
product_form.uom_id = cls.product_uom_kg
21+
product_form.uom_po_id = cls.product_uom_kg
22+
cls.product = product_form.save()
23+
# Set a secondary unit on the template of the previously created product
24+
with Form(cls.product.product_tmpl_id) as template_form:
25+
with template_form.secondary_uom_ids.new() as secondary_uom_form:
26+
secondary_uom_form.name = "unit-700"
27+
secondary_uom_form.uom_id = cls.product_uom_unit
28+
secondary_uom_form.factor = 0.7
29+
cls.secondary_unit = cls.product.product_tmpl_id.secondary_uom_ids
2730
cls.product.purchase_secondary_uom_id = cls.secondary_unit.id
2831
cls.partner = cls.env["res.partner"].create({"name": "test - partner"})
2932
cls.purchase_order_obj = cls.env["purchase.order"]

purchase_order_secondary_unit/views/product_views.xml

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@
99
<field name="groups_id" eval="[(4, ref('uom.group_uom'))]" />
1010
<field name="arch" type="xml">
1111
<field name="uom_po_id" position="after">
12-
<field
13-
name="purchase_secondary_uom_id"
14-
domain="[('product_tmpl_id', '=', id)]"
15-
options="{'no_create': True}"
16-
/>
12+
<field name="purchase_secondary_uom_id" options="{'no_create': True}" />
1713
</field>
1814
</field>
1915
</record>

purchase_order_secondary_unit/views/purchase_order_views.xml

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
<field
2121
name="secondary_uom_id"
2222
class="oe_inline"
23+
domain="['|', ('product_id', '=', product_id),
24+
'&amp;', ('product_tmpl_id.product_variant_ids', 'in', [product_id]),
25+
('product_id', '=', False)]"
26+
options="{'no_create': True}"
2327
attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}"
2428
/>
2529
</xpath>
@@ -33,7 +37,9 @@
3337
/>
3438
<field
3539
name="secondary_uom_id"
36-
domain="[('product_tmpl_id.product_variant_ids', 'in', product_id and [product_id] or [])]"
40+
domain="['|', ('product_id', '=', product_id),
41+
'&amp;', ('product_tmpl_id.product_variant_ids', 'in', [product_id]),
42+
('product_id', '=', False)]"
3743
options="{'no_create': True}"
3844
attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}"
3945
/>

0 commit comments

Comments
 (0)