mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-26 17:32:06 +02:00
Initial commit: Sale packages
This commit is contained in:
commit
14e3d26998
6469 changed files with 2479670 additions and 0 deletions
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_sale_margin
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.fields import Command
|
||||
from odoo.addons.sale.tests.common import SaleCommon
|
||||
|
||||
|
||||
class TestSaleMargin(SaleCommon):
|
||||
|
||||
def test_sale_margin(self):
|
||||
""" Test the sale_margin module in Odoo. """
|
||||
self.product.standard_price = 700.0
|
||||
order = self.empty_order
|
||||
|
||||
order.order_line = [
|
||||
Command.create({
|
||||
'price_unit': 1000.0,
|
||||
'product_uom_qty': 10.0,
|
||||
'product_id': self.product.id,
|
||||
}),
|
||||
]
|
||||
# Confirm the sales order.
|
||||
order.action_confirm()
|
||||
# Verify that margin field gets bind with the value.
|
||||
self.assertEqual(order.margin, 3000.00, "Sales order profit should be 6000.00")
|
||||
self.assertEqual(order.margin_percent, 0.3, "Sales order margin should be 30%")
|
||||
|
||||
def test_negative_margin(self):
|
||||
""" Test the margin when sales price is less then cost."""
|
||||
order = self.empty_order
|
||||
self.service_product.standard_price = 40.0
|
||||
|
||||
order.order_line = [
|
||||
Command.create({
|
||||
'price_unit': 20.0,
|
||||
'product_uom_qty': 1.0,
|
||||
'state': 'draft',
|
||||
'product_id': self.service_product.id,
|
||||
}),
|
||||
Command.create({
|
||||
'price_unit': -100.0,
|
||||
'purchase_price': 0.0,
|
||||
'product_uom_qty': 1.0,
|
||||
'state': 'draft',
|
||||
'product_id': self.product.id,
|
||||
}),
|
||||
]
|
||||
# Confirm the sales order.
|
||||
order.action_confirm()
|
||||
# Verify that margin field of Sale Order Lines gets bind with the value.
|
||||
self.assertEqual(order.order_line[0].margin, -20.00, "Sales order profit should be -20.00")
|
||||
self.assertEqual(order.order_line[0].margin_percent, -1, "Sales order margin percentage should be -100%")
|
||||
self.assertEqual(order.order_line[1].margin, -100.00, "Sales order profit should be -100.00")
|
||||
self.assertEqual(order.order_line[1].margin_percent, 1.00, "Sales order margin should be 100% when the cost is zero and price defined")
|
||||
# Verify that margin field gets bind with the value.
|
||||
self.assertEqual(order.margin, -120.00, "Sales order margin should be -120.00")
|
||||
self.assertEqual(order.margin_percent, 1.5, "Sales order margin should be 150%")
|
||||
|
||||
def test_margin_no_cost(self):
|
||||
""" Test the margin when cost is 0 margin percentage should always be 100%."""
|
||||
order = self.empty_order
|
||||
order.order_line = [Command.create({
|
||||
'product_id': self.product.id,
|
||||
'price_unit': 70.0,
|
||||
'product_uom_qty': 1.0,
|
||||
})]
|
||||
|
||||
# Verify that margin field of Sale Order Lines gets bind with the value.
|
||||
self.assertEqual(order.order_line[0].margin, 70.00, "Sales order profit should be 70.00")
|
||||
self.assertEqual(order.order_line[0].margin_percent, 1.0, "Sales order margin percentage should be 100.00")
|
||||
# Verify that margin field gets bind with the value.
|
||||
self.assertEqual(order.margin, 70.00, "Sales order profit should be 70.00")
|
||||
self.assertEqual(order.margin_percent, 1.00, "Sales order margin percentage should be 100.00")
|
||||
|
||||
def test_margin_considering_product_qty(self):
|
||||
""" Test the margin and margin percentage when product with multiple quantity"""
|
||||
order = self.empty_order
|
||||
self.service_product.standard_price = 50.0
|
||||
|
||||
order.order_line = [
|
||||
Command.create({
|
||||
'price_unit': 100.0,
|
||||
'product_uom_qty': 3.0,
|
||||
'product_id': self.service_product.id,
|
||||
}),
|
||||
Command.create({
|
||||
'price_unit': -50.0,
|
||||
'product_uom_qty': 1.0,
|
||||
'product_id': self.product.id,
|
||||
}),
|
||||
]
|
||||
|
||||
# Confirm the sales order.
|
||||
order.action_confirm()
|
||||
# Verify that margin field of Sale Order Lines gets bind with the value.
|
||||
self.assertEqual(order.order_line[0].margin, 150.00, "Sales order profit should be 150.00")
|
||||
self.assertEqual(order.order_line[0].margin_percent, 0.5, "Sales order margin should be 100%")
|
||||
self.assertEqual(order.order_line[1].margin, -50.00, "Sales order profit should be -50.00")
|
||||
self.assertEqual(order.order_line[1].margin_percent, 1.0, "Sales order margin should be 100%")
|
||||
# Verify that margin field gets bind with the value.
|
||||
self.assertEqual(order.margin, 100.00, "Sales order profit should be 100.00")
|
||||
self.assertEqual(order.margin_percent, 0.4, "Sales order margin should be 40%")
|
||||
|
||||
def test_sale_margin_order_copy(self):
|
||||
"""When we copy a sales order, its margins should be update to meet the current costs"""
|
||||
order = self.empty_order
|
||||
self.pricelist.currency_id = self.env.company.currency_id
|
||||
# We buy at a specific price today and our margins go according to that
|
||||
self.product.standard_price = 500.0
|
||||
order.order_line = [
|
||||
Command.create({
|
||||
'price_unit': 1000.0,
|
||||
'product_uom_qty': 10.0,
|
||||
'product_id': self.product.id,
|
||||
}),
|
||||
]
|
||||
self.assertAlmostEqual(500.0, order.order_line.purchase_price)
|
||||
self.assertAlmostEqual(5000.0, order.order_line.margin)
|
||||
self.assertAlmostEqual(.5, order.order_line.margin_percent)
|
||||
# Later on, the cost of our product changes and so will the following sale
|
||||
# margins do.
|
||||
self.product.standard_price = 750.0
|
||||
following_sale = order.copy()
|
||||
self.assertAlmostEqual(750.0, following_sale.order_line.purchase_price)
|
||||
self.assertAlmostEqual(2500.0, following_sale.order_line.margin)
|
||||
self.assertAlmostEqual(.25, following_sale.order_line.margin_percent)
|
||||
Loading…
Add table
Add a link
Reference in a new issue