[ADD] constraint management on credit level changer wizard

It nows support no follow policy and ensure coherence between account and policies
This commit is contained in:
Nicolas Bessi
2014-04-29 13:37:01 +02:00
parent 6a4eebd9e6
commit 8cdf59c171
2 changed files with 36 additions and 18 deletions

View File

@@ -23,6 +23,7 @@ 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
Policy are actually apply to related move lines availabe
@@ -32,11 +33,12 @@ class credit_control_policy_changer(orm.TransientModel):
_name = "credit.control.policy.changer"
_columns = {
'new_policy_id': fields.many2one('credit.control.policy',
'New Policy to Apply',
required=True),
'New Policy to Apply',
required=True),
'new_policy_level_id': fields.many2one('credit.control.policy.level',
'New level to apply',
required=True),
'New level to apply'),
# Only used to provide dynamic filtering on form
'do_nothing': fields.boolean('No follow policy'),
'move_line_ids': fields.many2many('account.move.line',
rel='credit_changer_ml_rel',
string='Move line to change'),
@@ -73,6 +75,14 @@ class credit_control_policy_changer(orm.TransientModel):
_defaults = {'move_line_ids': _get_default_lines}
def onchange_policy_id(self, cr, uid, ids, new_policy_id, context=None):
if not new_policy_id:
return {}
policy = self.pool['credit.control.policy'].browse(cr, uid,
new_policy_id,
context=context)
return {'value': {'do_nothing': policy.do_nothing}}
def _mark_as_overriden(self, cr, uid, move_lines, context=None):
"""Mark `move_lines` related credit control line as overriden
This is done by setting manually_overriden fields to True
@@ -91,13 +101,13 @@ class credit_control_policy_changer(orm.TransientModel):
context)
return credits_ids
def _set_invoice_policy(self, cr, uid, move_line_ids, policy_level,
def _set_invoice_policy(self, cr, uid, move_line_ids, policy,
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},
{'credit_policy_id': policy.id},
context=context)
def _check_accounts_policies(self, cr, uid, lines, policy, context=None):
@@ -133,7 +143,7 @@ class credit_control_policy_changer(orm.TransientModel):
cr,
uid,
wizard.move_line_ids,
wizard.new_policy_level_id.policy_id)
wizard.new_policy_id)
self._mark_as_overriden(cr,
uid,
wizard.move_line_ids,
@@ -143,18 +153,22 @@ class credit_control_policy_changer(orm.TransientModel):
# if same level as the new one
# As it is a manual action
# We also ignore rounding tolerance
generated_ids = credit_line_model.create_or_update_from_mv_lines(
cr, uid, [],
[x.id for x in wizard.move_line_ids],
wizard.new_policy_level_id.id,
controlling_date,
check_tolerance=False,
context=None
)
generated_ids = None
if not wizard.new_policy_id.do_nothing:
generated_ids = credit_line_model.create_or_update_from_mv_lines(
cr, uid, [],
[x.id for x in wizard.move_line_ids],
wizard.new_policy_level_id.id,
controlling_date,
check_tolerance=False,
context=None
)
self._set_invoice_policy(cr, uid,
wizard.move_line_ids,
wizard.new_policy_level_id,
wizard.new_policy_id,
context=context)
if not generated_ids:
return {}
view_id = ir_model.get_object_reference(cr, uid,
"account_credit_control",
"credit_control_line_action")

View File

@@ -11,9 +11,13 @@
<newline/>
<group>
<group>
<field name="new_policy_id"/>
<field name="new_policy_id"
on_change="onchange_policy_id(new_policy_id)"/>
<field name="do_nothing"
invisible="1"/>
<field name="new_policy_level_id"
domain="[('policy_id', '=', new_policy_id)]"/>
domain="[('policy_id', '=', new_policy_id)]"
attrs="{'required': [('do_nothing', '=', False)]}"/>
</group>
<group></group>
</group>