Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
137
account_invoice_supplierinfo_update/tests/test_module.py
Normal file
137
account_invoice_supplierinfo_update/tests/test_module.py
Normal file
@@ -0,0 +1,137 @@
|
||||
# Copyright 2016 Chafique DELLI @ Akretion
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests import tagged
|
||||
|
||||
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
||||
|
||||
|
||||
@tagged("post_install", "-at_install")
|
||||
class TestModule(AccountTestInvoicingCommon):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.invoice = cls.in_invoice = cls.init_invoice(
|
||||
"in_invoice",
|
||||
products=[cls.product_a, cls.product_b, cls.env["product.product"]],
|
||||
)
|
||||
cls.uom_unit = cls.env.ref("uom.product_uom_unit")
|
||||
cls.uom_dozen = cls.env.ref("uom.product_uom_dozen")
|
||||
# Product A : uom_id : Unit
|
||||
cls.product_b.uom_id = cls.product_b.uom_po_id = cls.uom_unit
|
||||
cls.line_a = cls.invoice.invoice_line_ids.filtered(
|
||||
lambda x: x.product_id == cls.product_a
|
||||
)
|
||||
# Product B : uom_id : Dozen
|
||||
cls.product_b.uom_id = cls.product_b.uom_po_id = cls.uom_dozen
|
||||
cls.line_b = cls.invoice.invoice_line_ids.filtered(
|
||||
lambda x: x.product_id == cls.product_b
|
||||
)
|
||||
cls.line_without_product = cls.invoice.invoice_line_ids.filtered(
|
||||
lambda x: not x.product_id
|
||||
)
|
||||
|
||||
cls.line_a.write(
|
||||
{
|
||||
"quantity": 10.0,
|
||||
"price_unit": 400.0,
|
||||
"product_uom_id": cls.uom_unit.id,
|
||||
"discount": 0.0,
|
||||
}
|
||||
)
|
||||
cls.line_b.write(
|
||||
{
|
||||
"quantity": 1.0,
|
||||
"price_unit": 10.0,
|
||||
"product_uom_id": cls.uom_dozen.id,
|
||||
"discount": 10.0,
|
||||
}
|
||||
)
|
||||
cls.line_without_product.write({"quantity": 1.0, "price_unit": 35.0})
|
||||
|
||||
cls.WizardUpdateSupplierinfo = cls.env["wizard.update.invoice.supplierinfo"]
|
||||
cls.ProductSupplierinfo = cls.env["product.supplierinfo"]
|
||||
|
||||
def test_update_pricelist_supplierinfo(self):
|
||||
# supplier invoice with pricelist supplierinfo to update and
|
||||
# product supplierinfo is on product_template
|
||||
|
||||
vals_wizard = self.invoice.check_supplierinfo().get("context", {})
|
||||
|
||||
line_ids = vals_wizard.get("default_line_ids", {})
|
||||
|
||||
self.assertEqual(len(line_ids), 2)
|
||||
self.assertEqual(line_ids[0][2]["current_price"], False)
|
||||
self.assertEqual(line_ids[0][2]["new_price"], 400.0)
|
||||
self.assertEqual(line_ids[0][2]["current_uom_id"], False)
|
||||
self.assertEqual(line_ids[0][2]["new_uom_id"], self.uom_unit.id)
|
||||
self.assertEqual(line_ids[0][2]["current_min_quantity"], 0.0)
|
||||
self.assertEqual(line_ids[0][2]["current_discount"], False)
|
||||
self.assertEqual(line_ids[0][2]["new_discount"], 0.0)
|
||||
self.assertEqual(line_ids[1][2]["current_price"], False)
|
||||
self.assertEqual(line_ids[1][2]["new_price"], 10.0)
|
||||
self.assertEqual(line_ids[1][2]["current_uom_id"], False)
|
||||
self.assertEqual(line_ids[1][2]["new_uom_id"], self.uom_dozen.id)
|
||||
self.assertEqual(line_ids[1][2]["current_discount"], False)
|
||||
self.assertEqual(line_ids[1][2]["new_discount"], 10.0)
|
||||
|
||||
# Change values
|
||||
line_ids[0][2]["new_min_quantity"] = 6.0
|
||||
|
||||
# Create and launch update process
|
||||
wizard = self.WizardUpdateSupplierinfo.create(
|
||||
{"line_ids": line_ids, "invoice_id": self.invoice.id}
|
||||
)
|
||||
line_a = wizard.line_ids.filtered(lambda x: x.product_id == self.product_a)
|
||||
line_b = wizard.line_ids.filtered(lambda x: x.product_id == self.product_b)
|
||||
self.assertEqual(line_a.new_price, 400.0)
|
||||
self.assertEqual(line_b.new_price, 10.0)
|
||||
|
||||
wizard.update_supplierinfo()
|
||||
|
||||
supplierinfo_a = self.ProductSupplierinfo.search(
|
||||
[
|
||||
("partner_id", "=", self.invoice.supplier_partner_id.id),
|
||||
("product_tmpl_id", "=", self.product_a.product_tmpl_id.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(supplierinfo_a), 1)
|
||||
self.assertEqual(supplierinfo_a.price, 400.0)
|
||||
self.assertEqual(supplierinfo_a.product_uom, self.uom_unit)
|
||||
self.assertEqual(supplierinfo_a.min_qty, 6.0)
|
||||
self.assertEqual(supplierinfo_a.discount, 0.0)
|
||||
|
||||
supplierinfo_b = self.ProductSupplierinfo.search(
|
||||
[
|
||||
("partner_id", "=", self.invoice.supplier_partner_id.id),
|
||||
("product_tmpl_id", "=", self.product_b.product_tmpl_id.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(supplierinfo_b), 1)
|
||||
self.assertEqual(supplierinfo_b.price, 10.0)
|
||||
self.assertEqual(supplierinfo_b.product_uom, self.uom_dozen)
|
||||
self.assertEqual(supplierinfo_b.discount, 10.0)
|
||||
|
||||
# change values 400 / Unit -> 5400 / Dozen.
|
||||
# Price variation : +12.5%
|
||||
self.line_a.write({"price_unit": 5400.0, "product_uom_id": self.uom_dozen.id})
|
||||
vals_wizard = self.invoice.check_supplierinfo().get("context", {})
|
||||
|
||||
line_ids = vals_wizard.get("default_line_ids", {})
|
||||
|
||||
self.assertEqual(len(line_ids), 1)
|
||||
self.assertEqual(line_ids[0][2]["current_price"], 400)
|
||||
self.assertEqual(line_ids[0][2]["new_price"], 5400.0)
|
||||
self.assertEqual(line_ids[0][2]["current_uom_id"], self.uom_unit.id)
|
||||
self.assertEqual(line_ids[0][2]["new_uom_id"], self.uom_dozen.id)
|
||||
|
||||
# Create and launch update process
|
||||
wizard = self.WizardUpdateSupplierinfo.create(
|
||||
{"line_ids": line_ids, "invoice_id": self.invoice.id}
|
||||
)
|
||||
line_a = wizard.line_ids.filtered(lambda x: x.product_id == self.product_a)
|
||||
self.assertEqual(line_a.cost_variation, 12.5)
|
||||
wizard.update_supplierinfo()
|
||||
|
||||
self.assertEqual(supplierinfo_a.price, 5400.0)
|
||||
self.assertEqual(supplierinfo_a.product_uom, self.uom_dozen)
|
||||
Reference in New Issue
Block a user