Ejemplo n.º 1
0
    if (isset($_GET['user_id'])) {
        $AppUI->setState('TimecardMonthlyUserId', $_GET['user_id']);
    } else {
        $AppUI->setState('TimecardMonthlyUserId', $AppUI->user_id);
    }
    $user_id = $AppUI->getState('TimecardMonthlyUserId') ? $AppUI->getState('TimecardMonthlyUserId') : 0;
} else {
    $user_id = $AppUI->user_id;
}
$start_report = new CDate();
$start_report->setMonth($month);
$start_report->setYear($year);
$start_report->setDay(1);
$start_report->setTime(0, 0, 0);
$end_report = new CDate();
$end_report->copy($start_report);
$end_report->addMonths(1);
$end_report->addDays(-1);
$end_report->setTime(23, 59, 59);
//Get hash of users
$sql = "SELECT user_id, contact_email, concat(contact_last_name,' ',contact_first_name) as name FROM users LEFT JOIN contacts AS c ON users.user_contact = contact_id ORDER BY contact_last_name, contact_first_name;";
$result = db_loadList($sql);
$people = array();
// users list
foreach ($result as $row) {
    $people[$row['user_id']] = $row;
    $users[$row['user_id']] = $row['name'];
}
unset($result);
$sql = "\r\n        select distinct(project_id), project_name from task_log\r\n        left join tasks on tasks.task_id = task_log.task_log_task\r\n        left join projects on projects.project_id = tasks.task_project\r\n        where\r\n            task_log_date >= '" . $start_report->format(FMT_DATETIME_MYSQL) . "'\r\n        and task_log_date <= '" . $end_report->format(FMT_DATETIME_MYSQL) . "'\r\n        and task_log_task != 0\r\n        and task_log_creator = " . $user_id . "\r\n        order by project_name\r\n\t\t";
#    echo $sql;
Ejemplo n.º 2
0
 function update_dep_dates($task_id)
 {
     global $tracking_dynamics;
     $q = new DBQuery();
     $newTask = new CTask();
     $newTask->load($task_id);
     // Do not update tasks that are not tracking dependencies
     if (!in_array($newTask->task_dynamic, $tracking_dynamics)) {
         return;
     }
     // load original task dates and calculate task time span
     $tsd = new CDate($newTask->task_start_date);
     $ted = new CDate($newTask->task_end_date);
     $duration = $tsd->calcDuration($ted);
     // reset start date
     $nsd = new CDate($newTask->get_deps_max_end_date($newTask));
     // prefer Wed 8:00 over Tue 16:00 as start date
     $nsd = $nsd->next_working_day();
     $new_start_date = $nsd->format(FMT_DATETIME_MYSQL);
     // Add task time span to End Date again
     $ned = new CDate();
     $ned->copy($nsd);
     $ned->addDuration($duration, '1');
     // make sure one didn't land on a non-working day
     $ned = $ned->next_working_day(true);
     // prefer tue 16:00 over wed 8:00 as an end date
     $ned = $ned->prev_working_day();
     $new_end_date = $ned->format(FMT_DATETIME_MYSQL);
     // update the db
     $q->addTable('tasks');
     $q->addUpdate('task_start_date', $new_start_date);
     $q->addUpdate('task_end_date', $new_end_date);
     $q->addWhere('task_dynamic <> 1 AND task_id = ' . $task_id);
     $q->exec();
     $q->clear();
     if ($newTask->task_parent != $newTask->task_id) {
         $newTask->updateDynamics();
     }
     return;
 }
Ejemplo n.º 3
0
        $sql = "\n\t\t\tSELECT\n\t\t\t\ttask_log_creator,\n\t\t\t\tsum(task_log_hours) as hours\n\t\t\tFROM\n\t\t\t\ttask_log\n\t\t\tWHERE\n\t\t\t\ttask_log_date >= '" . $start_day->format(FMT_DATETIME_MYSQL) . "' \n\t\t\t\tAND task_log_date <= '" . $end_day->format(FMT_DATETIME_MYSQL) . "'\n\t\t\t\tAND task_log_creator in (" . implode(", ", $ids) . ")\n\t\t\tGROUP BY\n\t\t\t\ttask_log_creator\n\t\t\t";
        //print "<pre>$sql</pre>";
        $result = db_loadList($sql);
        foreach ($result as $row) {
            $people[$row['task_log_creator']][$i] = $row['hours'];
        }
        $date = $start_day->format("%Y-%m-%d") . " 12:00:00";
        $start_day->setDate($date, DATE_FORMAT_ISO);
        $start_day->addDays(-7);
    }
}
$sql = "SELECT company_id, company_name FROM companies WHERE " . getPermsWhereClause("companies", "company_id") . " ORDER BY company_name";
//print "<pre>$sql</pre>";
$companies = arrayMerge(array(0 => $AppUI->_('All Entities')), db_loadHashList($sql));
$next_day = new CDate();
$next_day->copy($start_day);
$next_day->addDays($week_count * 7 * 2);
?>
<form name="frmCompanySelect" action="" method="get">
	<input type="hidden" name="m" value="timecard">
	<input type="hidden" name="report_type" value="weekly_by_user">
	<input type="hidden" name="tab" value="<?php 
echo $tab;
?>
">
	<table cellspacing="1" cellpadding="2" border="0" width="100%">
	<tr>
		<td width="95%"><?php 
echo arraySelect($companies, 'company_id', 'size="1" class="text" id="medium" onchange="document.frmCompanySelect.submit()"', $company_id);
?>
</td>
Ejemplo n.º 4
0
 function calcDuration($e)
 {
     // since one will alter the date ($this) one better copies it to a new instance
     $s = new CDate();
     $s->copy($this);
     // get dP time constants
     $cal_day_start = intval(dPgetConfig('cal_day_start'));
     $cal_day_end = intval(dPgetConfig('cal_day_end'));
     $dwh = intval(dPgetConfig('daily_working_hours'));
     // assume start is before end and set a default signum for the duration
     $sgn = 1;
     // check whether start before end, interchange otherwise
     if ($e->before($s)) {
         // calculated duration must be negative, set signum appropriately
         $sgn = -1;
         $dummy = $s;
         $s->copy($e);
         $e = $dummy;
     }
     // determine the (working + non-working) day difference between the two dates
     $days = $e->dateDiff($s);
     // if it is an intraday difference one is finished very easily
     if ($days == 0) {
         return min($dwh, abs($e->hour - $s->hour)) * $sgn;
     }
     // initialize the duration var
     $duration = 0;
     // process the first day
     // take into account the first day if it is a working day!
     $duration += $s->isWorkingDay() ? min($dwh, abs($cal_day_end - $s->hour)) : 0;
     $s->addDays(1);
     // end of processing the first day
     // calc workingdays between start and end
     for ($i = 1; $i < $days; $i++) {
         $duration += $s->isWorkingDay() ? $dwh : 0;
         $s->addDays(1);
     }
     // take into account the last day in span only if it is a working day!
     $duration += $s->isWorkingDay() ? min($dwh, abs($e->hour - $cal_day_start)) : 0;
     return $duration * $sgn;
 }
Ejemplo n.º 5
0
$today_weekday = $start_day->getDayOfWeek();
//roll back to the first day of that week, regardless of what day was specified
$rollover_day = '0';
$new_start_offset = $rollover_day - $today_weekday;
$start_day->addDays($new_start_offset);
//last day of that week, add 6 days
$end_day = new CDate();
$end_day->copy($start_day);
$end_day->addDays(6);
//date of the first day of the previous week.
$prev_date = new CDate();
$prev_date->copy($start_day);
$prev_date->addDays(-7);
//date of the first day of the next week.
$next_date = new CDate();
$next_date->copy($start_day);
$next_date->addDays(7);
//***MOD 20050525 pedroa $is_my_timesheet = $user_id == $AppUI->user_id;
$is_my_timesheet = $user_id == $AppUI->user_id || $can_edit_other_timesheets;
?>
	<script>
		function viewLog(id) {
			go('index.php?m=tasks&a=view&task_id='+id);
		}

		function editLog(id) {
			go('index.php?m=timecard&tab=1&tid='+id);
		}

		function deleteLog(id, name, day) {
			if (confirm('Are you sure you want to delete task log\n[ '+name+' ]\ncreated on '+day+'?')) {
Ejemplo n.º 6
0
 // updating the table recording the
 // dependency relations with this task
 $obj->updateDependencies($hdependencies);
 // we will reset the task's start date based upon dependencies
 // and shift the end date appropriately
 if ($adjustStartDate && !is_null($hdependencies)) {
     // load already stored task data for this task
     $tempTask = new CTask();
     $tempTask->load($obj->task_id);
     // shift new start date to the last dependency end date
     $nsd = new CDate($tempTask->get_deps_max_end_date($tempTask));
     // prefer Wed 8:00 over Tue 16:00 as start date
     $nsd = $nsd->next_working_day();
     // prepare the creation of the end date
     $ned = new CDate();
     $ned->copy($nsd);
     if (empty($obj->task_start_date)) {
         // appropriately calculated end date via start+duration
         $ned->addDuration($obj->task_duration, $obj->task_duration_type);
     } else {
         // calc task time span start - end
         $d = $tsd->calcDuration($ted);
         // Re-add (keep) task time span for end date.
         // This is independent from $obj->task_duration.
         // The value returned by Date::Duration() is always in hours ('1')
         $ned->addDuration($d, '1');
     }
     // prefer tue 16:00 over wed 8:00 as an end date
     $ned = $ned->prev_working_day();
     $obj->task_start_date = $nsd->format(FMT_DATETIME_MYSQL);
     $obj->task_end_date = $ned->format(FMT_DATETIME_MYSQL);
Ejemplo n.º 7
0
 public function calcFinish($durn, $durnType)
 {
     // since one will alter the date ($this) one better copies it to a new instance
     $f = new CDate();
     $f->copy($this);
     // get w2P time constants
     $cal_day_start = intval(w2PgetConfig('cal_day_start'));
     $cal_day_end = intval(w2PgetConfig('cal_day_end'));
     $workHours = intval(w2PgetConfig('daily_working_hours'));
     $workingDays = w2PgetConfig('cal_working_days');
     $working_days = explode(',', $workingDays);
     //temporary variables
     $inc = floor($durn);
     $hoursToAddToLastDay = 0;
     $hoursToAddToFirstDay = $durn;
     $fullWorkingDays = 0;
     $int_st_hour = $f->getHour();
     //catch the gap between the working hours and the open hours (like lunch periods)
     $workGap = $cal_day_end - $cal_day_start - $workHours;
     // calculate the number of non-working days
     $k = 7 - count($working_days);
     $durnMins = ($durn - $inc) * 60;
     if ($f->getMinute() + $durnMins >= 60) {
         $inc++;
     }
     $mins = ($f->getMinute() + $durnMins) % 60;
     if ($mins > 38) {
         $f->setMinute(45);
     } elseif ($mins > 23) {
         $f->setMinute(30);
     } elseif ($mins > 8) {
         $f->setMinute(15);
     } else {
         $f->setMinute(0);
     }
     // jump over to the first working day
     for ($i = 0; $i < $k; $i++) {
         if (array_search($f->getDayOfWeek(), $working_days) === false) {
             $f->addDays(1);
         }
     }
     if ($durnType == 24) {
         if ($f->getHour() == $cal_day_start && $f->getMinute() == 0) {
             $fullWorkingDays = ceil($inc);
             $f->setMinute(0);
         } else {
             $fullWorkingDays = ceil($inc) + 1;
         }
         // Include start day as a working day (if it is one)
         if (!(array_search($f->getDayOfWeek(), $working_days) === false)) {
             $fullWorkingDays--;
         }
         for ($i = 0; $i < $fullWorkingDays; $i++) {
             $f->addDays(1);
             if (array_search($f->getDayOfWeek(), $working_days) === false) {
                 $i--;
             }
         }
         if ($f->getHour() == $cal_day_start && $f->getMinute() == 0) {
             $f->setHour($cal_day_end);
             $f->setMinute(0);
         }
     } else {
         $hoursToAddToFirstDay = $inc;
         if ($f->getHour() + $inc > $cal_day_end - $workGap) {
             $hoursToAddToFirstDay = $cal_day_end - $workGap - $f->getHour();
         }
         if ($hoursToAddToFirstDay > $workHours) {
             $hoursToAddToFirstDay = $workHours;
         }
         $inc -= $hoursToAddToFirstDay;
         $hoursToAddToLastDay = $inc % $workHours;
         $fullWorkingDays = floor(($inc - $hoursToAddToLastDay) / $workHours);
         if ($hoursToAddToLastDay <= 0 && !($hoursToAddToFirstDay == $workHours)) {
             $f->setHour($f->getHour() + $hoursToAddToFirstDay);
         } elseif ($hoursToAddToLastDay == 0) {
             $f->setHour($f->getHour() + $hoursToAddToFirstDay + $workGap);
         } else {
             $f->setHour($cal_day_start + $hoursToAddToLastDay);
             $f->addDays(1);
         }
         if (($f->getHour() == $cal_day_end || $f->getHour() - $int_st_hour == $workHours + $workGap) && $mins > 0) {
             $f->addDays(1);
             $f->setHour($cal_day_start);
         }
         // boolean for setting later if we just found a non-working day
         // and therefore do not have to add a day in the next loop
         // (which would have caused to not respecting multiple non-working days after each other)
         $g = false;
         for ($i = 0, $i_cmp = ceil($fullWorkingDays); $i < $i_cmp; $i++) {
             if (!$g) {
                 $f->addHours(1);
             }
             $g = false;
             // calculate overriden non-working days
             if (array_search($f->getDayOfWeek(), $working_days) === false) {
                 $f->addDays(1);
                 $i--;
                 $g = true;
             }
         }
     }
     // if there was no fullworkingday we have to check whether the end day is a working day
     // and in the negative case postpone the end date by appropriate days
     for ($i = 0, $i_cmp = 7 - count($working_days); $i < $i_cmp; $i++) {
         // override  possible non-working enddays
         if (array_search($f->getDayOfWeek(), $working_days) === false) {
             $f->addDays(1);
         }
     }
     return $f;
 }