![]() |
|---|
| [ Index ] |
Source Code Reference for V1.00 |
[Summary view] [Print] [Text view]
1 <?php /* $Id: printproject.php 137 2008-04-04 16:12:02Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/projectdesigner/printproject.php $ */ 2 if (!defined('W2P_BASE_DIR')) { 3 die('You should not access this file directly.'); 4 } 5 global $AppUI, $w2Pconfig; 6 // check permissions for this module 7 $perms = &$AppUI->acl(); 8 $canView = $perms->checkModule($m, 'view'); 9 $canAddProject = $perms->checkModuleItem('projects', 'view', $project_id); 10 11 if (!$canView) { 12 $AppUI->redirect('m=public&a=access_denied'); 13 } 14 $project_id = intval(w2PgetParam($_REQUEST, 'project_id', 0)); 15 $project = new CProject(); 16 $projects = $project->getAllowedRecords($AppUI->user_id, 'projects.project_id,project_name', 'project_name', null, $extra, 'projects'); 17 $q = new DBQuery; 18 $q->addTable('projects'); 19 $q->addQuery('projects.project_id, company_name'); 20 $q->addJoin('companies', 'co', 'co.company_id = project_company'); 21 $idx_companies = $q->loadHashList(); 22 $q->clear(); 23 foreach ($projects as $prj_id => $prj_name) { 24 $projects[$prj_id] = $idx_companies[$prj_id] . ': ' . $prj_name; 25 } 26 asort($projects); 27 $projects = arrayMerge(array('0' => $AppUI->_('(None)', UI_OUTPUT_RAW)), $projects); 28 29 $task = new CTask(); 30 $tasks = $task->getAllowedRecords($AppUI->user_id, 'task_id,task_name', 'task_name', null, $extra); 31 $tasks = arrayMerge(array('0' => $AppUI->_('(None)', UI_OUTPUT_RAW)), $tasks); 32 // check permissions for this record 33 $canReadProject = $perms->checkModuleItem('projects', 'view', $project_id); 34 $canEditProject = $perms->checkModuleItem('projects', 'edit', $project_id); 35 $canViewTasks = $perms->checkModule('tasks', 'view'); 36 $canAddTasks = $perms->checkModule('tasks', 'add'); 37 $canEditTasks = $perms->checkModule('tasks', 'edit'); 38 $canDeleteTasks = $perms->checkModule('tasks', 'delete'); 39 40 if (!$canReadProject) { 41 $AppUI->redirect('m=public&a=access_denied'); 42 } 43 44 // check if this record has dependencies to prevent deletion 45 $msg = ''; 46 $obj = new CProject(); 47 // Now check if the project is editable/viewable. 48 $denied = $obj->getDeniedRecords($AppUI->user_id); 49 if (in_array($project_id, $denied)) { 50 $AppUI->redirect('m=public&a=access_denied'); 51 } 52 53 $canDeleteProject = $obj->canDelete($msg, $project_id); 54 55 // get critical tasks (criteria: task_end_date) 56 $criticalTasks = ($project_id > 0) ? $obj->getCriticalTasks($project_id) : null; 57 58 // get ProjectPriority from sysvals 59 $projectPriority = w2PgetSysVal('ProjectPriority'); 60 $projectPriorityColor = w2PgetSysVal('ProjectPriorityColor'); 61 $pstatus = w2PgetSysVal('ProjectStatus'); 62 $ptype = w2PgetSysVal('ProjectType'); 63 64 $working_hours = ($w2Pconfig['daily_working_hours'] ? $w2Pconfig['daily_working_hours'] : 8); 65 66 $q = new DBQuery; 67 //check that project has tasks; otherwise run seperate query 68 $q->addTable('tasks'); 69 $q->addQuery('COUNT(distinct tasks.task_id) AS total_tasks'); 70 $q->addWhere('task_project = ' . (int)$project_id); 71 $hasTasks = $q->loadResult(); 72 $q->clear(); 73 74 // load the record data 75 // GJB: Note that we have to special case duration type 24 and this refers to the hours in a day, NOT 24 hours 76 $obj = null; 77 if ($hasTasks) { 78 $q->addTable('projects'); 79 $q->addQuery('company_name, CONCAT_WS(\' \',contact_first_name,contact_last_name) user_name, projects.*, SUM(t1.task_duration * t1.task_percent_complete * IF(t1.task_duration_type = 24, ' . $working_hours . ', t1.task_duration_type)) / SUM(t1.task_duration * IF(t1.task_duration_type = 24, ' . $working_hours . ', t1.task_duration_type)) AS project_percent_complete'); 80 $q->addJoin('companies', 'com', 'company_id = project_company'); 81 $q->addJoin('users', 'u', 'user_id = project_owner'); 82 $q->addJoin('contacts', 'con', 'contact_id = user_contact'); 83 $q->addJoin('tasks', 't1', 'projects.project_id = t1.task_project'); 84 $q->addWhere('projects.project_id = ' . (int)$project_id . ' AND t1.task_id = t1.task_parent'); 85 $q->addGroup('projects.project_id'); 86 $q->loadObject($obj); 87 } else { 88 $q->addTable('projects'); 89 $q->addQuery('company_name, CONCAT_WS(\' \',contact_first_name,contact_last_name) user_name, projects.*, (0.0) AS project_percent_complete'); 90 $q->addJoin('companies', 'com', 'company_id = project_company'); 91 $q->addJoin('users', 'u', 'user_id = project_owner'); 92 $q->addJoin('contacts', 'con', 'contact_id = user_contact'); 93 $q->addWhere('projects.project_id = ' . (int)$project_id); 94 $q->addGroup('projects.project_id'); 95 $q->loadObject($obj); 96 } 97 $q->clear(); 98 99 if (!$obj) { 100 $AppUI->setMsg('Project'); 101 $AppUI->setMsg('invalidID', UI_MSG_ERROR, true); 102 $AppUI->redirect(); 103 } else { 104 $AppUI->savePlace(); 105 } 106 107 // worked hours 108 // now milestones are summed up, too, for consistence with the tasks duration sum 109 // the sums have to be rounded to prevent the sum form having many (unwanted) decimals because of the mysql floating point issue 110 // more info on http://www.mysql.com/doc/en/Problems_with_float.html 111 if ($hasTasks) { 112 $q->addTable('task_log'); 113 $q->addTable('tasks'); 114 $q->addQuery('ROUND(SUM(task_log_hours),2)'); 115 $q->addWhere('task_log_task = task_id AND task_project = ' . (int)$project_id); 116 $worked_hours = $q->loadResult(); 117 $q->clear(); 118 $worked_hours = rtrim($worked_hours, '.'); 119 120 // total hours 121 // same milestone comment as above, also applies to dynamic tasks 122 $q->addTable('tasks'); 123 $q->addQuery('ROUND(SUM(task_duration),2)'); 124 $q->addWhere('task_project = ' . (int)$project_id . ' AND task_duration_type = 24 AND task_dynamic <> 1'); 125 $days = $q->loadResult(); 126 $q->clear(); 127 128 $q->addTable('tasks'); 129 $q->addQuery('ROUND(SUM(task_duration),2)'); 130 $q->addWhere('task_project = ' . (int)$project_id . ' AND task_duration_type = 1 AND task_dynamic <> 1'); 131 $hours = $q->loadResult(); 132 $q->clear(); 133 $total_hours = $days * $w2Pconfig['daily_working_hours'] + $hours; 134 135 $total_project_hours = 0; 136 137 $q->addTable('tasks', 't'); 138 $q->addQuery('ROUND(SUM(t.task_duration*u.perc_assignment/100),2)'); 139 $q->addJoin('user_tasks', 'u', 't.task_id = u.task_id'); 140 $q->addWhere('t.task_project = ' . (int)$project_id . ' AND t.task_duration_type = 24 AND t.task_dynamic <> 1'); 141 $total_project_days_sql = $q->prepare(); 142 143 $q2 = new DBQuery; 144 $q2->addTable('tasks', 't'); 145 $q2->addQuery('ROUND(SUM(t.task_duration*u.perc_assignment/100),2)'); 146 $q2->addJoin('user_tasks', 'u', 't.task_id = u.task_id'); 147 $q2->addWhere('t.task_project = ' . (int)$project_id . ' AND t.task_duration_type = 1 AND t.task_dynamic <> 1'); 148 149 $total_project_hours = $q->loadResult() * $w2Pconfig['daily_working_hours'] + $q2->loadResult(); 150 $q->clear(); 151 $q2->clear(); 152 //due to the round above, we don't want to print decimals unless they really exist 153 //$total_project_hours = rtrim($total_project_hours, "0"); 154 } else { //no tasks in project so "fake" project data 155 $worked_hours = $total_hours = $total_project_hours = 0.00; 156 } 157 158 159 ?> 160 161 <?php 162 $priorities = w2Pgetsysval('TaskPriority'); 163 $types = w2Pgetsysval('TaskType'); 164 include_once ($AppUI->getModuleClass('tasks')); 165 global $task_access; 166 $extra = array(0 => '(none)', 1 => 'Milestone', 2 => 'Dynamic Task', 3 => 'Inactive Task'); 167 ?> 168 169 <style type="text/css"> 170 /* Standard table 'spreadsheet' style */ 171 TABLE.prjprint { 172 background: #ffffff; 173 } 174 175 TABLE.prjprint TH { 176 background-color: #ffffff; 177 color: black; 178 list-style-type: disc; 179 list-style-position: inside; 180 border:solid 1px; 181 font-weight: normal; 182 font-size:15px; 183 } 184 185 TABLE.prjprint TD { 186 background-color: #ffffff; 187 font-size:14px; 188 } 189 190 TABLE.prjprint TR { 191 padding:5px; 192 } 193 194 </style> 195 <table width="100%" class="prjprint"> 196 <form name="frmDelete" action="./index.php?m=projects" method="post"> 197 <input type="hidden" name="dosql" value="do_project_aed" /> 198 <input type="hidden" name="del" value="1" /> 199 <input type="hidden" name="project_id" value="<?php echo $project_id; ?>" /> 200 </form> 201 202 <tr> 203 <td style="border: outset #d1d1cd 1px;" colspan="3"> 204 <table border="0" cellpadding="0" cellspacing="0" width="100%" class="prjprint"> 205 <tr> 206 <td width="22"> 207 208 </td> 209 <td align="center" colspan="2"> 210 <?php 211 echo '<strong> Project Report <strong>'; 212 ?> 213 </td> 214 <!-- <td width="22" align="right"> 215 <a href="javascript: void(0);" onclick="var img=document.getElementById('imghd'); img.style.display='none'; window.print(); window.close();"> 216 <img id="imghd" src="./modules/projectdesigner/images/printer.png" border="0" width="22" heigth="22" alt="print project" title="print project"/> 217 </a> 218 </td>--> 219 </tr> 220 </table> 221 </td> 222 </tr> 223 <?php 224 if ($canReadProject) { 225 require (w2PgetConfig('root_dir') . '/modules/projectdesigner/vw_projecttask.php'); 226 } else { 227 echo $AppUI->_('You do not have permission to view tasks'); 228 } 229 ?> 230 </table>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Fri Jan 9 03:00:02 2009 | Cross-referenced by PHPXref 0.7 |