[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/modules/projectdesigner/ -> printproject.php (source)

   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                  &nbsp;
 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>


Generated: Fri Jan 9 03:00:02 2009 Cross-referenced by PHPXref 0.7