|
[ Index ]
|
Source Code Reference for V1.00
|
[Summary view]
[Print]
[Text view]
1 <?php
2 if (!defined('W2P_BASE_DIR')) {
3 die('You should not access this file directly.');
4 }
5 global $AppUI, $cal_sdf;
6 $AppUI->loadCalendarJS();
7
8 $do_report = w2PgetParam($_POST, 'do_report', 0);
9 $log_start_date = w2PgetParam($_POST, 'log_start_date', 0);
10 $log_end_date = w2PgetParam($_POST, 'log_end_date', 0);
11 $log_all = w2PgetParam($_POST['log_all'], 0);
12 $use_period = w2PgetParam($_POST, 'use_period', 0);
13 $display_week_hours = w2PgetParam($_POST, 'display_week_hours', 0);
14 $max_levels = w2PgetParam($_POST, 'max_levels', 'max');
15 $log_userfilter = w2PgetParam($_POST, 'log_userfilter', '');
16 $log_open = w2PgetParam($_POST, 'log_open', 0);
17 $pdf_output = w2PgetParam($_POST, 'pdf_output', 0);
18
19 $table_header = '';
20 $table_rows = '';
21
22
23 $start_date = intval($log_start_date) ? new CDate($log_start_date) : new CDate();
24 $end_date = intval($log_end_date) ? new CDate($log_end_date) : new CDate();
25
26 if (!$log_start_date) {
27 $start_date->subtractSpan(new Date_Span('14,0,0,0'));
28 }
29 $end_date->setTime(23, 59, 59);
30 ?>
31
32 <script language="javascript">
33 function setDate( frm_name, f_date ) {
34 fld_date = eval( 'document.' + frm_name + '.' + f_date );
35 fld_real_date = eval( 'document.' + frm_name + '.' + 'log_' + f_date );
36 if (fld_date.value.length>0) {
37 if ((parseDate(fld_date.value))==null) {
38 alert('The Date/Time you typed does not match your prefered format, please retype.');
39 fld_real_date.value = '';
40 fld_date.style.backgroundColor = 'red';
41 } else {
42 fld_real_date.value = formatDate(parseDate(fld_date.value), 'yyyyMMdd');
43 fld_date.value = formatDate(parseDate(fld_date.value), '<?php echo $cal_sdf ?>');
44 fld_date.style.backgroundColor = '';
45 }
46 } else {
47 fld_real_date.value = '';
48 }
49 }
50 </script>
51
52 <?php
53 if (function_exists('styleRenderBoxTop')) {
54 echo styleRenderBoxTop();
55 }
56 ?>
57 <form name="editFrm" action="index.php?m=reports" method="post">
58 <input type="hidden" name="project_id" value="<?php echo $project_id; ?>" />
59 <input type="hidden" name="report_type" value="<?php echo $report_type; ?>" />
60 <table cellspacing="0" cellpadding="4" border="0" width="100%" class="std">
61 <tr>
62 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('For period'); ?>:</td>
63 <td nowrap="nowrap">
64 <input type="hidden" name="log_start_date" id="log_start_date" value="<?php echo $start_date ? $start_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
65 <input type="text" name="start_date" id="start_date" onchange="setDate('editFrm', 'start_date');" value="<?php echo $start_date ? $start_date->format($df) : ''; ?>" class="text" />
66 <a href="javascript: void(0);" onclick="return showCalendar('start_date', '<?php echo $df ?>', 'editFrm', null, true)">
67 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
68 </a>
69 </td>
70 <td nowrap="nowrap">
71 <select name="log_userfilter" class="text" style="width: 200px">
72
73 <?php
74 if ($log_userfilter == 0)
75 echo '<option value="0" selected="selected">' . $AppUI->_('All users');
76 else
77 echo '<option value="0">All users';
78
79 if (($log_userfilter_users = w2PgetUsersList())) {
80 foreach ($log_userfilter_users as $row) {
81 $selected = '';
82 if ($log_userfilter == $row['user_id']) {
83 $selected = ' selected="selected"';
84 }
85 echo '<option value="' . $row['user_id'] . '"' . $selected . '>' . $row['contact_first_name'] . ' ' . $row['contact_last_name'];
86 }
87 }
88
89 ?>
90
91 </select>
92
93 </td>
94
95 <td nowrap="nowrap" rowspan="2">
96 <table>
97 <tr><td>
98 <input type="checkbox" name="use_period" id="use_period" <?php if ($use_period)
99 echo 'checked="checked"' ?> />
100 <label for="use_period"><?php echo $AppUI->_('Use the period'); ?></label>
101 </td></tr>
102 <tr><td>
103 <input type="checkbox" name="display_week_hours" id="display_week_hours" <?php if ($display_week_hours)
104 echo 'checked="checked"' ?> />
105 <label for="display_week_hours"><?php echo $AppUI->_('Display allocated hours/week'); ?></label>
106 </td></tr>
107 </table>
108 </td>
109
110 <td align="right" width="50%" nowrap="nowrap">
111 <input class="button" type="submit" name="do_report" value="<?php echo $AppUI->_('submit'); ?>" />
112 </td>
113 </tr>
114 <tr>
115 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('to:'); ?></td>
116 <td>
117 <input type="hidden" name="log_end_date" id="log_end_date" value="<?php echo $end_date ? $end_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
118 <input type="text" name="end_date" id="end_date" onchange="setDate('editFrm', 'end_date');" value="<?php echo $end_date ? $end_date->format($df) : ''; ?>" class="text" />
119 <a href="javascript: void(0);" onclick="return showCalendar('end_date', '<?php echo $df ?>', 'editFrm', null, true)">
120 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
121 </a>
122 </td>
123 <td>
124 <?php echo $AppUI->_('Levels to display'); ?>
125 <input type="text" name="max_levels" size="10" maxlength="3" <?php $max_levels ?> />
126 </td>
127
128 </tr>
129
130 </table>
131 </form>
132 <?php
133 if ($do_report) {
134
135 if (function_exists('styleRenderBoxBottom')) {
136 echo styleRenderBoxBottom();
137 }
138 echo '<br />';
139 if (function_exists('styleRenderBoxTop')) {
140 echo styleRenderBoxTop();
141 }
142 echo '<table cellspacing="0" cellpadding="4" border="0" width="100%" class="std">
143 <tr>
144 <td align="center">';
145
146
147
148 $user_list = w2PgetUsersHashList();
149 if ($log_userfilter != 0) {
150 $user_list = array($log_userfilter => $user_list[$log_userfilter]);
151 }
152
153 $ss = "'" . $start_date->format(FMT_DATETIME_MYSQL) . "'";
154 $se = "'" . $end_date->format(FMT_DATETIME_MYSQL) . "'";
155
156 $and = false;
157 $where = false;
158
159 $q = new DBQuery;
160 $q->addTable('tasks', 't');
161 $q->addQuery('t.*');
162 $q->addJoin('projects', '', 'projects.project_id = task_project', 'inner');
163 $q->addJoin('project_departments', '', 'project_departments.project_id = projects.project_id');
164 $q->addJoin('departments', '', 'department_id = dept_id');
165 $q->addWhere('project_active = 1');
166 if (($template_status = w2PgetConfig('template_projects_status_id')) != '') {
167 $q->addWhere('project_status <> ' . (int)$template_status);
168 }
169
170 if ($use_period) {
171 $q->addWhere('( (task_start_date >= ' . $ss . ' AND task_start_date <= ' . $se . ') OR ' . '(task_end_date <= ' . $se . ' AND task_end_date >= ' . $ss . ') )');
172 }
173
174 if ($project_id != 0) {
175 $q->addWhere('task_project=' . $project_id);
176 }
177
178 $proj = &new CProject;
179 $obj = &new CTask;
180 $allowedProjects = $proj->getAllowedSQL($AppUI->user_id, 'task_project');
181 $allowedTasks = $obj->getAllowedSQL($AppUI->user_id);
182
183 if (count($allowedProjects)) {
184 $q->addWhere(implode(' AND ', $allowedProjects));
185 }
186
187 if (count($allowedTasks)) {
188 $q->addWhere(implode(' AND ', $allowedTasks));
189 }
190
191 $q->addOrder('task_end_date');
192
193 $task_list_hash = $q->loadHashList('task_id');
194 $q->clear();
195 $task_list = array();
196 $task_assigned_users = array();
197 $i = 0;
198 foreach ($task_list_hash as $task_id => $task_data) {
199 $task = new CTask();
200 $task->bind($task_data);
201 $task_list[$i] = $task;
202 $task_assigned_users[$i] = $task->getAssignedUsers();
203 $i += 1;
204 }
205 $Ntasks = $i;
206
207
208
209
210
211 $user_usage = array();
212 $task_dates = array();
213
214 $actual_date = $start_date;
215 $days_header = "";
216
217 if (strtolower($max_levels) == 'max') {
218 $max_levels = -1;
219 } elseif ($max_levels == '') {
220 $max_levels = -1;
221 } else {
222 $max_levels = atoi($max_levels);
223 }
224 if ($max_levels == 0) {
225 $max_levels = 1;
226 }
227 if ($max_levels < 0) {
228 $max_levels = -1;
229 }
230
231 if (count($task_list) == 0) {
232 echo '<p>' . $AppUI->_('No data available') . '</p>';
233 } else {
234
235 $sss = $ss;
236 $sse = $se;
237 if (!$use_period) {
238 $sss = -1;
239 $sse = -1;
240 }
241 if ($display_week_hours and !$use_period) {
242 foreach ($task_list as $t) {
243 if ($sss == -1) {
244 $sss = $t->task_start_date;
245 $sse = $t->task_end_date;
246 } else {
247 if ($t->task_start_date < $sss) {
248 $sss = $t->task_start_date;
249 }
250 if ($t->task_end_date > $sse) {
251 $sse = $t->task_end_date;
252 }
253 }
254 }
255 }
256
257 $table_header = '
258 <tr>
259 <td nowrap="nowrap" bgcolor="#A0A0A0">
260 <font color="black"><b>' . $AppUI->_('Task') . '</b></font> </td>' . ($project_id == 0 ? '<td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('Project') . '</b></font></td>' : '') . '
261 <td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('Start Date') . '</b></font></td>
262 <td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('End Date') . '</b></font></td>' . weekDates($display_week_hours, $sss, $sse) . '
263 </tr>';
264 $table_rows = '';
265
266 foreach ($user_list as $user_id => $user_data) {
267
268 $tmpuser = "<tr><td align='left' nowrap='nowrap' bgcolor='#D0D0D0'><font color='black'><B>" . $user_data["contact_first_name"] . ' ' . $user_data['contact_last_name'] . '</b></font></td>';
269 for ($w = 0, $w_cmp = (1 + ($project_id == 0 ? 1 : 0) + weekCells($display_week_hours, $sss, $sse)); $w <= $w_cmp; $w++) {
270 $tmpuser .= '<td bgcolor="#D0D0D0"> </td>';
271 }
272 $tmpuser .= '</tr>';
273
274 $tmptasks = '';
275 $actual_date = $start_date;
276 foreach ($task_list as $task) {
277 if (!isChildTask($task)) {
278 if (isMemberOfTask($task_list, $task_assigned_users, $Ntasks, $user_id, $task)) {
279 $tmptasks .= displayTask($task_list, $task, 0, $display_week_hours, $sss, $sse, !$project_id);
280
281 $tmptasks .= doChildren($task_list, $task_assigned_users, $Ntasks, $task->task_id, $user_id, 1, $max_levels, $display_week_hours, $sss, $sse, !$project_id);
282 }
283 }
284 }
285 if ($tmptasks != '') {
286 $table_rows .= $tmpuser;
287 $table_rows .= $tmptasks;
288 }
289 }
290 }
291 echo '
292 <table class="std">
293 ' . $table_header . $table_rows . '
294 </table>
295 ';
296 echo '</td>
297 </tr>
298 </table>';
299 }
300
301 function doChildren($list, $Lusers, $N, $id, $uid, $level, $maxlevels, $display_week_hours, $ss, $se, $log_all_projects = false) {
302 $tmp = "";
303 if ($maxlevels == -1 || $level < $maxlevels) {
304 for ($c = 0; $c < $N; $c++) {
305 $task = $list[$c];
306 if (($task->task_parent == $id) and isChildTask($task)) {
307
308 if (isMemberOfTask($list, $Lusers, $N, $uid, $task)) {
309 $tmp .= displayTask($list, $task, $level, $display_week_hours, $ss, $se, $log_all_projects);
310 $tmp .= doChildren($list, $Lusers, $N, $task->task_id, $uid, $level + 1, $maxlevels, $display_week_hours, $ss, $se, $log_all_projects);
311 }
312 }
313 }
314 }
315 return $tmp;
316 }
317
318 function isMemberOfTask($list, $Lusers, $N, $user_id, $task) {
319
320 for ($i = 0; $i < $N && $list[$i]->task_id != $task->task_id; $i++)
321 ;
322 $users = $Lusers[$i];
323
324
325 foreach ($users as $task_user_id => $user_data) {
326 if ($task_user_id == $user_id) {
327 return true;
328 }
329 }
330
331
332
333 for ($c = 0; $c < $N; $c++) {
334 $ntask = $list[$c];
335 if (($ntask->task_parent == $task->task_id) and isChildTask($ntask)) {
336
337 if (isMemberOfTask($list, $Lusers, $N, $user_id, $ntask)) {
338 return true;
339 }
340 }
341 }
342 return false;
343 }
344
345 function displayTask($list, $task, $level, $display_week_hours, $fromPeriod, $toPeriod, $log_all_projects = false) {
346 $tmp = '';
347 $tmp .= '<tr><td align="left" nowrap="nowrap">   ';
348 for ($i = 0; $i < $level; $i++) {
349 $tmp .= '   ';
350 }
351 if ($level == 0) {
352 $tmp .= '<b>';
353 } elseif ($level == 1) {
354 $tmp .= '<i>';
355 }
356 $tmp .= $task->task_name;
357 if ($level == 0) {
358 $tmp .= '</b>';
359 } elseif ($level == 1) {
360 $tmp .= '</i>';
361 }
362 $tmp .= '   </td>';
363 if ($log_all_projects) {
364
365 $project = $task->getProject();
366 $tmp .= '<td nowrap="nowrap">';
367 if (!isChildTask($task)) {
368
369 $tmp .= $project['project_name'];
370 }
371 $tmp .= '</td>';
372 }
373 $tmp .= '<td nowrap="nowrap">';
374 $dt = new CDate($task->task_start_date);
375 $tmp .= $dt->format('%d-%m-%Y');
376 $tmp .= '   </td>';
377 $tmp .= '<td nowrap="nowrap">';
378 $dt = new CDate($task->task_end_date);
379 $tmp .= $dt->format('%d-%m-%Y');
380 $tmp .= '</td>';
381 if ($display_week_hours) {
382 $tmp .= displayWeeks($list, $task, $level, $fromPeriod, $toPeriod);
383 }
384 $tmp .= "</tr>\n";
385 return $tmp;
386 }
387
388 function isChildTask($task) {
389 return $task->task_id != $task->task_parent;
390 }
391
392 function atoi($a) {
393 return $a + 0;
394 }
395
396 function weekDates($display_allocated_hours, $fromPeriod, $toPeriod) {
397 if ($fromPeriod == -1) {
398 return '';
399 }
400 if (!$display_allocated_hours) {
401 return '';
402 }
403
404 $s = new CDate($fromPeriod);
405 $e = new CDate($toPeriod);
406 $sw = getBeginWeek($s);
407 $ew = getEndWeek($e);
408
409 $row = '';
410 for ($i = $sw;