diff --git a/addons/hr_expense/__terp__.py b/addons/hr_expense/__terp__.py index 6cdf8acdd3a..03fab346c77 100644 --- a/addons/hr_expense/__terp__.py +++ b/addons/hr_expense/__terp__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -48,7 +48,8 @@ 'hr_expense_workflow.xml', 'hr_expense_view.xml', 'hr_expense_report.xml', - 'process/hr_expense_process.xml' + 'process/hr_expense_process.xml', + 'report/hr_expense_report_view.xml' ], 'demo_xml': ['hr.expense.expense.csv'], 'installable': True, diff --git a/addons/hr_expense/report/__init__.py b/addons/hr_expense/report/__init__.py index f55bc86bc12..4ddd1d33933 100644 --- a/addons/hr_expense/report/__init__.py +++ b/addons/hr_expense/report/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -15,10 +15,11 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## import expense +import hr_expense_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 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..81cb18dcc09 --- /dev/null +++ b/addons/hr_expense/report/hr_expense_report.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import tools +from osv import fields,osv + + +class hr_expense_report(osv.osv): + _name = "hr.expense.report" + _description = "Expenses Statistics" + _auto = False + _rec_name = 'date' + _columns = { + 'date': fields.date('Date', readonly=True), + 'year': fields.char('Year', size=4, readonly=True), + 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), + ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), + ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True), + 'product_id':fields.many2one('product.product', 'Product', readonly=True), + 'product_qty':fields.float('Qty', readonly=True), + 'employee_id': fields.many2one('hr.employee', "Employee's Name", readonly=True), + 'invoice_id': fields.many2one('account.invoice', 'Invoice',readonly=True), + 'department_id':fields.many2one('hr.department','Department',readonly=True), + 'company_id':fields.many2one('res.company', 'Company', readonly=True), + 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'price_total':fields.float('Total Price', readonly=True), + 'price_average':fields.float('Average Price', readonly=True), + 'nbr':fields.integer('# of Lines', readonly=True), + 'state': fields.selection([ + ('draft', 'Draft'), + ('confirm', 'Waiting confirmation'), + ('accepted', 'Accepted'), + ('invoiced', 'Invoiced'), + ('paid', 'Reimbursed'), + ('cancelled', 'Cancelled')], + 'State', readonly=True), + } + _order = 'date desc' + def init(self, cr): + tools.drop_view_if_exists(cr, 'hr_expense_report') + cr.execute(""" + create or replace view hr_expense_report as ( + select + min(l.id) as id, + s.date as date, + s.employee_id, + s.invoice_id, + s.department_id, + to_char(s.date, 'YYYY') as year, + to_char(s.date, 'MM') as month, + l.product_id as product_id, + sum(l.unit_quantity * u.factor) as product_qty, + s.user_id as user_id, + s.company_id as company_id, + sum(l.unit_quantity*l.unit_amount) as price_total, + (sum(l.unit_quantity*l.unit_amount)/sum(l.unit_quantity * u.factor))::decimal(16,2) as price_average, + count(*) as nbr, + s.state + from + hr_expense_line l + left join + hr_expense_expense s on (s.id=l.expense_id) + left join product_uom u on (u.id=l.uom_id) + group by + s.date, l.product_id,s.invoice_id, + s.department_id, + l.uom_id, s.user_id, s.state, + s.company_id,s.employee_id + ) + """) +hr_expense_report() + diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml new file mode 100644 index 00000000000..9e30e6688f2 --- /dev/null +++ b/addons/hr_expense/report/hr_expense_report_view.xml @@ -0,0 +1,100 @@ + + + + + hr.expense.report.tree + hr.expense.report + tree + + + + + + + + + + + + + + + + + + + + + + hr.expense.report.graph + hr.expense.report + graph + + + + + + + + + + hr.expense.report.search + hr.expense.report + search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Expenses + hr.expense.report + form + tree,graph + + + + + + + +