3 * FusionForge Project Management Facility : Tasks
5 * Copyright 1999-2000 (c) Tim Perdue - Sourceforge
6 * Copyright 2002 (c) GForge LLC
7 * Copyright 2010 (c) FusionForge Team
8 * http://fusionforge.org
10 * This file is part of FusionForge. FusionForge is free software;
11 * you can redistribute it and/or modify it under the terms of the
12 * GNU General Public License as published by the Free Software
13 * Foundation; either version 2 of the Licence, or (at your option)
16 * FusionForge is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 require_once('../../env.inc.php');
27 require_once $gfcommon.'include/pre.php';
28 require_once $gfwww.'pm/include/ProjectGroupHTML.class.php';
29 require_once $gfcommon.'pm/ProjectGroupFactory.class.php';
30 require_once $gfcommon.'pm/ProjectCategory.class.php';
31 require_once $gfwww.'project/stats/project_stats_utils.php';
32 require_once $gfwww.'include/tool_reports.php';
33 require_once $gfwww.'include/HTML_Graphs.php';
36 if (!session_loggedin()) {
40 $group_id = getIntFromRequest('group_id');
46 $g = group_get_object($group_id);
47 if (!$g || !is_object($g)) {
49 } elseif ($g->isError()) {
50 exit_error($g->getErrorMessage(),'pm');
53 session_require_perm ('pm_admin', $group_id) ;
55 $page_title=_('Task Reporting System');
56 $bar_colors=array("pink","violet");
58 function pm_reporting_header($group_id) {
59 reports_header($group_id,
60 array('aging','tech','subproject'),
61 array(_('Aging Report'),
62 _('Report by Assignee'),
63 _('Report by Subproject')));
66 function pm_quick_report($group_id,$title,$subtitle1,$qpa1,$subtitle2,$qpa2,$comment="") {
69 pm_header(array ("title"=>$title));
70 pm_reporting_header($group_id);
72 reports_quick_graph($subtitle1,$qpa1,$qpa2,$bar_colors);
74 if ($comment) echo $comment;
80 $what = getStringFromRequest('what');
82 $period = getStringFromRequest('period');
83 $span = getStringFromRequest('span');
89 $period_threshold = time() - period2seconds($period, $span) ;
92 $start = getIntFromRequest('start');
93 $end = getIntFromRequest('end');
95 pm_header(array ("title"=>_('Aging Report')));
96 pm_reporting_header($group_id);
99 // echo $time_now."<p>";
101 if (!$period || $period=="lifespan") {
109 $sub_duration=period2seconds($period,1);
110 // echo $sub_duration,"<br />";
112 for ($counter=1; $counter<=$span; $counter++) {
114 $start=($time_now-($counter*$sub_duration));
115 $end=($time_now-(($counter-1)*$sub_duration));
119 $result = db_query_params ('SELECT avg((end_date-start_date)/(24*60*60))
120 FROM project_task,project_group_list
122 AND (start_date >= $1 AND start_date <= $2)
123 AND project_task.status_id=2
124 AND project_group_list.group_project_id=project_task.group_project_id
125 AND project_group_list.group_id=$3 ',
130 $names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
131 $values[$counter-1]=((int)(db_result($result, 0,0)*1000))/1000;
134 GraphIt($names, $values, _('Average duration for closed tasks (days)'));
138 for ($counter=1; $counter<=$span; $counter++) {
140 $start=($time_now-($counter*$sub_duration));
141 $end=($time_now-(($counter-1)*$sub_duration));
143 $result = db_query_params ('SELECT count(*)
144 FROM project_task,project_group_list
145 WHERE start_date >= $1
147 AND project_group_list.group_project_id=project_task.group_project_id
148 AND project_group_list.group_id=$3 ',
153 $names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
154 $values[$counter-1]=db_result($result, 0,0);
157 GraphIt($names, $values, _('Number of started tasks'));
161 for ($counter=1; $counter<=$span; $counter++) {
163 $start=($time_now-($counter*$sub_duration));
164 $end=($time_now-(($counter-1)*$sub_duration));
168 $result = db_query_params ('SELECT count(*)
169 FROM project_task,project_group_list
170 WHERE start_date <= $1
171 AND (end_date >= $2 OR end_date < 1 OR end_date is null)
172 AND project_group_list.group_project_id=project_task.group_project_id
173 AND project_group_list.group_id=$3 ',
178 $names[$counter-1]=date("Y-m-d",($end));
179 $values[$counter-1]=db_result($result, 0,0);
182 GraphIt($names, $values, _('Number of tasks still not completed'));
188 } else if ($what=="subproject") {
189 $qpa1 = db_construct_qpa (false,
190 'SELECT project_group_list.project_name AS Subproject, count(*) AS Count
191 FROM project_group_list,project_task
192 WHERE project_group_list.group_project_id=project_task.group_project_id
193 AND project_task.status_id = 1
194 AND project_group_list.group_id=$1
196 GROUP BY Subproject',
198 $period_threshold)) ;
199 $qpa2 = db_construct_qpa ('SELECT project_group_list.project_name AS Subproject, count(*) AS Count
200 FROM project_group_list,project_task
201 WHERE project_group_list.group_project_id=project_task.group_project_id
202 AND project_task.status_id <> 3
203 AND project_group_list.group_id=$1
205 GROUP BY Subproject',
207 $period_threshold)) ;
209 pm_quick_report($group_id,
210 _('Tasks By Category'),
211 _('Open Tasks By Category'), $qpa1,
212 _('All Tasks By Category'), $qpa2);
214 } else if ($what=="tech") {
215 $qpa1 = db_construct_qpa ('SELECT users.user_name AS Technician, count(*) AS Count
216 FROM users,project_group_list,project_task,project_assigned_to
217 WHERE users.user_id=project_assigned_to.assigned_to_id
218 AND project_assigned_to.project_task_id=project_task.project_task_id
219 AND project_task.group_project_id=project_group_list.group_project_id
220 AND project_task.status_id = 1
221 AND project_group_list.group_id=$1
223 GROUP BY Technician',
225 $period_threshold)) ;
227 $qpa2 = db_construct_qpa ('SELECT users.user_name AS Technician, count(*) AS Count
228 FROM users,project_group_list,project_task,project_assigned_to
229 WHERE users.user_id=project_assigned_to.assigned_to_id
230 AND project_assigned_to.project_task_id=project_task.project_task_id
231 AND project_task.group_project_id=project_group_list.group_project_id
232 AND project_task.status_id <> 3
233 AND project_group_list.group_id=$1
235 GROUP BY Technician',
237 $period_threshold)) ;
239 pm_quick_report($group_id,
240 _('Tasks By Assignee'),
241 _('Open Tasks By Assignee'), $qpa1,
242 _('All Tasks By Assignee'), $qpa2,
243 _('<p>Note that same task can be assigned to several technicians. Such task will be counted for each of them.</p>'));
246 exit_missing_param('','','pm');
253 pm_header(array ("title"=>$page_title));
255 pm_reporting_header($group_id);
263 // c-file-style: "bsd"