diff --git a/move.py b/move.py index 0192c20e21..413262705b 100644 --- a/move.py +++ b/move.py @@ -347,10 +347,10 @@ class Line(OSV): _description = __doc__ name = fields.Char('Name', size=None, required=True) - debit = fields.Numeric('Debit', digits=(16, 2), + debit = fields.Numeric('Debit', digits="(16, currency_digits)", on_change=['account', 'debit', 'credit', 'tax_lines', 'journal', 'move']) - credit = fields.Numeric('Credit', digits=(16, 2), + credit = fields.Numeric('Credit', digits="(16, currency_digits)", on_change=['account', 'debit', 'credit', 'tax_lines', 'journal', 'move']) account = fields.Many2One('account.account', 'Account', required=True, @@ -371,7 +371,8 @@ class Line(OSV): fnct_search='search_move_field') reference = fields.Char('Reference', size=None) amount_second_currency = fields.Numeric('Amount Second Currency', - digits=(16, 2), help='The amount expressed in a second currency') + digits="(16, second_currency_digits)", + help='The amount expressed in a second currency') second_currency = fields.Many2One('currency.currency', 'Second Currency', help='The second currency') party = fields.Many2One('relationship.party', 'Party', @@ -395,6 +396,10 @@ class Line(OSV): ('draft', 'Draft'), ('posted', 'Posted'), ], string='Move State', fnct_search='search_move_field') + currency_digits = fields.Function('get_currency_digits', type='integer', + string='Currency Digits') + second_currency_digits = fields.Function('get_currency_digits', + type='integer', string='Second Currency Digits') def __init__(self): super(Line, self).__init__() @@ -594,6 +599,19 @@ class Line(OSV): ] return values + def get_currency_digits(self, cursor, user, ids, names, arg, context=None): + res = {} + for line in self.browse(cursor, user, ids, context=context): + for name in names: + res.setdefault(name, {}) + res[name].setdefault(line.id, 2) + if name == 'currency_digits': + res[name][line.id] = line.account.currency_digits + elif name == 'second_currency_digits': + if line.account.second_currency: + res[name][line.id] = line.account.second_currency.digits + return res + def on_change_debit(self, cursor, user, ids, vals, context=None): res = {} if context is None: @@ -631,6 +649,8 @@ class Line(OSV): return res def on_change_account(self, cursor, user, ids, vals, context=None): + account_obj = self.pool.get('account.account') + res = {} if context is None: context = {} @@ -643,6 +663,12 @@ class Line(OSV): ids, vals, journal.type, context=context) if not res['tax_lines']: del res['tax_lines'] + if vals.get('account'): + account = account_obj.browse(cursor, user, vals['account'], + context=context) + res['currency_digits'] = account.currency_digits + if account.second_currency: + res['second_currency_digits'] = account.second_currency.digits return res def _compute_tax_lines(self, cursor, user, ids, vals, journal_type, @@ -1106,6 +1132,11 @@ class Line(OSV): else: attrs.append('required="0"') xml += '\n' % (column.field.name, ' '.join(attrs)) + if 'currency_digits' not in journal.view.columns: + xml += '' + if 'second_currency' in journal.view.columns \ + and 'second_currency_digits' not in journal.view.columns: + xml += '' xml += '' result['arch'] = xml result['fields'] = self.fields_get(cursor, user, fields_names=fields, diff --git a/move.xml b/move.xml index ececdff4df..c2442c29e8 100644 --- a/move.xml +++ b/move.xml @@ -202,6 +202,8 @@ + + ]]> @@ -225,6 +227,7 @@ + ]]>