diff --git a/CHANGELOG b/CHANGELOG
index 3a118f8a6b..1ac36246d4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Add General Ledger per account and party
* Add start/end date to tax rule line
* Test for lines to reconcile before showing the next account
diff --git a/__init__.py b/__init__.py
index bc964a884c..e31ec2bf0a 100644
--- a/__init__.py
+++ b/__init__.py
@@ -22,11 +22,13 @@ def register():
account.AccountTemplate,
account.AccountTemplateTaxTemplate,
account.Account,
+ account.AccountParty,
account.AccountDeferral,
account.AccountTax,
account.OpenChartAccountStart,
account.GeneralLedgerAccount,
account.GeneralLedgerAccountContext,
+ account.GeneralLedgerAccountParty,
account.GeneralLedgerLine,
account.GeneralLedgerLineContext,
account.BalanceSheetContext,
@@ -90,6 +92,7 @@ def register():
account.OpenChartAccount,
account.CreateChart,
account.UpdateChart,
+ account.OpenGeneralLedgerAccountParty,
move.OpenJournal,
move.OpenAccount,
move.ReconcileLines,
diff --git a/account.py b/account.py
index 6772683774..4cf7ad85f8 100644
--- a/account.py
+++ b/account.py
@@ -7,7 +7,7 @@ from functools import wraps
from dateutil.relativedelta import relativedelta
from sql import Column, Null, Window, Literal
-from sql.aggregate import Sum, Max
+from sql.aggregate import Sum, Max, Min
from sql.conditionals import Coalesce, Case
from trytond.i18n import gettext
@@ -978,14 +978,15 @@ class Account(AccountMixin(), ActivePeriodMixin, tree(), ModelSQL, ModelView):
return result
@classmethod
- def _cumulate(cls, fiscalyears, accounts, names, values, func):
+ def _cumulate(
+ cls, fiscalyears, accounts, names, values, func,
+ deferral='account.account.deferral'):
"""
Cumulate previous fiscalyear values into values
func is the method to compute values
"""
pool = Pool()
FiscalYear = pool.get('account.fiscalyear')
- Deferral = pool.get('account.account.deferral')
youngest_fiscalyear = None
for fiscalyear in fiscalyears:
@@ -1006,7 +1007,8 @@ class Account(AccountMixin(), ActivePeriodMixin, tree(), ModelSQL, ModelView):
if not fiscalyear:
return values
- if fiscalyear.state == 'close':
+ if fiscalyear.state == 'close' and deferral:
+ Deferral = pool.get(deferral)
id2deferral = {}
ids = [a.id for a in accounts]
for sub_ids in grouped_slice(ids):
@@ -1234,6 +1236,195 @@ class Account(AccountMixin(), ActivePeriodMixin, tree(), ModelSQL, ModelView):
return self
+class AccountParty(ActivePeriodMixin, ModelSQL):
+ "Account Party"
+ __name__ = 'account.account.party'
+ account = fields.Many2One('account.account', "Account")
+ party = fields.Many2One('party.party', "Party")
+ name = fields.Char("Name")
+ code = fields.Char("Code")
+ company = fields.Many2One('company.company', "Company")
+ type = fields.Many2One('account.account.type', "Type")
+ debit_type = fields.Many2One('account.account.type', "Debit Type")
+ closed = fields.Boolean("Closed")
+
+ balance = fields.Function(fields.Numeric(
+ "Balance", digits=(16, Eval('currency_digits', 2)),
+ depends=['currency_digits']),
+ 'get_balance')
+ credit = fields.Function(fields.Numeric(
+ "Credit", digits=(16, Eval('currency_digits', 2)),
+ depends=['currency_digits']),
+ 'get_credit_debit')
+ debit = fields.Function(fields.Numeric(
+ "Debit", digits=(16, Eval('currency_digits', 2)),
+ depends=['currency_digits']),
+ 'get_credit_debit')
+ amount_second_currency = fields.Function(fields.Numeric(
+ "Amount Second Currency",
+ digits=(16, Eval('second_currency_digits', 2)),
+ states={
+ 'invisible': ~Eval('second_currency'),
+ },
+ depends=['second_currency_digits', 'second_currency']),
+ 'get_credit_debit')
+ second_currency = fields.Many2One(
+ 'currency.currency', "Secondary Currency")
+
+ currency_digits = fields.Function(
+ fields.Integer("Currency Digits"), 'get_currency_digits')
+ second_currency_digits = fields.Function(fields.Integer(
+ "Second Currency Digits"), 'get_second_currency_digits')
+
+ @classmethod
+ def table_query(cls):
+ pool = Pool()
+ Line = pool.get('account.move.line')
+ Account = pool.get('account.account')
+ line = Line.__table__()
+ account = Account.__table__()
+ columns = []
+ group_by = []
+ for fname, field in cls._fields.items():
+ if not hasattr(field, 'set'):
+ if fname == 'id':
+ column = Min(line.id)
+ elif fname in {'account', 'party'}:
+ column = Column(line, fname)
+ else:
+ column = Column(account, fname)
+ columns.append(column.as_(fname))
+ if fname != 'id':
+ group_by.append(column)
+ return (
+ line.join(account, condition=line.account == account.id)
+ .select(
+ *columns,
+ where=(line.party != Null) & account.party_required,
+ group_by=group_by))
+
+ @classmethod
+ def get_balance(cls, records, name):
+ pool = Pool()
+ Account = pool.get('account.account')
+ MoveLine = pool.get('account.move.line')
+ FiscalYear = pool.get('account.fiscalyear')
+ cursor = Transaction().connection.cursor()
+
+ table_a = Account.__table__()
+ table_c = Account.__table__()
+ line = MoveLine.__table__()
+ ids = [a.id for a in records]
+ account_ids = {a.account.id for a in records}
+ party_ids = {a.party.id for a in records}
+ account_party2id = {(a.account.id, a.party.id): a.id for a in records}
+ balances = dict((i, Decimal(0)) for i in ids)
+ line_query, fiscalyear_ids = MoveLine.query_get(line)
+ for sub_account_ids in grouped_slice(account_ids):
+ account_sql = reduce_ids(table_a.id, sub_account_ids)
+ for sub_party_ids in grouped_slice(party_ids):
+ party_sql = reduce_ids(line.party, sub_party_ids)
+ cursor.execute(*table_a.join(table_c,
+ condition=(table_c.left >= table_a.left)
+ & (table_c.right <= table_a.right)
+ ).join(line, condition=line.account == table_c.id
+ ).select(
+ table_a.id,
+ line.party,
+ Sum(
+ Coalesce(line.debit, 0)
+ - Coalesce(line.credit, 0)),
+ where=account_sql & party_sql & line_query,
+ group_by=[table_a.id, line.party]))
+ for account_id, party_id, balance in cursor:
+ id_ = account_party2id[(account_id, party_id)]
+ balances[id_] = balance
+
+ for record in records:
+ # SQLite uses float for SUM
+ if not isinstance(balances[record.id], Decimal):
+ balances[record.id] = Decimal(str(balances[record.id]))
+ exp = Decimal(str(10.0 ** -record.currency_digits))
+ balances[record.id] = balances[record.id].quantize(exp)
+
+ fiscalyears = FiscalYear.browse(fiscalyear_ids)
+
+ def func(records, names):
+ return {names[0]: cls.get_balance(records, names[0])}
+ return Account._cumulate(
+ fiscalyears, records, [name], {name: balances}, func,
+ deferral=None)[name]
+
+ @classmethod
+ def get_credit_debit(cls, records, names):
+ pool = Pool()
+ Account = pool.get('account.account')
+ MoveLine = pool.get('account.move.line')
+ FiscalYear = pool.get('account.fiscalyear')
+ cursor = Transaction().connection.cursor()
+
+ result = {}
+ ids = [a.id for a in records]
+ for name in names:
+ if name not in {'credit', 'debit', 'amount_second_currency'}:
+ raise ValueError('Unknown name: %s' % name)
+ result[name] = dict((i, Decimal(0)) for i in ids)
+
+ account_ids = {a.account.id for a in records}
+ party_ids = {a.party.id for a in records}
+ account_party2id = {(a.account.id, a.party.id): a.id for a in records}
+ table = Account.__table__()
+ line = MoveLine.__table__()
+ line_query, fiscalyear_ids = MoveLine.query_get(line)
+ columns = [table.id, line.party]
+ for name in names:
+ columns.append(Sum(Coalesce(Column(line, name), 0)))
+ for sub_account_ids in grouped_slice(account_ids):
+ account_sql = reduce_ids(table.id, sub_account_ids)
+ for sub_party_ids in grouped_slice(party_ids):
+ party_sql = reduce_ids(line.party, sub_party_ids)
+ cursor.execute(*table.join(line, 'LEFT',
+ condition=line.account == table.id
+ ).select(*columns,
+ where=account_sql & party_sql & line_query,
+ group_by=[table.id, line.party]))
+ for row in cursor:
+ id_ = account_party2id[tuple(row[0:2])]
+ for i, name in enumerate(names, 2):
+ # SQLite uses float for SUM
+ if not isinstance(row[i], Decimal):
+ result[name][id_] = Decimal(str(row[i]))
+ else:
+ result[name][id_] = row[i]
+ for record in records:
+ for name in names:
+ if name == 'amount_second_currency':
+ exp = Decimal(str(10.0 ** -record.second_currency_digits))
+ else:
+ exp = Decimal(str(10.0 ** -record.currency_digits))
+ result[name][record.id] = (
+ result[name][record.id].quantize(exp))
+
+ cumulate_names = []
+ if Transaction().context.get('cumulate'):
+ cumulate_names = names
+ elif 'amount_second_currency' in names:
+ cumulate_names = ['amount_second_currency']
+ if cumulate_names:
+ fiscalyears = FiscalYear.browse(fiscalyear_ids)
+ return Account._cumulate(
+ fiscalyears, records, cumulate_names, result,
+ cls.get_credit_debit, deferral=None)
+ else:
+ return result
+
+ def get_currency_digits(self, name):
+ return self.company.currency.digits
+
+ def get_second_currency_digits(self, name):
+ return self.account.second_currency_digits
+
+
class AccountDeferral(ModelSQL, ModelView):
'''
Account Deferral
@@ -1364,16 +1555,10 @@ class OpenChartAccount(Wizard):
return 'end'
-class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
- 'General Ledger Account'
- __name__ = 'account.general_ledger.account'
+class _GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
- # TODO reuse rec_name of Account
- name = fields.Char('Name')
- code = fields.Char('Code')
+ account = fields.Many2One('account.account', "Account")
company = fields.Many2One('company.company', 'Company')
- type = fields.Many2One('account.account.type', 'Type')
- debit_type = fields.Many2One('account.account.type', 'Debit Type')
start_debit = fields.Function(fields.Numeric('Start Debit',
digits=(16, Eval('currency_digits', 2)),
depends=['currency_digits']),
@@ -1406,28 +1591,28 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
digits=(16, Eval('currency_digits', 2)),
depends=['currency_digits']),
'get_account', searcher='search_account')
- lines = fields.One2Many('account.general_ledger.line', 'account', 'Lines',
- readonly=True)
- general_ledger_balance = fields.Boolean('General Ledger Balance')
currency_digits = fields.Function(fields.Integer('Currency Digits'),
'get_currency_digits')
@classmethod
def __setup__(cls):
- super(GeneralLedgerAccount, cls).__setup__()
- cls._order.insert(0, ('code', 'ASC'))
- cls._order.insert(1, ('name', 'ASC'))
+ super().__setup__()
+ cls._order.insert(0, ('account', 'ASC'))
@classmethod
def table_query(cls):
- pool = Pool()
context = Transaction().context
- Account = pool.get('account.account')
+ Account = cls._get_account()
account = Account.__table__()
columns = []
for fname, field in cls._fields.items():
if not hasattr(field, 'set'):
- columns.append(Column(account, fname).as_(fname))
+ if (isinstance(field, fields.Many2One)
+ and field.get_target() == Account):
+ column = Column(account, 'id')
+ else:
+ column = Column(account, fname)
+ columns.append(column.as_(fname))
return account.select(*columns,
where=(account.company == context.get('company'))
& (account.type != Null)
@@ -1485,8 +1670,7 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
@classmethod
def get_account(cls, records, name):
- pool = Pool()
- Account = pool.get('account.account')
+ Account = cls._get_account()
period_ids = cls.get_period_ids(name)
from_date, to_date = cls.get_dates(name)
@@ -1503,8 +1687,7 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
@classmethod
def search_account(cls, name, domain):
- pool = Pool()
- Account = pool.get('account.account')
+ Account = cls._get_account()
period_ids = cls.get_period_ids(name)
with Transaction().set_context(periods=period_ids):
@@ -1533,8 +1716,7 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
@classmethod
def get_debit_credit(cls, records, name):
- pool = Pool()
- Account = pool.get('account.account')
+ Account = cls._get_account()
start_period_ids = cls.get_period_ids('start_%s' % name)
end_period_ids = cls.get_period_ids('end_%s' % name)
@@ -1546,8 +1728,7 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
@classmethod
def search_debit_credit(cls, name, domain):
- pool = Pool()
- Account = pool.get('account.account')
+ Account = cls._get_account()
start_period_ids = cls.get_period_ids('start_%s' % name)
end_period_ids = cls.get_period_ids('end_%s' % name)
@@ -1576,8 +1757,27 @@ class GeneralLedgerAccount(ActivePeriodMixin, ModelSQL, ModelView):
return self.company.currency.digits
def get_rec_name(self, name):
- # TODO add start/end balance
- return self.name
+ return self.account.rec_name
+
+ @classmethod
+ def search_rec_name(cls, name, clause):
+ return [('account.rec_name',) + tuple(clause[1:])]
+
+
+class GeneralLedgerAccount(_GeneralLedgerAccount):
+ 'General Ledger Account'
+ __name__ = 'account.general_ledger.account'
+
+ type = fields.Many2One('account.account.type', "Type")
+ debit_type = fields.Many2One('account.account.type', "Debit Type")
+ lines = fields.One2Many(
+ 'account.general_ledger.line', 'account', "Lines", readonly=True)
+ general_ledger_balance = fields.Boolean("General Ledger Balance")
+
+ @classmethod
+ def _get_account(cls):
+ pool = Pool()
+ return pool.get('account.account')
class GeneralLedgerAccountContext(ModelView):
@@ -1656,6 +1856,57 @@ class GeneralLedgerAccountContext(ModelView):
self.end_period = None
+class GeneralLedgerAccountParty(_GeneralLedgerAccount):
+ "General Ledger Account Party"
+ __name__ = 'account.general_ledger.account.party'
+
+ party = fields.Many2One('party.party', "Party")
+
+ @classmethod
+ def __setup__(cls):
+ super().__setup__()
+ cls._order.insert(2, ('party', 'ASC'))
+
+ @classmethod
+ def _get_account(cls):
+ pool = Pool()
+ return pool.get('account.account.party')
+
+ def get_rec_name(self, name):
+ return ' - '.join((self.account.rec_name, self.party.rec_name))
+
+ @classmethod
+ def search_rec_name(cls, name, clause):
+ if clause[1].startswith('!') or clause[1].startswith('not '):
+ bool_op = 'AND'
+ else:
+ bool_op = 'OR'
+ return [bool_op,
+ ('account.rec_name',) + tuple(clause[1:]),
+ ('party.rec_name',) + tuple(clause[1:]),
+ ]
+
+
+class OpenGeneralLedgerAccountParty(Wizard):
+ "Open General Ledger Account Party"
+ __name__ = 'account.general_ledger.account.party.open'
+ start_state = 'open'
+ open = StateAction('account.act_general_ledger_line_form')
+
+ def do_open(self, action):
+ action['name'] = '%s (%s)' % (action['name'], self.record.rec_name)
+ domain = [
+ ('account', '=', self.record.account.id),
+ ('party', '=', self.record.party.id),
+ ]
+ action['pyson_domain'] = PYSONEncoder().encode(domain)
+ action['context_model'] = 'account.general_ledger.account.context'
+ action['pyson_context'] = PYSONEncoder().encode({
+ 'party_cumulate': True,
+ })
+ return action, {}
+
+
class GeneralLedgerLine(ModelSQL, ModelView):
'General Ledger Line'
__name__ = 'account.general_ledger.line'
diff --git a/account.xml b/account.xml
index 1dd3244c6a..6556f8cc99 100644
--- a/account.xml
+++ b/account.xml
@@ -537,6 +537,71 @@ this repository contains the full copyright notices and license terms. -->
+
+ account.general_ledger.account.party
+
+ general_ledger_account_party_list
+
+
+
+ General Ledger - Account Parties
+ account.general_ledger.account.party
+ account.general_ledger.account.context
+
+
+
+
+
+
+
+
+ tree_open
+ account.general_ledger.account,-1
+
+
+
+
+ Open General Ledger Account Parties
+ account.general_ledger.account.party.open
+
+
+ tree_open
+ account.general_ledger.account.party,-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User in company
+
+
+
+
+
+
+
+
account.general_ledger.line
tree
diff --git a/general_ledger.fodt b/general_ledger.fodt
index 1393a10b14..73768a00db 100644
--- a/general_ledger.fodt
+++ b/general_ledger.fodt
@@ -1,29 +1,30 @@
-
- LibreOffice/5.2.7.2$Linux_X86_64 LibreOffice_project/20m0$Build-22008-06-07T15:26:412008-08-27T17:03:361PT0S
+
+ LibreOffice/6.4.3.2$Linux_X86_64 LibreOffice_project/40$Build-22008-06-07T15:26:412008-08-27T17:03:361PT0S
- 0
+ 30268
0
- 23440
- 21451
+ 26301
+ 22994
true
false
view2
- 9816
- 5443
+ 4452
+ 34941
0
- 0
- 23439
- 21449
+ 30268
+ 26300
+ 53261
0
0
false
100
false
+ false
@@ -38,9 +39,15 @@
false
false
+ false
+ false
false
false
false
+ true
+ true
+ false
+ false
false
false
false
@@ -53,23 +60,22 @@
false
true
true
- false
- false
- false
+ 2070049
false
false
- false
true
false
false
-
false
+ true
false
false
false
true
- 3901604
+ 3965027
+
+ true
false
true
false
@@ -78,12 +84,18 @@
true
false
true
+ false
+ false
+ false
0
false
true
high-resolution
false
false
+ false
+ false
+ false
false
true
true
@@ -99,7 +111,6 @@
false
false
- 2070049
false
1
true
@@ -120,8 +131,8 @@
-
-
+
+
@@ -129,15 +140,15 @@
-
-
+
+
-
-
+
+
@@ -149,18 +160,18 @@
-
-
+
+
-
+
-
+
@@ -176,17 +187,25 @@
-
+
-
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -197,8 +216,8 @@
-
-
+
+
@@ -207,17 +226,17 @@
-
+
-
+
-
+
@@ -228,123 +247,113 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
-
-
-
-
-
-
+
-
+
@@ -354,192 +363,192 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -630,12 +639,76 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -643,14 +716,14 @@
-
-
+
+
-
+
-
+
@@ -667,7 +740,7 @@
General Ledger
- Print Date: <format_date(datetime.date.today(), user.language)> at <datetime.datetime.now().strftime('%H:%M:%S')>
+ Print Date: <format_date(datetime.date.today(), user.language)>at <datetime.datetime.now().strftime('%H:%M:%S')>
@@ -696,14 +769,15 @@
+
General Ledger
Fiscal Year: <fiscalyear.rec_name>
<if test="start_period or end_period">
- From Period: <start_period.name if start_period else ''> To <end_period.name if end_period else ''>
+ From Period: <start_period.name if start_period else ''>To <end_period.name if end_period else ''>
</if>
<if test="from_date or to_date">
- From Date: <format_date(from_date, user.language) if from_date else ''> To <format_date(to_date, user.language) if to_date else ''>
+ From Date: <format_date(from_date, user.language) if from_date else ''>To <format_date(to_date, user.language) if to_date else ''>
</if>
<for each="account in accounts">
@@ -712,11 +786,7 @@
-
- Code
-
-
-
+
Name
@@ -724,15 +794,15 @@
+
+
-
- <account.code or ''>
+
+ <account.rec_name>
-
- <account.name or ''>
-
+
diff --git a/tests/scenario_reports.rst b/tests/scenario_reports.rst
index b564b92e44..1bee2cfddf 100644
--- a/tests/scenario_reports.rst
+++ b/tests/scenario_reports.rst
@@ -84,6 +84,8 @@ Create a moves::
Print some reports::
>>> GeneralLedgerAccount = Model.get('account.general_ledger.account')
+ >>> GeneralLedgerAccountParty = Model.get(
+ ... 'account.general_ledger.account.party')
>>> gl_accounts = GeneralLedgerAccount.find([])
>>> _ = [(l.balance, l.party_required) for gl in gl_accounts
... for l in gl.lines]
@@ -100,8 +102,12 @@ Print some reports::
... }
>>> with config.set_context(context):
... gl_revenue, = GeneralLedgerAccount.find([
- ... ('name', '=', revenue.name),
+ ... ('account', '=', revenue.id),
... ])
+ ... glp_receivable, = GeneralLedgerAccountParty.find([
+ ... ('account', '=', receivable.id),
+ ... ('party', '=', party.id),
+ ... ])
>>> gl_revenue.start_balance
Decimal('0.00')
>>> gl_revenue.credit
@@ -110,6 +116,14 @@ Print some reports::
Decimal('0.00')
>>> gl_revenue.end_balance
Decimal('-10.00')
+ >>> glp_receivable.start_balance
+ Decimal('0.00')
+ >>> glp_receivable.credit
+ Decimal('10.00')
+ >>> glp_receivable.debit
+ Decimal('10.00')
+ >>> glp_receivable.end_balance
+ Decimal('0.00')
>>> context = {
... 'company': company.id,
@@ -119,8 +133,12 @@ Print some reports::
... }
>>> with config.set_context(context):
... gl_revenue, = GeneralLedgerAccount.find([
- ... ('name', '=', revenue.name),
+ ... ('account', '=', revenue.id),
... ])
+ ... glp_receivable, = GeneralLedgerAccountParty.find([
+ ... ('account', '=', receivable.id),
+ ... ('party', '=', party.id),
+ ... ])
>>> gl_revenue.start_balance
Decimal('0.00')
>>> gl_revenue.credit
@@ -129,6 +147,14 @@ Print some reports::
Decimal('0.00')
>>> gl_revenue.end_balance
Decimal('-10.00')
+ >>> glp_receivable.start_balance
+ Decimal('0.00')
+ >>> glp_receivable.credit
+ Decimal('10.00')
+ >>> glp_receivable.debit
+ Decimal('10.00')
+ >>> glp_receivable.end_balance
+ Decimal('0.00')
>>> context = {
... 'company': company.id,
@@ -137,7 +163,7 @@ Print some reports::
... }
>>> with config.set_context(context):
... gl_revenue, = GeneralLedgerAccount.find([
- ... ('name', '=', revenue.name),
+ ... ('account', '=', revenue.id),
... ])
>>> gl_revenue.start_balance
Decimal('-10.00')
diff --git a/trial_balance.fodt b/trial_balance.fodt
index 2d6fbf9bd5..69ef362442 100644
--- a/trial_balance.fodt
+++ b/trial_balance.fodt
@@ -1,29 +1,30 @@
-
- LibreOffice/5.2.7.2$Linux_X86_64 LibreOffice_project/20m0$Build-22008-06-07T15:26:582008-08-27T17:08:381PT0S
+
+ LibreOffice/6.4.3.2$Linux_X86_64 LibreOffice_project/40$Build-22008-06-07T15:26:582008-08-27T17:08:381PT0S
- 0
+ 4868
0
- 23440
- 21451
+ 26301
+ 22994
true
false
view2
- 3784
- 10984
+ 8073
+ 13226
0
- 0
- 23439
- 21449
+ 4868
+ 26300
+ 27861
0
1
false
100
false
+ false
@@ -38,9 +39,15 @@
false
false
+ false
+ false
false
false
false
+ true
+ true
+ false
+ false
false
false
false
@@ -53,23 +60,22 @@
false
true
true
- false
- false
- false
+ 1253212
false
false
- false
true
false
false
-
false
+ true
false
false
false
true
- 1470702
+ 1557078
+
+ true
false
true
false
@@ -78,12 +84,18 @@
true
false
true
+ false
+ false
+ false
0
false
true
high-resolution
false
false
+ false
+ false
+ false
false
true
true
@@ -99,7 +111,6 @@
false
false
- 1253212
false
1
true
@@ -129,15 +140,15 @@
-
-
+
+
-
-
+
+
@@ -149,18 +160,18 @@
-
+
-
+
-
+
@@ -178,11 +189,19 @@
+
+
+
+
+
+
+
+
-
-
+
+
@@ -193,8 +212,8 @@
-
-
+
+
@@ -203,17 +222,17 @@
-
+
-
+
-
+
@@ -224,130 +243,130 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -386,14 +405,14 @@
-
-
+
+
-
+
-
+
@@ -410,7 +429,7 @@
Trial Balance
- Print Date: <format_date(datetime.date.today(), user.language)> at <datetime.datetime.now().strftime('%H:%M:%S')>
+ Print Date: <format_date(datetime.date.today(), user.language)>at <datetime.datetime.now().strftime('%H:%M:%S')>
@@ -439,14 +458,15 @@
+
Trial Balance
Fiscal Year: <fiscalyear.rec_name>
<if test="start_period or end_period">
- From Period: <start_period.name if start_period else ''> To <end_period.name if end_period else ''>
+ From Period: <start_period.name if start_period else ''>To <end_period.name if end_period else ''>
</if>
<if test="from_date or to_date">
- From Date: <format_date(from_date, user.language) if from_date else ''> To <format_date(to_date, user.language) if to_date else ''>
+ From Date: <format_date(from_date, user.language) if from_date else ''>To <format_date(to_date, user.language) if to_date else ''>
</if>
@@ -481,7 +501,7 @@
- <account.code and account.code + ' ' or ''><account.name>
+ <account.rec_name>
<format_currency(account.start_balance, user.language, company.currency)>
diff --git a/view/general_ledger_account_list.xml b/view/general_ledger_account_list.xml
index 89796ded32..07f3a9a6ef 100644
--- a/view/general_ledger_account_list.xml
+++ b/view/general_ledger_account_list.xml
@@ -2,8 +2,7 @@
-
-
+
diff --git a/view/general_ledger_account_party_list.xml b/view/general_ledger_account_party_list.xml
new file mode 100644
index 0000000000..858ce9cd4e
--- /dev/null
+++ b/view/general_ledger_account_party_list.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+