From ce1563420fc4de020be06c7dd3e842968d12e73a Mon Sep 17 00:00:00 2001 From: apa-tiny Date: Wed, 17 Mar 2010 12:26:13 +0530 Subject: [PATCH] [IMP]:improved tasks report.(Not Finished Yet). bzr revid: apa@tinyerp.com-20100317065613-c09v68zwcvyx1s28 --- addons/project/__terp__.py | 1 + addons/project/report/__init__.py | 6 +- .../report/project_report.py} | 75 +++------- addons/project/report/project_report_view.xml | 93 ++++++++++++ .../project_timesheet/report/task_report.py | 122 +++++++-------- .../report/task_report_view.xml | 4 +- addons/report_project/report_project_view.xml | 139 ------------------ 7 files changed, 182 insertions(+), 258 deletions(-) rename addons/{report_project/report_project.py => project/report/project_report.py} (54%) create mode 100644 addons/project/report/project_report_view.xml delete mode 100644 addons/report_project/report_project_view.xml diff --git a/addons/project/__terp__.py b/addons/project/__terp__.py index cedeab01b4f..2af0ba122bf 100644 --- a/addons/project/__terp__.py +++ b/addons/project/__terp__.py @@ -40,6 +40,7 @@ works done on tasks, eso. It is able to render planning, order tasks, eso. "project_report.xml", "process/task_process.xml", "project_installer.xml", + "report/project_report_view.xml" ], 'demo_xml': [ 'project_demo.xml' diff --git a/addons/project/report/__init__.py b/addons/project/report/__init__.py index 2aefd8b3c11..3c104dc54ec 100644 --- a/addons/project/report/__init__.py +++ b/addons/project/report/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -15,9 +15,9 @@ # 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 project_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_project/report_project.py b/addons/project/report/project_report.py similarity index 54% rename from addons/report_project/report_project.py rename to addons/project/report/project_report.py index 183163813da..20d65aec356 100644 --- a/addons/report_project/report_project.py +++ b/addons/project/report/project_report.py @@ -29,14 +29,23 @@ class report_project_task_user(osv.osv): _columns = { 'name': fields.char('Year',size=64,required=False, readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'date_start': fields.datetime('Starting Date'), + 'date_end': fields.datetime('Ending Date'), + 'date_deadline': fields.date('Deadline'), 'project_id':fields.many2one('project.project', 'Project', readonly=True), 'hours_planned': fields.float('Planned Hours', readonly=True), 'hours_effective': fields.float('Effective Hours', readonly=True), 'hours_delay': fields.float('Avg. Plan.-Eff.', readonly=True), 'closing_days': fields.char('Avg Closing Delay', size=64, readonly=True), - 'task_closed': fields.integer('Task Closed', readonly=True), + 'nbr': fields.integer('#Number of tasks', 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), + 'state': fields.selection([('draft', 'Draft'), + ('open', 'In Progress'), + ('pending', 'Pending'), + ('cancelled', 'Cancelled'), + ('done', 'Done')], + 'State', readonly=True), } _order = 'name desc, project_id' @@ -46,70 +55,30 @@ class report_project_task_user(osv.osv): create or replace view report_project_task_user as ( select min(t.id) as id, - to_char(date_end, 'YYYY') as name, - to_char(date_end, 'MM') as month, - count(distinct t.id) as task_closed, + to_char(date_start, 'YYYY') as name, + to_char(date_start, 'MM') as month, + count(distinct t.id) as nbr, + date_trunc('day',t.date_start) as date_start, + date_trunc('day',t.date_end) as date_end, + date_trunc('day',t.date_deadline) as date_deadline, t.user_id, t.project_id, + t.state, sum(planned_hours) as hours_planned, to_char(avg(date_end::abstime-t.create_date::timestamp), 'DD"d" HH24:MI:SS') as closing_days, sum(w.hours) as hours_effective, ((sum(planned_hours)-sum(w.hours))/count(distinct t.id))::decimal(16,2) as hours_delay from project_task t left join project_task_work w on (t.id=w.task_id) - where - t.state='done' group by - to_char(date_end, 'YYYY'),to_char(date_end, 'MM'),t.user_id,project_id + to_char(date_start, 'YYYY'), + to_char(date_start, 'MM'), + t.user_id,t.state,t.date_end, + t.date_deadline,t.date_start, + t.project_id ) """) report_project_task_user() - -class report_project_task(osv.osv): - _name = "report.project.task" - _description = "Tasks by project" - _auto = False - _columns = { - 'name': fields.char('Year',size=64,required=False, readonly=True), - 'project_id':fields.many2one('project.project', 'Project', readonly=True), - 'hours_planned': fields.float('Planned Hours', readonly=True), - 'hours_effective': fields.float('Effective Hours', readonly=True), - 'hours_delay': fields.float('Avg. Plan.-Eff.', readonly=True), - 'closing_days': fields.char('Avg Closing Delay', size=64, readonly=True), - 'task_closed': fields.integer('Task Closed', 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), - - } - _order = 'name desc, project_id' - def init(self, cr): - tools.sql.drop_view_if_exists(cr, 'report_project_task') - cr.execute(""" - create or replace view report_project_task as ( - select - min(t.id) as id, - to_char(date_end, 'YYYY') as name, - to_char(date_end, 'MM') as month, - count(distinct t.id) as task_closed, - t.project_id, - sum(planned_hours) as hours_planned, - to_char(avg(date_end::abstime-t.create_date::timestamp), 'DD"d" HH12:MI:SS') as closing_days, - sum(w.hours) as hours_effective, - ((sum(planned_hours)-sum(w.hours))/count(distinct t.id))::decimal(16,2) as hours_delay - from project_task t - left join project_task_work w on (t.id=w.task_id) - where - t.state='done' - group by - to_char(date_end, 'YYYY'),to_char(date_end, 'MM'),project_id - ) - """) -report_project_task() - - - - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml new file mode 100644 index 00000000000..345b4aee2d7 --- /dev/null +++ b/addons/project/report/project_report_view.xml @@ -0,0 +1,93 @@ + + + + + + + report.project.task.user.tree + report.project.task.user + tree + + + + + + + + + + + + + + + + + + + + + report.project.task.user.search + report.project.task.user + search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tasks + report.project.task.user + form + tree + + + + + + diff --git a/addons/project_timesheet/report/task_report.py b/addons/project_timesheet/report/task_report.py index 3b2468ccd7f..7efe1f12746 100644 --- a/addons/project_timesheet/report/task_report.py +++ b/addons/project_timesheet/report/task_report.py @@ -23,67 +23,67 @@ from osv import fields,osv import mx.DateTime import tools -class task_report(osv.osv): - _name = "task.report" - _description = "Project task report" - _auto = False - _columns = { - 'name': fields.char('Task',size=64,required=False, 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), - 'user_id':fields.many2one('res.users', 'User', readonly=True), - 'task_nbr': fields.float('Task Number', readonly=True), - 'task_hrs': fields.float('Task Hours', readonly=True), - 'task_progress': fields.float('Task Progress', readonly=True), - 'company_id' : fields.many2one('res.company', 'Company'), - 'task_state': fields.selection([('draft', 'Draft'),('open', 'Open'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done'),('no','No Task')], 'Status', readonly=True), - 'project_id':fields.many2one('project.project', 'Project'), - 'year': fields.char('Year',size=64,required=False, readonly=True), - 'date_start': fields.datetime('Starting Date',readonly=True), - 'date_end': fields.datetime('Ending Date',readonly=True), - 'date_deadline': fields.date('Deadline',readonly=True), - 'type': fields.many2one('project.task.type', 'Stage'), - 'priority' : fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Importance'), - 'assign_to': fields.many2one('res.users', 'Assigned to', readonly=True), - 'remaining_hrs': fields.float('Remaining Hours', readonly=True), - } - - def init(self, cr): - tools.sql.drop_view_if_exists(cr, 'task_report') - cr.execute(''' - create or replace view task_report as ( - select - min(t.id) as id, - to_char(t.create_date, 'YYYY') as year, - to_char(t.create_date,'MM') as month, - u.id as user_id, - u.company_id as company_id, - t.name as name, - t.project_id as project_id, - to_char(t.date_start,'YYYY/mm/dd') as date_start, - to_char(t.date_end,'YYYY/mm/dd') as date_end, - to_char(t.date_deadline,'YYYY/mm/dd') as date_deadline, - t.type as type, - t.priority as priority, - t.user_id as assign_to, - t.remaining_hours as remaining_hrs, - count(t.*) as task_nbr, - sum(t.planned_hours) as task_hrs, - sum(t.planned_hours * (100 - t.progress) / 100) as task_progress, - case when t.state is null then 'no' else t.state end as task_state - from - res_users u - left join - project_task t on (u.id = t.user_id) - where - u.active - group by - to_char(t.create_date, 'YYYY'),to_char(t.create_date,'MM'),u.id, u.company_id, t.state - ,t.name,t.project_id,t.type,t.priority, - t.user_id,t.remaining_hours,to_char(t.date_start,'YYYY/mm/dd'),to_char(t.date_end,'YYYY/mm/dd'),to_char(t.date_deadline,'YYYY/mm/dd') - ) - ''') -task_report() +#class task_report(osv.osv): +# _name = "task.report" +# _description = "Project task report" +# _auto = False +# _columns = { +# 'name': fields.char('Task',size=64,required=False, 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), +# 'user_id':fields.many2one('res.users', 'User', readonly=True), +# 'task_nbr': fields.float('Task Number', readonly=True), +# 'task_hrs': fields.float('Task Hours', readonly=True), +# 'task_progress': fields.float('Task Progress', readonly=True), +# 'company_id' : fields.many2one('res.company', 'Company'), +# 'task_state': fields.selection([('draft', 'Draft'),('open', 'Open'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done'),('no','No Task')], 'Status', readonly=True), +# 'project_id':fields.many2one('project.project', 'Project'), +# 'year': fields.char('Year',size=64,required=False, readonly=True), +# 'date_start': fields.datetime('Starting Date',readonly=True), +# 'date_end': fields.datetime('Ending Date',readonly=True), +# 'date_deadline': fields.date('Deadline',readonly=True), +# 'type': fields.many2one('project.task.type', 'Stage'), +# 'priority' : fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Importance'), +# 'assign_to': fields.many2one('res.users', 'Assigned to', readonly=True), +# 'remaining_hrs': fields.float('Remaining Hours', readonly=True), +# } +# +# def init(self, cr): +# tools.sql.drop_view_if_exists(cr, 'task_report') +# cr.execute(''' +# create or replace view task_report as ( +# select +# min(t.id) as id, +# to_char(t.create_date, 'YYYY') as year, +# to_char(t.create_date,'MM') as month, +# u.id as user_id, +# u.company_id as company_id, +# t.name as name, +# t.project_id as project_id, +# to_char(t.date_start,'YYYY/mm/dd') as date_start, +# to_char(t.date_end,'YYYY/mm/dd') as date_end, +# to_char(t.date_deadline,'YYYY/mm/dd') as date_deadline, +# t.type as type, +# t.priority as priority, +# t.user_id as assign_to, +# t.remaining_hours as remaining_hrs, +# count(t.*) as task_nbr, +# sum(t.planned_hours) as task_hrs, +# sum(t.planned_hours * (100 - t.progress) / 100) as task_progress, +# case when t.state is null then 'no' else t.state end as task_state +# from +# res_users u +# left join +# project_task t on (u.id = t.user_id) +# where +# u.active +# group by +# to_char(t.create_date, 'YYYY'),to_char(t.create_date,'MM'),u.id, u.company_id, t.state +# ,t.name,t.project_id,t.type,t.priority, +# t.user_id,t.remaining_hours,to_char(t.date_start,'YYYY/mm/dd'),to_char(t.date_end,'YYYY/mm/dd'),to_char(t.date_deadline,'YYYY/mm/dd') +# ) +# ''') +#task_report() class report_timesheet_task_user(osv.osv): _name = "report.timesheet.task.user" diff --git a/addons/project_timesheet/report/task_report_view.xml b/addons/project_timesheet/report/task_report_view.xml index 732c656c92e..c5407d01a8a 100644 --- a/addons/project_timesheet/report/task_report_view.xml +++ b/addons/project_timesheet/report/task_report_view.xml @@ -7,7 +7,7 @@ parent="hr.menu_hr_root" sequence="40" /> - + diff --git a/addons/report_project/report_project_view.xml b/addons/report_project/report_project_view.xml deleted file mode 100644 index 58338959f2c..00000000000 --- a/addons/report_project/report_project_view.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - report.project.task.user.form - report.project.task.user - form - -
- - - - - - - - - - - -
- - - - report.project.task.user.tree - report.project.task.user - tree - - - - - - - - - - - - - - - - - report.project.task.user.search - report.project.task.user - search - - - - - - - - - - - - - - - - - Tasks Closed by Project and User - report.project.task.user - form - tree - - - - - - - - report.project.task.form - report.project.task - form - -
- - - - - - - - - - -
- - report.project.task.tree - report.project.task - tree - - - - - - - - - - - - - - - - report.project.task.search - report.project.task - search - - - - - - - - - - - - - - - - - Tasks Closed by Project - report.project.task - form - tree - - - - -
-