function postInstall()
 {
     Debug::text('postInstall: ' . $this->getVersion(), __FILE__, __LINE__, __METHOD__, 9);
     $clf = new CompanyListFactory();
     $clf->StartTransaction();
     $clf->getAll();
     if ($clf->getRecordCount() > 0) {
         foreach ($clf as $c_obj) {
             if ($c_obj->getStatus() == 10) {
                 $ulf = new UserListFactory();
                 $ulf->getHighestEmployeeNumberByCompanyId($c_obj->getId());
                 if ($ulf->getRecordCount() > 0) {
                     $next_available_employee_number = $ulf->getCurrent()->getEmployeeNumber() + 1;
                 } else {
                     $next_available_employee_number = 1;
                 }
                 $ulf->getByCompanyId($c_obj->getId(), NULL, NULL, NULL, array('hire_date' => 'asc'));
                 if ($ulf->getRecordCount() > 0) {
                     foreach ($ulf as $u_obj) {
                         if ($u_obj->getEmployeeNumber() == '') {
                             Debug::text('Setting Employee Number to: ' . $next_available_employee_number . ' for ' . $u_obj->getUserName(), __FILE__, __LINE__, __METHOD__, 9);
                             $u_obj->setEmployeeNumber($next_available_employee_number);
                             if ($u_obj->isValid()) {
                                 $u_obj->Save();
                                 $next_available_employee_number++;
                             }
                         } else {
                             Debug::text('NOT Setting Employee Number for ' . $u_obj->getUserName() . ' already set to: ' . $u_obj->getEmployeeNumber(), __FILE__, __LINE__, __METHOD__, 9);
                         }
                     }
                 }
             }
         }
     }
     //$clf->FailTransaction();
     $clf->CommitTransaction();
     return TRUE;
 }
 function postInstall()
 {
     global $cache;
     Debug::text('postInstall: ' . $this->getVersion(), __FILE__, __LINE__, __METHOD__, 9);
     //Configure currencies for Standard Edition.
     if ($this->getIsUpgrade() == TRUE) {
         $clf = new CompanyListFactory();
         $clf->StartTransaction();
         $clf->getAll();
         if ($clf->getRecordCount() > 0) {
             foreach ($clf as $c_obj) {
                 if ($c_obj->getStatus() == 10) {
                     //Converting to new Accrual Policy table.
                     Debug::text('Converting to new Accrual Policy Table: ' . $c_obj->getName() . ' ID: ' . $c_obj->getId(), __FILE__, __LINE__, __METHOD__, 9);
                     $pglf = new PolicyGroupListFactory();
                     $pglf->getByCompanyId($c_obj->getId());
                     if ($pglf->getRecordCount() > 0) {
                         foreach ($pglf as $pg_obj) {
                             Debug::text('Accrual Policy ID: ' . $pg_obj->getColumn('accrual_policy_id'), __FILE__, __LINE__, __METHOD__, 9);
                             if ($pg_obj->getColumn('accrual_policy_id') != '' and $pg_obj->getColumn('accrual_policy_id') != 0) {
                                 $pg_obj->setAccrualPolicy(array($pg_obj->getColumn('accrual_policy_id')));
                                 if ($pg_obj->isValid()) {
                                     $pg_obj->Save();
                                 }
                             }
                         }
                     }
                     Debug::text('Adding Currency Information to Company: ' . $c_obj->getName() . ' ID: ' . $c_obj->getId(), __FILE__, __LINE__, __METHOD__, 9);
                     $crlf = new CurrencyListFactory();
                     $crlf->getByCompanyId($c_obj->getId());
                     if ($crlf->getRecordCount() == 0) {
                         $cf = new CurrencyFactory();
                         $country_to_currency_map_arr = $cf->getOptions('country_currency');
                         if (isset($country_to_currency_map_arr[$c_obj->getCountry()])) {
                             $base_currency = $country_to_currency_map_arr[$c_obj->getCountry()];
                             Debug::text('Found Base Currency For Country: ' . $c_obj->getCountry() . ' Currency: ' . $base_currency, __FILE__, __LINE__, __METHOD__, 9);
                         } else {
                             Debug::text('DID NOT Find Base Currency For Country: ' . $c_obj->getCountry() . ' Using default USD.', __FILE__, __LINE__, __METHOD__, 9);
                             $base_currency = 'USD';
                         }
                         $cf->setCompany($c_obj->getId());
                         $cf->setStatus(10);
                         $cf->setName($base_currency);
                         $cf->setISOCode($base_currency);
                         $cf->setConversionRate('1.000000000');
                         $cf->setAutoUpdate(FALSE);
                         $cf->setBase(TRUE);
                         $cf->setDefault(TRUE);
                         if ($cf->isValid()) {
                             $base_currency_id = $cf->Save();
                             Debug::text('Base Currency ID: ' . $base_currency_id, __FILE__, __LINE__, __METHOD__, 10);
                             //Set Employee Hire Defaults.
                             $udlf = new UserDefaultListFactory();
                             $udlf->getByCompanyId($c_obj->getId());
                             if ($udlf->getRecordCount() > 0) {
                                 $ud_obj = $udlf->getCurrent();
                                 $ud_obj->setCurrency($base_currency_id);
                                 $ud_obj->setLanguage('en');
                                 if ($ud_obj->isValid()) {
                                     $ud_obj->Save();
                                 }
                             }
                             unset($udlf, $ud_obj);
                             if (is_numeric($base_currency_id)) {
                                 $ulf = new UserListFactory();
                                 $ulf->getByCompanyId($c_obj->getId());
                                 if ($ulf->getRecordCount() > 0) {
                                     foreach ($ulf as $u_obj) {
                                         $user_id = $u_obj->getID();
                                         Debug::text('Setting Base Currency For User: '******' ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10);
                                         $u_obj->setCurrency($base_currency_id);
                                         if ($u_obj->isValid()) {
                                             if ($u_obj->Save() == TRUE) {
                                                 //Set User Default Language
                                                 $uplf = new UserPreferenceListFactory();
                                                 $uplf->getByUserIDAndCompanyID($user_id, $c_obj->getId());
                                                 if ($uplf->getRecordCount() > 0) {
                                                     $up_obj = $uplf->getCurrent();
                                                     $up_obj->setLanguage('en');
                                                     //Englist
                                                     if ($up_obj->isValid()) {
                                                         $up_obj->Save();
                                                     }
                                                 }
                                                 unset($uplf, $up_obj);
                                                 Debug::text('  Setting Base Currency for Pay Stubs, User ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10);
                                                 //Change all pay stubs for this user to the base currency.
                                                 //Do this in a single query for speed purposes.
                                                 $ph = array('currency_id' => $base_currency_id, 'currency_rate' => '1.000000000', 'user_id' => $user_id);
                                                 $query = 'update pay_stub set currency_id = ?, currency_rate = ? where user_id = ?';
                                                 Debug::text('  Pay Stub Currency Query: ' . $query, __FILE__, __LINE__, __METHOD__, 10);
                                                 $u_obj->db->Execute($query, $ph);
                                                 /*
                                                 $pslf = new PayStubListFactory();
                                                 $pslf->getByUserIdAndCompanyId( $user_id, $c_obj->getId() );
                                                 if ( $pslf->getRecordCount() > 0 ) {
                                                 	foreach( $pslf as $ps_obj ) {
                                                 		//Debug::text('    Setting Base Currency for Pay Stub ID: '. $ps_obj->getId(), __FILE__, __LINE__, __METHOD__,10);
                                                 		
                                                 		$ps_obj->setCurrency( $base_currency_id );
                                                 		if ( $ps_obj->isValid() ) {
                                                 			
                                                 			$ps_obj->setEnableLinkedAccruals( FALSE );												
                                                 			$ps_obj->setEnableCalcYTD( FALSE );
                                                 			$ps_obj->setEnableProcessEntries( FALSE );
                                                 			
                                                 			$ps_obj->Save();
                                                 		}
                                                 		
                                                 		unset($ps_obj);
                                                 	}
                                                 }
                                                 unset($pslf);
                                                 */
                                             } else {
                                                 Debug::text('Failed saving user ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10);
                                             }
                                         } else {
                                             Debug::text('Failed saving user ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10);
                                         }
                                         unset($u_obj, $user_id);
                                     }
                                 }
                                 unset($ulf);
                             }
                         }
                         unset($cf);
                     }
                 } else {
                     Debug::text('Company is not active! ' . $c_obj->getId(), __FILE__, __LINE__, __METHOD__, 10);
                 }
                 unset($c_obj, $base_currency, $base_currency_id, $crlf);
             }
         }
         //$clf->FailTransaction();
         $clf->CommitTransaction();
     }
     //Add currency updating to cron.
     $maint_base_path = Environment::getBasePath() . DIRECTORY_SEPARATOR . 'maint' . DIRECTORY_SEPARATOR;
     if (PHP_OS == 'WINNT') {
         $cron_job_base_command = 'php-win.exe ' . $maint_base_path;
     } else {
         $cron_job_base_command = 'php ' . $maint_base_path;
     }
     Debug::text('Cron Job Base Command: ' . $cron_job_base_command, __FILE__, __LINE__, __METHOD__, 9);
     $cjf = new CronJobFactory();
     $cjf->setName('UpdateCurrencyRates');
     $cjf->setMinute(45);
     $cjf->setHour(1);
     $cjf->setDayOfMonth('*');
     $cjf->setMonth('*');
     $cjf->setDayOfWeek('*');
     $cjf->setCommand($cron_job_base_command . 'UpdateCurrencyRates.php');
     $cjf->Save();
     return TRUE;
 }
 function postInstall()
 {
     Debug::text('postInstall: ' . $this->getVersion(), __FILE__, __LINE__, __METHOD__, 9);
     //Copy iButton,Fingerprint,EmployeeNumber (barcode/proximity) fields to new UserIdentification table.
     //Find out if they have both TimeClocks and FingerPrint stations. If they do
     //we need to copy the fingerprint data to both types of UserIdentification rows.
     $clf = new CompanyListFactory();
     $clf->getAll();
     $clf->StartTransaction();
     foreach ($clf as $c_obj) {
         Debug::text('Company: ' . $c_obj->getName(), __FILE__, __LINE__, __METHOD__, 9);
         $max_templates = 4;
         $slf = new StationListFactory();
         $slf->getByCompanyIdAndTypeId($c_obj->getId(), array(30, 40, 50, 100, 110));
         if ($slf->getRecordCount() > 0) {
             $slf_tmp1 = $slf->getByCompanyIdAndTypeId($c_obj->getId(), array(50));
             $griaule_stations = $slf_tmp1->getRecordCount();
             Debug::text('  Found Griaule Stations: ' . $griaule_stations, __FILE__, __LINE__, __METHOD__, 9);
             unset($slf_tmp1);
             $slf_tmp2 = $slf->getByCompanyIdAndTypeId($c_obj->getId(), array(100, 110));
             $zk_stations = $slf_tmp2->getRecordCount();
             Debug::text('  Found ZK Stations: ' . $zk_stations, __FILE__, __LINE__, __METHOD__, 9);
             unset($slf_tmp2);
             $slf_tmp3 = $slf->getByCompanyIdAndTypeId($c_obj->getId(), array(40));
             $barcode_stations = $slf_tmp3->getRecordCount();
             Debug::text('  Found Barcode Stations: ' . $barcode_stations, __FILE__, __LINE__, __METHOD__, 9);
             unset($slf_tmp3);
             //Loop through each user copying their data to the UserIdenfification Table.
             $ulf = new UserListFactory();
             $ulf->getByCompanyID($c_obj->getId());
             if ($ulf->getRecordCount() > 0) {
                 foreach ($ulf as $u_obj) {
                     Debug::text('  User: '******'') {
                         Debug::text('    Converting iButton...', __FILE__, __LINE__, __METHOD__, 9);
                         $uif = new UserIdentificationFactory();
                         $uif->setUser($u_obj->getId());
                         $uif->setType(10);
                         //10=iButton
                         $uif->setNumber(0);
                         $uif->setValue($u_obj->getIButtonID());
                         if ($uif->isValid() == TRUE) {
                             $uif->Save();
                             $u_obj->getIButtonID('');
                         }
                     }
                     if ($u_obj->getRFID() != '') {
                         Debug::text('    Converting RFID...', __FILE__, __LINE__, __METHOD__, 9);
                         $uif = new UserIdentificationFactory();
                         $uif->setUser($u_obj->getId());
                         $uif->setType(40);
                         //40=Proximity
                         $uif->setNumber(0);
                         $uif->setValue($u_obj->getRFID());
                         if ($uif->isValid() == TRUE) {
                             $uif->Save();
                             $u_obj->getRFID('');
                         }
                     }
                     if ($barcode_stations > 0 and $u_obj->getEmployeeNumber() != '') {
                         Debug::text('    Converting EmployeeNumber...', __FILE__, __LINE__, __METHOD__, 9);
                         $uif = new UserIdentificationFactory();
                         $uif->setUser($u_obj->getId());
                         $uif->setType(30);
                         //30=Barcode
                         $uif->setNumber(0);
                         $uif->setValue($u_obj->getEmployeeNumber());
                         if ($uif->isValid() == TRUE) {
                             $uif->Save();
                         }
                     }
                     if ($griaule_stations > 0) {
                         for ($t = 1; $t <= $max_templates; $t++) {
                             $set_fingerprint_function = 'setFingerPrint' . $t;
                             $get_fingerprint_function = 'getFingerPrint' . $t;
                             //Griaule fingerprint templates start with: "p/8B"
                             if ($u_obj->{$get_fingerprint_function}() != '' and substr($u_obj->{$get_fingerprint_function}(), 0, 4) == 'p/8B') {
                                 Debug::text('    Converting Griaule FingerPrint: ' . $t, __FILE__, __LINE__, __METHOD__, 9);
                                 $uif = new UserIdentificationFactory();
                                 $uif->setUser($u_obj->getId());
                                 $uif->setType(20);
                                 //20=Griaule, 100=ZK
                                 $uif->setNumber($t * 10);
                                 $uif->setValue($u_obj->{$get_fingerprint_function}());
                                 if ($uif->isValid() == TRUE) {
                                     $uif->Save();
                                     $u_obj->{$set_fingerprint_function}('');
                                 }
                             }
                         }
                     }
                     if ($zk_stations > 0) {
                         for ($t = 1; $t <= $max_templates; $t++) {
                             $set_fingerprint_function = 'setFingerPrint' . $t;
                             $get_fingerprint_function = 'getFingerPrint' . $t;
                             //ZK fingerprint templates start with: "oco"
                             if ($u_obj->{$get_fingerprint_function}() != '' and substr($u_obj->{$get_fingerprint_function}(), 0, 3) == 'oco') {
                                 Debug::text('    Converting ZK FingerPrint: ' . $t, __FILE__, __LINE__, __METHOD__, 9);
                                 $uif = new UserIdentificationFactory();
                                 $uif->setUser($u_obj->getId());
                                 $uif->setType(100);
                                 //20=Griaule, 100=ZK
                                 $uif->setNumber($t);
                                 $uif->setValue($u_obj->{$get_fingerprint_function}());
                                 if ($uif->isValid() == TRUE) {
                                     $uif->Save();
                                     $u_obj->{$set_fingerprint_function}('');
                                 }
                             }
                         }
                     }
                     if ($u_obj->isValid()) {
                         $u_obj->Save();
                     }
                 }
             }
         }
     }
     $clf->CommitTransaction();
     return TRUE;
 }