Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
1
sale_fixed_discount/tests/__init__.py
Executable file
1
sale_fixed_discount/tests/__init__.py
Executable file
@@ -0,0 +1 @@
|
||||
from . import test_sale_fixed_discount
|
||||
137
sale_fixed_discount/tests/test_sale_fixed_discount.py
Executable file
137
sale_fixed_discount/tests/test_sale_fixed_discount.py
Executable file
@@ -0,0 +1,137 @@
|
||||
# Copyright 2017-18 ForgeFlow S.L.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests import Form
|
||||
|
||||
from odoo.addons.base.tests.common import BaseCommon
|
||||
|
||||
|
||||
class TestSaleFixedDiscount(BaseCommon):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.env.user.groups_id |= cls.env.ref("sale.group_discount_per_so_line")
|
||||
cls.partner = cls.env["res.partner"].create({"name": "Test"})
|
||||
cls.tax = cls.env["account.tax"].create(
|
||||
{
|
||||
"name": "TAX 15%",
|
||||
"amount_type": "percent",
|
||||
"type_tax_use": "sale",
|
||||
"amount": 15.0,
|
||||
}
|
||||
)
|
||||
cls.product = cls.env["product.product"].create(
|
||||
{"name": "Test product", "type": "consu"}
|
||||
)
|
||||
cls.product2 = cls.env["product.product"].create(
|
||||
{"name": "Test product 2", "type": "consu"}
|
||||
)
|
||||
cls.sale = cls.env["sale.order"].create(
|
||||
{"name": "Test Sale Order", "partner_id": cls.partner.id}
|
||||
)
|
||||
cls.so_line = cls.env["sale.order.line"]
|
||||
cls.sale_line1 = cls.so_line.create(
|
||||
{
|
||||
"order_id": cls.sale.id,
|
||||
"name": "Line 1",
|
||||
"price_unit": 200.0,
|
||||
"product_uom_qty": 1,
|
||||
"product_id": cls.product.id,
|
||||
"tax_id": [(6, 0, [cls.tax.id])],
|
||||
}
|
||||
)
|
||||
|
||||
def test_01_discounts(self):
|
||||
"""Tests multiple discounts in line with taxes."""
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.discount_fixed = 20.0
|
||||
self.assertEqual(line.discount, 10.0)
|
||||
self.assertEqual(line.price_subtotal, 180.0)
|
||||
|
||||
self.assertEqual(self.sale.amount_total, 207.00)
|
||||
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.product_uom_qty = 2
|
||||
line.price_unit = 200.0
|
||||
self.assertEqual(line.discount, 10.0)
|
||||
self.assertEqual(line.price_subtotal, 360.0)
|
||||
|
||||
self.assertEqual(self.sale.amount_total, 414.00)
|
||||
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.product_uom_qty = 1
|
||||
line.price_unit = 200.0
|
||||
line.discount_fixed = 0.0
|
||||
line.discount = 50.0
|
||||
self.assertEqual(line.price_subtotal, 100.0)
|
||||
|
||||
self.assertEqual(self.sale.amount_total, 115.00)
|
||||
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.new() as line2:
|
||||
line2.product_id = self.product2
|
||||
line2.product_uom_qty = 1
|
||||
line2.price_unit = 100.0
|
||||
line2.discount_fixed = 5.0
|
||||
self.assertEqual(line2.discount, 5.0)
|
||||
self.assertEqual(line2.price_subtotal, 95.0)
|
||||
|
||||
#
|
||||
self.assertEqual(self.sale.amount_total, 224.25)
|
||||
|
||||
def test_02_fixed_discount_mismatch(self):
|
||||
"""Tests fixed discount mismatch."""
|
||||
with self.assertRaisesRegex(
|
||||
ValidationError,
|
||||
"Please correct one of the discounts",
|
||||
):
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.discount_fixed = 20.0
|
||||
line.discount = 5.0
|
||||
|
||||
def test_03_fixed_discount_invoice(self):
|
||||
"""Test discount_fixed value propagation to account.move.
|
||||
Case of editing order line by using UI.
|
||||
"""
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.discount_fixed = 20.0
|
||||
|
||||
self.sale.action_confirm()
|
||||
self.sale._create_invoices()
|
||||
|
||||
self.assertEqual(self.sale.invoice_ids.invoice_line_ids.discount_fixed, 20.0)
|
||||
self.assertEqual(self.sale.invoice_ids.invoice_line_ids.discount, 10.0)
|
||||
|
||||
self.assertEqual(self.sale.invoice_ids.tax_totals["base_amount"], 180.0)
|
||||
self.assertEqual(self.sale.invoice_ids.tax_totals["total_amount"], 207.0)
|
||||
|
||||
def test_04_fixed_discount_without_price(self):
|
||||
with Form(self.sale) as sale_order:
|
||||
with sale_order.order_line.edit(0) as line:
|
||||
line.product_uom_qty = 1.0
|
||||
line.price_unit = 0.0
|
||||
line.discount_fixed = 50.0
|
||||
self.assertEqual(line.discount, 0.0)
|
||||
self.assertEqual(line.price_subtotal, 0.0)
|
||||
self.assertEqual(self.sale.amount_total, 0.0)
|
||||
|
||||
def test_05_fixed_discount_invoice(self):
|
||||
"""Test discount_fixed value propagation to account.move.
|
||||
Case of editing order line without using UI (onchange would be not triggered).
|
||||
"""
|
||||
self.sale.order_line.discount_fixed = 20.0
|
||||
|
||||
self.sale.action_confirm()
|
||||
self.sale._create_invoices()
|
||||
|
||||
self.assertEqual(self.sale.invoice_ids.invoice_line_ids.discount_fixed, 20.0)
|
||||
self.assertEqual(self.sale.invoice_ids.invoice_line_ids.discount, 10.0)
|
||||
|
||||
self.assertEqual(self.sale.invoice_ids.tax_totals["base_amount"], 180.0)
|
||||
self.assertEqual(self.sale.invoice_ids.tax_totals["total_amount"], 207.0)
|
||||
Reference in New Issue
Block a user