bank reconciliation in multi-currency settings

This commit is contained in:
Vincent Vinet
2014-10-24 09:11:39 -04:00
committed by Sandy Carter
parent 7044a2a7a8
commit af9cc212bf
2 changed files with 543 additions and 60 deletions

View File

@@ -20,10 +20,14 @@
#
##############################################################################
import time
from datetime import datetime, timedelta
from openerp.osv import fields, orm
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
from openerp.tools.translate import _
import decimal_precision as dp
from openerp.report import report_sxw
import openerp.addons.decimal_precision as dp
class bank_acc_rec_statement(orm.Model):
@@ -83,13 +87,31 @@ class bank_acc_rec_statement(orm.Model):
cr, uid, id, default=default, context=context
)
def create(self, cr, uid, vals, context=None):
if "exchange_date" in vals and "account_id" in vals:
vals.update(
self.onchange_exchange_date(
cr, uid, [],
vals["exchange_date"], vals["account_id"],
context=context)['value'])
return super(bank_acc_rec_statement, self).create(cr, uid, vals, context=context)
def write(self, cr, uid, ids, vals, context=None):
# Check if the user is allowed to perform the action
self.check_group(cr, uid, ids, context)
return super(bank_acc_rec_statement, self).write(
res = super(bank_acc_rec_statement, self).write(
cr, uid, ids, vals, context=context
)
if "exchange_date" in vals:
for stmt in self.browse(cr, uid, ids, context=context):
stmt.write(self.onchange_exchange_date(
cr, uid, [],
stmt.exchange_date, stmt.account_id.id,
context=context)['value'])
return res
def unlink(self, cr, uid, ids, context=None):
"""
Reset the related account.move.line to be re-assigned later
@@ -115,7 +137,7 @@ class bank_acc_rec_statement(orm.Model):
def check_difference_balance(self, cr, uid, ids, context=None):
"""Check if difference balance is zero or not."""
for statement in self.browse(cr, uid, ids, context=context):
if statement.difference != 0.0:
if statement.difference != 0.0 and not statement.multi_currency:
raise orm.except_orm(
_('Warning!'),
_(
@@ -125,6 +147,23 @@ class bank_acc_rec_statement(orm.Model):
"changes."
)
)
elif (statement.difference_in_currency != 0.0 and
statement.multi_currency):
raise orm.except_orm(
_('Warning'),
_('Prior to reconciling a statement in a foreign currency'
', all differences must be accounted for and the '
'Difference in currency balance must be zero. Please '
'review and make necessary changes.'))
elif (statement.multi_currency and
statement.general_ledger_balance !=
statement.registered_balance):
raise orm.except_orm(
_('Warning'),
_('Prior to reconciling a statement in a foreign currency'
', you should make sure the general ledger balance and '
'registered balance match. If necessary, an adjustment '
'move can be created to account for the difference.'))
return True
def action_cancel(self, cr, uid, ids, context=None):
@@ -270,7 +309,68 @@ class bank_acc_rec_statement(orm.Model):
)
return True
def _get_balance(self, cr, uid, ids, name, args, context=None):
def action_adjust_ending_balance(self, cr, uid, ids, context=None):
account_move_obj = self.pool["account.move"]
period_obj = self.pool["account.period"]
for stmt in self.browse(cr, uid, ids, context=context):
if stmt.adjustment_move_id:
continue
# TODO CHECK WHY GEN LEDGER BALANCE NOT ADJUSTED
company = stmt.company_id
move_line = {
'name': _('Adjustment for reconciliation %s') % (stmt.name, ),
'account_id': stmt.account_id.id,
'cleared_bank_account': True,
}
reverse_move = {'name': move_line['name']}
amount = abs(stmt.general_ledger_balance - stmt.registered_balance)
if stmt.general_ledger_balance > stmt.registered_balance:
account = company.income_currency_exchange_account_id
if not account:
raise orm.except_orm(
_("No Gain Exchange Rate Account"),
_("You need to configure the Gain Exchange Rate "
"Account for the company in order to create an"
" adjustment move"))
move_line['debit'] = amount
reverse_move['credit'] = amount
reverse_move['account_id'] = account.id
elif stmt.registered_balance > stmt.general_ledger_balance:
account = company.expense_currency_exchange_account_id
if not account:
raise orm.except_orm(
_("No Gain Exchange Rate Account"),
_("You need to configure the Gain Exchange Rate "
"Account for the company in order to create an"
" adjustment move"))
move_line['credit'] = amount
reverse_move['debit'] = amount
reverse_move['account_id'] = account.id
else:
raise orm.except_orm(
_("Adjustment Unnecessary"),
_("The General Ledger Balance and Registered Balance "
"are equal, no adjustment necessary."))
period_id = period_obj.find(cr, uid, stmt.ending_date,
context=context)[0]
move_id = account_move_obj.create(
cr, uid, {
'ref': stmt.name,
'period_id': period_id,
'date': stmt.ending_date,
'journal_id': company.default_cutoff_journal_id.id,
'line_id': [(0, 0, move_line),
(0, 0, reverse_move)],
},
context=context)
account_move_obj.button_validate(cr, uid, [move_id],
context=context)
stmt.write({'adjustment_move_id': move_id})
return True
def _get_balance(self, cr, uid, ids, field_names, args, context=None):
"""Computed as following:
A) Deposits, Credits, and Interest Amount:
Total SUM of Amts of lines with Cleared = True
@@ -288,53 +388,101 @@ class bank_acc_rec_statement(orm.Model):
cr, uid, 'Account'
)
for statement in self.browse(cr, uid, ids, context=context):
res[statement.id] = {
currency_id = statement.company_id.currency_id.id
res[statement.id] = sres = {
'sum_of_credits': 0.0,
'sum_of_debits': 0.0,
'cleared_balance': 0.0,
'difference': 0.0,
'sum_of_credits_in_currency': 0.0,
'sum_of_credits_lines': 0.0,
'sum_of_debits': 0.0,
'sum_of_debits_in_currency': 0.0,
'sum_of_debits_lines': 0.0,
'sum_of_credits_unclear': 0.0,
'sum_of_debits_unclear': 0.0,
'uncleared_balance': 0.0,
'sum_of_credits_unclear_in_currency': 0.0,
'sum_of_credits_lines_unclear': 0.0,
'sum_of_debits_unclear': 0.0,
'sum_of_debits_unclear_in_currency': 0.0,
'sum_of_debits_lines_unclear': 0.0,
'uncleared_balance': 0.0,
'uncleared_balance_in_currency': 0.0,
'cleared_balance': 0.0,
'cleared_balance_in_currency': 0.0,
'difference': 0.0,
'difference_in_currency': 0.0,
}
for line in statement.credit_move_line_ids:
sum_credit = round(line.amount, account_precision)
amount_cur = round(line.amount_in_currency, account_precision)
if line.cleared_bank_account:
res[statement.id]['sum_of_credits'] += sum_credit
res[statement.id]['sum_of_credits_lines'] += 1.0
sres['sum_of_credits'] += sum_credit
sres['sum_of_credits_in_currency'] += amount_cur
sres['sum_of_credits_lines'] += 1.0
else:
res[statement.id]['sum_of_credits_unclear'] += sum_credit
res[statement.id]['sum_of_credits_lines_unclear'] += 1.0
sres['sum_of_credits_unclear'] += sum_credit
sres['sum_of_credits_unclear_in_currency'] += amount_cur
sres['sum_of_credits_lines_unclear'] += 1.0
for line in statement.debit_move_line_ids:
sum_debit = round(line.amount, account_precision)
amount_cur = round(line.amount_in_currency, account_precision)
if line.cleared_bank_account:
res[statement.id]['sum_of_debits'] += sum_debit
res[statement.id]['sum_of_debits_lines'] += 1.0
sres['sum_of_debits'] += sum_debit
sres['sum_of_debits_in_currency'] += amount_cur
sres['sum_of_debits_lines'] += 1.0
else:
res[statement.id]['sum_of_debits_unclear'] += sum_debit
res[statement.id]['sum_of_debits_lines_unclear'] += 1.0
sres['sum_of_debits_unclear'] += sum_debit
sres['sum_of_debits_unclear_in_currency'] += amount_cur
sres['sum_of_debits_lines_unclear'] += 1.0
sres['cleared_balance'] = round(
sres['sum_of_debits'] - sres['sum_of_credits'],
account_precision)
sres['cleared_balance_in_currency'] = round(
(sres['sum_of_debits_in_currency']
- sres['sum_of_credits_in_currency']),
account_precision)
sres['uncleared_balance'] = round(
sres['sum_of_debits_unclear'] - sres['sum_of_credits_unclear'],
account_precision)
sres['uncleared_balance_in_currency'] = round(
(sres['sum_of_debits_unclear_in_currency']
- sres['sum_of_credits_unclear_in_currency']),
account_precision)
sres['difference'] = round(
(statement.ending_balance - statement.starting_balance)
- sres['cleared_balance'],
account_precision)
sres['difference_in_currency'] = round(
(statement.ending_balance_in_currency
+ sres['cleared_balance_in_currency']
- statement.starting_balance),
account_precision)
sres['general_ledger_balance'] = self._get_gl_balance(
cr, uid, statement.account_id.id, statement.ending_date)
sres['registered_balance'] = round(
(statement.starting_balance
+ sres['cleared_balance']
+ sres['uncleared_balance']),
account_precision)
sres['registered_balance_in_currency'] = round(
(statement.starting_balance_in_currency
+ sres['cleared_balance_in_currency']
+ sres['uncleared_balance_in_currency']),
account_precision)
res[statement.id]['cleared_balance'] = round(
res[statement.id]['sum_of_debits'] -
res[statement.id]['sum_of_credits'],
account_precision
)
res[statement.id]['uncleared_balance'] = round(
res[statement.id]['sum_of_debits_unclear'] -
res[statement.id]['sum_of_credits_unclear'],
account_precision
)
res[statement.id]['difference'] = round(
(statement.ending_balance - statement.starting_balance) -
res[statement.id]['cleared_balance'],
account_precision
)
return res
def _get_gl_balance(self, cr, uid, account_id, date=None):
""" Get the General Ledger balance at date for account """
account_obj = self.pool['account.account']
balance = account_obj.read(
cr, uid, account_id, ['balance'],
context={'initial_bal': True,
'date_from': date or time.strftime(
'%Y-%m-%d'),
'date_to': 'ignored'})
return balance["balance"]
def _get_move_line_write(self, line):
res = {
'ref': line.ref,
@@ -417,20 +565,61 @@ class bank_acc_rec_statement(orm.Model):
return False
return True
def _get_last_reconciliation(self, cr, uid, account_id, context=None):
res = self.search(cr, uid,
[('account_id', '=', account_id),
('state', '!=', 'cancel')],
order="ending_date desc",
limit=1)
if res:
return self.browse(cr, uid, res[0], context=context)
else:
return None
def onchange_account_id(
self, cr, uid, ids, account_id, ending_date,
suppress_ending_date_filter, keep_previous_uncleared_entries,
context=None
):
account_obj = self.pool['account.account']
account_move_line_obj = self.pool.get('account.move.line')
statement_line_obj = self.pool.get('bank.acc.rec.statement.line')
val = {
'value': {
'credit_move_line_ids': [],
'debit_move_line_ids': []
'debit_move_line_ids': [],
'company_currency_id': False,
'account_currency_id': False,
}
}
if account_id:
last_rec = self._get_last_reconciliation(cr, uid, account_id,
context=context)
if last_rec and last_rec.ending_date:
val['value']['exchange_date'] = (datetime.strptime(
last_rec.ending_date, DEFAULT_SERVER_DATE_FORMAT,
) + timedelta(days=1)).strftime(DEFAULT_SERVER_DATE_FORMAT)
elif ending_date:
# end_date - 1 month + 1 day
dt_ending = datetime.strptime(
ending_date, DEFAULT_SERVER_DATE_FORMAT,
) + timedelta(days=-1)
if dt_ending.month == 1:
dt_ending = dt_ending.replace(year=dt_ending.year - 1,
month=12)
else:
dt_ending = dt_ending.replace(month=dt_ending.month - 1)
val['value']['exchange_date'] = dt_ending.strftime(
DEFAULT_SERVER_DATE_FORMAT)
account = account_obj.browse(cr, uid, account_id, context=context)
val['value'].update({
'company_currency_id': account.company_id.currency_id.id,
'account_currency_id': account.currency_id.id,
})
for statement in self.browse(cr, uid, ids, context=context):
statement_line_ids = statement_line_obj.search(
cr, uid,
@@ -479,6 +668,82 @@ class bank_acc_rec_statement(orm.Model):
val['value']['debit_move_line_ids'].append(res)
return val
# This method almost extracted from account_voucher
def _get_currency_help_label(self, cr, uid, currency_id, payment_rate,
payment_rate_currency_id, context=None):
"""
This function builds a string to help the users to understand the
behavior of the payment rate fields they can specify on the voucher.
This string is only used to improve the usability in the voucher form
view and has no other effect.
:param currency_id: the voucher currency
:type currency_id: integer
:param payment_rate: the value of the payment_rate field of the voucher
:type payment_rate: float
:param payment_rate_currency_id: the value of the payment_rate_currency_id field of the voucher
:type payment_rate_currency_id: integer
:return: translated string giving a tip on what's the effect of the current payment rate specified
:rtype: str
"""
rml_parser = report_sxw.rml_parse(cr, uid, 'currency_help_label',
context=context)
currency_pool = self.pool['res.currency']
currency_str = payment_rate_str = ''
if currency_id:
currency_str = rml_parser.formatLang(
1,
currency_obj=currency_pool.browse(cr, uid, currency_id,
context=context))
if payment_rate_currency_id:
payment_rate_str = rml_parser.formatLang(
payment_rate,
currency_obj=currency_pool.browse(cr, uid,
payment_rate_currency_id,
context=context))
currency_help_label = _(
'At the starting date, the exchange rate was\n%s = %s'
) % (currency_str, payment_rate_str)
return currency_help_label
def onchange_currency_rate(self, cr, uid, ids, exchange_rate,
start_balance, end_balance, context=None):
if exchange_rate:
return {'value':{
'starting_balance': (start_balance or 0) * exchange_rate,
'ending_balance': (end_balance or 0) * exchange_rate,
}}
else:
return {}
def onchange_exchange_date(self, cr, uid, ids, exchange_date, account_id,
context=None):
currency_obj = self.pool['res.currency']
account_obj = self.pool['account.account']
res = {}
res['value'] = val = {}
if not account_id or not exchange_date:
return res
account = account_obj.browse(cr, uid, account_id)
acur = account.currency_id
ccur = account.company_id.currency_id
val['account_currency_id'] = acur.id
val['company_currency_id'] = ccur.id
if acur.id == ccur.id:
val['currency_rate'] = 1
val['currency_help_label'] = ''
else:
ctx2 = context.copy() if context else {}
ctx2['date'] = exchange_date
payment_rate = currency_obj._get_conversion_rate(
cr, uid, acur, ccur, context=ctx2)
val['currency_rate'] = payment_rate
val['currency_rate_label'] = self._get_currency_help_label(
cr, uid, acur.id, payment_rate, ccur.id, context)
return res
_name = "bank.acc.rec.statement"
_columns = {
'name': fields.char(
@@ -491,6 +756,13 @@ class bank_acc_rec_statement(orm.Model):
"(e.g. Bank X January 2012)."
),
),
'multi_currency': fields.boolean('Multi-currency mode enabled'),
'currency_conversion_date': fields.date('Currency Conversion Date'),
'currency_rate': fields.float(
'Currency Exchange Rate',
digits=(12, 6),
),
'currency_rate_label': fields.text('Currency Rate Message'),
'account_id': fields.many2one(
'account.account',
'Account',
@@ -499,6 +771,12 @@ class bank_acc_rec_statement(orm.Model):
domain="[('company_id', '=', company_id), ('type', '!=', 'view')]",
help="The Bank/Gl Account that is being reconciled."
),
'exchange_date': fields.date(
'Currency Exchange Date',
required=False,
states={'done':[('readonly', True)]},
help="The starting date of your bank statement.",
),
'ending_date': fields.date(
'Ending Date',
required=True,
@@ -509,16 +787,32 @@ class bank_acc_rec_statement(orm.Model):
'Starting Balance',
required=True,
digits_compute=dp.get_precision('Account'),
help="The Starting Balance on your bank statement.",
help="The Starting Balance on your bank statement, in your "
"company's currency",
states={'done': [('readonly', True)]}
),
'starting_balance_in_currency': fields.float(
'Starting Balance in Currency',
required=True,
digits_compute=dp.get_precision('Account'),
help="The Account Starting Balance on your bank statement",
states={'done':[('readonly', True)]},
),
'ending_balance': fields.float(
'Ending Balance',
required=True,
digits_compute=dp.get_precision('Account'),
help="The Ending Balance on your bank statement.",
help="The Ending Balance on your bank statement, in your "
"company's currency",
states={'done': [('readonly', True)]}
),
'ending_balance_in_currency': fields.float(
'Ending Balance in Currency',
required=True,
digits_compute=dp.get_precision('Account'),
help="The Ending Balance on your bank statement.",
states={'done':[('readonly', True)]}
),
'company_id': fields.many2one(
'res.company',
'Company',
@@ -570,6 +864,17 @@ class bank_acc_rec_statement(orm.Model):
),
multi="balance"
),
'cleared_balance_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Cleared Balance',
digits_compute=dp.get_precision('Account'),
help="Total Sum of the Deposit Amount Cleared Total Sum of "
"Checks, Withdrawals, Debits, and Service Charges Amount "
"Cleared",
multi="balance",
),
'difference': fields.function(
_get_balance,
method=True,
@@ -579,6 +884,15 @@ class bank_acc_rec_statement(orm.Model):
help="(Ending Balance Beginning Balance) - Cleared Balance.",
multi="balance"
),
'difference_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Difference',
digits_compute=dp.get_precision('Account'),
help="(Ending Balance Beginning Balance) - Cleared Balance.",
multi="balance",
),
'sum_of_credits': fields.function(
_get_balance,
method=True,
@@ -588,6 +902,14 @@ class bank_acc_rec_statement(orm.Model):
help="Total SUM of Amts of lines with Cleared = True",
multi="balance"
),
'sum_of_credits_in_currency': fields.function(
_get_balance, method=True, type='float',
string='Checks, Withdrawals, Debits, and Service Charges Amount'
'in currency',
digits_compute=dp.get_precision('Account'),
help="Total SUM of Amts of lines with Cleared = True",
multi="balance",
),
'sum_of_debits': fields.function(
_get_balance,
method=True,
@@ -597,6 +919,15 @@ class bank_acc_rec_statement(orm.Model):
help="Total SUM of Amts of lines with Cleared = True",
multi="balance"
),
'sum_of_debits_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Deposits, Credits, and Interest Amount',
digits_compute=dp.get_precision('Account'),
help="Total SUM of Amts of lines with Cleared = True",
multi="balance",
),
'sum_of_credits_lines': fields.function(
_get_balance,
method=True,
@@ -629,6 +960,17 @@ class bank_acc_rec_statement(orm.Model):
),
multi="balance"
),
'uncleared_balance_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Uncleared Balance',
digits_compute=dp.get_precision('Account'),
help="Total Sum of the Deposit Amount Cleared Total Sum of "
"Checks, Withdrawals, Debits, and Service Charges Amount "
"Cleared",
multi="balance",
),
'sum_of_credits_unclear': fields.function(
_get_balance,
method=True,
@@ -638,6 +980,15 @@ class bank_acc_rec_statement(orm.Model):
help="Total SUM of Amts of lines with Cleared = True",
multi="balance"
),
'sum_of_credits_unclear_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Checks, Withdrawals, Debits, and Service Charges Amount',
digits_compute=dp.get_precision('Account'),
help="Total SUM of Amts of lines with Cleared = False",
multi="balance",
),
'sum_of_debits_unclear': fields.function(
_get_balance,
method=True,
@@ -647,6 +998,15 @@ class bank_acc_rec_statement(orm.Model):
help="Total SUM of Amts of lines with Cleared = True",
multi="balance"
),
'sum_of_debits_unclear_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Deposits, Credits, and Interest Amount',
digits_compute=dp.get_precision('Account'),
help="Total SUM of Amts of lines with Cleared = False",
multi="balance",
),
'sum_of_credits_lines_unclear': fields.function(
_get_balance,
method=True,
@@ -655,7 +1015,16 @@ class bank_acc_rec_statement(orm.Model):
'Charges # of Items'
),
type='float', help="Total of number of lines with Cleared = True",
multi="balance"),
multi="balance"
),
'sum_of_credits_lines_unclear': fields.function(
_get_balance,
method=True,
type='float',
string='Checks, Withdrawals, Debits, and Service Charges # of Items',
help="Total of number of lines with Cleared = False",
multi="balance",
),
'sum_of_debits_lines_unclear': fields.function(
_get_balance,
method=True,
@@ -664,6 +1033,39 @@ class bank_acc_rec_statement(orm.Model):
help="Total of number of lines with Cleared = True",
multi="balance"
),
'general_ledger_balance': fields.function(
_get_balance,
method=True,
type='float',
string='General Ledger Balance',
digits_compute=dp.get_precision('Account'),
help="General Ledger Balance",
multi="balance"
),
'registered_balance': fields.function(
_get_balance,
method=True,
type='float',
string='Registered Balance',
digits_compute=dp.get_precision('Account'),
help="Initial balance + Cleared Balance + Uncleared Balance",
multi="balance"
),
'registered_balance_in_currency': fields.function(
_get_balance,
method=True,
type='float',
string='Registered Balance',
digits_compute=dp.get_precision('Account'),
help="Initial balance + Cleared Balance + Uncleared Balance",
multi="balance"
),
'adjustment_move_id': fields.many2one(
'account.move',
'Adjustement Move',
required=False,
help="Adjustment move used to balance the General Ledger for "
"accounts in a secondary currency"),
'suppress_ending_date_filter': fields.boolean(
'Remove Ending Date Filter',
help=(
@@ -700,6 +1102,7 @@ class bank_acc_rec_statement(orm.Model):
).company_id.id
),
'ending_date': time.strftime('%Y-%m-%d'),
'multi_currency': False,
}
_order = "ending_date desc"

View File

@@ -33,12 +33,33 @@
<field name="state" widget="statusbar" nolabel="1"/>
</header>
<sheet>
<group col="4" colspan="4">
<group col="4" colspan="4">
<field name="multi_currency" invisible="1" />
<field name="account_id" placeholder="Enter Account Name" on_change="onchange_account_id(account_id, ending_date, suppress_ending_date_filter, keep_previous_uncleared_entries)"/>
<field name="name" placeholder="Enter Name"/>
<field name="name" placeholder="Enter Name"/>
<field name="ending_date" placeholder="Enter ending date" on_change="onchange_account_id(account_id, ending_date, suppress_ending_date_filter, keep_previous_uncleared_entries)"/>
<field name="starting_balance" placeholder="Enter Starting Balance"/>
<field name="starting_balance" placeholder="Enter Starting Balance"/>
<field name="starting_balance_in_currency" placeholder="Enter Starting Balance"
attrs="{'invisible':[('multi_currency', '=', False)]}"
on_change="onchange_currency_rate(currency_rate, starting_balance_in_currency, ending_balance_in_currency, context)"
/>
<field name="ending_balance" placeholder="Enter Ending Balance"/>
<field name="ending_balance_in_currency" placeholder="Enter Ending Balance"
on_change="onchange_currency_rate(currency_rate, starting_balance_in_currency, ending_balance_in_currency, context)"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<field name="exchange_date" placeholder="Currency Exchange date"
attrs="{'invisible':[('multi_currency', '=', False)]}"
on_change="onchange_exchange_date(exchange_date, account_id, context)" />
<field name="currency_rate"
on_change="onchange_currency_rate(currency_rate, starting_balance_in_currency, ending_balance_in_currency, context)"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<field name="currency_rate_label" nolabel="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
class="oe_grey" readonly="1" colspan="2"/>
<field name="company_id" groups="base.group_multi_company" placeholder="Enter Company Name"/>
<field name="suppress_ending_date_filter" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_account_id(account_id, ending_date, suppress_ending_date_filter, keep_previous_uncleared_entries)"/>
<field name="keep_previous_uncleared_entries" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_account_id(account_id, ending_date, suppress_ending_date_filter, keep_previous_uncleared_entries)"/>
@@ -102,30 +123,89 @@
<button name="action_unselect_all" type="object" states="draft,to_be_reviewed" string="Unselect All" icon="gtk-cancel"/>
</group>
<newline/>
<group name="calculation1" col="2" colspan="2">
<separator string="Totals Area - cleared entries" colspan="2"/>
<field name="sum_of_debits"/>
<field name="sum_of_debits_lines"/>
<field name="sum_of_credits"/>
<field name="sum_of_credits_lines"/>
<group name="calculation1" col="3" colspan="2">
<separator string="Totals Area - cleared entries" colspan="2"/>
<separator string="Foreign Currency" colspan="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="sum_of_debits" colspan="2"/>
<field name="sum_of_debits_in_currency"
attrs="{'invisible':[('multi_currency', '=', False)]}"
colspan="1" nolabel="1"
/>
<newline />
<field name="sum_of_debits_lines" colspan="2"/>
<newline />
<field name="sum_of_credits" colspan="2"/>
<field name="sum_of_credits_in_currency"
colspan="1" nolabel="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="sum_of_credits_lines" colspan="2"/>
</group>
<group name="calculation_unclear1" col="2" colspan="2">
<group name="calculation_unclear1" col="3" colspan="2">
<separator string="Totals Area - uncleared entries" colspan="2"/>
<field name="sum_of_debits_unclear"/>
<field name="sum_of_debits_lines_unclear"/>
<field name="sum_of_credits_unclear"/>
<field name="sum_of_credits_lines_unclear"/>
<separator string="Foreign Currency" colspan="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="sum_of_debits_unclear" colspan="2"/>
<field name="sum_of_debits_unclear_in_currency"
colspan="1" nolabel="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="sum_of_debits_lines_unclear" colspan="2"/>
<newline />
<field name="sum_of_credits_unclear" colspan="2"/>
<field name="sum_of_credits_unclear_in_currency"
colspan="1" nolabel="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="sum_of_credits_lines_unclear" colspan="2"/>
</group>
<separator string="Balance Area"/>
<group>
<group name="calculation2">
<field name="cleared_balance"/>
<field name="difference"/>
</group>
<group name="calculation_unclear2">
<field name="uncleared_balance"/>
</group>
<group col="3" colspan="2">
<separator string="Balance Area" colspan="2"/>
<separator string="Foreign Currency" colspan="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<newline />
<field name="cleared_balance" colspan="2"/>
<field name="cleared_balance_in_currency"
attrs="{'invisible':[('multi_currency', '=', False)]}"
colspan="1" nolabel="1"
/>
<newline />
<field name="difference" colspan="2"/>
<field name="difference_in_currency"
attrs="{'invisible':[('multi_currency', '=', False)]}"
colspan="1" nolabel="1"
/>
<newline />
<field name="uncleared_balance" colspan="2"/>
<field name="uncleared_balance_in_currency"
attrs="{'invisible':[('multi_currency', '=', False)]}"
colspan="1" nolabel="1"
/>
</group>
<separator string="General Ledger" />
<group name="gen_ledger" col="2" colspan="2">
<field name="general_ledger_balance" colspan="2"/>
<field name="registered_balance" />
<field name="registered_balance_in_currency"
string="Foreign Currency Registered Balance"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<field name="adjustment_move_id" readonly="1"
attrs="{'invisible':[('multi_currency', '=', False)]}"
/>
<button name="action_adjust_ending_balance" type="object" string="Adjust Ending balance in GL"
attrs="{'invisible':['|', ('adjustment_move_id', '!=', False),('multi_currency', '=', False)]}"
/>
</group>
</page>
<page string="Other Information">
<separator string="Tracking Information" colspan="4"/>