Purpose of this commit is to give description more "business oriented" because those descriptions appears in Odoo Studio which is supposed to be used by end users, not only by developers. Related Task ID : 37311
122 lines
5.6 KiB
Python
122 lines
5.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import time
|
|
from odoo import api, models, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class ReportJournal(models.AbstractModel):
|
|
_name = 'report.account.report_journal'
|
|
_description = 'Account Journal Report'
|
|
|
|
def lines(self, target_move, journal_ids, sort_selection, data):
|
|
if isinstance(journal_ids, int):
|
|
journal_ids = [journal_ids]
|
|
|
|
move_state = ['draft', 'posted']
|
|
if target_move == 'posted':
|
|
move_state = ['posted']
|
|
|
|
query_get_clause = self._get_query_get_clause(data)
|
|
params = [tuple(move_state), tuple(journal_ids)] + query_get_clause[2]
|
|
query = 'SELECT "account_move_line".id FROM ' + query_get_clause[0] + ', account_move am, account_account acc WHERE "account_move_line".account_id = acc.id AND "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' + query_get_clause[1] + ' ORDER BY '
|
|
if sort_selection == 'date':
|
|
query += '"account_move_line".date'
|
|
else:
|
|
query += 'am.name'
|
|
query += ', "account_move_line".move_id, acc.code'
|
|
self.env.cr.execute(query, tuple(params))
|
|
ids = (x[0] for x in self.env.cr.fetchall())
|
|
return self.env['account.move.line'].browse(ids)
|
|
|
|
def _sum_debit(self, data, journal_id):
|
|
move_state = ['draft', 'posted']
|
|
if data['form'].get('target_move', 'all') == 'posted':
|
|
move_state = ['posted']
|
|
|
|
query_get_clause = self._get_query_get_clause(data)
|
|
params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[2]
|
|
self.env.cr.execute('SELECT SUM(debit) FROM ' + query_get_clause[0] + ', account_move am '
|
|
'WHERE "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' + query_get_clause[1] + ' ',
|
|
tuple(params))
|
|
return self.env.cr.fetchone()[0] or 0.0
|
|
|
|
def _sum_credit(self, data, journal_id):
|
|
move_state = ['draft', 'posted']
|
|
if data['form'].get('target_move', 'all') == 'posted':
|
|
move_state = ['posted']
|
|
|
|
query_get_clause = self._get_query_get_clause(data)
|
|
params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[2]
|
|
self.env.cr.execute('SELECT SUM(credit) FROM ' + query_get_clause[0] + ', account_move am '
|
|
'WHERE "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' + query_get_clause[1] + ' ',
|
|
tuple(params))
|
|
return self.env.cr.fetchone()[0] or 0.0
|
|
|
|
def _get_taxes(self, data, journal_id):
|
|
move_state = ['draft', 'posted']
|
|
if data['form'].get('target_move', 'all') == 'posted':
|
|
move_state = ['posted']
|
|
|
|
query_get_clause = self._get_query_get_clause(data)
|
|
params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[2]
|
|
query = """
|
|
SELECT rel.account_tax_id, SUM("account_move_line".balance) AS base_amount
|
|
FROM account_move_line_account_tax_rel rel, """ + query_get_clause[0] + """
|
|
LEFT JOIN account_move am ON "account_move_line".move_id = am.id
|
|
WHERE "account_move_line".id = rel.account_move_line_id
|
|
AND am.state IN %s
|
|
AND "account_move_line".journal_id IN %s
|
|
AND """ + query_get_clause[1] + """
|
|
GROUP BY rel.account_tax_id"""
|
|
self.env.cr.execute(query, tuple(params))
|
|
ids = []
|
|
base_amounts = {}
|
|
for row in self.env.cr.fetchall():
|
|
ids.append(row[0])
|
|
base_amounts[row[0]] = row[1]
|
|
|
|
|
|
res = {}
|
|
for tax in self.env['account.tax'].browse(ids):
|
|
self.env.cr.execute('SELECT sum(debit - credit) FROM ' + query_get_clause[0] + ', account_move am '
|
|
'WHERE "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' + query_get_clause[1] + ' AND tax_line_id = %s',
|
|
tuple(params + [tax.id]))
|
|
res[tax] = {
|
|
'base_amount': base_amounts[tax.id],
|
|
'tax_amount': self.env.cr.fetchone()[0] or 0.0,
|
|
}
|
|
if journal_id.type == 'sale':
|
|
#sales operation are credits
|
|
res[tax]['base_amount'] = res[tax]['base_amount'] * -1
|
|
res[tax]['tax_amount'] = res[tax]['tax_amount'] * -1
|
|
return res
|
|
|
|
def _get_query_get_clause(self, data):
|
|
return self.env['account.move.line'].with_context(data['form'].get('used_context', {}))._query_get()
|
|
|
|
@api.model
|
|
def _get_report_values(self, docids, data=None):
|
|
if not data.get('form'):
|
|
raise UserError(_("Form content is missing, this report cannot be printed."))
|
|
|
|
target_move = data['form'].get('target_move', 'all')
|
|
sort_selection = data['form'].get('sort_selection', 'date')
|
|
|
|
res = {}
|
|
for journal in data['form']['journal_ids']:
|
|
res[journal] = self.with_context(data['form'].get('used_context', {})).lines(target_move, journal, sort_selection, data)
|
|
return {
|
|
'doc_ids': data['form']['journal_ids'],
|
|
'doc_model': self.env['account.journal'],
|
|
'data': data,
|
|
'docs': self.env['account.journal'].browse(data['form']['journal_ids']),
|
|
'time': time,
|
|
'lines': res,
|
|
'sum_credit': self._sum_credit,
|
|
'sum_debit': self._sum_debit,
|
|
'get_taxes': self._get_taxes,
|
|
'company_id': self.env['res.company'].browse(
|
|
data['form']['company_id'][0]),
|
|
}
|