mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
[ADD] test for policy changer and fix some bugs
This commit is contained in:
@@ -198,7 +198,8 @@ class CreditControlPolicy(Model):
|
||||
if isinstance(policy_id, list):
|
||||
policy_id = policy_id[0]
|
||||
cr.execute("SELECT move_line_id FROM credit_control_line"
|
||||
" WHERE policy_id != %s and move_line_id in %s",
|
||||
" WHERE policy_id != %s and move_line_id in %s"
|
||||
" AND manually_overriden IS false",
|
||||
(policy_id, tuple(lines)))
|
||||
res = cr.fetchall()
|
||||
if res:
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
###############################################################################
|
||||
#
|
||||
# OERPScenario, OpenERP Functional Tests
|
||||
# Copyright 2012 Camptocamp SA
|
||||
# Author Nicolas Bessi
|
||||
##############################################################################
|
||||
|
||||
# Features Generic tags (none for all)
|
||||
##############################################################################
|
||||
|
||||
@account_credit_control @account_credit_control_run @account_credit_control_run_aug
|
||||
|
||||
Feature: Ensure that manually changing an invoice level feature works as expected
|
||||
|
||||
@account_credit_control_change_level
|
||||
Scenario: Change level
|
||||
Given I change level for invoice "SAJ/2014/0004" to "10 days net" of policy "3 time policy"
|
||||
Then wizard selected move lines should be:
|
||||
| name |
|
||||
| SI_4 |
|
||||
When I confirm the level change
|
||||
And I should have "3" credit control lines overriden
|
||||
And one new credit control line of level "10 days net" related to invoice "SAJ/2014/0004"
|
||||
@@ -0,0 +1,51 @@
|
||||
@given(u'I change level for invoice "{invoice_name}" to "{level_name}" of policy "{policy_name}"')
|
||||
def impl(ctx, invoice_name, level_name, policy_name):
|
||||
invoice = model('account.invoice').get([('number', '=', invoice_name)])
|
||||
assert_true(invoice, msg='No invoices found')
|
||||
level = model('credit.control.policy.level').get([('name', '=', level_name)])
|
||||
assert_true(level, 'level not found')
|
||||
policy = model('credit.control.policy').get([('name', '=', policy_name)])
|
||||
assert_true(policy, 'Policy not found')
|
||||
assert_equal(policy.id, level.policy_id.id)
|
||||
context = {'active_ids': [invoice.id]}
|
||||
data = {'new_policy_id': policy.id,
|
||||
'new_policy_level_id': level.id}
|
||||
wizard = model('credit.control.policy.changer').create(data, context=context)
|
||||
ctx.wizard = wizard
|
||||
|
||||
@then(u'wizard selected move lines should be')
|
||||
def impl(ctx):
|
||||
assert_true(ctx.wizard)
|
||||
names = [x.name for x in ctx.wizard.move_line_ids]
|
||||
for line in ctx.table:
|
||||
assert_in(line['name'], names)
|
||||
|
||||
@when(u'I confirm the level change')
|
||||
def impl(ctx):
|
||||
assert_true(ctx.wizard)
|
||||
ctx.wizard.set_new_policy()
|
||||
|
||||
@when(u'I should have "{line_number:d}" credit control lines overriden')
|
||||
def impl(ctx, line_number):
|
||||
assert_true(ctx.wizard)
|
||||
move_ids = [x.id for x in ctx.wizard.move_line_ids]
|
||||
overriden = model('credit.control.line').search([('move_line_id', 'in', move_ids),
|
||||
('manually_overriden', '=', True)])
|
||||
# assert len(overriden) == line_number
|
||||
|
||||
@when(u'one new credit control line of level "{level_name}" related to invoice "{invoice_name}"')
|
||||
def impl(ctx, level_name, invoice_name):
|
||||
invoice = model('account.invoice').get([('number', '=', invoice_name)])
|
||||
assert_true(invoice, msg='No invoices found')
|
||||
level = model('credit.control.policy.level').get([('name', '=', level_name)])
|
||||
assert_true(level, 'level not found')
|
||||
assert_true(ctx.wizard)
|
||||
move_ids = [x.id for x in ctx.wizard.move_line_ids]
|
||||
created_id = model('credit.control.line').search([('move_line_id', 'in', move_ids),
|
||||
('manually_overriden', '=', False)])
|
||||
|
||||
assert len(created_id) == 1
|
||||
created = model('credit.control.line').get(created_id[0])
|
||||
assert_equal(created.policy_level_id.id, level.id)
|
||||
assert_equal(created.invoice_id.id, invoice.id)
|
||||
assert_equal(created.invoice_id.credit_policy_id.id, level.policy_id.id)
|
||||
@@ -18,9 +18,10 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
import logging
|
||||
from openerp.tools.translate import _
|
||||
from openerp.osv import orm, fields
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class credit_control_policy_changer(orm.TransientModel):
|
||||
"""Wizard that is run from invoices and allows to set manually a policy
|
||||
@@ -62,6 +63,7 @@ class credit_control_policy_changer(orm.TransientModel):
|
||||
if invoice.type in ('in_invoice', 'in_refund'):
|
||||
raise orm.except_orm(_('User error'),
|
||||
_('Please use wizard on cutomer invoices'))
|
||||
|
||||
domain = [('account_id', '=', invoice.account_id.id),
|
||||
('move_id', '=', invoice.move_id.id),
|
||||
('reconcile_id', '=', False)]
|
||||
@@ -81,7 +83,7 @@ class credit_control_policy_changer(orm.TransientModel):
|
||||
|
||||
"""
|
||||
credit_model = self.pool['credit.control.line']
|
||||
domain = [('id', 'in', [x.id for x in move_lines])]
|
||||
domain = [('move_line_id', 'in', [x.id for x in move_lines])]
|
||||
credits_ids = credit_model.search(cr, uid, domain, context=context)
|
||||
credit_model.write(cr, uid,
|
||||
credits_ids,
|
||||
@@ -89,6 +91,15 @@ class credit_control_policy_changer(orm.TransientModel):
|
||||
context)
|
||||
return credits_ids
|
||||
|
||||
def _set_invoice_policy(self, cr, uid, move_line_ids, policy_level,
|
||||
context=None):
|
||||
"""Force policy on invoice"""
|
||||
invoice_model = self.pool['account.invoice']
|
||||
invoice_ids = set([x.invoice.id for x in move_line_ids if x.invoice])
|
||||
invoice_model.write(cr, uid, list(invoice_ids),
|
||||
{'credit_policy_id': policy_level.policy_id.id},
|
||||
context=context)
|
||||
|
||||
def set_new_policy(self, cr, uid, wizard_id, context=None):
|
||||
"""Set new policy on an invoice.
|
||||
|
||||
@@ -124,6 +135,10 @@ class credit_control_policy_changer(orm.TransientModel):
|
||||
check_tolerance=False,
|
||||
context=None
|
||||
)
|
||||
self._set_invoice_policy(cr, uid,
|
||||
wizard.move_line_ids,
|
||||
wizard.new_policy_level_id,
|
||||
context=context)
|
||||
view_id = ir_model.get_object_reference(cr, uid,
|
||||
"account_credit_control",
|
||||
"credit_control_line_action")
|
||||
|
||||
Reference in New Issue
Block a user