3 * GForge Project Management Facility
5 * Copyright 2002 GForge, LLC
12 By Tim Perdue, Sourceforge, 11/99
13 Heavy rewrite by Tim Perdue April 2000
15 Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
18 require_once('../../env.inc.php');
19 require_once $gfwww.'include/pre.php';
20 require_once $gfwww.'pm/include/ProjectGroupHTML.class.php';
21 require_once $gfcommon.'pm/ProjectGroupFactory.class.php';
22 require_once $gfcommon.'pm/ProjectCategory.class.php';
23 require_once $gfwww.'project/stats/project_stats_utils.php';
24 require_once $gfwww.'include/tool_reports.php';
26 if (!session_loggedin()) {
30 $group_id = getIntFromRequest('group_id');
36 $g =& group_get_object($group_id);
37 if (!$g || !is_object($g)) {
39 } elseif ($g->isError()) {
40 exit_error('Error',$g->getErrorMessage());
43 $perm =& $g->getPermission( session_get_user() );
44 if (!$perm->isPMAdmin()) {
45 exit_permission_denied();
49 $page_title=_('Task Reporting System');
50 $bar_colors=array("pink","violet");
52 function pm_reporting_header($group_id) {
53 reports_header($group_id,
54 array('aging','tech','subproject'),
55 array(_('Aging Report'),
56 _('Report by Assignee'),
57 _('Report by Subproject')));
60 function pm_quick_report($group_id,$title,$subtitle1,$qpa1,$subtitle2,$qpa2,$comment="") {
63 pm_header(array ("title"=>$title));
64 pm_reporting_header($group_id);
65 echo "\n<h1>$title</h1>";
67 reports_quick_graph($subtitle1,$qpa1,$qpa2,$bar_colors);
69 if ($comment) echo $comment;
75 include_once $gfwww.'include/HTML_Graphs.php';
77 $what = getStringFromRequest('what');
79 $period = getStringFromRequest('period');
80 $span = getStringFromRequest('span');
86 $period_threshold = time() - period2seconds($period, $span) ;
89 $start = getIntFromRequest('start');
90 $end = getIntFromRequest('end');
92 pm_header(array ("title"=>_('Aging Report')));
93 pm_reporting_header($group_id);
94 echo "\n<h1>"._('Aging Report')."</h1>";
97 // echo $time_now."<p>";
99 if (!$period || $period=="lifespan") {
107 $sub_duration=period2seconds($period,1);
108 // echo $sub_duration,"<br />";
110 for ($counter=1; $counter<=$span; $counter++) {
112 $start=($time_now-($counter*$sub_duration));
113 $end=($time_now-(($counter-1)*$sub_duration));
117 $result = db_query_params ('SELECT avg((end_date-start_date)/(24*60*60))
118 FROM project_task,project_group_list
120 AND (start_date >= $1 AND start_date <= $2)
121 AND project_task.status_id=2
122 AND project_group_list.group_project_id=project_task.group_project_id
123 AND project_group_list.group_id=$3 ',
128 $names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
129 $values[$counter-1]=((int)(db_result($result, 0,0)*1000))/1000;
132 GraphIt($names, $values, _('Average duration for closed tasks (days)'));
136 for ($counter=1; $counter<=$span; $counter++) {
138 $start=($time_now-($counter*$sub_duration));
139 $end=($time_now-(($counter-1)*$sub_duration));
141 $result = db_query_params ('SELECT count(*)
142 FROM project_task,project_group_list
143 WHERE start_date >= $1
145 AND project_group_list.group_project_id=project_task.group_project_id
146 AND project_group_list.group_id=$3 ',
151 $names[$counter-1]=date("Y-m-d",($start))." to ".date("Y-m-d",($end));
152 $values[$counter-1]=db_result($result, 0,0);
155 GraphIt($names, $values, _('Number of started tasks'));
159 for ($counter=1; $counter<=$span; $counter++) {
161 $start=($time_now-($counter*$sub_duration));
162 $end=($time_now-(($counter-1)*$sub_duration));
166 $result = db_query_params ('SELECT count(*)
167 FROM project_task,project_group_list
168 WHERE start_date <= $1
169 AND (end_date >= $2 OR end_date < 1 OR end_date is null)
170 AND project_group_list.group_project_id=project_task.group_project_id
171 AND project_group_list.group_id=$3 ',
176 $names[$counter-1]=date("Y-m-d",($end));
177 $values[$counter-1]=db_result($result, 0,0);
180 GraphIt($names, $values, _('Number of tasks still not completed'));
186 } else if ($what=="subproject") {
187 $qpa1 = db_construct_qpa (false,
188 'SELECT project_group_list.project_name AS Subproject, count(*) AS Count
189 FROM project_group_list,project_task
190 WHERE project_group_list.group_project_id=project_task.group_project_id
191 AND project_task.status_id = 1
192 AND project_group_list.group_id=$1
194 GROUP BY Subproject',
196 $period_threshold)) ;
197 $qpa2 = db_construct_qpa ('SELECT project_group_list.project_name AS Subproject, count(*) AS Count
198 FROM project_group_list,project_task
199 WHERE project_group_list.group_project_id=project_task.group_project_id
200 AND project_task.status_id <> 3
201 AND project_group_list.group_id=$1
203 GROUP BY Subproject',
205 $period_threshold)) ;
207 pm_quick_report($group_id,
208 _('Tasks By Category'),
209 _('Open Tasks By Category'), $qpa1,
210 _('All Tasks By Category'), $qpa2);
212 } else if ($what=="tech") {
213 $qpa1 = db_construct_qpa ('SELECT users.user_name AS Technician, count(*) AS Count
214 FROM users,project_group_list,project_task,project_assigned_to
215 WHERE users.user_id=project_assigned_to.assigned_to_id
216 AND project_assigned_to.project_task_id=project_task.project_task_id
217 AND project_task.group_project_id=project_group_list.group_project_id
218 AND project_task.status_id = 1
219 AND project_group_list.group_id=$1
221 GROUP BY Technician',
223 $period_threshold)) ;
225 $qpa2 = db_construct_qpa ('SELECT users.user_name AS Technician, count(*) AS Count
226 FROM users,project_group_list,project_task,project_assigned_to
227 WHERE users.user_id=project_assigned_to.assigned_to_id
228 AND project_assigned_to.project_task_id=project_task.project_task_id
229 AND project_task.group_project_id=project_group_list.group_project_id
230 AND project_task.status_id <> 3
231 AND project_group_list.group_id=$1
233 GROUP BY Technician',
235 $period_threshold)) ;
237 pm_quick_report($group_id,
238 _('Tasks By Assignee'),
239 _('Open Tasks By Assignee'), $qpa1,
240 _('All Tasks By Assignee'), $qpa2,
241 _('<p>Note that same task can be assigned to several technicians. Such task will be counted for each of them.</p>'));
244 exit_missing_param();
251 pm_header(array ("title"=>$page_title));
253 pm_reporting_header($group_id);
261 // c-file-style: "bsd"