mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-26 04:32:03 +02:00
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.fields import Command
|
|
from odoo.tests import Form, tagged, users
|
|
|
|
from .common import TestSaleCommon
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestSaleOrderCreditLimit(TestSaleCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.env.company.account_use_credit_limit = True
|
|
|
|
buck_currency = cls.env['res.currency'].create({
|
|
'name': 'TB',
|
|
'symbol': 'TB',
|
|
})
|
|
cls.env['res.currency.rate'].create({
|
|
'name': '2023-01-01',
|
|
'rate': 2.0,
|
|
'currency_id': buck_currency.id,
|
|
'company_id': cls.env.company.id,
|
|
})
|
|
|
|
cls.buck_pricelist = cls.env['product.pricelist'].create({
|
|
'name': 'Test Buck Pricelist',
|
|
'currency_id': buck_currency.id,
|
|
})
|
|
|
|
cls.sales_user = cls.company_data['default_user_salesman']
|
|
cls.sales_user.write({
|
|
'login': "notaccountman",
|
|
'email': "bad@accounting.com",
|
|
})
|
|
|
|
cls.empty_order = cls.env['sale.order'].create({
|
|
'partner_id': cls.partner_a.id,
|
|
})
|
|
|
|
def test_credit_limit_multicurrency(self):
|
|
self.partner_a.credit_limit = 50
|
|
|
|
order = self.empty_order
|
|
order.write({
|
|
'pricelist_id': self.buck_pricelist.id,
|
|
'order_line': [
|
|
Command.create({
|
|
'product_id': self.company_data['product_order_no'].id,
|
|
'product_uom_qty': 1,
|
|
'price_unit': 45.0,
|
|
'tax_id': False,
|
|
})
|
|
]
|
|
})
|
|
self.assertEqual(order.amount_total / order.currency_rate, 22.5)
|
|
self.assertEqual(order.partner_credit_warning, '')
|
|
|
|
order.write({
|
|
'order_line': [
|
|
Command.create({
|
|
'product_id': self.company_data['product_order_no'].id,
|
|
'product_uom_qty': 1,
|
|
'price_unit': 65.0,
|
|
'tax_id': False,
|
|
})
|
|
],
|
|
})
|
|
self.assertEqual(order.amount_total / order.currency_rate, 55)
|
|
self.assertEqual(
|
|
order.partner_credit_warning,
|
|
"partner_a has reached its Credit Limit of : $\xa050.00\n"
|
|
"Total amount due (including this document) : $\xa055.00"
|
|
)
|
|
|
|
@users('notaccountman')
|
|
def test_credit_limit_access(self):
|
|
"""Ensure credit warning gets displayed without Accounting access."""
|
|
self.empty_order.user_id = self.env.user
|
|
self.empty_order.partner_id.credit_limit = self.product_a.list_price
|
|
|
|
for group in self.partner_a._fields['credit'].groups.split(','):
|
|
self.assertFalse(self.env.user.has_group(group))
|
|
|
|
with Form(self.empty_order.with_env(self.env)) as order_form:
|
|
with order_form.order_line.new() as sol:
|
|
sol.product_id = self.product_a
|
|
sol.tax_id.clear()
|
|
self.assertFalse(
|
|
order_form.partner_credit_warning,
|
|
"No credit warning should be displayed (yet)",
|
|
)
|
|
with order_form.order_line.edit(0) as sol:
|
|
sol.tax_id.add(self.product_a.taxes_id)
|
|
self.assertTrue(
|
|
order_form.partner_credit_warning,
|
|
"Credit warning should be displayed",
|
|
)
|