function getPayStubEntryAccountObject()
 {
     if (is_object($this->pay_stub_entry_account_obj)) {
         return $this->pay_stub_entry_account_obj;
     } else {
         $psealf = new PayStubEntryAccountListFactory();
         $psealf->getByID($this->getPayStubEntryNameID());
         if ($psealf->getRecordCount() > 0) {
             $this->pay_stub_entry_account_obj = $psealf->getCurrent();
             return $this->pay_stub_entry_account_obj;
         }
         return FALSE;
     }
 }
 static function getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($company_id, $type_id, $name)
 {
     $psealf = new PayStubEntryAccountListFactory();
     $psealf->getByCompanyIdAndTypeAndFuzzyName($company_id, $type_id, $name);
     if ($psealf->getRecordCount() > 0) {
         return $psealf->getCurrent()->getId();
     }
     return FALSE;
 }
 function getByTypeArrayByCompanyIdAndStatusId($company_id, $status_id)
 {
     $psealf = new PayStubEntryAccountListFactory();
     $psealf->getByCompanyIdAndStatusId($company_id, $status_id);
     $pseallf = new PayStubEntryAccountLinkListFactory();
     $pseallf->getByCompanyId($company_id);
     if ($pseallf->getRecordCount() == 0) {
         return FALSE;
     }
     $psea_type_map = $pseallf->getCurrent()->getPayStubEntryAccountIDToTypeIDMap();
     if ($psealf->getRecordCount() > 0) {
         foreach ($psealf as $psea_obj) {
             $entry_name_list[$psea_obj->getType()][] = $psea_obj->getId();
         }
         foreach ($entry_name_list[40] as $key => $entry_name_id) {
             if (isset($psea_type_map[$entry_name_id])) {
                 $tmp_entry_name_list[$entry_name_id] = $entry_name_list[$psea_type_map[$entry_name_id]];
             }
         }
         return $tmp_entry_name_list;
     }
     return FALSE;
 }
     $filter_data['pay_period_ids'][] = Misc::trimSortPrefix($filter_pay_period_id);
 }
 unset($key, $tmp_filter_pay_period_ids, $filter_pay_period_id);
 //if ( isset($filter_data['pay_period_ids']) AND isset($filter_data['user_ids']) ) {
 if (isset($filter_data['pay_period_ids'])) {
     //Get column headers
     $psealf->getByCompanyId($current_company->getId());
     foreach ($psealf as $psea_obj) {
         //$report_columns[$psen_obj->getId()] = $psen_obj->getDescription();
         $report_columns[$psea_obj->getId()] = $psea_obj->getName();
     }
     //var_dump($report_columns);
     $report_columns = Misc::prependArray($static_columns, $report_columns);
     $psealf = new PayStubEntryAccountListFactory();
     $psealf->getByCompanyId($current_company->getId());
     if ($psealf->getRecordCount() > 0) {
         foreach ($psealf as $psea_obj) {
             $psea_arr[$psea_obj->getId()] = array('name' => $psea_obj->getName(), 'debit_account' => $psea_obj->getDebitAccount(), 'credit_account' => $psea_obj->getCreditAccount());
         }
     }
     //var_dump($psea_arr);
     //Get all pay stubs.
     $pslf = new PayStubListFactory();
     //$pslf->getByUserIdAndCompanyIdAndPayPeriodId( $filter_data['user_ids'], $current_company->getId(), $filter_data['pay_period_ids'] );
     $pslf->getSearchByCompanyIdAndArrayCriteria($current_company->getId(), $filter_data);
     if ($pslf->getRecordCount() > 0) {
         $ulf = new UserListFactory();
         $blf = new BranchListFactory();
         $branch_options = $blf->getByCompanyIdArray($current_company->getId());
         //Get Branch ID to Branch Code mapping
         $branch_code_map = array(0 => 0);
 static function releaseAllAccruals($user_id, $effective_date = NULL)
 {
     Debug::Text('Release 100% of all accruals!', __FILE__, __LINE__, __METHOD__, 10);
     if ($user_id == '') {
         return FALSE;
     }
     if ($effective_date == '') {
         $effective_date = TTDate::getTime();
     }
     Debug::Text('Effective Date: ' . TTDate::getDate('DATE+TIME', $effective_date), __FILE__, __LINE__, __METHOD__, 10);
     $ulf = new UserListFactory();
     $ulf->getById($user_id);
     if ($ulf->getRecordCount() > 0) {
         $user_obj = $ulf->getCurrent();
     } else {
         return FALSE;
     }
     //Get all PSE acccount accruals
     $psealf = new PayStubEntryAccountListFactory();
     $psealf->getByCompanyIdAndStatusIdAndTypeId($user_obj->getCompany(), 10, 50);
     if ($psealf->getRecordCount() > 0) {
         $ulf->StartTransaction();
         foreach ($psealf as $psea_obj) {
             //Get PSE account that affects this accrual.
             $psealf_tmp = new PayStubEntryAccountListFactory();
             $psealf_tmp->getByCompanyIdAndAccrualId($user_obj->getCompany(), $psea_obj->getId());
             if ($psealf_tmp->getRecordCount() > 0) {
                 $release_account_id = $psealf_tmp->getCurrent()->getId();
                 $psaf = new PayStubAmendmentFactory();
                 $psaf->setStatus(50);
                 //Active
                 $psaf->setType(20);
                 //Percent
                 $psaf->setUser($user_obj->getId());
                 $psaf->setPayStubEntryNameId($release_account_id);
                 $psaf->setPercentAmount(100);
                 $psaf->setPercentAmountEntryNameId($psea_obj->getId());
                 $psaf->setEffectiveDate($effective_date);
                 $psaf->setDescription('Release Accrual Balance');
                 if ($psaf->isValid()) {
                     Debug::Text('Release Accrual Is Valid!!: ', __FILE__, __LINE__, __METHOD__, 10);
                     $psaf->Save();
                 }
             } else {
                 Debug::Text('No Release Account for this Accrual!!', __FILE__, __LINE__, __METHOD__, 10);
             }
         }
         //$ulf->FailTransaction();
         $ulf->CommitTransaction();
     } else {
         Debug::Text('No Accruals to release...', __FILE__, __LINE__, __METHOD__, 10);
     }
     return FALSE;
 }
 function getPayStubEntryAccountsArray()
 {
     if (is_array($this->pay_stub_entry_accounts_obj)) {
         //Debug::text('Returning Cached data...' , __FILE__, __LINE__, __METHOD__,10);
         return $this->pay_stub_entry_accounts_obj;
     } else {
         $psealf = new PayStubEntryAccountListFactory();
         $psealf->getByCompanyId($this->getUserObject()->getCompany());
         if ($psealf->getRecordCount() > 0) {
             foreach ($psealf as $psea_obj) {
                 $this->pay_stub_entry_accounts_obj[$psea_obj->getId()] = array('type_id' => $psea_obj->getType(), 'accrual_pay_stub_entry_account_id' => $psea_obj->getAccrual());
             }
             //Debug::Arr($this->pay_stub_entry_accounts_obj, ' Pay Stub Entry Accounts ('.count($this->pay_stub_entry_accounts_obj).'): ' , __FILE__, __LINE__, __METHOD__,10);
             return $this->pay_stub_entry_accounts_obj;
         }
         Debug::text('Returning FALSE...', __FILE__, __LINE__, __METHOD__, 10);
         return FALSE;
     }
 }
 function getNextPayStubAccountOrderByTypeId($type_id)
 {
     global $current_company;
     Debug::Text('Type ID: ' . $type_id, __FILE__, __LINE__, __METHOD__, 10);
     if (!is_object($current_company)) {
         return FALSE;
     }
     if ($type_id == '') {
         return FALSE;
     }
     $psealf = new PayStubEntryAccountListFactory();
     $psealf->getHighestOrderByCompanyIdAndTypeId($current_company->getId(), $type_id);
     if ($psealf->getRecordCount() > 0) {
         foreach ($psealf as $psea_obj) {
             return $psea_obj->getOrder() + 1;
         }
     }
     return FALSE;
 }
 function Validate()
 {
     if ($this->getType() == 50) {
         //If the PSE account is an accrual, it can't link to one as well.
         $this->setAccrual(NULL);
     }
     //Make sure this account doesn't point to itself as an accrual.
     if ($this->isNew() == FALSE and $this->getAccrual() == $this->getId()) {
         $this->Validator->isTrue('accrual', FALSE, TTi18n::gettext('Accrual account is invalid'));
     }
     //Make sure PS order is correct, in that types can't be separated by total or accrual accounts.
     $pseallf = new PayStubEntryAccountLinkListFactory();
     $pseallf->getByCompanyId($this->getCompany());
     if ($pseallf->getRecordCount() > 0) {
         $pseal_obj = $pseallf->getCurrent();
         $psealf = new PayStubEntryAccountListFactory();
         $psealf->getByCompanyIdAndTypeId($this->getCompany(), 40);
         if ($psealf->getRecordCount() > 0) {
             foreach ($psealf as $psea_obj) {
                 $psea_map[$psea_obj->getId()] = $psea_obj->getOrder();
             }
             unset($psea_obj);
         }
         switch ($this->getType()) {
             case 10:
                 //Earning
                 //Greater the 0, less then Total Gross Account
                 if (isset($psea_map[$pseal_obj->getTotalGross()])) {
                     $min_ps_order = 0;
                     $max_ps_order = $psea_map[$pseal_obj->getTotalGross()];
                 }
                 break;
             case 20:
                 //EE Deduction
                 //Greater then Total Gross Account, less then Total Employee Deduction
                 if (isset($psea_map[$pseal_obj->getTotalGross()]) and isset($psea_map[$pseal_obj->getTotalEmployeeDeduction()])) {
                     $min_ps_order = $psea_map[$pseal_obj->getTotalGross()];
                     $max_ps_order = $psea_map[$pseal_obj->getTotalEmployeeDeduction()];
                 }
                 break;
             case 30:
                 //ER Deduction
                 //Greater then Net Pay Account, less then Total Employer Deduction
                 if (isset($psea_map[$pseal_obj->getTotalNetPay()]) and isset($psea_map[$pseal_obj->getTotalEmployerDeduction()])) {
                     $min_ps_order = $psea_map[$pseal_obj->getTotalNetPay()];
                     $max_ps_order = $psea_map[$pseal_obj->getTotalEmployerDeduction()];
                 }
                 break;
             case 50:
                 //Accrual
                 //Greater then Total Employer Deduction
                 if (isset($psea_map[$pseal_obj->getTotalEmployerDeduction()])) {
                     $min_ps_order = $psea_map[$pseal_obj->getTotalEmployerDeduction()];
                     $max_ps_order = 10001;
                 }
                 break;
         }
         if (isset($min_ps_order) and isset($max_ps_order) and ($this->getOrder() <= $min_ps_order or $this->getOrder() >= $max_ps_order)) {
             Debug::text('PS Order... Min: ' . $min_ps_order . ' Max: ' . $max_ps_order, __FILE__, __LINE__, __METHOD__, 10);
             $this->Validator->isTrue('ps_order', FALSE, TTi18n::gettext('Order is invalid for this type of account, it must be between') . ' ' . ($min_ps_order + 1) . ' ' . TTi18n::gettext('and') . ' ' . ($max_ps_order - 1));
         }
     }
     return TRUE;
 }