diff --git a/procurement_mto_analytic/README.rst b/procurement_mto_analytic/README.rst
index c3affb029a..9f6e562ef7 100644
--- a/procurement_mto_analytic/README.rst
+++ b/procurement_mto_analytic/README.rst
@@ -7,7 +7,7 @@ Purchase Analytic (MTO)
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:5422c8951e5b5e292bcb68881aac0c7296bd9abe57ed26b8eecf69b555fef59c
+ !! source digest: sha256:541299b9d83e8dca12c223d23e8d78357360045ca1f7272edd4f4120da984de7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -17,13 +17,13 @@ Purchase Analytic (MTO)
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github
- :target: https://github.com/OCA/account-analytic/tree/15.0/procurement_mto_analytic
+ :target: https://github.com/OCA/account-analytic/tree/16.0/procurement_mto_analytic
:alt: OCA/account-analytic
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/account-analytic-15-0/account-analytic-15-0-procurement_mto_analytic
+ :target: https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-procurement_mto_analytic
: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/account-analytic&target_branch=15.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -74,7 +74,7 @@ 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -125,6 +125,6 @@ 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.
-This module is part of the `OCA/account-analytic `_ project on GitHub.
+This module is part of the `OCA/account-analytic `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/procurement_mto_analytic/__manifest__.py b/procurement_mto_analytic/__manifest__.py
index 8bfa5c5887..82a7832bb8 100644
--- a/procurement_mto_analytic/__manifest__.py
+++ b/procurement_mto_analytic/__manifest__.py
@@ -2,13 +2,13 @@
{
"name": "Purchase Analytic (MTO)",
- "summary": "This module sets analytic account in purchase order line from "
- "sale order analytic account",
- "version": "15.0.1.0.0",
+ "summary": "This module sets analytic distribution in purchase order line from "
+ "sale order line analytic distribution",
+ "version": "16.0.1.0.0",
"category": "Analytic",
"license": "AGPL-3",
"author": "Tecnativa, VentorTech, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-analytic",
- "depends": ["sale_stock", "purchase_stock"],
+ "depends": ["purchase_stock", "sale_stock"],
"installable": True,
}
diff --git a/procurement_mto_analytic/models/__init__.py b/procurement_mto_analytic/models/__init__.py
index 31c4d41b87..5bd980bf97 100644
--- a/procurement_mto_analytic/models/__init__.py
+++ b/procurement_mto_analytic/models/__init__.py
@@ -2,5 +2,4 @@
from . import sale_order_line
from . import stock_move
-from . import stock_rule
from . import purchase_order_line
diff --git a/procurement_mto_analytic/models/purchase_order_line.py b/procurement_mto_analytic/models/purchase_order_line.py
index 31fbaec58e..ab3f067577 100644
--- a/procurement_mto_analytic/models/purchase_order_line.py
+++ b/procurement_mto_analytic/models/purchase_order_line.py
@@ -15,5 +15,35 @@ def _prepare_purchase_order_line_from_procurement(
)._prepare_purchase_order_line_from_procurement(
product_id, product_qty, product_uom, company_id, values, po
)
- res["account_analytic_id"] = values.get("account_analytic_id", False)
+ res["analytic_distribution"] = values.get("analytic_distribution", False)
return res
+
+ def _find_candidate(
+ self,
+ product_id,
+ product_qty,
+ product_uom,
+ location_id,
+ name,
+ origin,
+ company_id,
+ values,
+ ):
+ lines = (
+ self.filtered(
+ lambda po_line: po_line.analytic_distribution
+ == values["analytic_distribution"]
+ )
+ if values.get("analytic_distribution")
+ else self
+ )
+ return super(PurchaseOrderLine, lines)._find_candidate(
+ product_id,
+ product_qty,
+ product_uom,
+ location_id,
+ name,
+ origin,
+ company_id,
+ values,
+ )
diff --git a/procurement_mto_analytic/models/sale_order_line.py b/procurement_mto_analytic/models/sale_order_line.py
index bd4fa4360e..d174311a97 100644
--- a/procurement_mto_analytic/models/sale_order_line.py
+++ b/procurement_mto_analytic/models/sale_order_line.py
@@ -8,12 +8,12 @@ class SaleOrderLine(models.Model):
def _prepare_procurement_values(self, group_id=False):
res = super()._prepare_procurement_values(group_id)
- res.update({"account_analytic_id": self.order_id.analytic_account_id.id})
+ res.update({"analytic_distribution": self.analytic_distribution})
return res
def _purchase_service_prepare_line_values(self, purchase_order, quantity=False):
res = super()._purchase_service_prepare_line_values(
purchase_order=purchase_order, quantity=quantity
)
- res.update({"account_analytic_id": self.order_id.analytic_account_id.id})
+ res.update({"analytic_distribution": self.analytic_distribution})
return res
diff --git a/procurement_mto_analytic/models/stock_move.py b/procurement_mto_analytic/models/stock_move.py
index 7f3c315727..487bc20d2f 100644
--- a/procurement_mto_analytic/models/stock_move.py
+++ b/procurement_mto_analytic/models/stock_move.py
@@ -8,7 +8,8 @@ class StockMove(models.Model):
def _prepare_procurement_values(self):
res = super()._prepare_procurement_values()
- res.update(
- {"account_analytic_id": self.group_id.sale_id.analytic_account_id.id}
- )
+ analytic_distribution = self.sale_line_id.analytic_distribution
+ # Update the procurement values with analytic_distribution if it exists
+ if analytic_distribution:
+ res.update({"analytic_distribution": analytic_distribution})
return res
diff --git a/procurement_mto_analytic/models/stock_rule.py b/procurement_mto_analytic/models/stock_rule.py
deleted file mode 100644
index 26a53afc3f..0000000000
--- a/procurement_mto_analytic/models/stock_rule.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-from odoo import models
-
-
-class StockRule(models.Model):
- _inherit = "stock.rule"
-
- def _make_po_get_domain(self, company_id, values, partner):
- res = super()._make_po_get_domain(company_id, values, partner)
- res += (
- (
- "order_line.account_analytic_id",
- "=",
- values.get("account_analytic_id", False),
- ),
- )
- return res
diff --git a/procurement_mto_analytic/static/description/index.html b/procurement_mto_analytic/static/description/index.html
index eaeb07e7df..e9259d58b5 100644
--- a/procurement_mto_analytic/static/description/index.html
+++ b/procurement_mto_analytic/static/description/index.html
@@ -367,9 +367,9 @@ Purchase Analytic (MTO)
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:5422c8951e5b5e292bcb68881aac0c7296bd9abe57ed26b8eecf69b555fef59c
+!! source digest: sha256:541299b9d83e8dca12c223d23e8d78357360045ca1f7272edd4f4120da984de7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module takes account analytic value from sale order to the created
purchase order line.
Table of contents
@@ -426,7 +426,7 @@
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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -472,7 +472,7 @@
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.
-
This module is part of the OCA/account-analytic project on GitHub.
+
This module is part of the OCA/account-analytic project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/procurement_mto_analytic/tests/test_purchase_procurement_analytic.py b/procurement_mto_analytic/tests/test_purchase_procurement_analytic.py
index 65097e81fc..4dd1549390 100644
--- a/procurement_mto_analytic/tests/test_purchase_procurement_analytic.py
+++ b/procurement_mto_analytic/tests/test_purchase_procurement_analytic.py
@@ -9,8 +9,10 @@ class TestPurchaseProcurementAnalytic(common.TransactionCase):
@classmethod
def setUpClass(cls):
super(TestPurchaseProcurementAnalytic, cls).setUpClass()
- vendor = cls.env["res.partner"].create({"name": "Partner #2"})
- supplierinfo = cls.env["product.supplierinfo"].create({"name": vendor.id})
+ cls.vendor = cls.env["res.partner"].create({"name": "Partner #2"})
+ supplierinfo = cls.env["product.supplierinfo"].create(
+ {"partner_id": cls.vendor.id}
+ )
mto = cls.env.ref("stock.route_warehouse0_mto")
mto.write({"active": True})
buy = cls.env.ref("purchase_stock.route_warehouse0_buy")
@@ -22,7 +24,7 @@ def setUpClass(cls):
}
)
supplierinfo_service = cls.env["product.supplierinfo"].create(
- {"name": vendor.id}
+ {"partner_id": cls.vendor.id}
)
cls.service_product = cls.env["product.product"].create(
{
@@ -33,15 +35,14 @@ def setUpClass(cls):
}
)
cls.partner = cls.env["res.partner"].create({"name": "Partner #1"})
+ cls.analytic_distribution = dict(
+ {str(cls.env.ref("analytic.analytic_agrolait").id): 100.0}
+ )
def test_sale_to_procurement(self):
- analytic_account = self.env["account.analytic.account"].create(
- {"name": "Test Analytic Account"}
- )
sale_order = self.env["sale.order"].create(
{
"partner_id": self.partner.id,
- "analytic_account_id": analytic_account.id,
"order_line": [
(
0,
@@ -51,6 +52,7 @@ def test_sale_to_procurement(self):
"product_uom_qty": 1,
"price_unit": self.product.list_price,
"name": self.product.name,
+ "analytic_distribution": self.analytic_distribution,
},
)
],
@@ -58,20 +60,18 @@ def test_sale_to_procurement(self):
}
)
sale_order.with_context(test_enabled=True).action_confirm()
-
- purchase_order = self.env["purchase.order.line"].search(
- [("account_analytic_id", "=", analytic_account.id)]
+ purchase_order_line = self.env["purchase.order.line"].search(
+ [("partner_id", "=", self.vendor.id)]
+ )
+ self.assertTrue(purchase_order_line)
+ self.assertEqual(
+ purchase_order_line.analytic_distribution, self.analytic_distribution
)
- self.assertTrue(purchase_order)
def test_sale_service_product(self):
- analytic_account = self.env["account.analytic.account"].create(
- {"name": "Test Service Analytic Account"}
- )
sale_order = self.env["sale.order"].create(
{
"partner_id": self.partner.id,
- "analytic_account_id": analytic_account.id,
"order_line": [
(
0,
@@ -79,8 +79,9 @@ def test_sale_service_product(self):
{
"product_id": self.service_product.id,
"product_uom_qty": 1,
- "price_unit": self.product.list_price,
- "name": self.product.name,
+ "price_unit": self.service_product.list_price,
+ "name": self.service_product.name,
+ "analytic_distribution": self.analytic_distribution,
},
)
],
@@ -89,7 +90,10 @@ def test_sale_service_product(self):
)
sale_order.with_context(test_enabled=True).action_confirm()
- purchase_order = self.env["purchase.order.line"].search(
- [("account_analytic_id", "=", analytic_account.id)]
+ purchase_order_line = self.env["purchase.order.line"].search(
+ [("partner_id", "=", self.vendor.id)]
+ )
+ self.assertTrue(purchase_order_line)
+ self.assertTrue(
+ purchase_order_line.analytic_distribution, self.analytic_distribution
)
- self.assertTrue(purchase_order)