function getPayPeriodMaximumShiftTime($user_id, $maximum_shift_time = NULL)
 {
     if (!is_numeric($maximum_shift_time)) {
         //Get pay period start/maximum shift time
         $ppslf = new PayPeriodScheduleListFactory();
         $ppslf->getByUserId($user_id);
         if ($ppslf->getRecordCount() == 1) {
             $pps_obj = $ppslf->getCurrent();
             $maximum_shift_time = $pps_obj->getMaximumShiftTime();
             //Debug::Text(' aPay Period Schedule Maximum Shift Time: '. $maximum_shift_time, __FILE__, __LINE__, __METHOD__,10);
         } else {
             //Debug::Text(' bPay Period Schedule Not Found! Using 4hrs as default', __FILE__, __LINE__, __METHOD__,10);
             $maximum_shift_time = 3600 * 16;
         }
     }
     Debug::Text(' cPay Period Schedule Maximum Shift Time: ' . $maximum_shift_time, __FILE__, __LINE__, __METHOD__, 10);
     return $maximum_shift_time;
 }
 function createPayPeriods()
 {
     $max_pay_periods = 29;
     $ppslf = new PayPeriodScheduleListFactory();
     $ppslf->getById($this->pay_period_schedule_id);
     if ($ppslf->getRecordCount() > 0) {
         $pps_obj = $ppslf->getCurrent();
         for ($i = 0; $i < $max_pay_periods; $i++) {
             if ($i == 0) {
                 //$end_date = TTDate::getBeginYearEpoch( strtotime('01-Jan-07') );
                 $end_date = TTDate::getBeginYearEpoch(time());
             } else {
                 $end_date = $end_date + 86400 * 14;
             }
             Debug::Text('I: ' . $i . ' End Date: ' . TTDate::getDate('DATE+TIME', $end_date), __FILE__, __LINE__, __METHOD__, 10);
             $pps_obj->createNextPayPeriod($end_date, 86400 * 3600);
         }
     }
     return TRUE;
 }
 static function CalcDifferences($pay_stub_id1, $pay_stub_id2, $ps_amendment_date = NULL)
 {
     //PayStub 1 is new.
     //PayStub 2 is old.
     if ($pay_stub_id1 == '') {
         return FALSE;
     }
     if ($pay_stub_id2 == '') {
         return FALSE;
     }
     if ($pay_stub_id1 == $pay_stub_id2) {
         return FALSE;
     }
     Debug::Text('Calculating the differences between Pay Stub: ' . $pay_stub_id1 . ' And: ' . $pay_stub_id2, __FILE__, __LINE__, __METHOD__, 10);
     $pslf = new PayStubListFactory();
     $pslf->StartTransaction();
     $pslf->getById($pay_stub_id1);
     if ($pslf->getRecordCount() > 0) {
         $pay_stub1_obj = $pslf->getCurrent();
     } else {
         Debug::Text('Pay Stub1 does not exist: ', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
     $pslf->getById($pay_stub_id2);
     if ($pslf->getRecordCount() > 0) {
         $pay_stub2_obj = $pslf->getCurrent();
     } else {
         Debug::Text('Pay Stub2 does not exist: ', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
     if ($pay_stub1_obj->getUser() != $pay_stub2_obj->getUser()) {
         Debug::Text('Pay Stubs are from different users!', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
     if ($ps_amendment_date == NULL or $ps_amendment_date == '') {
         Debug::Text('PS Amendment Date not set, trying to figure it out!', __FILE__, __LINE__, __METHOD__, 10);
         //Take a guess at the end of the newest open pay period.
         $ppslf = new PayPeriodScheduleListFactory();
         $ppslf->getByUserId($pay_stub2_obj->getUser());
         if ($ppslf->getRecordCount() > 0) {
             Debug::Text('Found Pay Period Schedule', __FILE__, __LINE__, __METHOD__, 10);
             $pplf = new PayPeriodListFactory();
             $pplf->getByPayPeriodScheduleIdAndTransactionDate($ppslf->getCurrent()->getId(), time());
             if ($pplf->getRecordCount() > 0) {
                 Debug::Text('Using Pay Period End Date.', __FILE__, __LINE__, __METHOD__, 10);
                 $ps_amendment_date = TTDate::getBeginDayEpoch($pplf->getCurrent()->getEndDate());
             }
         } else {
             Debug::Text('Using Today.', __FILE__, __LINE__, __METHOD__, 10);
             $ps_amendment_date = time();
         }
     }
     Debug::Text('Using Date: ' . TTDate::getDate('DATE+TIME', $ps_amendment_date), __FILE__, __LINE__, __METHOD__, 10);
     //Only do Earnings for now.
     //Get all earnings, EE/ER deduction PS entries.
     $pay_stub1_entry_ids = NULL;
     $pay_stub1_entries = new PayStubEntryListFactory();
     $pay_stub1_entries->getByPayStubIdAndType($pay_stub1_obj->getId(), array(10, 20, 30));
     if ($pay_stub1_entries->getRecordCount() > 0) {
         Debug::Text('Pay Stub1 Entries DO exist: ', __FILE__, __LINE__, __METHOD__, 10);
         foreach ($pay_stub1_entries as $pay_stub1_entry_obj) {
             $pay_stub1_entry_ids[] = $pay_stub1_entry_obj->getPayStubEntryNameId();
         }
     } else {
         Debug::Text('Pay Stub1 Entries does not exist: ', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
     Debug::Arr($pay_stub1_entry_ids, 'Pay Stub1 Entry IDs: ', __FILE__, __LINE__, __METHOD__, 10);
     //var_dump($pay_stub1_entry_ids);
     $pay_stub2_entry_ids = NULL;
     $pay_stub2_entries = new PayStubEntryListFactory();
     $pay_stub2_entries->getByPayStubIdAndType($pay_stub2_obj->getId(), array(10, 20, 30));
     if ($pay_stub2_entries->getRecordCount() > 0) {
         Debug::Text('Pay Stub2 Entries DO exist: ', __FILE__, __LINE__, __METHOD__, 10);
         foreach ($pay_stub2_entries as $pay_stub2_entry_obj) {
             $pay_stub2_entry_ids[] = $pay_stub2_entry_obj->getPayStubEntryNameId();
         }
     } else {
         Debug::Text('Pay Stub2 Entries does not exist: ', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
     Debug::Arr($pay_stub1_entry_ids, 'Pay Stub2 Entry IDs: ', __FILE__, __LINE__, __METHOD__, 10);
     $pay_stub_entry_ids = array_unique(array_merge($pay_stub1_entry_ids, $pay_stub2_entry_ids));
     Debug::Arr($pay_stub_entry_ids, 'Pay Stub Entry Differences: ', __FILE__, __LINE__, __METHOD__, 10);
     //var_dump($pay_stub_entry_ids);
     $pself = new PayStubEntryListFactory();
     if (count($pay_stub_entry_ids) > 0) {
         foreach ($pay_stub_entry_ids as $pay_stub_entry_id) {
             Debug::Text('Entry ID: ' . $pay_stub_entry_id, __FILE__, __LINE__, __METHOD__, 10);
             $pay_stub1_entry_arr = $pself->getSumByPayStubIdAndEntryNameIdAndNotPSAmendment($pay_stub1_obj->getId(), $pay_stub_entry_id);
             $pay_stub2_entry_arr = $pself->getSumByPayStubIdAndEntryNameIdAndNotPSAmendment($pay_stub2_obj->getId(), $pay_stub_entry_id);
             Debug::Text('Pay Stub1 Amount: ' . $pay_stub1_entry_arr['amount'] . ' Pay Stub2 Amount: ' . $pay_stub2_entry_arr['amount'], __FILE__, __LINE__, __METHOD__, 10);
             if ($pay_stub1_entry_arr['amount'] != $pay_stub2_entry_arr['amount']) {
                 $amount_diff = bcsub($pay_stub1_entry_arr['amount'], $pay_stub2_entry_arr['amount'], 2);
                 $units_diff = abs(bcsub($pay_stub1_entry_arr['units'], $pay_stub2_entry_arr['units'], 2));
                 Debug::Text('FOUND DIFFERENCE of: Amount: ' . $amount_diff . ' Units: ' . $units_diff, __FILE__, __LINE__, __METHOD__, 10);
                 //Generate PS Amendment.
                 $psaf = new PayStubAmendmentFactory();
                 $psaf->setUser($pay_stub1_obj->getUser());
                 $psaf->setStatus('ACTIVE');
                 $psaf->setType(10);
                 $psaf->setPayStubEntryNameId($pay_stub_entry_id);
                 if ($units_diff > 0) {
                     //Re-calculate amount when units are involved, due to rounding issues.
                     $unit_rate = Misc::MoneyFormat(bcdiv($amount_diff, $units_diff));
                     $amount_diff = Misc::MoneyFormat(bcmul($unit_rate, $units_diff));
                     Debug::Text('bFOUND DIFFERENCE of: Amount: ' . $amount_diff . ' Units: ' . $units_diff . ' Unit Rate: ' . $unit_rate, __FILE__, __LINE__, __METHOD__, 10);
                     $psaf->setRate($unit_rate);
                     $psaf->setUnits($units_diff);
                     $psaf->setAmount($amount_diff);
                 } else {
                     $psaf->setAmount($amount_diff);
                 }
                 $psaf->setDescription('Adjustment from Pay Period Ending: ' . TTDate::getDate('DATE', $pay_stub2_obj->getEndDate()));
                 $psaf->setEffectiveDate(TTDate::getBeginDayEpoch($ps_amendment_date));
                 if ($psaf->isValid()) {
                     $psaf->Save();
                 }
                 unset($amount_diff, $units_diff, $unit_rate);
             } else {
                 Debug::Text('No DIFFERENCE!', __FILE__, __LINE__, __METHOD__, 10);
             }
         }
     }
     $pslf->CommitTransaction();
     return TRUE;
 }
 function getPayPeriodScheduleObject()
 {
     if (is_object($this->pay_period_schedule_obj)) {
         return $this->pay_period_schedule_obj;
     } else {
         if ($this->getUser() > 0) {
             $ppslf = new PayPeriodScheduleListFactory();
             $ppslf->getByUserId($this->getUser());
             if ($ppslf->getRecordCount() == 1) {
                 $this->pay_period_schedule_obj = $ppslf->getCurrent();
                 return $this->pay_period_schedule_obj;
             }
         }
         return FALSE;
     }
 }
Example #5
0
 function createPayPeriods($start_date = NULL)
 {
     if ($start_date == '') {
         $start_date = TTDate::getBeginWeekEpoch(TTDate::getBeginYearEpoch(time()) - 86400 * (7 * 6));
     }
     $max_pay_periods = 192;
     //Make a lot of pay periods as we need to test 6 years worth of accruals for different milestones.
     $ppslf = new PayPeriodScheduleListFactory();
     $ppslf->getById($this->pay_period_schedule_id);
     if ($ppslf->getRecordCount() > 0) {
         $pps_obj = $ppslf->getCurrent();
         for ($i = 0; $i < $max_pay_periods; $i++) {
             if ($i == 0) {
                 //$end_date = TTDate::getBeginYearEpoch( strtotime('01-Jan-07') );
                 $end_date = $start_date;
             } else {
                 $end_date = $end_date + 86400 * 14;
             }
             Debug::Text('I: ' . $i . ' End Date: ' . TTDate::getDate('DATE+TIME', $end_date), __FILE__, __LINE__, __METHOD__, 10);
             $pps_obj->createNextPayPeriod($end_date, 86400 * 3600);
         }
     }
     return TRUE;
 }
Example #6
0
    foreach ($clf as $c_obj) {
        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();
Example #7
0
         Debug::Text('Title: ' . $user_title, __FILE__, __LINE__, __METHOD__, 10);
         if ($permission->Check('user', 'view_sin') == TRUE) {
             $sin_number = $user->getSIN();
         } else {
             $sin_number = $user->getSecureSIN();
         }
         $user_data = array('id' => $user->getId(), 'company_id' => $user->getCompany(), 'status' => $user->getStatus(), 'user_name' => $user->getUserName(), 'title_id' => $user->getTitle(), 'title' => $user_title, 'phone_id' => $user->getPhoneId(), 'ibutton_id' => $user->getIbuttonId(), 'employee_number' => $user->getEmployeeNumber(), 'first_name' => $user->getFirstName(), 'middle_name' => $user->getMiddleName(), 'last_name' => $user->getLastName(), 'second_last_name' => $user->getSecondLastName(), 'sex' => $user->getSex(), 'address1' => $user->getAddress1(), 'address2' => $user->getAddress2(), 'city' => $user->getCity(), 'province' => $user->getProvince(), 'country' => $user->getCountry(), 'postal_code' => $user->getPostalCode(), 'work_phone' => $user->getWorkPhone(), 'work_phone_ext' => $user->getWorkPhoneExt(), 'home_phone' => $user->getHomePhone(), 'mobile_phone' => $user->getMobilePhone(), 'fax_phone' => $user->getFaxPhone(), 'home_email' => $user->getHomeEmail(), 'work_email' => $user->getWorkEmail(), 'birth_date' => $user->getBirthDate(), 'hire_date' => $user->getHireDate(), 'termination_date' => $user->getTerminationDate(), 'sin' => $sin_number, 'other_id1' => $user->getOtherID1(), 'other_id2' => $user->getOtherID2(), 'other_id3' => $user->getOtherID3(), 'other_id4' => $user->getOtherID4(), 'other_id5' => $user->getOtherID5(), 'note' => $user->getNote(), 'default_branch_id' => $user->getDefaultBranch(), 'default_department_id' => $user->getDefaultDepartment(), 'group_id' => $user->getGroup(), 'currency_id' => $user->getCurrency(), 'is_owner' => $is_owner, 'is_child' => $is_child, 'created_date' => $user->getCreatedDate(), 'created_by' => $user->getCreatedBy(), 'updated_date' => $user->getUpdatedDate(), 'updated_by' => $user->getUpdatedBy(), 'deleted_date' => $user->getDeletedDate(), 'deleted_by' => $user->getDeletedBy());
         $pclfb = new PermissionControlListFactory();
         $pclfb->getByCompanyIdAndUserId($user->getCompany(), $id);
         if ($pclfb->getRecordCount() > 0) {
             $user_data['permission_control_id'] = $pclfb->getCurrent()->getId();
         }
         $ppslfb = new PayPeriodScheduleListFactory();
         $ppslfb->getByUserId($id);
         if ($ppslfb->getRecordCount() > 0) {
             $user_data['pay_period_schedule_id'] = $ppslfb->getCurrent()->getId();
         }
         $pglf = new PolicyGroupListFactory();
         $pglf->getByUserIds($id);
         if ($pglf->getRecordCount() > 0) {
             $user_data['policy_group_id'] = $pglf->getCurrent()->getId();
         }
         $hclf = new HierarchyControlListFactory();
         $hclf->getObjectTypeAppendedListByCompanyIDAndUserID($user->getCompany(), $user->getID());
         $user_data['hierarchy_control'] = $hclf->getArrayByListFactory($hclf, FALSE, TRUE, FALSE);
         unset($hclf);
     } else {
         $permission->Redirect(FALSE);
         //Redirect
     }
 }
Example #8
0
 $currency_options = $crlf->getArrayByListFactory($crlf, FALSE, TRUE);
 $ulf = new UserListFactory();
 $ulf->getByIdAndCompanyId($user_id, $current_company->getId());
 $user_data = $ulf->getCurrent();
 if (is_object($user_data->getCurrencyObject())) {
     $wage_data['currency_symbol'] = $user_data->getCurrencyObject()->getSymbol();
     $wage_data['iso_code'] = $user_data->getCurrencyObject()->getISOCode();
 }
 //Get pay period boundary dates for this user.
 //Include user hire date in the list.
 $pay_period_boundary_dates[TTDate::getDate('DATE', $user_data->getHireDate())] = TTi18n::gettext('(Hire Date)') . ' ' . TTDate::getDate('DATE', $user_data->getHireDate());
 $pay_period_boundary_dates = Misc::prependArray(array(-1 => TTi18n::gettext('(Choose Date)')), $pay_period_boundary_dates);
 $ppslf = new PayPeriodScheduleListFactory();
 $ppslf->getByUserId($user_id);
 if ($ppslf->getRecordCount() > 0) {
     $pay_period_schedule_id = $ppslf->getCurrent()->getId();
     $pay_period_schedule_name = $ppslf->getCurrent()->getName();
     Debug::Text('Pay Period Schedule ID: ' . $pay_period_schedule_id, __FILE__, __LINE__, __METHOD__, 10);
     $pplf = new PayPeriodListFactory();
     $pplf->getByPayPeriodScheduleId($pay_period_schedule_id, 10, NULL, NULL, array('transaction_date' => 'desc'));
     $pay_period_dates = NULL;
     foreach ($pplf as $pay_period_obj) {
         //$pay_period_boundary_dates[TTDate::getDate('DATE', $pay_period_obj->getEndDate() )] = '('. $pay_period_schedule_name .') '.TTDate::getDate('DATE', $pay_period_obj->getEndDate() );
         if (!isset($pay_period_boundary_dates[TTDate::getDate('DATE', $pay_period_obj->getStartDate())])) {
             $pay_period_boundary_dates[TTDate::getDate('DATE', $pay_period_obj->getStartDate())] = '(' . $pay_period_schedule_name . ') ' . TTDate::getDate('DATE', $pay_period_obj->getStartDate());
         }
     }
 } else {
     $smarty->assign('pay_period_schedule', FALSE);
     $uwf->Validator->isTrue('employee', FALSE, TTi18n::getText('Employee is not currently assigned to a pay period schedule.') . ' <a href="' . URLBuilder::getURL(NULL, '../payperiod/PayPeriodScheduleList.php') . '">' . TTi18n::getText('Click here</a> to assign'));
 }
 function postSave()
 {
     $this->removeCache($this->getId());
     if ($this->getDeleted() == FALSE and $this->getPermissionControl() !== FALSE) {
         Debug::text('Permission Group is set...', __FILE__, __LINE__, __METHOD__, 10);
         $pclf = new PermissionControlListFactory();
         $pclf->getByCompanyIdAndUserID($this->getCompany(), $this->getId());
         if ($pclf->getRecordCount() > 0) {
             Debug::text('Already assigned to a Permission Group...', __FILE__, __LINE__, __METHOD__, 10);
             $pc_obj = $pclf->getCurrent();
             if ($pc_obj->getId() == $this->getPermissionControl()) {
                 $add_permission_control = FALSE;
             } else {
                 Debug::text('Permission Group has changed...', __FILE__, __LINE__, __METHOD__, 10);
                 //Remove user from current schedule.
                 $pulf = new PermissionUserListFactory();
                 $pulf->getByPermissionControlIdAndUserID($pc_obj->getId(), $this->getId());
                 Debug::text('Record Count: ' . $pulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
                 if ($pulf->getRecordCount() > 0) {
                     foreach ($pulf as $pu_obj) {
                         Debug::text('Deleteing from Permission Group: ' . $pu_obj->getPermissionControl(), __FILE__, __LINE__, __METHOD__, 10);
                         $pu_obj->Delete();
                     }
                 }
                 $add_permission_control = TRUE;
             }
         } else {
             Debug::text('NOT Already assigned to a Permission Group...', __FILE__, __LINE__, __METHOD__, 10);
             $add_permission_control = TRUE;
         }
         if ($this->getPermissionControl() !== FALSE and $add_permission_control == TRUE) {
             Debug::text('Adding user to Permission Group...', __FILE__, __LINE__, __METHOD__, 10);
             //Add to new permission group
             $puf = new PermissionUserFactory();
             $puf->setPermissionControl($this->getPermissionControl());
             $puf->setUser($this->getID());
             if ($puf->isValid()) {
                 $puf->Save();
                 //Clear permission class for this employee.
                 $pf = new PermissionFactory();
                 $pf->clearCache($this->getID(), $this->getCompany());
             }
         }
         unset($add_permission_control);
     }
     if ($this->getDeleted() == FALSE and $this->getPayPeriodSchedule() !== FALSE) {
         Debug::text('Pay Period Schedule is set...', __FILE__, __LINE__, __METHOD__, 10);
         $ppslf = new PayPeriodScheduleListFactory();
         $ppslf->getByUserId($this->getId());
         if ($ppslf->getRecordCount() > 0) {
             $pps_obj = $ppslf->getCurrent();
             if ($this->getPayPeriodSchedule() == $pps_obj->getId()) {
                 Debug::text('Already assigned to this Pay Period Schedule...', __FILE__, __LINE__, __METHOD__, 10);
                 $add_pay_period_schedule = FALSE;
             } else {
                 Debug::text('Changing Pay Period Schedule...', __FILE__, __LINE__, __METHOD__, 10);
                 //Remove user from current schedule.
                 $ppsulf = new PayPeriodScheduleUserListFactory();
                 $ppsulf->getByPayPeriodScheduleIdAndUserID($pps_obj->getId(), $this->getId());
                 Debug::text('Record Count: ' . $ppsulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
                 if ($ppsulf->getRecordCount() > 0) {
                     foreach ($ppsulf as $ppsu_obj) {
                         Debug::text('Deleteing from Pay Period Schedule: ' . $ppsu_obj->getPayPeriodSchedule(), __FILE__, __LINE__, __METHOD__, 10);
                         $ppsu_obj->Delete();
                     }
                 }
                 $add_pay_period_schedule = TRUE;
             }
         } else {
             Debug::text('Not assigned to ANY Pay Period Schedule...', __FILE__, __LINE__, __METHOD__, 10);
             $add_pay_period_schedule = TRUE;
         }
         if ($this->getPayPeriodSchedule() !== FALSE and $add_pay_period_schedule == TRUE) {
             //Add to new pay period schedule
             $ppsuf = new PayPeriodScheduleUserFactory();
             $ppsuf->setPayPeriodSchedule($this->getPayPeriodSchedule());
             $ppsuf->setUser($this->getID());
             if ($ppsuf->isValid()) {
                 $ppsuf->Save();
             }
         }
         unset($add_pay_period_schedule);
     }
     if ($this->getDeleted() == FALSE and $this->getPolicyGroup() !== FALSE) {
         Debug::text('Policy Group is set...', __FILE__, __LINE__, __METHOD__, 10);
         $pglf = new PolicyGroupListFactory();
         $pglf->getByUserIds($this->getId());
         if ($pglf->getRecordCount() > 0) {
             $pg_obj = $pglf->getCurrent();
             if ($this->getPolicyGroup() == $pg_obj->getId()) {
                 Debug::text('Already assigned to this Policy Group...', __FILE__, __LINE__, __METHOD__, 10);
                 $add_policy_group = FALSE;
             } else {
                 Debug::text('Changing Policy Group...', __FILE__, __LINE__, __METHOD__, 10);
                 //Remove user from current schedule.
                 $pgulf = new PolicyGroupUserListFactory();
                 $pgulf->getByPolicyGroupIdAndUserId($pg_obj->getId(), $this->getId());
                 Debug::text('Record Count: ' . $pgulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
                 if ($pgulf->getRecordCount() > 0) {
                     foreach ($pgulf as $pgu_obj) {
                         Debug::text('Deleteing from Policy Group: ' . $pgu_obj->getPolicyGroup(), __FILE__, __LINE__, __METHOD__, 10);
                         $pgu_obj->Delete();
                     }
                 }
                 $add_policy_group = TRUE;
             }
         } else {
             Debug::text('Not assigned to ANY Policy Group...', __FILE__, __LINE__, __METHOD__, 10);
             $add_policy_group = TRUE;
         }
         if ($this->getPolicyGroup() !== FALSE and $add_policy_group == TRUE) {
             //Add to new policy group
             $pguf = new PolicyGroupUserFactory();
             $pguf->setPolicyGroup($this->getPolicyGroup());
             $pguf->setUser($this->getID());
             if ($pguf->isValid()) {
                 $pguf->Save();
             }
         }
         unset($add_policy_group);
     }
     if ($this->getDeleted() == FALSE and $this->getHierarchyControl() !== FALSE) {
         Debug::text('Hierarchies are set...', __FILE__, __LINE__, __METHOD__, 10);
         $hierarchy_control_data = array_unique(array_values((array) $this->getHierarchyControl()));
         //Debug::Arr($hierarchy_control_data, 'Setting hierarchy control data...', __FILE__, __LINE__, __METHOD__, 10);
         if (is_array($hierarchy_control_data)) {
             $hclf = new HierarchyControlListFactory();
             $hclf->getObjectTypeAppendedListByCompanyIDAndUserID($this->getCompany(), $this->getID());
             $existing_hierarchy_control_data = array_unique(array_values((array) $hclf->getArrayByListFactory($hclf, FALSE, TRUE, FALSE)));
             //Debug::Arr($existing_hierarchy_control_data, 'Existing hierarchy control data...', __FILE__, __LINE__, __METHOD__, 10);
             $hierarchy_control_delete_diff = array_diff($existing_hierarchy_control_data, $hierarchy_control_data);
             //Debug::Arr($hierarchy_control_delete_diff, 'Hierarchy control delete diff: ', __FILE__, __LINE__, __METHOD__, 10);
             //Remove user from existing hierarchy control
             if (is_array($hierarchy_control_delete_diff)) {
                 foreach ($hierarchy_control_delete_diff as $hierarchy_control_id) {
                     if ($hierarchy_control_id != 0) {
                         $hulf = new HierarchyUserListFactory();
                         $hulf->getByHierarchyControlAndUserID($hierarchy_control_id, $this->getID());
                         if ($hulf->getRecordCount() > 0) {
                             Debug::text('Deleting user from hierarchy control ID: ' . $hierarchy_control_id, __FILE__, __LINE__, __METHOD__, 10);
                             $hulf->getCurrent()->Delete();
                         }
                     }
                 }
             }
             unset($hierarchy_control_delete_diff, $hulf, $hclf, $hierarchy_control_id);
             $hierarchy_control_add_diff = array_diff($hierarchy_control_data, $existing_hierarchy_control_data);
             //Debug::Arr($hierarchy_control_add_diff, 'Hierarchy control add diff: ', __FILE__, __LINE__, __METHOD__, 10);
             if (is_array($hierarchy_control_add_diff)) {
                 foreach ($hierarchy_control_add_diff as $hierarchy_control_id) {
                     Debug::text('Hierarchy data changed...', __FILE__, __LINE__, __METHOD__, 10);
                     if ($hierarchy_control_id != 0) {
                         $huf = new HierarchyUserFactory();
                         $huf->setHierarchyControl($hierarchy_control_id);
                         $huf->setUser($this->getId());
                         if ($huf->isValid()) {
                             Debug::text('Adding user to hierarchy control ID: ' . $hierarchy_control_id, __FILE__, __LINE__, __METHOD__, 10);
                             $huf->Save();
                         }
                     }
                 }
             }
             unset($hierarchy_control_add, $huf, $hierarchy_control_id);
         }
     }
     if (isset($this->is_new) and $this->is_new == TRUE) {
         $udlf = new UserDefaultListFactory();
         $udlf->getByCompanyId($this->getCompany());
         if ($udlf->getRecordCount() > 0) {
             Debug::Text('Using User Defaults', __FILE__, __LINE__, __METHOD__, 10);
             $udf_obj = $udlf->getCurrent();
             Debug::text('Inserting Default Deductions...', __FILE__, __LINE__, __METHOD__, 10);
             $company_deduction_ids = $udf_obj->getCompanyDeduction();
             if (is_array($company_deduction_ids) and count($company_deduction_ids) > 0) {
                 foreach ($company_deduction_ids as $company_deduction_id) {
                     $udf = new UserDeductionFactory();
                     $udf->setUser($this->getId());
                     $udf->setCompanyDeduction($company_deduction_id);
                     if ($udf->isValid()) {
                         $udf->Save();
                     }
                 }
             }
             unset($company_deduction_ids, $company_deduction_id, $udf);
             Debug::text('Inserting Default Prefs...', __FILE__, __LINE__, __METHOD__, 10);
             $upf = new UserPreferenceFactory();
             $upf->setUser($this->getId());
             $upf->setLanguage($udf_obj->getLanguage());
             $upf->setDateFormat($udf_obj->getDateFormat());
             $upf->setTimeFormat($udf_obj->getTimeFormat());
             $upf->setTimeUnitFormat($udf_obj->getTimeUnitFormat());
             $upf->setTimeZone($udf_obj->getTimeZone());
             $upf->setItemsPerPage($udf_obj->getItemsPerPage());
             $upf->setStartWeekDay($udf_obj->getStartWeekDay());
             $upf->setEnableEmailNotificationException($udf_obj->getEnableEmailNotificationException());
             $upf->setEnableEmailNotificationMessage($udf_obj->getEnableEmailNotificationMessage());
             $upf->setEnableEmailNotificationHome($udf_obj->getEnableEmailNotificationHome());
             if ($upf->isValid()) {
                 $upf->Save();
             }
         }
     }
     if ($this->getDeleted() == TRUE) {
         //Remove them from the authorization hierarchy, policy group, and pay period schedule.
         //Delete any accruals for them as well.
         //Pay Period Schedule
         $ppslf = new PayPeriodScheduleListFactory();
         $ppslf->getByUserId($this->getId());
         if ($ppslf->getRecordCount() > 0) {
             $pps_obj = $ppslf->getCurrent();
             //Remove user from current schedule.
             $ppsulf = new PayPeriodScheduleUserListFactory();
             $ppsulf->getByPayPeriodScheduleIdAndUserID($pps_obj->getId(), $this->getId());
             Debug::text('Record Count: ' . $ppsulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
             if ($ppsulf->getRecordCount() > 0) {
                 foreach ($ppsulf as $ppsu_obj) {
                     Debug::text('Deleteing from Pay Period Schedule: ' . $ppsu_obj->getPayPeriodSchedule(), __FILE__, __LINE__, __METHOD__, 10);
                     $ppsu_obj->Delete();
                 }
             }
         }
         //Policy Group
         $pglf = new PolicyGroupListFactory();
         $pglf->getByUserIds($this->getId());
         if ($pglf->getRecordCount() > 0) {
             $pg_obj = $pglf->getCurrent();
             $pgulf = new PolicyGroupUserListFactory();
             $pgulf->getByPolicyGroupIdAndUserId($pg_obj->getId(), $this->getId());
             Debug::text('Record Count: ' . $pgulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
             if ($pgulf->getRecordCount() > 0) {
                 foreach ($pgulf as $pgu_obj) {
                     Debug::text('Deleteing from Policy Group: ' . $pgu_obj->getPolicyGroup(), __FILE__, __LINE__, __METHOD__, 10);
                     $pgu_obj->Delete();
                 }
             }
         }
         //Hierarchy
         $hclf = new HierarchyControlListFactory();
         $hclf->getByCompanyId($this->getCompany());
         if ($hclf->getRecordCount() > 0) {
             foreach ($hclf as $hc_obj) {
                 $hf = new HierarchyListFactory();
                 $hf->setUser($this->getID());
                 $hf->setHierarchyControl($hc_obj->getId());
                 $hf->Delete();
             }
             $hf->removeCache(NULL, $hf->getTable(TRUE));
             //On delete we have to delete the entire group.
             unset($hf);
         }
         //Accrual balances
         $alf = new AccrualListFactory();
         $alf->getByUserIdAndCompanyId($this->getId(), $this->getCompany());
         if ($alf->getRecordCount() > 0) {
             foreach ($alf as $a_obj) {
                 $a_obj->setDeleted(TRUE);
                 if ($a_obj->isValid()) {
                     $a_obj->Save();
                 }
             }
         }
     }
     return TRUE;
 }
 static function smartReCalculate($user_id, $user_date_ids, $enable_exception = TRUE, $enable_premature_exceptions = FALSE, $enable_future_exceptions = TRUE)
 {
     if ($user_id == '') {
         return FALSE;
     }
     //Debug::Arr($user_date_ids, 'aUser Date IDs: ', __FILE__, __LINE__, __METHOD__, 10);
     if (!is_array($user_date_ids) and is_int($user_date_ids)) {
         $user_date_ids = array($user_date_ids);
     }
     if (!is_array($user_date_ids)) {
         return FALSE;
     }
     $user_date_ids = array_unique($user_date_ids);
     //Debug::Arr($user_date_ids, 'bUser Date IDs: ', __FILE__, __LINE__, __METHOD__, 10);
     $start_week_day_id = 0;
     $ppslf = new PayPeriodScheduleListFactory();
     $ppslf->getByUserId($user_id);
     if ($ppslf->getRecordCount() == 1) {
         $pps_obj = $ppslf->getCurrent();
         $start_week_day_id = $pps_obj->getStartWeekDay();
     }
     Debug::text('Start Week Day ID: ' . $start_week_day_id, __FILE__, __LINE__, __METHOD__, 10);
     //Get date stamps for all user_date_ids.
     $udlf = new UserDateListFactory();
     $udlf->getByIds($user_date_ids, NULL, array('date_stamp' => 'asc'));
     //Order by date asc
     if ($udlf->getRecordCount() > 0) {
         //Order them, and get the one or more sets of date ranges that need to be recalculated.
         //Need to consider re-calculating multiple weeks at once.
         $i = 0;
         foreach ($udlf as $ud_obj) {
             $start_week_epoch = TTDate::getBeginWeekEpoch($ud_obj->getDateStamp(), $start_week_day_id);
             $end_week_epoch = TTDate::getEndWeekEpoch($ud_obj->getDateStamp(), $start_week_day_id);
             Debug::text('Current Date: ' . TTDate::getDate('DATE', $ud_obj->getDateStamp()) . ' Start Week: ' . TTDate::getDate('DATE', $start_week_epoch) . ' End Week: ' . TTDate::getDate('DATE', $end_week_epoch), __FILE__, __LINE__, __METHOD__, 10);
             if ($i == 0) {
                 $range_arr[$start_week_epoch] = array('start_date' => $ud_obj->getDateStamp(), 'end_date' => $end_week_epoch);
             } else {
                 //Loop through each range extending it if needed.
                 foreach ($range_arr as $tmp_start_week_epoch => $tmp_range) {
                     if ($ud_obj->getDateStamp() >= $tmp_range['start_date'] and $ud_obj->getDateStamp() <= $tmp_range['end_date']) {
                         //Date falls within already existing range
                         continue;
                     } elseif ($ud_obj->getDateStamp() < $tmp_range['start_date'] and $ud_obj->getDateStamp() >= $tmp_start_week_epoch) {
                         //Date falls within the same week, but before the current start date.
                         $range_arr[$tmp_start_week_epoch]['start_date'] = $ud_obj->getDateStamp();
                         Debug::text('Pushing Start Date back...', __FILE__, __LINE__, __METHOD__, 10);
                     } else {
                         //Outside current range. Check to make sure it isn't within another range.
                         if (isset($range_arr[$start_week_epoch])) {
                             //Within another existing week, check to see if we need to extend it.
                             if ($ud_obj->getDateStamp() < $range_arr[$start_week_epoch]['start_date']) {
                                 Debug::text('bPushing Start Date back...', __FILE__, __LINE__, __METHOD__, 10);
                                 $range_arr[$start_week_epoch]['start_date'] = $ud_obj->getDateStamp();
                             }
                         } else {
                             //Not within another existing week
                             Debug::text('Adding new range...', __FILE__, __LINE__, __METHOD__, 10);
                             $range_arr[$start_week_epoch] = array('start_date' => $ud_obj->getDateStamp(), 'end_date' => $end_week_epoch);
                         }
                     }
                 }
                 unset($tmp_range, $tmp_start_week_epoch);
             }
             $i++;
         }
         unset($start_week_epoch, $end_week_epoch, $udlf, $ud_obj);
         if (is_array($range_arr)) {
             ksort($range_arr);
             //Sort range by start week, so recalculating goes in date order.
             //Debug::Arr($range_arr, 'Range Array: ', __FILE__, __LINE__, __METHOD__, 10);
             foreach ($range_arr as $week_range) {
                 $udlf = new UserDateListFactory();
                 $udlf->getByUserIdAndStartDateAndEndDate($user_id, $week_range['start_date'], $week_range['end_date']);
                 if ($udlf->getRecordCount() > 0) {
                     Debug::text('Found days to re-calculate: ' . $udlf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
                     $udlf->StartTransaction();
                     $z = 1;
                     $z_max = $udlf->getRecordCount();
                     foreach ($udlf as $ud_obj) {
                         //We only need to re-calculate exceptions on the exact days specified by user_date_ids.
                         //This was the case before we Over Weekly Time/Over Scheduled Weekly Time exceptions,
                         //Now we have to enable calculating exceptions for the entire week.
                         /*
                         if ( in_array( $ud_obj->getId(), $user_date_ids ) ) {
                         	//Calculate exceptions
                         	Debug::text('Re-calculating day with exceptions: '. $ud_obj->getId() , __FILE__, __LINE__, __METHOD__, 10);
                         	UserDateTotalFactory::reCalculateDay( $ud_obj->getId(), $enable_exception, $enable_premature_exceptions, $enable_future_exceptions );
                         } else {
                         	//Don't calculate exceptions.
                         	UserDateTotalFactory::reCalculateDay( $ud_obj->getId() );
                         }
                         */
                         Debug::text('Re-calculating day with exceptions: ' . $ud_obj->getId(), __FILE__, __LINE__, __METHOD__, 10);
                         if ($z == $z_max) {
                             //Enable recalculating holidays at the end of each week.
                             UserDateTotalFactory::reCalculateDay($ud_obj->getId(), $enable_exception, $enable_premature_exceptions, $enable_future_exceptions, TRUE);
                         } else {
                             UserDateTotalFactory::reCalculateDay($ud_obj->getId(), $enable_exception, $enable_premature_exceptions, $enable_future_exceptions);
                         }
                         $z++;
                     }
                     $udlf->CommitTransaction();
                 }
             }
             return TRUE;
         }
     }
     Debug::text('Returning FALSE!', __FILE__, __LINE__, __METHOD__, 10);
     return FALSE;
 }
Example #11
0
     $ppf->FailTransaction();
 default:
     if (isset($id)) {
         BreadCrumb::setCrumb($title);
         $pplf = new PayPeriodListFactory();
         $pplf->getByIdAndCompanyId($id, $current_company->getId());
         foreach ($pplf as $pp_obj) {
             //Debug::Arr($station,'Department', __FILE__, __LINE__, __METHOD__,10);
             $data = array('id' => $pp_obj->getId(), 'company_id' => $pp_obj->getCompany(), 'pay_period_schedule_id' => $pp_obj->getPayPeriodSchedule(), 'pay_period_schedule_type_id' => $pp_obj->getPayPeriodScheduleObject()->getType(), 'start_date' => $pp_obj->getStartDate(), 'end_date' => $pp_obj->getEndDate(), 'transaction_date' => $pp_obj->getTransactionDate(), 'advance_end_date' => $pp_obj->getAdvanceEndDate(), 'advance_transaction_date' => $pp_obj->getAdvanceTransactionDate(), 'deleted' => $pp_obj->getDeleted(), 'created_date' => $pp_obj->getCreatedDate(), 'created_by' => $pp_obj->getCreatedBy(), 'updated_date' => $pp_obj->getUpdatedDate(), 'updated_by' => $pp_obj->getUpdatedBy(), 'deleted_date' => $pp_obj->getDeletedDate(), 'deleted_by' => $pp_obj->getDeletedBy());
         }
     } else {
         if (isset($pay_period_schedule_id) and $pay_period_schedule_id != '') {
             $ppslf = new PayPeriodScheduleListFactory();
             $ppslf->getByIdAndCompanyId($pay_period_schedule_id, $current_company->getId());
             if ($ppslf->getRecordCount() > 0) {
                 $data['pay_period_schedule_type_id'] = $ppslf->getCurrent()->getType();
             }
             $data['pay_period_schedule_id'] = $pay_period_schedule_id;
             //Get end date of previous pay period, and default the start date of the new pay period to that.
             $pplf = new PayPeriodListFactory();
             $pplf->getByPayPeriodScheduleId($pay_period_schedule_id, 1, NULL, NULL, array('start_date' => 'desc'));
             if ($pplf->getRecordCount() > 0) {
                 foreach ($pplf as $pp_obj) {
                     $data['start_date'] = $pp_obj->getEndDate() + 1;
                     $data['end_date'] = $pp_obj->getEndDate() + 86400;
                 }
             }
         }
     }
     $smarty->assign_by_ref('data', $data);
     break;