mirror of
https://github.com/NaN-tic/trytond-patches.git
synced 2023-12-14 06:03:03 +01:00
149 lines
5.6 KiB
Diff
149 lines
5.6 KiB
Diff
# HG changeset patch
|
|
# User Guillem Barba <guillembarba@gmail.com>
|
|
use method to compute balance, credit and debit getters query
|
|
|
|
issue4543
|
|
review6021003
|
|
|
|
Index: account.py
|
|
===================================================================
|
|
|
|
--- .a/trytond/trytond/modules/analytic_account/account.py
|
|
+++ .b/trytond/trytond/modules/analytic_account/account.py
|
|
@@ -124,17 +124,8 @@
|
|
def get_balance(cls, accounts, name):
|
|
res = {}
|
|
pool = Pool()
|
|
- Line = pool.get('analytic_account.line')
|
|
- MoveLine = pool.get('account.move.line')
|
|
- Account = pool.get('account.account')
|
|
- Company = pool.get('company.company')
|
|
Currency = pool.get('currency.currency')
|
|
cursor = Transaction().cursor
|
|
- table = cls.__table__()
|
|
- line = Line.__table__()
|
|
- move_line = MoveLine.__table__()
|
|
- a_account = Account.__table__()
|
|
- company = Company.__table__()
|
|
|
|
ids = [a.id for a in accounts]
|
|
childs = cls.search([('parent', 'child_of', ids)])
|
|
@@ -145,25 +136,12 @@
|
|
for account in all_accounts:
|
|
id2account[account.id] = account
|
|
|
|
- line_query = Line.query_get(line)
|
|
- cursor.execute(*table.join(line, 'LEFT',
|
|
- condition=table.id == line.account
|
|
- ).join(move_line, 'LEFT',
|
|
- condition=move_line.id == line.move_line
|
|
- ).join(a_account, 'LEFT',
|
|
- condition=a_account.id == move_line.account
|
|
- ).join(company, 'LEFT',
|
|
- condition=company.id == a_account.company
|
|
- ).select(table.id,
|
|
- Sum(Coalesce(line.debit, 0) - Coalesce(line.credit, 0)),
|
|
- company.currency,
|
|
- where=(table.type != 'view')
|
|
- & table.id.in_(all_ids)
|
|
- & table.active & line_query,
|
|
- group_by=(table.id, company.currency)))
|
|
+ query = cls.query_get(all_ids, [name])
|
|
+ cursor.execute(*query)
|
|
+
|
|
account_sum = {}
|
|
id2currency = {}
|
|
- for account_id, sum, currency_id in cursor.fetchall():
|
|
+ for account_id, currency_id, sum in cursor.fetchall():
|
|
account_sum.setdefault(account_id, Decimal('0.0'))
|
|
# SQLite uses float for SUM
|
|
if not isinstance(sum, Decimal):
|
|
@@ -200,17 +178,8 @@
|
|
@classmethod
|
|
def get_credit_debit(cls, accounts, names):
|
|
pool = Pool()
|
|
- Line = pool.get('analytic_account.line')
|
|
- MoveLine = pool.get('account.move.line')
|
|
- Account = pool.get('account.account')
|
|
- Company = pool.get('company.company')
|
|
Currency = pool.get('currency.currency')
|
|
cursor = Transaction().cursor
|
|
- table = cls.__table__()
|
|
- line = Line.__table__()
|
|
- move_line = MoveLine.__table__()
|
|
- a_account = Account.__table__()
|
|
- company = Company.__table__()
|
|
|
|
result = {}
|
|
ids = [a.id for a in accounts]
|
|
@@ -223,23 +192,8 @@
|
|
for account in accounts:
|
|
id2account[account.id] = account
|
|
|
|
- line_query = Line.query_get(line)
|
|
- columns = [table.id, company.currency]
|
|
- for name in names:
|
|
- columns.append(Sum(Coalesce(Column(line, name), 0)))
|
|
- cursor.execute(*table.join(line, 'LEFT',
|
|
- condition=table.id == line.account
|
|
- ).join(move_line, 'LEFT',
|
|
- condition=move_line.id == line.move_line
|
|
- ).join(a_account, 'LEFT',
|
|
- condition=a_account.id == move_line.account
|
|
- ).join(company, 'LEFT',
|
|
- condition=company.id == a_account.company
|
|
- ).select(*columns,
|
|
- where=(table.type != 'view')
|
|
- & table.id.in_(ids)
|
|
- & table.active & line_query,
|
|
- group_by=(table.id, company.currency)))
|
|
+ query = cls.query_get(ids, names)
|
|
+ cursor.execute(*query)
|
|
|
|
id2currency = {}
|
|
for row in cursor.fetchall():
|
|
@@ -263,6 +217,43 @@
|
|
result[name][account.id] += account.currency.round(sum)
|
|
return result
|
|
|
|
+ @classmethod
|
|
+ def query_get(cls, ids, names):
|
|
+ pool = Pool()
|
|
+ Line = pool.get('analytic_account.line')
|
|
+ MoveLine = pool.get('account.move.line')
|
|
+ Account = pool.get('account.account')
|
|
+ Company = pool.get('company.company')
|
|
+ table = cls.__table__()
|
|
+ line = Line.__table__()
|
|
+ move_line = MoveLine.__table__()
|
|
+ a_account = Account.__table__()
|
|
+ company = Company.__table__()
|
|
+
|
|
+ line_query = Line.query_get(line)
|
|
+
|
|
+ columns = [table.id, company.currency]
|
|
+ for name in names:
|
|
+ if name == 'balance':
|
|
+ columns.append(
|
|
+ Sum(Coalesce(line.debit, 0) - Coalesce(line.credit, 0)))
|
|
+ else:
|
|
+ columns.append(Sum(Coalesce(Column(line, name), 0)))
|
|
+ query = table.join(line, 'LEFT',
|
|
+ condition=table.id == line.account
|
|
+ ).join(move_line, 'LEFT',
|
|
+ condition=move_line.id == line.move_line
|
|
+ ).join(a_account, 'LEFT',
|
|
+ condition=a_account.id == move_line.account
|
|
+ ).join(company, 'LEFT',
|
|
+ condition=company.id == a_account.company
|
|
+ ).select(*columns,
|
|
+ where=(table.type != 'view')
|
|
+ & table.id.in_(ids)
|
|
+ & table.active & line_query,
|
|
+ group_by=(table.id, company.currency))
|
|
+ return query
|
|
+
|
|
def get_rec_name(self, name):
|
|
if self.code:
|
|
return self.code + ' - ' + unicode(self.name)
|
|
|