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;
 }