![]() |
|---|
| [ Index ] |
Source Code Reference for V1.00 |
[Summary view] [Print] [Text view]
1 <?php /* $Id: tasklogs.php 137 2008-04-04 16:12:02Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/reports/reports/tasklogs.php $ */ 2 if (!defined('W2P_BASE_DIR')) { 3 die('You should not access this file directly.'); 4 } 5 6 /** 7 * Generates a report of the task logs for given dates 8 */ 9 //error_reporting( E_ALL ); 10 global $AppUI, $cal_sdf; 11 $AppUI->loadCalendarJS(); 12 13 $perms = &$AppUI->acl(); 14 if (!$perms->checkModule('task_log', 'view')) { 15 $AppUI->redirect('m=public&a=access_denied'); 16 } 17 $do_report = w2PgetParam($_GET, 'do_report', 0); 18 $log_all = w2PgetParam($_GET, 'log_all', 0); 19 $log_pdf = w2PgetParam($_GET, 'log_pdf', 0); 20 $log_ignore = w2PgetParam($_GET, 'log_ignore', 0); 21 $log_userfilter = w2PgetParam($_GET, 'log_userfilter', '0'); 22 23 $log_start_date = w2PgetParam($_GET, 'log_start_date', 0); 24 $log_end_date = w2PgetParam($_GET, 'log_end_date', 0); 25 26 // create Date objects from the datetime fields 27 $start_date = intval($log_start_date) ? new CDate($log_start_date) : new CDate(); 28 $end_date = intval($log_end_date) ? new CDate($log_end_date) : new CDate(); 29 30 if (!$log_start_date) { 31 $start_date->subtractSpan(new Date_Span('14,0,0,0')); 32 } 33 $end_date->setTime(23, 59, 59); 34 35 // Lets check cost codes 36 $q = new DBQuery; 37 $q->addTable('billingcode'); 38 $q->addQuery('billingcode_id, billingcode_name'); 39 40 $task_log_costcodes[0] = $AppUI->_('None'); 41 $rows = $q->loadList(); 42 echo db_error(); 43 $nums = 0; 44 if ($rows) { 45 $nums = count($rows); 46 } 47 foreach ($rows as $row) { 48 $task_log_costcodes[$row['billingcode_id']] = $row['billingcode_name']; 49 } 50 51 ?> 52 <script language="javascript"> 53 function setDate( frm_name, f_date ) { 54 fld_date = eval( 'document.' + frm_name + '.' + f_date ); 55 fld_real_date = eval( 'document.' + frm_name + '.' + 'log_' + f_date ); 56 if (fld_date.value.length>0) { 57 if ((parseDate(fld_date.value))==null) { 58 alert('The Date/Time you typed does not match your prefered format, please retype.'); 59 fld_real_date.value = ''; 60 fld_date.style.backgroundColor = 'red'; 61 } else { 62 fld_real_date.value = formatDate(parseDate(fld_date.value), 'yyyyMMdd'); 63 fld_date.value = formatDate(parseDate(fld_date.value), '<?php echo $cal_sdf ?>'); 64 fld_date.style.backgroundColor = ''; 65 } 66 } else { 67 fld_real_date.value = ''; 68 } 69 } 70 </script> 71 72 <form name="editFrm" action="" method="GET"> 73 <input type="hidden" name="m" value="reports" /> 74 <input type="hidden" name="company_id" value="<?php echo $company_id; ?>" /> 75 <input type="hidden" name="project_id" value="<?php echo $project_id; ?>" /> 76 <input type="hidden" name="report_type" value="<?php echo $report_type; ?>" /> 77 <?php 78 if (function_exists('styleRenderBoxTop')) { 79 echo styleRenderBoxTop(); 80 } 81 ?> 82 <table cellspacing="0" cellpadding="4" border="0" width="100%" class="std"> 83 <tr> 84 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('For period'); ?>:</td> 85 <td nowrap="nowrap"> 86 <input type="hidden" name="log_start_date" id="log_start_date" value="<?php echo $start_date ? $start_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" /> 87 <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" /> 88 <a href="javascript: void(0);" onclick="return showCalendar('start_date', '<?php echo $df ?>', 'editFrm', null, true)"> 89 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" /> 90 </a> 91 </td> 92 <td align="right" nowrap="nowrap"><?php echo $AppUI->_('to'); ?></td> 93 <td nowrap="nowrap"> 94 <input type="hidden" name="log_end_date" id="log_end_date" value="<?php echo $end_date ? $end_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" /> 95 <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" /> 96 <a href="javascript: void(0);" onclick="return showCalendar('end_date', '<?php echo $df ?>', 'editFrm', null, true)"> 97 <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" /> 98 </a> 99 </td> 100 101 <td nowrap="nowrap"> 102 <?php echo $AppUI->_('User'); ?>: 103 <select name="log_userfilter" class="text" style="width: 200px"> 104 105 <?php 106 if ($log_userfilter == 0) 107 echo '<option value="0" selected="selected">' . $AppUI->_('All users'); 108 else 109 echo '<option value="0">All users'; 110 111 if (($log_userfilter_users = w2PgetUsersList())) { 112 foreach ($log_userfilter_users as $row) { 113 $selected = ''; 114 if ($log_userfilter == $row['user_id']) { 115 $selected = ' selected="selected"'; 116 } 117 echo '<option value="' . $row['user_id'] . '"' . $selected . '>' . $row['contact_first_name'] . ' ' . $row['contact_last_name']; 118 } 119 } 120 121 ?> 122 123 </select> 124 </td> 125 126 <td nowrap="nowrap"> 127 <input type="checkbox" name="log_all" <?php if ($log_all) 128 echo "checked" ?> /> 129 <?php echo $AppUI->_('Log All'); ?> 130 </td> 131 132 <td nowrap="nowrap"> 133 <input type="checkbox" name="log_pdf" <?php if ($log_pdf) 134 echo "checked" ?> /> 135 <?php echo $AppUI->_('Make PDF'); ?> 136 </td> 137 138 <td nowrap="nowrap"> 139 <input type="checkbox" name="log_ignore" /> 140 <?php echo $AppUI->_('Ignore 0 hours'); ?> 141 </td> 142 143 <td align="right" width="50%" nowrap="nowrap"> 144 <input class="button" type="submit" name="do_report" value="<?php echo $AppUI->_('submit'); ?>" /> 145 </td> 146 </tr> 147 </table> 148 </form> 149 150 <?php 151 if ($do_report) { 152 153 if (function_exists('styleRenderBoxBottom')) { 154 echo styleRenderBoxBottom(); 155 } 156 echo '<br />'; 157 if (function_exists('styleRenderBoxTop')) { 158 echo styleRenderBoxTop(); 159 } 160 echo '<table cellspacing="0" cellpadding="4" border="0" width="100%" class="std"> 161 <tr> 162 <td>'; 163 164 $q = new DBQuery; 165 $q->addTable('task_log', 't'); 166 $q->addQuery('t.*, CONCAT_WS(\' \',contact_first_name,contact_last_name) AS creator, billingcode_value, ROUND((billingcode_value * t.task_log_hours), 2) AS amount, c.company_name, project_name, ts.task_name'); 167 168 $q->addJoin('tasks', 'ts', 'ts.task_id = t.task_log_task'); 169 $q->addJoin('projects', '', 'projects.project_id = ts.task_project'); 170 $q->addJoin('users', 'u', 'user_id = task_log_creator'); 171 $q->addJoin('contacts', '', 'user_contact = contact_id'); 172 $q->addJoin('companies', 'c', 'c.company_id = projects.project_company'); 173 $q->addJoin('billingcode', '', 'billingcode_id = task_log_costcode'); 174 175 $q->addJoin('project_departments', '', 'project_departments.project_id = projects.project_id'); 176 $q->addJoin('departments', '', 'department_id = dept_id'); 177 178 $q->addWhere('task_log_task > 0'); 179 180 if ($project_id) { 181 $q->addWhere('projects.project_id = ' . (int)$project_id); 182 } 183 if ($company_id) { 184 $q->addWhere('c.company_id = ' . (int)$company_id); 185 } 186 187 if (!$log_all) { 188 $q->addWhere('task_log_date >= \'' . $start_date->format(FMT_DATETIME_MYSQL) . '\''); 189 $q->addWhere('task_log_date <= \'' . $end_date->format(FMT_DATETIME_MYSQL) . '\''); 190 } 191 if ($log_ignore) { 192 $q->addWhere('task_log_hours > 0'); 193 } 194 if ($log_userfilter) { 195 $q->addWhere('task_log_creator = ' . (int)$log_userfilter); 196 } 197 198 $proj = &new CProject; 199 $allowedProjects = $proj->getAllowedSQL($AppUI->user_id, 'task_project'); 200 if (count($allowedProjects)) { 201 $q->addWhere(implode(' AND ', $allowedProjects)); 202 } 203 204 $q->addOrder('creator'); 205 $q->addOrder('company_name'); 206 $q->addOrder('project_name'); 207 $q->addOrder('task_log_date'); 208 209 $logs = $q->loadList(); 210 echo db_error(); 211 ?> 212 <table cellspacing="1" cellpadding="4" border="0" class="tbl"> 213 <tr> 214 <th><?php echo $AppUI->_('Creator'); ?></th> 215 <th><?php echo $AppUI->_('Company'); ?></th> 216 <th><?php echo $AppUI->_('Project'); ?></th> 217 <th><?php echo $AppUI->_('Task'); ?></th> 218 <th><?php echo $AppUI->_('Date'); ?></th> 219 <th><?php echo $AppUI->_('Description'); ?></th> 220 <th><?php echo $AppUI->_('Cost Code'); ?></th> 221 <th><?php echo $AppUI->_('Hours'); ?></th> 222 </tr> 223 <?php 224 $hours = 0.00; 225 $tamount = 0.00; 226 $pdfdata = array(); 227 228 foreach ($logs as $log) { 229 $date = new CDate($log['task_log_date']); 230 $hours += $log['task_log_hours']; 231 $tamount += $log['amount']; 232 233 $pdfdata[] = array($log['creator'], $log['company_name'], $log['project_name'], $log['task_name'], $date->format($df), $log['task_log_description'], $task_log_costcodes[$log['task_log_costcode']], sprintf("%.2f", $log['task_log_hours']), ); 234 ?> 235 <tr> 236 <td><?php echo $log['creator']; ?></td> 237 <td><?php echo $log['company_name']; ?></td> 238 <td><?php echo $log['project_name']; ?></td> 239 <td><?php echo $log['task_name']; ?></td> 240 <td><?php echo $date->format($df); ?></td> 241 <td><?php 242 // dylan_cuthbert: auto-transation system in-progress, leave these lines for time-being 243 $transbrk = "\n[translation]\n"; 244 $descrip = str_replace("\n", '<br />', $log['task_log_description']); 245 $tranpos = strpos($descrip, str_replace("\n", '<br />', $transbrk)); 246 if ($tranpos === false) 247 echo $descrip; 248 else { 249 $descrip = substr($descrip, 0, $tranpos); 250 $tranpos = strpos($log['task_log_description'], $transbrk); 251 $transla = substr($log['task_log_description'], $tranpos + strlen($transbrk)); 252 $transla = trim(str_replace("'", '"', $transla)); 253 echo $descrip . '<div style="font-weight: bold; text-align: right"><a title="' . $transla . '" class="hilite">[' . $AppUI->_('translation') . ']</a></div>'; 254 } 255 // dylan_cuthbert; auto-translation end 256 257 ?></td> 258 <td><?php echo $task_log_costcodes[$log['task_log_costcode']]; ?></td> 259 <td align="right"><?php printf('%.2f', $log['task_log_hours']); ?></td> 260 </tr> 261 <?php 262 } 263 $pdfdata[] = array('', '', '', '', '', '', $AppUI->_('Totals') . ':', sprintf('%.2f', $hours), ); 264 ?> 265 <tr> 266 <td align="right" colspan="7"><?php echo $AppUI->_('Report Totals'); ?>:</td> 267 <td align="right"><?php printf('%.2f', $hours); ?></td> 268 </tr> 269 </table> 270 <?php 271 if ($log_pdf) { 272 // make the PDF file 273 if ($project_id) { 274 $q = new DBQuery; 275 $q->addTable('projects'); 276 $q->addQuery('project_name'); 277 $q->addWhere('project_id=' . (int)$project_id); 278 $pname = 'Project: ' . $q->loadResult(); 279 } else { 280 $pname = 'All Companies and All Projects'; 281 } 282 echo db_error(); 283 284 if ($company_id) { 285 $q = new DBQuery; 286 $q->addTable('companies'); 287 $q->addQuery('company_name'); 288 $q->addWhere('company_id=' . (int)$company_id); 289 $cname = 'Company: ' . $q->loadResult(); 290 } else { 291 $cname = 'All Companies and All Projects'; 292 } 293 echo db_error(); 294 295 if ($log_userfilter) { 296 $q = new DBQuery; 297 $q->addTable('contacts'); 298 $q->addQuery('CONCAT(contact_first_name, \' \', contact_last_name)'); 299 $q->addJoin('users', '', 'user_contact = contact_id', 'inner'); 300 $q->addWhere('user_id =' . (int)$log_userfilter); 301 $uname = 'User: ' . $q->loadResult(); 302 } else { 303 $uname = 'All Users'; 304 } 305 306 $font_dir = w2PgetConfig('root_dir') . '/lib/ezpdf/fonts'; 307 $temp_dir = w2PgetConfig('root_dir') . '/files/temp'; 308 $base_url = w2PgetConfig('base_url'); 309 require ($AppUI->getLibraryClass('ezpdf/class.ezpdf')); 310 311 $pdf = &new Cezpdf(); 312 $pdf->ezSetCmMargins(1, 2, 1.5, 1.5); 313 $pdf->selectFont($font_dir . '/Helvetica.afm'); 314 315 $pdf->ezText(w2PgetConfig('company_name'), 12); 316 // $pdf->ezText( w2PgetConfig( 'company_name' ).' :: '.w2PgetConfig( 'page_title' ), 12 ); 317 318 $date = new CDate(); 319 $pdf->ezText("\n" . $date->format($df), 8); 320 321 $pdf->selectFont($font_dir . '/Helvetica-Bold.afm'); 322 $pdf->ezText("\n" . $AppUI->_('Task Log Report'), 12); 323 324 if ($company_id) { 325 $pdf->ezText($cname, 10); 326 } else { 327 $pdf->ezText($pname, 10); 328 } 329 330 $pdf->ezText($uname, 10); 331 332 if ($log_all) { 333 $pdf->ezText('All Task Log entries', 9); 334 } else { 335 $pdf->ezText('Task Log entries from ' . $start_date->format($df) . ' to ' . $end_date->format($df), 9); 336 } 337 $pdf->ezText("\n\n"); 338 339 $title = 'Task Logs'; 340 341 $pdfheaders = array($AppUI->_('Creator', UI_OUTPUT_JS), $AppUI->_('Company', UI_OUTPUT_JS), $AppUI->_('Project', UI_OUTPUT_JS), $AppUI->_('Task', UI_OUTPUT_JS), $AppUI->_('Date', UI_OUTPUT_JS), $AppUI->_('Description', UI_OUTPUT_JS), $AppUI->_('CCode', UI_OUTPUT_JS), $AppUI->_('Hours', UI_OUTPUT_JS), ); 342 343 $options = array('showLines' => 1, 'fontSize' => 7, 'rowGap' => 1, 'colGap' => 1, 'xPos' => 50, 'xOrientation' => 'right', 'width' => '500', 'cols' => array(0 => array('justification' => 'left', 'width' => 50), 1 => array('justification' => 'left', 'width' => 60), 2 => array('justification' => 'left', 'width' => 60), 3 => array('justification' => 'left', 'width' => 60), 4 => array('justification' => 'center', 'width' => 40), 5 => array('justification' => 'left', 'width' => 170), 6 => array('justification' => 'left', 'width' => 30), 7 => array('justification' => 'right', 'width' => 30), )); 344 345 $pdf->ezTable($pdfdata, $pdfheaders, $title, $options); 346 347 if ($fp = fopen($temp_dir . '/temp' . $AppUI->user_id . '.pdf', 'wb')) { 348 fwrite($fp, $pdf->ezOutput()); 349 fclose($fp); 350 echo "<a href=\"$base_url/files/temp/temp$AppUI->user_id.pdf\" target=\"pdf\">"; 351 echo $AppUI->_('View PDF File'); 352 echo '</a>'; 353 } else { 354 echo 'Could not open file to save PDF. '; 355 if (!is_writable($temp_dir)) { 356 'The files/temp directory is not writable. Check your file system permissions.'; 357 } 358 } 359 } 360 echo '</td> 361 </tr> 362 </table>'; 363 } 364 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Jan 8 03:00:03 2009 | Cross-referenced by PHPXref 0.7 |