function setUserDate($user_id, $date)
 {
     $user_date_id = UserDateFactory::findOrInsertUserDate($user_id, $date);
     Debug::text(' User Date ID: ' . $user_date_id, __FILE__, __LINE__, __METHOD__, 10);
     if ($user_date_id != '') {
         $this->setUserDateID($user_date_id);
         return TRUE;
     }
     Debug::text(' No User Date ID found', __FILE__, __LINE__, __METHOD__, 10);
     return FALSE;
 }
Exemplo n.º 2
0
     } else {
     	Debug::Text('Editing absence, absence policy changed, deleting old record ID: '. $udt_data['id'] , __FILE__, __LINE__, __METHOD__,10);
     	$udtlf = TTnew( 'UserDateTotalListFactory' );
     	$udtlf->getById( $udt_data['id'] );
     	if ( $udtlf->getRecordCount() == 1 ) {
     		$udt_obj = $udtlf->getCurrent();
     		$udt_obj->setDeleted(TRUE);
     		if ( $udt_obj->isValid() ) {
     			$udt_obj->Save();
     		}
     	}
     	unset($udtlf, $udt_obj);
     }
     */
 }
 $udtf->setUserDateId(UserDateFactory::findOrInsertUserDate($udt_data['user_id'], $date_stamp));
 $udtf->setStatus(30);
 //Absence
 $udtf->setType(10);
 //Total
 $udtf->setAbsencePolicyID($udt_data['absence_policy_id']);
 //Total
 if (isset($udt_data['branch_id'])) {
     $udtf->setBranch($udt_data['branch_id']);
 }
 if (isset($udt_data['department_id'])) {
     $udtf->setDepartment($udt_data['department_id']);
 }
 if (isset($udt_data['job_id'])) {
     $udtf->setJob($udt_data['job_id']);
 }
Exemplo n.º 3
0
 function postSave()
 {
     if ($this->getEnableTimeSheetVerificationCheck()) {
         //Check to see if schedule is verified, if so unverify it on modified punch.
         //Make sure exceptions are calculated *after* this so TimeSheet Not Verified exceptions can be triggered again.
         if (is_object($this->getUserDateObject()) and is_object($this->getUserDateObject()->getPayPeriodObject()) and is_object($this->getUserDateObject()->getPayPeriodObject()->getPayPeriodScheduleObject()) and $this->getUserDateObject()->getPayPeriodObject()->getPayPeriodScheduleObject()->getTimeSheetVerifyType() != 10) {
             //Find out if timesheet is verified or not.
             $pptsvlf = TTnew('PayPeriodTimeSheetVerifyListFactory');
             $pptsvlf->getByPayPeriodIdAndUserId($this->getUserDateObject()->getPayPeriod(), $this->getUserDateObject()->getUser());
             if ($pptsvlf->getRecordCount() > 0) {
                 //Pay period is verified, delete all records and make log entry.
                 //These can be added during the maintenance jobs, so the audit records are recorded as user_id=0, check those first.
                 Debug::text('Pay Period is verified, deleting verification records: ' . $pptsvlf->getRecordCount() . ' User ID: ' . $this->getUserDateObject()->getUser() . ' Pay Period ID: ' . $this->getUserDateObject()->getPayPeriod(), __FILE__, __LINE__, __METHOD__, 10);
                 foreach ($pptsvlf as $pptsv_obj) {
                     TTLog::addEntry($pptsv_obj->getId(), 500, TTi18n::getText('Schedule Modified After Verification') . ': ' . UserListFactory::getFullNameById($this->getUserDateObject()->getUser()) . ' ' . TTi18n::getText('Schedule') . ': ' . TTDate::getDate('DATE', $this->getStartTime()), NULL, $pptsvlf->getTable());
                     $pptsv_obj->setDeleted(TRUE);
                     if ($pptsv_obj->isValid()) {
                         $pptsv_obj->Save();
                     }
                 }
             }
         }
     }
     if ($this->getEnableReCalculateDay() == TRUE) {
         //Calculate total time. Mainly for docked.
         //Calculate entire week as Over Schedule (Weekly) OT policy needs to be reapplied if the schedule changes.
         if (is_object($this->getUserDateObject()) and $this->getUserDateObject()->getUser() > 0) {
             //When shifts are assigned to different days, we need to calculate both days the schedule touches, as the shift could be assigned to either of them.
             UserDateTotalFactory::smartReCalculate($this->getUserDateObject()->getUser(), array($this->getUserDateID(), $this->getOldUserDateID(), UserDateFactory::findOrInsertUserDate($this->getUserDateObject()->getUser(), $this->getStartTime()), UserDateFactory::findOrInsertUserDate($this->getUserDateObject()->getUser(), $this->getEndTime())), TRUE, FALSE);
         }
     }
     return TRUE;
 }
Exemplo n.º 4
0
 function createSchedule($user_id, $date_stamp, $data = NULL)
 {
     $sf = new ScheduleFactory();
     $sf->setUserDateId(UserDateFactory::findOrInsertUserDate($user_id, $date_stamp));
     if (isset($data['status_id'])) {
         $sf->setStatus($data['status_id']);
     } else {
         $sf->setStatus(10);
     }
     if (isset($data['schedule_policy_id'])) {
         $sf->setSchedulePolicyID($data['schedule_policy_id']);
     }
     if (isset($data['absence_policy_id'])) {
         $sf->setAbsencePolicyID($data['absence_policy_id']);
     }
     if (isset($data['branch_id'])) {
         $sf->setBranch($data['branch_id']);
     }
     if (isset($data['department_id'])) {
         $sf->setDepartment($data['department_id']);
     }
     if (isset($data['job_id'])) {
         $sf->setJob($data['job_id']);
     }
     if (isset($data['job_item_id'])) {
         $sf->setJobItem($data['job_item_id']);
     }
     if ($data['start_time'] != '') {
         $start_time = strtotime($data['start_time'], $date_stamp);
     }
     if ($data['end_time'] != '') {
         Debug::Text('End Time: ' . $data['end_time'] . ' Date Stamp: ' . $date_stamp, __FILE__, __LINE__, __METHOD__, 10);
         $end_time = strtotime($data['end_time'], $date_stamp);
         Debug::Text('bEnd Time: ' . $data['end_time'] . ' - ' . TTDate::getDate('DATE+TIME', $data['end_time']), __FILE__, __LINE__, __METHOD__, 10);
     }
     $sf->setStartTime($start_time);
     $sf->setEndTime($end_time);
     if ($sf->isValid()) {
         $sf->setEnableReCalculateDay(FALSE);
         $insert_id = $sf->Save();
         Debug::Text('Schedule ID: ' . $insert_id, __FILE__, __LINE__, __METHOD__, 10);
         return $insert_id;
     }
     Debug::Text('Failed Creating Schedule!', __FILE__, __LINE__, __METHOD__, 10);
     return FALSE;
 }
Exemplo n.º 5
0
             foreach ($udtlf as $udt_obj) {
                 $udt_obj->setDeleted($delete);
                 if ($id_count == $i) {
                     $udt_obj->setEnableCalcSystemTotalTime(TRUE);
                 }
                 $udt_obj->Save();
             }
             $i++;
         }
     }
     Redirect::Page(URLBuilder::getURL(array('user_id' => $user_id, 'filter_date' => $filter_date), 'UserDateTotalList.php'));
     break;
 default:
     if ((!isset($user_date_id) or isset($user_date_id) and $user_date_id == '') and $user_id != '' and $filter_date != '') {
         Debug::Text('User Date ID not passed, inserting one.', __FILE__, __LINE__, __METHOD__, 10);
         $user_date_id = UserDateFactory::findOrInsertUserDate($user_id, $filter_date);
     }
     if ($user_date_id != '') {
         $udtlf = new UserDateTotalListFactory();
         $udtlf->getByUserDateIDAndStatusAndType($user_date_id, array(10, 20, 30), array(10, 20, 30, 40, 100), $current_user_prefs->getItemsPerPage(), $page, NULL, $sort_array);
         $pager = new Pager($udtlf);
         $blf = new BranchListFactory();
         $branch_options = $blf->getByCompanyIdArray($current_company->getId());
         $dlf = new DepartmentListFactory();
         $department_options = $dlf->getByCompanyIdArray($current_company->getId());
         //Absence policies
         $otplf = new AbsencePolicyListFactory();
         $absence_policy_options = $otplf->getByCompanyIDArray($current_company->getId(), TRUE);
         //Overtime policies
         $otplf = new OverTimePolicyListFactory();
         $over_time_policy_options = $otplf->getByCompanyIDArray($current_company->getId(), TRUE);
Exemplo n.º 6
0
        if ($c_obj->getStatus() != 30) {
            $ppslf = new PayPeriodScheduleListFactory();
            $ulf = new UserListFactory();
            $ulf->getByCompanyId($c_obj->getId());
            if ($ulf->getRecordCount() > 0) {
                $i = 0;
                foreach ($ulf as $u_obj) {
                    if ($u_obj->getStatus() != 10) {
                        continue;
                    }
                    Debug::text($i . '. User: '******'22-Jan-08');
                        UserDateFactory::findOrInsertUserDate($u_obj->getId(), TTDate::getBeginDayEpoch($epoch));
                    }
                    $i++;
                }
            }
        } else {
            Debug::text('Company is not ACTIVE: ' . $c_obj->getId(), __FILE__, __LINE__, __METHOD__, 10);
        }
    }
}
Debug::writeToLog();
Debug::Display();
 function getHolidayUserDateIDs()
 {
     Debug::text('reCalculating Holiday...', __FILE__, __LINE__, __METHOD__, 10);
     //Get Holiday policies and determine how many days we need to look ahead/behind in order
     //to recalculate the holiday eligilibility/time.
     $holiday_before_days = 0;
     $holiday_after_days = 0;
     if (is_object($this->getUserDateObject()) and is_object($this->getUserDateObject()->getUserObject())) {
         $hplf = TTnew('HolidayPolicyListFactory');
         $hplf->getByCompanyId($this->getUserDateObject()->getUserObject()->getCompany());
         if ($hplf->getRecordCount() > 0) {
             foreach ($hplf as $hp_obj) {
                 if ($hp_obj->getMinimumWorkedPeriodDays() > $holiday_before_days) {
                     $holiday_before_days = $hp_obj->getMinimumWorkedPeriodDays();
                 }
                 if ($hp_obj->getAverageTimeDays() > $holiday_before_days) {
                     $holiday_before_days = $hp_obj->getAverageTimeDays();
                 }
                 if ($hp_obj->getMinimumWorkedAfterPeriodDays() > $holiday_after_days) {
                     $holiday_after_days = $hp_obj->getMinimumWorkedAfterPeriodDays();
                 }
             }
         }
     }
     Debug::text('Holiday Before Days: ' . $holiday_before_days . ' Holiday After Days: ' . $holiday_after_days, __FILE__, __LINE__, __METHOD__, 10);
     if ($holiday_before_days > 0 or $holiday_after_days > 0) {
         $retarr = array();
         $search_start_date = TTDate::getBeginWeekEpoch($this->getUserDateObject()->getDateStamp() - $holiday_after_days * 86400);
         $search_end_date = TTDate::getEndWeekEpoch(TTDate::getEndDayEpoch($this->getUserDateObject()->getDateStamp()) + $holiday_before_days * 86400 + 3601);
         Debug::text('Holiday search start date: ' . TTDate::getDate('DATE', $search_start_date) . ' End date: ' . TTDate::getDate('DATE', $search_end_date) . ' Current Date: ' . TTDate::getDate('DATE', $this->getUserDateObject()->getDateStamp()), __FILE__, __LINE__, __METHOD__, 10);
         $hlf = TTnew('HolidayListFactory');
         //$hlf->getByPolicyGroupUserIdAndStartDateAndEndDate( $this->getUserDateObject()->getUser(), TTDate::getEndWeekEpoch( $this->getUserDateObject()->getDateStamp() )+86400, TTDate::getEndDayEpoch()+($max_average_time_days*86400)+3601 );
         $hlf->getByPolicyGroupUserIdAndStartDateAndEndDate($this->getUserDateObject()->getUser(), $search_start_date, $search_end_date);
         if ($hlf->getRecordCount() > 0) {
             Debug::text('Found Holidays within range: ' . $hlf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
             $udlf = TTnew('UserDateListFactory');
             foreach ($hlf as $h_obj) {
                 Debug::text('ReCalculating Day due to Holiday: ' . TTDate::getDate('DATE', $h_obj->getDateStamp()), __FILE__, __LINE__, __METHOD__, 10);
                 $user_date_ids = $udlf->getArrayByListFactory($udlf->getByUserIdAndDate($this->getUserDateObject()->getUser(), $h_obj->getDateStamp()));
                 if ($user_date_ids == FALSE and TTDate::getBeginDayEpoch($h_obj->getDateStamp()) <= TTDate::getBeginDayEpoch(time())) {
                     //This fixes a bug where if an employee was added after a holiday (ie: Sept 3rd after Labor day of Sept 2nd)
                     //then had time added before the holiday, the holiday would not be calculated as no user_date record would exist.
                     $user_date_ids = (array) UserDateFactory::findOrInsertUserDate($this->getUserDateObject()->getUser(), TTDate::getBeginDayEpoch($h_obj->getDateStamp()));
                     Debug::Text('User Date ID for holiday doesnt exist, creating it now: ' . $user_date_ids[0], __FILE__, __LINE__, __METHOD__, 10);
                 }
                 if (is_array($user_date_ids)) {
                     $retarr = array_merge($retarr, $user_date_ids);
                 }
                 unset($user_date_ids);
             }
         }
     }
     if (isset($retarr) and is_array($retarr) and count($retarr) > 0) {
         //Debug::Arr($retarr, 'bHoliday UserDateIDs: ', __FILE__, __LINE__, __METHOD__, 10);
         return $retarr;
     }
     Debug::text('No Holidays within range...', __FILE__, __LINE__, __METHOD__, 10);
     return FALSE;
 }
Exemplo n.º 8
0
 /**
  * ReCalculate timesheet/policies
  * @return bool
  */
 function reCalculateTimeSheet($pay_period_ids, $user_ids = NULL)
 {
     //Debug::text('Recalculating Employee Timesheet: User ID: '. $user_ids .' Pay Period ID: '. $pay_period_ids, __FILE__, __LINE__, __METHOD__,10);
     //Debug::setVerbosity(11);
     if (!$this->getPermissionObject()->Check('punch', 'enabled') or !($this->getPermissionObject()->Check('punch', 'edit') or $this->getPermissionObject()->Check('punch', 'edit_child'))) {
         return $this->getPermissionObject()->PermissionDenied();
     }
     //Make sure pay period is not CLOSED.
     //We can re-calc on locked though.
     $pplf = TTnew('PayPeriodListFactory');
     $pplf->getByIdList($pay_period_ids);
     if ($pplf->getRecordCount() > 0) {
         $pp_obj = $pplf->getCurrent();
         if ($pp_obj->getStatus() != 20) {
             $udlf = TTnew('UserDateListFactory');
             if (is_array($user_ids) and count($user_ids) > 0 and isset($user_ids[0]) and $user_ids[0] > 0) {
                 $udlf->getByUserIdAndPayPeriodID($user_ids, $pay_period_ids);
             } elseif ($this->getPermissionObject()->Check('punch', 'edit') == TRUE) {
                 //Make sure they have the permissions to recalculate all employees.
                 TTLog::addEntry($this->getCurrentCompanyObject()->getId(), TTi18n::gettext('Notice'), TTi18n::gettext('Recalculating Company TimeSheet'), $this->getCurrentUserObject()->getId(), 'user_date_total');
                 $udlf->getByCompanyIdAndPayPeriodID($this->getCurrentCompanyObject()->getId(), $pay_period_ids);
             } else {
                 return $this->getPermissionObject()->PermissionDenied();
             }
             if ($udlf->getRecordCount() > 0) {
                 Debug::text('Found days to re-calculate: ' . $udlf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
                 $this->getProgressBarObject()->start($this->getAMFMessageID(), $udlf->getRecordCount(), NULL, TTi18n::getText('ReCalculating...'));
                 $x = 1;
                 $prev_date_stamp = FALSE;
                 foreach ($udlf as $ud_obj) {
                     Debug::text($x . ' / ' . $udlf->getRecordCount() . ' - User Date Id: ' . $ud_obj->getId() . ' Date: ' . $ud_obj->getDateStamp(TRUE) . ' User ID: ' . $ud_obj->getUser(), __FILE__, __LINE__, __METHOD__, 10);
                     if ($prev_date_stamp != FALSE and abs($ud_obj->getDateStamp() - $prev_date_stamp) > 86400) {
                         Debug::text('Found gap between user_date rows! - User Date Id: ' . $ud_obj->getId() . ' Date: ' . $ud_obj->getDateStamp(TRUE) . ' Previous Date: ' . TTDate::getDate('DATE', $prev_date_stamp) . ' User ID: ' . $ud_obj->getUser(), __FILE__, __LINE__, __METHOD__, 10);
                         for ($n = $prev_date_stamp; $n < $ud_obj->getDateStamp(); $n += 86400) {
                             $tmp_user_date_id = UserDateFactory::findOrInsertUserDate($ud_obj->getUser(), TTDate::getBeginDayEpoch($n));
                             Debug::text('Filling gap in user_date rows! - Date: ' . TTDate::getDate('DATE', $n) . ' User ID: ' . $ud_obj->getUser() . ' New User Date ID: ' . $tmp_user_date_id, __FILE__, __LINE__, __METHOD__, 10);
                             UserDateTotalFactory::reCalculateDay($tmp_user_date_id, TRUE);
                         }
                         unset($n, $tmp_user_date_id);
                     }
                     TTLog::addEntry($ud_obj->getId(), 500, TTi18n::gettext('Recalculating Employee TimeSheet') . ': ' . $ud_obj->getUserObject()->getFullName() . ' ' . TTi18n::gettext('Date') . ': ' . TTDate::getDate('DATE', $ud_obj->getDateStamp()), $this->getCurrentUserObject()->getId(), 'user_date_total');
                     $udlf->StartTransaction();
                     //If a transaction wraps the entire recalculation process, a deadlock is likely to occur for large batches.
                     UserDateTotalFactory::reCalculateDay($ud_obj->getId(), TRUE);
                     $udlf->CommitTransaction();
                     $this->getProgressBarObject()->set($this->getAMFMessageID(), $x);
                     $prev_date_stamp = $ud_obj->getDateStamp();
                     $x++;
                 }
                 $this->getProgressBarObject()->stop($this->getAMFMessageID());
             } else {
                 Debug::text('No User Date rows to calculate!', __FILE__, __LINE__, __METHOD__, 10);
             }
         } else {
             Debug::text('Pay Period is CLOSED: ', __FILE__, __LINE__, __METHOD__, 10);
         }
     }
     return $this->returnHandler(TRUE);
 }