Browse Source

refac to avoid sql duplication

pull/45/head
Vincent Vinet 10 years ago
parent
commit
456cc0b01e
  1. 54
      account_financial_report_webkit/report/common_reports.py
  2. 74
      account_financial_report_webkit_xls/report/general_ledger_xls.py

54
account_financial_report_webkit/report/common_reports.py

@ -492,23 +492,9 @@ class CommonReportHeaderWebkit(common_report_header):
raise osv.except_osv( raise osv.except_osv(
_('No valid filter'), _('Please set a valid time filter')) _('No valid filter'), _('Please set a valid time filter'))
def _get_move_line_datas(self, move_line_ids,
order='per.special DESC, l.date ASC, \
per.date_start ASC, m.name ASC'):
# Possible bang if move_line_ids is too long
# We can not slice here as we have to do the sort.
# If slice has to be done it means that we have to reorder in python
# after all is finished. That quite crapy...
# We have a defective desing here (mea culpa) that should be fixed
#
# TODO improve that by making a better domain or if not possible
# by using python sort
if not move_line_ids:
return []
if not isinstance(move_line_ids, list):
move_line_ids = [move_line_ids]
monster = """
SELECT l.id AS id,
def _get_move_line_select(self):
return """
l.id AS id,
l.date AS ldate, l.date AS ldate,
j.code AS jcode , j.code AS jcode ,
j.type AS jtype, j.type AS jtype,
@ -534,18 +520,42 @@ SELECT l.id AS id,
i.type AS invoice_type, i.type AS invoice_type,
i.number AS invoice_number, i.number AS invoice_number,
l.date_maturity l.date_maturity
FROM account_move_line l
"""
def _get_move_line_datas(self, move_line_ids,
order='per.special DESC, l.date ASC, \
per.date_start ASC, m.name ASC'):
# Possible bang if move_line_ids is too long
# We can not slice here as we have to do the sort.
# If slice has to be done it means that we have to reorder in python
# after all is finished. That quite crapy...
# We have a defective desing here (mea culpa) that should be fixed
#
# TODO improve that by making a better domain or if not possible
# by using python sort
if not move_line_ids:
return []
if not isinstance(move_line_ids, list):
move_line_ids = [move_line_ids]
monster = """
SELECT {select}
FROM account_move_line l
JOIN account_move m on (l.move_id=m.id) JOIN account_move m on (l.move_id=m.id)
LEFT JOIN res_currency c on (l.currency_id=c.id) LEFT JOIN res_currency c on (l.currency_id=c.id)
LEFT JOIN account_move_reconcile partialrec LEFT JOIN account_move_reconcile partialrec
on (l.reconcile_partial_id = partialrec.id)
LEFT JOIN account_move_reconcile fullrec on (l.reconcile_id = fullrec.id)
ON (l.reconcile_partial_id = partialrec.id)
LEFT JOIN account_move_reconcile fullrec
ON (l.reconcile_id = fullrec.id)
LEFT JOIN res_partner p on (l.partner_id=p.id) LEFT JOIN res_partner p on (l.partner_id=p.id)
LEFT JOIN account_invoice i on (m.id =i.move_id) LEFT JOIN account_invoice i on (m.id =i.move_id)
LEFT JOIN account_period per on (per.id=l.period_id) LEFT JOIN account_period per on (per.id=l.period_id)
JOIN account_journal j on (l.journal_id=j.id) JOIN account_journal j on (l.journal_id=j.id)
WHERE l.id in %s"""
monster += (" ORDER BY %s" % (order,))
WHERE l.id in %s
ORDER BY {order}
""".format(
select=self._get_move_line_select(),
order=order,
)
try: try:
self.cursor.execute(monster, (tuple(move_line_ids),)) self.cursor.execute(monster, (tuple(move_line_ids),))
res = self.cursor.dictfetchall() res = self.cursor.dictfetchall()

74
account_financial_report_webkit_xls/report/general_ledger_xls.py

@ -35,72 +35,11 @@ class GeneralLedgerWebkitSupplier(GeneralLedgerWebkit):
""" Extends General Ledger Parser to add the supplier invoice """ Extends General Ledger Parser to add the supplier invoice
number in the move lines """ number in the move lines """
def _get_move_line_datas(self, move_line_ids,
order='per.special DESC, l.date ASC, \
per.date_start ASC, m.name ASC'):
# copied from account_financial_report_webkit/report/common_reports.py
# and adjusted to add the required column
# Possible bang if move_line_ids is too long
# We can not slice here as we have to do the sort.
# If slice has to be done it means that we have to reorder in python
# after all is finished. That quite crapy...
# We have a defective desing here (mea culpa) that should be fixed
#
# TODO improve that by making a better domain or if not possible
# by using python sort
if not move_line_ids:
return []
if not isinstance(move_line_ids, list):
move_line_ids = [move_line_ids]
monster = """
SELECT l.id AS id,
l.date AS ldate,
j.code AS jcode ,
j.type AS jtype,
l.currency_id,
l.account_id,
l.amount_currency,
l.ref AS lref,
l.name AS lname,
COALESCE(l.debit, 0.0) - COALESCE(l.credit, 0.0) AS balance,
l.debit,
l.credit,
l.period_id AS lperiod_id,
per.code as period_code,
per.special AS peropen,
l.partner_id AS lpartner_id,
p.name AS partner_name,
m.name AS move_name,
COALESCE(partialrec.name, fullrec.name, '') AS rec_name,
COALESCE(partialrec.id, fullrec.id, NULL) AS rec_id,
m.id AS move_id,
c.name AS currency_code,
i.id AS invoice_id,
i.type AS invoice_type,
i.number AS invoice_number,
i.supplier_invoice_number AS supplier_invoice_number,
l.date_maturity
FROM account_move_line l
JOIN account_move m on (l.move_id=m.id)
LEFT JOIN res_currency c on (l.currency_id=c.id)
LEFT JOIN account_move_reconcile partialrec
on (l.reconcile_partial_id = partialrec.id)
LEFT JOIN account_move_reconcile fullrec on (l.reconcile_id = fullrec.id)
LEFT JOIN res_partner p on (l.partner_id=p.id)
LEFT JOIN account_invoice i on (m.id =i.move_id)
LEFT JOIN account_period per on (per.id=l.period_id)
JOIN account_journal j on (l.journal_id=j.id)
WHERE l.id in %s"""
monster += (" ORDER BY %s" % (order,))
try:
self.cursor.execute(monster, (tuple(move_line_ids),))
res = self.cursor.dictfetchall()
except Exception:
self.cursor.rollback()
raise
return res or []
def _get_move_line_select(self):
res = super(GeneralLedgerWebkitSupplier, self)._get_move_line_select()
return res + """
, i.supplier_invoice_number AS supplier_invoice_number
"""
_column_sizes = [ _column_sizes = [
('date', 12), ('date', 12),
@ -195,7 +134,8 @@ class general_ledger_xls(report_xls):
cell_style_center = xlwt.easyxf(cell_format + _xs['center']) cell_style_center = xlwt.easyxf(cell_format + _xs['center'])
c_specs = [ c_specs = [
('coa', COLS_COA, 0, 'text', _p.chart_account.name), ('coa', COLS_COA, 0, 'text', _p.chart_account.name),
('fy', COLS_FY, 0, 'text', _p.fiscalyear.name if _p.fiscalyear else '-'),
('fy', COLS_FY, 0, 'text',
_p.fiscalyear.name if _p.fiscalyear else '-'),
] ]
df = _('From') + ': ' df = _('From') + ': '
if _p.filter_form(data) == 'filter_date': if _p.filter_form(data) == 'filter_date':

Loading…
Cancel
Save