From a81d6121aaf572e78ce62fb4e8f2e596128dc527 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Tue, 5 Jan 2016 11:57:40 +0100 Subject: [PATCH] [IMP] hr_expense: improve expense report by grouping by employee-state-currency --- addons/hr_expense/__init__.py | 1 + addons/hr_expense/report/__init__.py | 4 + addons/hr_expense/report/hr_expense_report.py | 60 ++++++++++++ addons/hr_expense/views/report_expense.xml | 97 +++++++++++-------- 4 files changed, 121 insertions(+), 41 deletions(-) create mode 100644 addons/hr_expense/report/__init__.py create mode 100644 addons/hr_expense/report/hr_expense_report.py diff --git a/addons/hr_expense/__init__.py b/addons/hr_expense/__init__.py index 11529f98733..d84fb182e8f 100644 --- a/addons/hr_expense/__init__.py +++ b/addons/hr_expense/__init__.py @@ -2,4 +2,5 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import models +import report import wizard diff --git a/addons/hr_expense/report/__init__.py b/addons/hr_expense/report/__init__.py new file mode 100644 index 00000000000..7f74fc905a4 --- /dev/null +++ b/addons/hr_expense/report/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import hr_expense_report \ No newline at end of file diff --git a/addons/hr_expense/report/hr_expense_report.py b/addons/hr_expense/report/hr_expense_report.py new file mode 100644 index 00000000000..1422abf9aa5 --- /dev/null +++ b/addons/hr_expense/report/hr_expense_report.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import time +from openerp.osv import osv +from openerp.tools.misc import formatLang +from openerp.tools.translate import _ +from openerp.report import report_sxw +from openerp.exceptions import UserError + + +class report_expense(report_sxw.rml_parse): + + def set_context(self, objects, data, ids, report_type=None): + res = super(report_expense, self).set_context(objects, data, ids, report_type=report_type) + + hr_expense_obj = self.pool.get('hr.expense') + + context = {'lang': self.pool.get('res.users').browse(self.cr, self.uid, self.uid).lang} + state_field = hr_expense_obj.fields_get(self.cr, self.uid, 'state', context=context)['state']['selection'] + state_dict = {} + for state_tuple in state_field: + state_dict[state_tuple[0]] = state_tuple[1] + + expenses_info = {} + expenses = hr_expense_obj.search(self.cr, self.uid, [('id', 'in', ids)], order="employee_id, currency_id, state, date") + for expense in hr_expense_obj.browse(self.cr, self.uid, expenses): + key = expense.employee_id.name + '-' + expense.currency_id.name + '-' + expense.state + if expenses_info.get(key): + expenses_info[key]['lines'] += expense + expenses_info[key]['total_amount'] += expense.total_amount + else: + expenses_info[key] = { + 'employee_name': expense.employee_id.name, + 'total_amount': expense.total_amount, + 'lines': expense, + 'currency': expense.currency_id, + 'validator_name': expense.employee_id.parent_id.name, + 'notes': [], + 'notes_index': {}, + 'state': state_dict[expense.state], + } + if expense.description: + index = len(expenses_info[key]['notes']) + 1 + expenses_info[key]['notes'].append({'description': expense.description, 'index':index}) + expenses_info[key]['notes_index'][expense.id] = index + + # Qweb for-each do not work on dict, so we send a list and we sort it by the name of the employee + # that way if we have two sheet for the same employee they will follow in the report + self.localcontext.update({ + 'get_expenses': lambda : [v for k,v in sorted(expenses_info.items())], + }) + return res + + +class report_hr_expense(osv.AbstractModel): + _name = 'report.hr_expense.report_expense' + _inherit = 'report.abstract_report' + _template = 'hr_expense.report_expense' + _wrapped_report_class = report_expense diff --git a/addons/hr_expense/views/report_expense.xml b/addons/hr_expense/views/report_expense.xml index 27927d6d15c..78a0402a2ad 100644 --- a/addons/hr_expense/views/report_expense.xml +++ b/addons/hr_expense/views/report_expense.xml @@ -2,7 +2,7 @@