4314 lines
		
	
	
		
			310 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			4314 lines
		
	
	
		
			310 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php /** @noinspection PhpMissingDocCommentInspection */
 | 
						|
/*********************************************************************************
 | 
						|
 *
 | 
						|
 * TimeTrex is a Workforce Management program developed by
 | 
						|
 * TimeTrex Software Inc. Copyright (C) 2003 - 2021 TimeTrex Software Inc.
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify it under
 | 
						|
 * the terms of the GNU Affero General Public License version 3 as published by
 | 
						|
 * the Free Software Foundation with the addition of the following permission
 | 
						|
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 | 
						|
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY TIMETREX, TIMETREX DISCLAIMS THE
 | 
						|
 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						|
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
						|
 * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
 | 
						|
 * details.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Affero General Public License along
 | 
						|
 * with this program; if not, see http://www.gnu.org/licenses or write to the Free
 | 
						|
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
 * 02110-1301 USA.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * You can contact TimeTrex headquarters at Unit 22 - 2475 Dobbin Rd. Suite
 | 
						|
 * #292 West Kelowna, BC V4T 2E9, Canada or at email address info@timetrex.com.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * The interactive user interfaces in modified source and object code versions
 | 
						|
 * of this program must display Appropriate Legal Notices, as required under
 | 
						|
 * Section 5 of the GNU Affero General Public License version 3.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * In accordance with Section 7(b) of the GNU Affero General Public License
 | 
						|
 * version 3, these Appropriate Legal Notices must retain the display of the
 | 
						|
 * "Powered by TimeTrex" logo. If the display of the logo is not reasonably
 | 
						|
 * feasible for technical reasons, the Appropriate Legal Notices must display
 | 
						|
 * the words "Powered by TimeTrex".
 | 
						|
 *
 | 
						|
 ********************************************************************************/
 | 
						|
 | 
						|
class PayrollRemittanceAgencyEventTest extends PHPUnit\Framework\TestCase {
 | 
						|
	protected $company_id = null;
 | 
						|
	protected $user_id = null;
 | 
						|
	protected $pay_period_schedule_id = null;
 | 
						|
	protected $pay_period_objs = null;
 | 
						|
	protected $pay_stub_account_link_arr = null;
 | 
						|
	protected $legal_entity_id = null;
 | 
						|
	protected $agency_id = null;
 | 
						|
 | 
						|
	public function setUp(): void {
 | 
						|
		global $dd;
 | 
						|
		Debug::text( 'Running setUp(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		TTDate::setTimeZone( 'America/Vancouver', true ); //Due to being a singleton and PHPUnit resetting the state, always force the timezone to be set.
 | 
						|
 | 
						|
		$dd = new DemoData();
 | 
						|
		$dd->setEnableQuickPunch( false ); //Helps prevent duplicate punch IDs and validation failures.
 | 
						|
		$dd->setUserNamePostFix( '_' . uniqid( null, true ) ); //Needs to be super random to prevent conflicts and random failing tests.
 | 
						|
		$this->company_id = $dd->createCompany();
 | 
						|
		$this->legal_entity_id = $dd->createLegalEntity( $this->company_id, 10 );
 | 
						|
		Debug::text( 'Company ID: ' . $this->company_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		Debug::text( 'Legal Entity ID: ' . $this->legal_entity_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//This is only needed to log in with the UI. comment this line out for production
 | 
						|
		//$dd->createPermissionGroups( $this->company_id, 40 ); //Administrator only.
 | 
						|
 | 
						|
		$currency_id = $dd->createCurrency( $this->company_id, 10 );
 | 
						|
		$dd->createUserWageGroups( $this->company_id );
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 100 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		//Use a consistent hire date, otherwise its difficult to get things correct due to the hire date being in different parts or different pay periods.
 | 
						|
		//Make sure it is not on a pay period start date though.
 | 
						|
		$user_obj->setHireDate( strtotime( '05-Mar-2017' ) ); //Must not be in the future either, otherwise it could cause failures when the date passes into the past.
 | 
						|
		$user_obj->Save( false );
 | 
						|
 | 
						|
		$rsa_obj = TTnew( 'RemittanceSourceAccountFactory' ); /** @var RemittanceSourceAccountFactory $rsa_obj */
 | 
						|
		$rsa_obj->setName( 'Test source account' );
 | 
						|
		$rsa_obj->setLegalEntity( $this->legal_entity_id );
 | 
						|
		$rsa_obj->setCompany( $this->company_id );
 | 
						|
		$rsa_obj->setStatus( 10 );
 | 
						|
		$rsa_obj->setType( 2000 );
 | 
						|
		$rsa_obj->setCountry( 'US' );
 | 
						|
		$rsa_obj->setDataFormat( 10 );
 | 
						|
		$rsa_obj->setLastTransactionNumber( 111 );
 | 
						|
		$rsa_obj->setCurrency( $currency_id );
 | 
						|
		$rsa_id = $rsa_obj->Save();
 | 
						|
 | 
						|
		$praf = TTnew( 'PayrollRemittanceAgencyFactory' ); /** @var PayrollRemittanceAgencyFactory $praf */
 | 
						|
 | 
						|
		$praf->setName( 'Testing Agency' );
 | 
						|
		$praf->setLegalEntity( $this->legal_entity_id );
 | 
						|
		$praf->setStatus( 10 );
 | 
						|
		$praf->setType( 10 );
 | 
						|
		$praf->setCountry( 'CA' );
 | 
						|
		//$praf->setProvince( 'NY' );
 | 
						|
		$praf->setAgency( '10:CA:00:00:0010' );
 | 
						|
		$praf->setContactUser( $this->user_id );
 | 
						|
		$praf->setRemittanceSourceAccount( $rsa_id );
 | 
						|
		$praf->setPrimaryIdentification( '123456789RP0001' );
 | 
						|
 | 
						|
		if ( $praf->isValid() ) {
 | 
						|
			$this->agency_id = $praf->Save();
 | 
						|
		} else {
 | 
						|
			$this->assertEquals( true, false, $praf->Validator->getTextErrors() );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $this->user_id ), 'company_id is not a UUID' );
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $this->company_id ), 'user_id is not a UUID' );
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $this->agency_id ), 'agency_id is not a UUID' );
 | 
						|
	}
 | 
						|
 | 
						|
	public function tearDown(): void {
 | 
						|
		Debug::text( 'Running tearDown(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
	}
 | 
						|
 | 
						|
	function createPayStubAccounts() {
 | 
						|
		Debug::text( 'Saving.... Employee Deduction - Other', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$pseaf = new PayStubEntryAccountFactory();
 | 
						|
		$pseaf->setCompany( $this->company_id );
 | 
						|
		$pseaf->setStatus( 10 );
 | 
						|
		$pseaf->setType( 20 );
 | 
						|
		$pseaf->setName( 'Other' );
 | 
						|
		$pseaf->setOrder( 290 );
 | 
						|
 | 
						|
		if ( $pseaf->isValid() ) {
 | 
						|
			$pseaf->Save();
 | 
						|
		}
 | 
						|
 | 
						|
		Debug::text( 'Saving.... Employee Deduction - Other2', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$pseaf = new PayStubEntryAccountFactory();
 | 
						|
		$pseaf->setCompany( $this->company_id );
 | 
						|
		$pseaf->setStatus( 10 );
 | 
						|
		$pseaf->setType( 20 );
 | 
						|
		$pseaf->setName( 'Other2' );
 | 
						|
		$pseaf->setOrder( 291 );
 | 
						|
 | 
						|
		if ( $pseaf->isValid() ) {
 | 
						|
			$pseaf->Save();
 | 
						|
		}
 | 
						|
 | 
						|
		Debug::text( 'Saving.... Employee Deduction - EI', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$pseaf = new PayStubEntryAccountFactory();
 | 
						|
		$pseaf->setCompany( $this->company_id );
 | 
						|
		$pseaf->setStatus( 10 );
 | 
						|
		$pseaf->setType( 20 );
 | 
						|
		$pseaf->setName( 'EI' );
 | 
						|
		$pseaf->setOrder( 292 );
 | 
						|
 | 
						|
		if ( $pseaf->isValid() ) {
 | 
						|
			$pseaf->Save();
 | 
						|
		}
 | 
						|
 | 
						|
		Debug::text( 'Saving.... Employee Deduction - CPP', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$pseaf = new PayStubEntryAccountFactory();
 | 
						|
		$pseaf->setCompany( $this->company_id );
 | 
						|
		$pseaf->setStatus( 10 );
 | 
						|
		$pseaf->setType( 20 );
 | 
						|
		$pseaf->setName( 'CPP' );
 | 
						|
		$pseaf->setOrder( 293 );
 | 
						|
 | 
						|
		if ( $pseaf->isValid() ) {
 | 
						|
			$pseaf->Save();
 | 
						|
		}
 | 
						|
 | 
						|
		//Link Account EI and CPP accounts
 | 
						|
		$pseallf = new PayStubEntryAccountLinkListFactory();
 | 
						|
		$pseallf->getByCompanyId( $this->company_id );
 | 
						|
		if ( $pseallf->getRecordCount() > 0 ) {
 | 
						|
			$pseal_obj = $pseallf->getCurrent();
 | 
						|
			$pseal_obj->setEmployeeEI( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 20, 'EI' ) );
 | 
						|
			$pseal_obj->setEmployeeCPP( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 20, 'CPP' ) );
 | 
						|
			$pseal_obj->Save();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	function createPayPeriodSchedule() {
 | 
						|
		$ppsf = new PayPeriodScheduleFactory();
 | 
						|
 | 
						|
		$ppsf->setCompany( $this->company_id );
 | 
						|
		//$ppsf->setName( 'Bi-Weekly'.rand(1000,9999) );
 | 
						|
		$ppsf->setName( 'Bi-Weekly' );
 | 
						|
		$ppsf->setDescription( 'Pay every two weeks' );
 | 
						|
		$ppsf->setType( 20 );
 | 
						|
		$ppsf->setStartWeekDay( 0 );
 | 
						|
 | 
						|
 | 
						|
		$anchor_date = TTDate::getBeginWeekEpoch( TTDate::getBeginYearEpoch() ); //Start 6 weeks ago
 | 
						|
 | 
						|
		$ppsf->setAnchorDate( $anchor_date );
 | 
						|
 | 
						|
		$ppsf->setStartDayOfWeek( TTDate::getDayOfWeek( $anchor_date ) );
 | 
						|
		$ppsf->setTransactionDate( 7 );
 | 
						|
 | 
						|
		$ppsf->setTransactionDateBusinessDay( true );
 | 
						|
		$ppsf->setTimeZone( 'America/Vancouver' );
 | 
						|
 | 
						|
		$ppsf->setDayStartTime( 0 );
 | 
						|
		$ppsf->setNewDayTriggerTime( ( 4 * 3600 ) );
 | 
						|
		$ppsf->setMaximumShiftTime( ( 16 * 3600 ) );
 | 
						|
 | 
						|
		$ppsf->setEnableInitialPayPeriods( false );
 | 
						|
		if ( $ppsf->isValid() ) {
 | 
						|
			$insert_id = $ppsf->Save( false );
 | 
						|
			Debug::Text( 'Pay Period Schedule ID: ' . $insert_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
			$ppsf->setUser( [ $this->user_id ] );
 | 
						|
			$ppsf->Save();
 | 
						|
 | 
						|
			$this->pay_period_schedule_id = $insert_id;
 | 
						|
 | 
						|
			return $insert_id;
 | 
						|
		}
 | 
						|
 | 
						|
		Debug::Text( 'Failed Creating Pay Period Schedule!', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
 | 
						|
	function addUserToPayPeriodSchedule( $pay_period_schedule_id, $user_id ) {
 | 
						|
		$ppsuf = new PayPeriodScheduleUserFactory();
 | 
						|
		$ppsuf->setUser( $user_id );
 | 
						|
		$ppsuf->setPayPeriodSchedule( $pay_period_schedule_id );
 | 
						|
		if ( $ppsuf->isValid() ) {
 | 
						|
			$ppsuf->save();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	function createPayPeriods( $initial_date, $pay_period_schedule_id ) {
 | 
						|
		$max_pay_periods = 35;
 | 
						|
 | 
						|
		$ppslf = new PayPeriodScheduleListFactory();
 | 
						|
		$ppslf->getById( $pay_period_schedule_id );
 | 
						|
		if ( $ppslf->getRecordCount() > 0 ) {
 | 
						|
			$pps_obj = $ppslf->getCurrent();
 | 
						|
 | 
						|
			$end_date = null;
 | 
						|
			for ( $i = 0; $i < $max_pay_periods; $i++ ) {
 | 
						|
				if ( $i == 0 ) {
 | 
						|
					if ( $initial_date !== false ) {
 | 
						|
						$end_date = $initial_date;
 | 
						|
					} else {
 | 
						|
						$end_date = TTDate::getBeginWeekEpoch( TTDate::incrementDate( time(), -42, 'day' ) );
 | 
						|
					}
 | 
						|
				} else {
 | 
						|
					$end_date = TTDate::incrementDate( $end_date, 14, 'day' );
 | 
						|
				}
 | 
						|
 | 
						|
				Debug::Text( 'I: ' . $i . ' End Date: ' . TTDate::getDate( 'DATE+TIME', $end_date ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
				$pps_obj->createNextPayPeriod( $end_date, ( 86400 + 3600 ), false ); //Don't import punches, as that causes deadlocks when running tests in parallel.
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	function getAllPayPeriods( $pay_period_schedule_id ) {
 | 
						|
		$pplf = new PayPeriodListFactory();
 | 
						|
		//$pplf->getByCompanyId( $this->company_id );
 | 
						|
		$pplf->getByPayPeriodScheduleId( $pay_period_schedule_id );
 | 
						|
		if ( $pplf->getRecordCount() > 0 ) {
 | 
						|
			foreach ( $pplf as $pp_obj ) {
 | 
						|
				Debug::text( 'Pay Period... Start: ' . TTDate::getDate( 'DATE+TIME', $pp_obj->getStartDate() ) . ' End: ' . TTDate::getDate( 'DATE+TIME', $pp_obj->getEndDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
				$this->pay_period_objs[] = $pp_obj;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		$this->pay_period_objs = array_reverse( $this->pay_period_objs );
 | 
						|
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	function getUserObject( $user_id ) {
 | 
						|
		$ulf = TTNew( 'UserListFactory' ); /** @var UserListFactory $ulf */
 | 
						|
		$ulf->getById( $user_id );
 | 
						|
		if ( $ulf->getRecordCount() > 0 ) {
 | 
						|
			return $ulf->getCurrent();
 | 
						|
		}
 | 
						|
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testWeekly
 | 
						|
	 */
 | 
						|
	function testWeekly() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setDayOfWeek( 0 ); //Sunday
 | 
						|
		$praef->setFrequency( 5100 );
 | 
						|
 | 
						|
		//time edges of 01-Dec 2016
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Nov-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 12:00AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Dec-2016 12:00AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		//time edges of 04-Dec 2016
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Dec-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Dec-2016 12:00AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		//checking every day for a week (like cron)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Nov-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//forward day of week edge
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '11-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		//2 weeks spanning a year edge (like cron)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '18-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '24-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '25-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '25-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '25-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//daylight savings
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Mar-2017 01:59AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Mar-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '18-Mar-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Mar-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Mar-2017 02:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Mar-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '18-Mar-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Mar-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Mar-2017 11:59AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Mar-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '18-Mar-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Mar-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Nov-2017 01:59AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Nov-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Nov-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Nov-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Nov-2017 02:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Nov-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Nov-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Nov-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Nov-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Nov-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Nov-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Nov-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chaining test (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//08-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//22-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//29-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '29-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '04-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Feb-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Jan-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '29-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '04-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Feb-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testMonthly
 | 
						|
	 */
 | 
						|
	function testMonthly() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Nov-2016' ) );
 | 
						|
 | 
						|
		//Testing minutes edge
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Oct-2016 01:00PM' ) ); //Skips to effective date and goes from there no matter what.
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Nov-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Nov-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Dec-2016 12:00AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//Check that last day of the month is always in the next month.
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '30-Dec-2019' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2019 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2020 12:00PM' ) ) ); //Next Weekday
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Feb-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Feb-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Mar-2020 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2020' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Dec-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Mar-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Mar-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( '-1' ); //Should be the same as using 31 days.
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2020' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Dec-2019 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2020 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//Check that leap years don't overflow.
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2015 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//Chained test (like wizard)
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Dec-2016' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Dec-2016 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Mar-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Apr-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( 13 );
 | 
						|
		$seed_date = TTDate::getMiddleDayEpoch( strtotime( '13-Dec-' . ( date( 'Y' ) - 1 ) . ' 12:00PM' ) );
 | 
						|
		//Run current whole year
 | 
						|
		for ( $x = 0; $x <= 365; $x++ ) {
 | 
						|
			Debug::Text( 'testLoopMonthly '.$x.' seed_date: '. TTDate::getDate('DATE+TIME', $seed_date), __FILE__, __LINE__, __METHOD__, 10);
 | 
						|
 | 
						|
			$due_date = TTDate::getDateOfNextDayOfMonth( ( $seed_date + 86400 ), false, $praef->getPrimaryDayOfMonth() );
 | 
						|
			$month_before_due_date = TTDate::incrementDate( $due_date, -1, 'month' );
 | 
						|
 | 
						|
			$start_date = TTDate::getBeginDayEpoch( TTDate::getBeginMonthEpoch( $month_before_due_date ) );
 | 
						|
			$end_date = TTDate::getEndDayEpoch( TTDate::getEndMonthEpoch( $month_before_due_date ) );
 | 
						|
			$due_date = TTDate::getMiddleDayEpoch( $due_date );
 | 
						|
 | 
						|
			Debug::Text("compare start_date: ".date('r', $start_date), __FILE__, __LINE__, __METHOD__, 10);
 | 
						|
			Debug::Text("compare end_date: ".date('r', $end_date), __FILE__, __LINE__, __METHOD__, 10);
 | 
						|
			Debug::Text("compare due_date: ".date('r', $due_date), __FILE__, __LINE__, __METHOD__, 10);
 | 
						|
 | 
						|
			$result = $praef->calculateNextDate( $seed_date );
 | 
						|
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', $start_date ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', $end_date ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', $due_date ) );
 | 
						|
			$seed_date = $result['due_date'];
 | 
						|
		}
 | 
						|
 | 
						|
		//Special case where 15-May-2021 falls on a Sat, gets back dated to 14-May, then keeps moving forward from there.
 | 
						|
		$praef->getPayrollRemittanceAgencyObject()->setAlwaysOnWeekDay( 1 ); //Previous Business Day
 | 
						|
		$praef->setPrimaryDayOfMonth( 15 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Feb-2021' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Feb-2021 01:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Mar-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Apr-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Apr-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-May-2021 12:00PM' ) ) ); //15th is a Sat, move back to Fri.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//14-May-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Jun-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//Test several days before the due date on the 15th.
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '14-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		//Test several days after the due date on the 15th.
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '17-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '18-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Jun-2021 12:00PM' )  );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jul-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	//biweekly frequency is commented out in the factory.
 | 
						|
//	function testBiWeekly() {
 | 
						|
//		$praef = TTnew('PayrollRemittanceAgencyEventFactory');
 | 
						|
//		$praef->setFrequency( 5000 );
 | 
						|
//		$praef->setDayOfWeek(1);
 | 
						|
//		$praef->setEffectiveDate(strtotime('01-Dec-2015'));
 | 
						|
//
 | 
						|
//		//time edge
 | 
						|
//		$result = $praef->calculateNextDate( strtotime('01-Dec-2016') );
 | 
						|
//		$this->assertEquals( date('r', $result['start_date']), date('r', strtotime('27-nov-2016 12:00PM')) );
 | 
						|
//		$this->assertEquals( date('r', $result['end_date']), date('r', strtotime('11-Dec-2016 12:00PM')) );
 | 
						|
//		$this->assertEquals( date('r', $result['due_date']), date('r', strtotime('05-Dec-2016 12:00PM')) );
 | 
						|
//
 | 
						|
//		$praef->setDayOfWeek(2);
 | 
						|
//		$this->assertEquals( date('r', $praef->calculateNextDate( strtotime('01-Dec-2016') )), date('r', strtotime('20-Dec-2016 12:00PM')) );
 | 
						|
//		$praef->setDayOfWeek(4);
 | 
						|
//		$this->assertEquals( date('r', $praef->calculateNextDate( strtotime('23-Feb-2016') )), date('r', strtotime('10-Mar-2016 12:00PM')) );
 | 
						|
//	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testAnnual
 | 
						|
	 */
 | 
						|
	function testAnnual() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 1 );
 | 
						|
		$praef->setPrimaryMonth( 12 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Dec-2016' ) );
 | 
						|
 | 
						|
		//testing time edges/variations
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2016 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 12 );
 | 
						|
		$praef->setPrimaryMonth( 2 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Dec-2012' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2014  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2014  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2015 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2013  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2013  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2014 12:00PM' ) ) );
 | 
						|
 | 
						|
		//testing a few consecutive days ( like cron )
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Feb-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2013  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2013  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2014 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Feb-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2013  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2013  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2014 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Feb-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2014  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2014  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2015 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Feb-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2014  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2014  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2015 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chained test ( like wizard )
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 12 );
 | 
						|
		$praef->setPrimaryMonth( 2 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Dec-2012' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2014' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2014 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2014 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2015 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//12-Feb-2015 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2015 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//12-Feb-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//12-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Feb-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chained loop test.
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setPrimaryMonth( 2 );
 | 
						|
		$praef->setEffectiveDate( time() );
 | 
						|
		$epoch = TTDate::getMiddleDayEpoch( $praef->getEffectiveDate() );
 | 
						|
		for ( $i = 0; $i < 25; $i++ ) {
 | 
						|
			$artificial_match_value = mktime( 0, 0, 0, $praef->getPrimaryMonth(), $praef->getPrimaryDayOfMonth(), date( 'Y', $epoch ) );
 | 
						|
			$artificial_match_value = TTDate::getMiddleDayEpoch( $artificial_match_value );
 | 
						|
			if ( $artificial_match_value <= $epoch ) {
 | 
						|
				$artificial_match_value = TTDate::incrementDate( $artificial_match_value, 1, 'year' );
 | 
						|
			}
 | 
						|
			$year_before_match = TTDate::incrementDate( $artificial_match_value, -1, 'year' );
 | 
						|
			$result = $praef->calculateNextDate( $epoch );
 | 
						|
			$epoch = $result['due_date'];
 | 
						|
			$start_date = TTDate::getBeginDayEpoch( TTDate::getBeginYearEpoch( $year_before_match ) );
 | 
						|
			$end_date = TTDate::getEndDayEpoch( TTDate::getEndYearEpoch( $year_before_match ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', $start_date ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', $end_date ) );
 | 
						|
			$this->assertEquals( date( 'r', $epoch ), date( 'r', $artificial_match_value ) );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testQuarterlyA
 | 
						|
	 */
 | 
						|
	function testQuarterlyA() {
 | 
						|
		Debug::Text( 'testQuarterly', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 3000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 1 );
 | 
						|
		$praef->setQuarterMonth( 1 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
 | 
						|
		//chained test (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jan-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Apr-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Apr-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jul-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jul-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Oct-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Oct-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//Simulate adjusting for a weekend/holiday
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Nov-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Nov-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 3000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 1 );
 | 
						|
		$praef->setQuarterMonth( 1 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		//change quarter month
 | 
						|
		$praef->setQuarterMonth( 2 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Sep-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Nov-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setQuarterMonth( 1 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 3 );
 | 
						|
		//based off effective date
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Sep-1981 12:00PM' ) ); //Before effective date, so it gets set to that instead: '01-Jan-2016'
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Apr-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		//try a really old one
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-1981' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Sep-1981 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-1981  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-1981  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Oct-1981 12:00PM' ) ) );
 | 
						|
 | 
						|
		//try a far future one
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2025' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Sep-1981 12:00PM' ) ); //Before effective date, so it gets set to that instead: '01-Jan-2016'
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2025 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2025 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Apr-2025 12:00PM' ) ) );
 | 
						|
 | 
						|
		//leap year hitting the extra day with an overshot last day of month
 | 
						|
		//31st and month = 2 (feb)
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setQuarterMonth( 2 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
 | 
						|
		//checking for leap year overflow
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
		$praef->setPrimaryDayOfMonth( 28 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Feb-2016 12:00PM' ) ) );
 | 
						|
		$praef->setPrimaryDayOfMonth( 29 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
		$praef->setPrimaryDayOfMonth( 30 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testQuarterlyB
 | 
						|
	 */
 | 
						|
	function testQuarterlyB() {
 | 
						|
		Debug::Text( 'testQuarterly', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 3000 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setQuarterMonth( 1 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
 | 
						|
		//chained test (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jan-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Apr-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jul-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Oct-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( 31 );
 | 
						|
		$praef->setQuarterMonth( 2 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
 | 
						|
		//chained test (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2015 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2015  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2015  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Feb-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jan-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-May-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Apr-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Aug-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Jul-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Nov-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //01-Oct-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Feb-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testSemiWeekly
 | 
						|
	 */
 | 
						|
	function testSemiWeekly() {
 | 
						|
		//Wednesday, Thursday, Friday = Wednesday. Saturday, Sunday, Monday, Tuesday = Friday
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 64000 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2017' ) );
 | 
						|
 | 
						|
		//test consecutive days (like cron)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '02-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '05-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '02-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '05-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '09-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '12-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//chained test (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Sep-2017 12:00PM' ) ); //Fri
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //06-Sep-2017 12:00PM -- Wed
 | 
						|
		//$result = $praef->calculateNextDate( strtotime( '06-Sep-2017 12:00PM' ) ); //06-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '02-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '05-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //08-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '06-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '08-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '13-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //13-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '09-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '12-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //15-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '13-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //20-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '19-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Sep-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//
 | 
						|
		//Test spanning quarter/year. Should be broken down into two separate periods.
 | 
						|
		//
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Sep-2020 12:00PM' ) ); //30-Sep-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Sep-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Sep-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '02-Oct-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //30-Sep-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Sep-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '07-Oct-2020 11:59:00AM' ) ) ); //Since this is the 1st deposit for this period, due date is 60 second before noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 07-Oct-2020 11:59:59AM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '02-Oct-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '07-Oct-2020 12:00PM' ) ) ); //This is the 2nd deposit for this period, so due date is right at noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 07-Oct-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '03-Oct-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '06-Oct-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '09-Oct-2020 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Mar-2019 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Mar-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '26-Mar-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '29-Mar-2019 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 29-Mar-2019 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '27-Mar-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Mar-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Apr-2019 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 03-Apr-2019 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Mar-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Apr-2019 11:59:00AM' ) ) ); //Since this is the 1st deposit for this period, due date is 60 second before noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 05-Apr-2019 11:59:00AM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '02-Apr-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Apr-2019 12:00PM' ) ) ); //This is the 2nd deposit for this period, so due date is right at noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 05-Apr-2019 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '03-Apr-2019 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '05-Apr-2019 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Apr-2019 12:00PM' ) ) ); //This is the 2nd deposit for this period, so due date is right at noon.
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Dec-2020 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '19-Dec-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Dec-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Dec-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 25-Dec-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Dec-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Dec-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Dec-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 30-Dec-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Dec-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Dec-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 01-Jan-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '30-Dec-2020 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2020 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Jan-2021 11:59AM' ) ) ); //Since this is the 1st deposit for this period, due date is 60 second before noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 06-Jan-2021 11:59PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Jan-2021 12:00PM' ) ) ); //This is the 2nd deposit for this period, so due date is right at noon.
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //Due Date: 06-Jan-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '02-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '05-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testAcceleratedThreshold1
 | 
						|
	 */
 | 
						|
	function testAcceleratedThreshold1() {
 | 
						|
		// 10th and 25th of each month. If transaction date falls between 1-15th of the month, pay by 25th. If it falls between 16th and last day, pay on the 10th of the next month.
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 50000 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
		//tets consecutive days (like cron)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '14-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '17-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '18-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//chained test(like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Sep-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Oct-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Oct-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Oct-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Oct-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Oct-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Oct-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Nov-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Nov-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Nov-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Nov-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Nov-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Nov-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testAcceleratedThreshold2A
 | 
						|
	 */
 | 
						|
	function testAcceleratedThreshold2A() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 51000 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Dec-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Jan-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jan-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '14-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jan-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '17-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '18-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '21-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jan-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '24-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jan-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '17-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '14-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '17-Feb-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Feb-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '21-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Feb-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2021 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Feb-2021 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2021 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2021 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//consecutive days (like cron)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '12-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chained tests (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Jul-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '19-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //17-Jul-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //24-Jul-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Jul-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //03-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Aug-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Aug-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Aug-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '17-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //17-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //24-Aug-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Aug-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Sep-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testAcceleratedThreshold2B
 | 
						|
	 */
 | 
						|
	function testAcceleratedThreshold2B() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$pra_obj = $praef->getPayrollRemittanceAgencyObject();
 | 
						|
		$praef->setFrequency( 51000 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
 | 
						|
		$rhf_xmas = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_xmas */
 | 
						|
		$rhf_xmas->setCompany( $this->company_id );
 | 
						|
		$rhf_xmas->setName( 'Test - Xmas' );
 | 
						|
		$rhf_xmas->setType( 10 );
 | 
						|
		$rhf_xmas->setDayOfMonth( 25 );
 | 
						|
		$rhf_xmas->setMonth( 12 );
 | 
						|
		$holiday_policy_ids[] = $rhf_xmas->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - Boxing Day' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 26 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - NewYear' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 1 );
 | 
						|
		$rhf_box->setMonth( 1 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
 | 
						|
		$pra_obj->setRecurringHoliday( $holiday_policy_ids );
 | 
						|
		$holidays = $pra_obj->getRecurringHoliday();
 | 
						|
		$this->assertEquals( 3, count( $holidays ), 'Holiday Count is wrong' );
 | 
						|
 | 
						|
		$holidates = $praef->getRecurringHolidayDates( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$this->assertEquals( 3, count( $holidates ), 'Holiday date Count is wrong: ' . count( $holidates ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '15-Dec-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '21-Dec-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '22-Dec-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Jan-2018 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testWeekendAvoidance
 | 
						|
	 */
 | 
						|
	function testWeekendAvoidance() {
 | 
						|
		$praf = TTnew( 'PayrollRemittanceAgencyListFactory' ); /** @var PayrollRemittanceAgencyListFactory $praf */
 | 
						|
		$praf->getById( $this->agency_id );
 | 
						|
		$pra_obj = $praf->getCurrent();
 | 
						|
 | 
						|
		$this->assertEquals( true, is_object( $pra_obj ), 'agency is not an object' );
 | 
						|
 | 
						|
		/**
 | 
						|
		 * 0 => TTi18n::gettext('No'),
 | 
						|
		 * 1 => TTi18n::gettext('Yes - Previous Business Day'),
 | 
						|
		 * 2 => TTi18n::gettext('Yes - Next Business Day'),
 | 
						|
		 * 3 => TTi18n::gettext('Yes - Closest Business Day'),
 | 
						|
		 */
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 0 ); //no weekend check.
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 5100 );
 | 
						|
		$praef->setDayOfWeek( 0 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '04-Dec-2016 12:00PM' ) ) );
 | 
						|
//
 | 
						|
 | 
						|
		//
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 2 ); //2=Forward
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 5100 );
 | 
						|
		$praef->setDayOfWeek( 0 );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 3 ); //3=closest business day
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 5100 );
 | 
						|
		$praef->setDayOfWeek( 0 );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '05-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 1 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 5100 );
 | 
						|
		$praef->setDayOfWeek( 0 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '29-Nov-2016 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '02-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		unset( $pra_obj, $praef );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testHolidayAvoidance
 | 
						|
	 */
 | 
						|
	function testHolidayAvoidance() {
 | 
						|
		$praf = TTnew( 'PayrollRemittanceAgencyListFactory' ); /** @var PayrollRemittanceAgencyListFactory $praf */
 | 
						|
		$praf->getById( $this->agency_id );
 | 
						|
		$pra_obj = $praf->getCurrent();
 | 
						|
 | 
						|
		$this->assertEquals( true, is_object( $pra_obj ), 'agency is not an object' );
 | 
						|
 | 
						|
		$holiday_policy_ids = [];
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setId( $praef->getNextInsertId() );
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->save( false );
 | 
						|
 | 
						|
		$rhf_xmas = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_xmas */
 | 
						|
		$rhf_xmas->setCompany( $this->company_id );
 | 
						|
		$rhf_xmas->setName( 'Test - xmas' );
 | 
						|
		$rhf_xmas->setType( 10 );
 | 
						|
		$rhf_xmas->setDayOfMonth( 25 );
 | 
						|
		$rhf_xmas->setMonth( 12 );
 | 
						|
		$holiday_policy_ids[] = $rhf_xmas->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - boxerday' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 26 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
 | 
						|
		$pra_obj->setRecurringHoliday( $holiday_policy_ids );
 | 
						|
		$holidays = $pra_obj->getRecurringHoliday();
 | 
						|
		$this->assertGreaterThanOrEqual( 2, count( $holidays ), 'Holiday Count is wrong' );
 | 
						|
 | 
						|
		$holidates = $praef->getRecurringHolidayDates( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$this->assertGreaterThanOrEqual( 2, count( $holidates ), 'Holiday date Count is wrong: ' . count( $holidates ) );
 | 
						|
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 0 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 1 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 2 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '27-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 3 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '27-Dec-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testWeekLongHolidayAvoidance
 | 
						|
	 */
 | 
						|
	function testWeekLongHolidayAvoidance() {
 | 
						|
		$holiday_policy_ids = [];
 | 
						|
 | 
						|
		$praf = TTnew( 'PayrollRemittanceAgencyListFactory' ); /** @var PayrollRemittanceAgencyListFactory $praf */
 | 
						|
		$praf->getById( $this->agency_id );
 | 
						|
		$pra_obj = $praf->getCurrent();
 | 
						|
 | 
						|
 | 
						|
//		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' );
 | 
						|
//		$praef->setId( FALSE );
 | 
						|
//		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
//		$praef->setType( 10 );
 | 
						|
//		$praef->setReminderDays( 2 );
 | 
						|
//		$praef->setFrequency( 4100 );
 | 
						|
//		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
//		$praef->setStatus( 10 );
 | 
						|
//		$praef->setEffectiveDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
 | 
						|
		$rhf_xmas = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_xmas */
 | 
						|
		$rhf_xmas->setCompany( $this->company_id );
 | 
						|
		$rhf_xmas->setName( 'Test - xmas' );
 | 
						|
		$rhf_xmas->setType( 10 );
 | 
						|
		$rhf_xmas->setDayOfMonth( 25 );
 | 
						|
		$rhf_xmas->setMonth( 12 );
 | 
						|
		$rhf_xmas->setAlwaysOnWeekDay( 2 );
 | 
						|
		$holiday_policy_ids[] = $rhf_xmas->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - boxerday' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 26 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$rhf_box->setAlwaysOnWeekDay( 2 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - 27th dec' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 27 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$rhf_box->setAlwaysOnWeekDay( 2 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - 28th dec' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 28 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$rhf_box->setAlwaysOnWeekDay( 2 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
		$rhf_box = TTNew( 'RecurringHolidayFactory' ); /** @var RecurringHolidayFactory $rhf_box */
 | 
						|
		$rhf_box->setCompany( $this->company_id );
 | 
						|
		$rhf_box->setName( 'Test - 29th dec' );
 | 
						|
		$rhf_box->setType( 10 );
 | 
						|
		$rhf_box->setDayOfMonth( 29 );
 | 
						|
		$rhf_box->setMonth( 12 );
 | 
						|
		$rhf_box->setAlwaysOnWeekDay( 2 );
 | 
						|
		$holiday_policy_ids[] = $rhf_box->save();
 | 
						|
 | 
						|
 | 
						|
		$pra_obj->setRecurringHoliday( $holiday_policy_ids );
 | 
						|
		$holidays = $pra_obj->getRecurringHoliday();
 | 
						|
		$this->assertGreaterThanOrEqual( 2, count( $holidays ), 'Holiday Count is wrong' );
 | 
						|
 | 
						|
		/**
 | 
						|
		 * 0 => TTi18n::gettext('No'),
 | 
						|
		 * 1 => TTi18n::gettext('Yes - Previous Business Day'),
 | 
						|
		 * 2 => TTi18n::gettext('Yes - Next Business Day'),
 | 
						|
		 * 3 => TTi18n::gettext('Yes - Closest Business Day'),
 | 
						|
		 */
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 0 ); //1=none
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Nov-2017 12:00AM' ) );
 | 
						|
		$praef->setLastDueDate( strtotime( '05-Nov-2017 12:00AM' ) );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
 | 
						|
		$holidates = $praef->getRecurringHolidayDates( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$this->assertGreaterThanOrEqual( 2, count( $holidates ), 'Holiday date Count is wrong: ' . count( $holidates ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 1 ); //1=Backwards
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setLastDueDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setReminderDays( 2 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEffectiveDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getLastDueDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 2 ); //2=next
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setLastDueDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEffectiveDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ), 'getEffectiveDate does not match' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getLastDueDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ), 'getLastDueDate does not match' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Jan-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		$pra_obj->setAlwaysOnWeekDay( 3 ); //closest
 | 
						|
		$pra_obj->save( false );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setLastDueDate( strtotime( '05-Dec-2017 12:00AM' ) );
 | 
						|
		$praef->setType( 10 );
 | 
						|
		$praef->setFrequency( 4100 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 25 );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:01AM' ) );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEffectiveDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ), 'getEffectiveDate does not match' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getLastDueDate() ), date( 'r', strtotime( '05-Dec-2017 12:00AM' ) ), 'getLastDueDate does not match' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Dec-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testSemiMonthlyFrequency
 | 
						|
	 */
 | 
						|
	function testSemiMonthlyFrequency() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4200 );
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( 7 );
 | 
						|
		$praef->setSecondaryDayOfMonth( 22 );
 | 
						|
		$praef->setDueDateDelayDays( 3 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '21-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '1-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setSecondaryDayOfMonth( 25 );
 | 
						|
		$praef->setDueDateDelayDays( 6 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '16-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '16-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '16-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '16-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '24-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '16-Aug-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//ca threshold1
 | 
						|
		// 10th and 25th of each month. If transaction date falls between 1-15th of the month, pay by 25th. If it falls between 16th and last day, pay on the 10th of the next month.
 | 
						|
		$praef->setPrimaryDayOfMonth( 15 );
 | 
						|
		$praef->setSecondaryDayOfMonth( 31 );
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jul-2017' ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '13-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '14-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '17-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '18-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chained tests (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Aug-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Aug-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Aug-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Aug-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Sep-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Sep-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Sep-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Sep-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Oct-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //10-Oct-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Oct-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Oct-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Oct-2017 12:00P
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Oct-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Nov-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testSemiAnnual
 | 
						|
	 */
 | 
						|
	function testSemiAnnual() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2200 );
 | 
						|
 | 
						|
		$praef->setPrimaryMonth( 1 );
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setSecondaryMonth( 6 );
 | 
						|
		$praef->setSecondaryDayOfMonth( 15 );
 | 
						|
		$praef->setDueDateDelayDays( 5 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2015' ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		//chained tests (like wizard)
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//20-Jun-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Jan-2018 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//20-Jun-2018 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '10-Jan-2019  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jan-2019 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Jan-2019 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '11-Jan-2019  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2019  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Jun-2019 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testYearToDate
 | 
						|
	 */
 | 
						|
	function testYearToDate() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2100 );
 | 
						|
 | 
						|
		$praef->setPrimaryMonth( 6 ); //Jun
 | 
						|
		$praef->setPrimaryDayOfMonth( 20 );
 | 
						|
		$praef->setDueDateDelayDays( 5 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jun-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '21-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '24-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//chained testing (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Jun-2018 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2019  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2019  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2019 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Jun-2019 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2020  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2020  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2020 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Jun-2020 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2021  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2021  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2021 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Jun-2021 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2022  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2022  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2022 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] ); //25-Jun-2022 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2023  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '20-Jun-2023  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2023 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testYearToDateB
 | 
						|
	 */
 | 
						|
	function testYearToDateB() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 2100 );
 | 
						|
 | 
						|
		$praef->setPrimaryMonth( 12 ); //Dec
 | 
						|
		$praef->setPrimaryDayOfMonth( 1 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Dec-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Dec-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Dec-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Dec-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2018 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017 11:59PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '01-Dec-2018  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '01-Dec-2018 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testEighthMonthly
 | 
						|
	 */
 | 
						|
	function testEighthMonthly() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 63000 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '03-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '04-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '05-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '06-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '09-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '10-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '12-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '19-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '19-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '19-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '20-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '20-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '20-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '26-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( strtotime( '25-Jan-2017  11:59:59PM' ) ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '27-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( strtotime( '25-Jan-2017  11:59:59PM' ) ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( TTDate::getEndMonthEpoch( strtotime( '25-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( strtotime( '25-Jan-2017  11:59:59PM' ) ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
 | 
						|
		//chained tests (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '25-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Jan-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//28-Jan-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//03-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '06-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//06-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '11-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '14-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//14-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '12-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//18-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '19-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '22-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//22-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '20-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '25-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '28-Feb-2017 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//28-Feb-2017 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '26-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testTwiceMonthly
 | 
						|
	 */
 | 
						|
	function testTwiceMonthly() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 61000 );
 | 
						|
 | 
						|
		//increase the upper bound to test a wider range.
 | 
						|
		$testrange = 5;
 | 
						|
		//test edges across 5 years
 | 
						|
		for ( $year = ( date( 'Y' ) - $testrange ); $year <= ( date( 'Y' ) + $testrange ); $year++ ) {
 | 
						|
			//January
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Jan--' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Jan-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Jan-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '30-Jan-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '31-Jan-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			//Feb
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '14-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '16-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '17-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '27-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '28-Feb-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			//Jul
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '14-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jul-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jul-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '16-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '17-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '30-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '31-Jul-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jul-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Aug-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			//Nov
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Nov-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Nov-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Nov-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Nov-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '14-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Nov-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Nov-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Nov-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Nov-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '16-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '17-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '29-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '30-Nov-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Nov-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			//Dec
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Dec-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Dec-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '14-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Dec-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Dec-' . $year . ' 11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Dec-' . $year . '12:00PM' ) ) );
 | 
						|
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '16-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '17-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '30-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '31-Dec-' . $year . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Dec-' . $year . ' 12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndMonthEpoch( $result['start_date'] ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
 | 
						|
			//next jan
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '01-Jan-' . ( $year + 1 ) . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . ( $year + 1 ) . '12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '02-Jan-' . ( $year + 1 ) . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . ( $year + 1 ) . '12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '15-Jan-' . ( $year + 1 ) . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . ( $year + 1 ) . '12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '30-Jan-' . ( $year + 1 ) . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . ( $year + 1 ) . '12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
			$result = $praef->calculateNextDate( strtotime( '31-Jan-' . ( $year + 1 ) . '12:00PM' ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-' . ( $year + 1 ) . '12:00AM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-' . ( $year + 1 ) . '11:59:59PM' ) ) );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-' . ( $year + 1 ) . '12:00PM' ) ) );
 | 
						|
		}
 | 
						|
 | 
						|
		//chained  tests (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2016 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Feb-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Feb-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Feb-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Feb-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Feb-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Feb-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Feb-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Mar-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Mar-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Mar-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Mar-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Mar-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Apr-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Apr-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Apr-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Apr-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Apr-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Apr-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-May-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-May-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-May-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-May-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-May-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-May-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jun-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Jun-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jun-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jun-2016 12:00PM' ) ) );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Jun-2016 12:00PM
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jun-2016 12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2016 11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jul-2016 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	function setupPayPeriodTest( $seed_date ) {
 | 
						|
		$pay_period_schedule_id = $this->createPayPeriodSchedule();
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $pay_period_schedule_id ), '$pay_period_schedule_id is not a uuid ' );
 | 
						|
 | 
						|
		$psa_id = $this->createPayStubAccounts();
 | 
						|
 | 
						|
		$cdf = new CompanyDeductionFactory();
 | 
						|
		$cdf->setPayrollRemittanceAgency( $this->agency_id );
 | 
						|
		$cdf->setCompany( $this->company_id );
 | 
						|
		$cdf->setCountry( 'CA' );
 | 
						|
		$cdf->setProvince( 'BC' );
 | 
						|
		$cdf->setLegalEntity( $this->legal_entity_id );
 | 
						|
		$cdf->setStatus( 10 );
 | 
						|
		$cdf->setType( 10 );
 | 
						|
		$cdf->setName( 'Auto-generated Company Deduction' );
 | 
						|
		$cdf->setCalculation( 15 );
 | 
						|
		$cdf->setCalculationOrder( 186 );
 | 
						|
		$cdf->setPayStubEntryAccount( $psa_id );
 | 
						|
		$cd_id = $cdf->save( false );
 | 
						|
 | 
						|
		$udf = new UserDeductionFactory();
 | 
						|
		$udf->setUser( $this->user_id );
 | 
						|
		$udf->setCompanyDeduction( $cd_id );
 | 
						|
		$udf->save();
 | 
						|
 | 
						|
		$this->createPayPeriods( $seed_date, $pay_period_schedule_id );
 | 
						|
		$this->getAllPayPeriods( $pay_period_schedule_id );
 | 
						|
 | 
						|
		//return the payperiodschedule object so that we can call $ppsf->createNextPayPeriod( $date ) in our tests;
 | 
						|
		return $pay_period_schedule_id;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testPayPeriodA
 | 
						|
	 */
 | 
						|
	function testPayPeriodA() {
 | 
						|
		$test_start_date = strtotime( '01-Jan-2017 12:00PM' ); //should be day before first pay perdio start date.
 | 
						|
		$ppsf_id = $this->setupPayPeriodTest( $test_start_date );
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $ppsf_id ), 'Pay period schedule must be an object.' );
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setId( $praef->getNextInsertId() );
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$praef->setType( 'T4SD' );
 | 
						|
		$praef->setFrequency( 1000 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setPayPeriodSchedule( [ $ppsf_id ] );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$test_start_date = strtotime( '02-Jan-2017 12:00PM' ); //Should be after the start date of the first pay period to mimic a transaction date.
 | 
						|
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
 | 
						|
 | 
						|
		$test_date = $test_start_date;
 | 
						|
 | 
						|
		Debug::text( 'Loop Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		//testing every day in every pay period:
 | 
						|
		$result = $praef->calculateNextDate( $test_date );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', ( $pp_obj->getTransactionDate() + ( $praef->getDueDateDelayDays() * 86400 ) ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$loop_counter = 1;
 | 
						|
		while ( $test_date <= $pp_obj->getEndDate() && $test_date < strtotime( '01-Jan-2020' ) ) {
 | 
						|
			$test_date = TTDate::incrementDate( $test_date, 1, 'day' );
 | 
						|
			$result = $praef->calculateNextDate( $test_date );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', ( $pp_obj->getTransactionDate() + ( $praef->getDueDateDelayDays() * 86400 ) ) ), 'Due date Matches.' );
 | 
						|
			$loop_counter++;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//testing with static values:
 | 
						|
		Debug::text( 'Static Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '21-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[1];
 | 
						|
		$praef->setDueDateDelayDays( 3 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[2];
 | 
						|
		$praef->setDueDateDelayDays( 6 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '18-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '09-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[3];
 | 
						|
		$praef->setDueDateDelayDays( 9 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		Debug::text( 'Wizard Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		//chained tests (like wizard) also iterates through all 4 pay periods
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '21-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 3 );
 | 
						|
		//Needs to use end_date, because due_date can be all over the map due to the due date delay.
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //03-Feb-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 6 );
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //17-Feb-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '18-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '09-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 9 );
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //17-Mar-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testPayPeriodB
 | 
						|
	 */
 | 
						|
	function testPayPeriodB() {
 | 
						|
		$test_start_date = strtotime( '01-Jan-2017 12:00PM' ); //Should be day before first pay period start date.
 | 
						|
		$ppsf_id = $this->setupPayPeriodTest( $test_start_date );
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $ppsf_id ), 'Pay period schedule must be an object.' );
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setId( $praef->getNextInsertId() );
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$praef->setType( 'T4SD' );
 | 
						|
		$praef->setFrequency( 1000 );
 | 
						|
		$praef->setDueDateDelayDays( 1 );
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setPayPeriodSchedule( [ $ppsf_id ] );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$test_start_date = strtotime( '02-Jan-2017 12:00PM' ); //Should be after the start date of the first pay period to mimic a transaction date.
 | 
						|
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
 | 
						|
 | 
						|
		$test_date = $test_start_date;
 | 
						|
 | 
						|
		Debug::text( 'Loop Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		//testing every day in every pay period:
 | 
						|
		$result = $praef->calculateNextDate( $test_date );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', ( $pp_obj->getTransactionDate() + ( $praef->getDueDateDelayDays() * 86400 ) ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$loop_counter = 1;
 | 
						|
		while ( $test_date <= $pp_obj->getEndDate() && $test_date < strtotime( '01-Jan-2020' ) ) {
 | 
						|
			$test_date = TTDate::incrementDate( $test_date, 1, 'day' );
 | 
						|
			$result = $praef->calculateNextDate( $test_date );
 | 
						|
			$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', ( $pp_obj->getTransactionDate() + ( $praef->getDueDateDelayDays() * 86400 ) ) ), 'Due date Matches.' );
 | 
						|
			$loop_counter++;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//testing with static values:
 | 
						|
		Debug::text( 'Static Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '21-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[1];
 | 
						|
		$praef->setDueDateDelayDays( 3 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[2];
 | 
						|
		$praef->setDueDateDelayDays( 6 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '18-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '09-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$pp_obj = $this->pay_period_objs[3];
 | 
						|
		$praef->setDueDateDelayDays( 9 );
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 4, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		Debug::text( 'Wizard Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		//chained tests (like wizard) also iterates through all 4 pay periods
 | 
						|
		$pp_obj = $this->pay_period_objs[0];
 | 
						|
		$result = $praef->calculateNextDate( $pp_obj->getTransactionDate() );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '21-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 3 );
 | 
						|
		//Needs to use end_date, because due_date can be all over the map due to the due date delay.
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //03-Feb-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '20-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 6 );
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //17-Feb-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '18-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '03-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '09-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setDueDateDelayDays( 9 );
 | 
						|
		$result = $praef->calculateNextDate( $result['end_date'] ); //17-Mar-2017 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '04-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '17-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '26-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testPayPeriodC
 | 
						|
	 */
 | 
						|
	function testPayPeriodC() {
 | 
						|
		$test_start_date = strtotime( '01-Jan-2017 12:00PM' ); //should be day before first pay perdio start date.
 | 
						|
		$ppsf_id = $this->setupPayPeriodTest( $test_start_date );
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $ppsf_id ), 'Pay period schedule must be an object.' );
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setId( $praef->getNextInsertId() );
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setStatus( 10 );
 | 
						|
		$praef->setType( 'T4SD' );
 | 
						|
		$praef->setFrequency( 1000 );
 | 
						|
		$praef->setDueDateDelayDays( 1 );
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setPayPeriodSchedule( [ $ppsf_id ] );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$test_start_date = strtotime( '02-Jan-2017 12:00PM' ); //Should be after the start date of the first pay period to mimic a transaction date.
 | 
						|
 | 
						|
		$praef->setLastDueDate( $test_start_date );
 | 
						|
 | 
						|
		Debug::text( 'Static Test...', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '03-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '20-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '21-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setLastDueDate( $praef->getDueDate() );
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '21-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '03-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '04-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setLastDueDate( $praef->getDueDate() );
 | 
						|
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '04-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '17-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '18-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setLastDueDate( $praef->getDueDate() );
 | 
						|
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '18-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '03-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '04-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$praef->setLastDueDate( $praef->getDueDate() );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testMonthlyQuarterExceptions
 | 
						|
	 */
 | 
						|
	function testMonthlyQuarterExceptions() {
 | 
						|
		//US - Monthly (Quarter Exceptions)
 | 
						|
		//Due the 15th day of the month following the monthly withholding period, except for March, June, September and December; then due the last day of the month following the withholding period.
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 60000 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 12:00PM' ) );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-May-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-May-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jun-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$test_start_date = strtotime( '01-Sep-2017 12:00PM' );
 | 
						|
		$result = $praef->calculateNextDate( $test_start_date );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Sep-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$test_start_date = strtotime( '30-Sep-2017 12:00PM' );
 | 
						|
		$result = $praef->calculateNextDate( $test_start_date );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Sep-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Nov-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Dec-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Dec-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//chained testing (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Dec-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Dec-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jan-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//31-Jan-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Feb-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//31-Mar-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//30-Apr-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testQuarterMonthly
 | 
						|
	 */
 | 
						|
	function testQuarterMonthly() {
 | 
						|
		//quarter-monthly
 | 
						|
		// 	1.The first seven days of the calendar month.
 | 
						|
		//	2.The 8th to the 15th day of the calendar month.
 | 
						|
		// 	3.The 16th to the 22nd day of the calendar month.
 | 
						|
		// 	4.The 23rd day to the end of the calendar month.
 | 
						|
		//As a quarter-monthly filer, you are required to pay at least 90 percent of the actual tax due within three banking day following the end
 | 
						|
		//of the quarter-monthly period.
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 62000 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 12:00PM' ) );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '07-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '08-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '11-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '18-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '22-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '23-Feb-2018 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Feb-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2018 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Feb-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		//chained test(like wizard)
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2018 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Feb-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//03-Mar-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Mar-2018 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//10-Mar-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '08-Mar-2018 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '15-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '18-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//18-Mar-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '16-Mar-2018 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '22-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '25-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//25-Mar-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '23-Mar-2018 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '03-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//03-Apr-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2018 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '07-Apr-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '10-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testUSQuarterly
 | 
						|
	 */
 | 
						|
	function testUSQuarterly() {
 | 
						|
		// (April 30, July 31, and October 31).
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 59000 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 12:00PM' ) );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		//Q1
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//Q2.
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//Q3.
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Sep-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//Q4
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '15-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//chained tests  (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//30-Apr-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//31-Jul-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Sep-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Oct-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//31-Oct-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2019' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Mar-2019 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Apr-2019 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//30-Apr-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2019' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Jun-2019 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '31-Jul-2019 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testUSMonthlyExcludeLastMOQ
 | 
						|
	 */
 | 
						|
	function testUSMonthlyExcludeLastMOQ() {
 | 
						|
		// (April 30, July 31, and October 31).
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 60100 );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jan-2017 12:00PM' ) );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '02-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '16-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jan-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Feb-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '28-Feb-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Mar-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Apr-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-May-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-May-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jun-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Jul-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Aug-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$test_start_date = strtotime( '01-Sep-2017 12:00PM' );
 | 
						|
		$result = $praef->calculateNextDate( $test_start_date );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Oct-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Nov-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Dec-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '30-Nov-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2017' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Dec-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '01-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( strtotime( '31-Dec-2017 12:00PM' ) );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
		//chained tests (like wizard)
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Feb-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Feb-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '28-Feb-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Mar-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-March-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Apr-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Apr-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-May-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-May-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-May-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-May-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Jun-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jul-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jul-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Aug-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Aug-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Aug-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Aug-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Sep-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Sep-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Oct-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Oct-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Nov-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Nov-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Nov-2018' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '30-Nov-2018 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Dec-2018 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
		$result = $praef->calculateNextDate( $result['due_date'] );//15-Dec-2018 12:00:00
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2019' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '31-Jan-2019 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Feb-2019 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testOnHire
 | 
						|
	 */
 | 
						|
	function testOnHire() {
 | 
						|
		global $dd;
 | 
						|
		Debug::text( 'Running setUp(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$dd->createUserWage( $this->user_id, '17.77', strtotime( '05-Jun-2016' ) ); //Create wage on new hire date so we avoid the validation error of:  Hire date must be on or after the employees first wage entry, you may need to change their wage effective date first
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( strtotime( '05-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setReminderDays( 0 );
 | 
						|
		$praef->setFrequency( 90100 ); //On Hire Event Frequency
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $praef->isValid() );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '05-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'FIRST RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$dd->createUserWage( $this->user_id, '17.77', strtotime( '07-Jun-2016' ) ); //Create wage on new hire date so we avoid the validation error of:  Hire date must be on or after the employees first wage entry, you may need to change their wage effective date first
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( strtotime( '07-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '07-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$dd->createUserWage( $this->user_id, '17.77', strtotime( '20-Jun-2016' ) ); //Create wage on new hire date so we avoid the validation error of:  Hire date must be on or after the employees first wage entry, you may need to change their wage effective date first
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( strtotime( '20-Jun-2016' ) );
 | 
						|
 | 
						|
		$this->assertEquals( true, $user_obj->isValid() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '20-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'THIRD RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '20-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testOnHireGaps
 | 
						|
	 */
 | 
						|
	function testOnHireGaps() {
 | 
						|
		global $dd;
 | 
						|
		$now = TTDate::getMiddleDayEpoch( time() );
 | 
						|
		Debug::text( 'Running setUp(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//ensure that we set the admin user's hire date to  some time in the past so it doesn't interfere with the following tests.
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( TTDate::incrementDate( $now, -5, 'month' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( TTDate::incrementDate( $now, -5, 'day' ) );
 | 
						|
		Debug::Text( 'FIRST User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setReminderDays( 0 );
 | 
						|
		$praef->setFrequency( 90100 ); //On Hire Event Frequency
 | 
						|
		$praef->setEffectiveDate( $now );
 | 
						|
		$this->assertEquals( true, $praef->isValid() );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$praef->getPayrollRemittanceAgencyObject()->setAlwaysOnWeekDay( 0 );
 | 
						|
		$praef->getPayrollRemittanceAgencyObject()->save();
 | 
						|
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, $now );
 | 
						|
		//Debug::Arr( $result, 'FIRST RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::getMiddleDayEpoch( TTDate::incrementDate( $result['end_date'], 1, 'day' ) ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( $now );
 | 
						|
		Debug::Text( 'SECOND User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, $now );
 | 
						|
		//Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::getMiddleDayEpoch( TTDate::incrementDate( $now, 5, 'day' ) ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999 );
 | 
						|
		Debug::Text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setHireDate( TTDate::incrementDate( $now, 30, 'day' ) );
 | 
						|
		Debug::Text( 'THIRD User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ) . ' User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, $now );
 | 
						|
		//Debug::Arr( $result, 'THIRD RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::getMiddleDayEpoch( TTDate::incrementDate( $result['end_date'], 1, 'day' ) ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		//test gap. should return empty dates
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, TTDate::incrementDate( $now, 20, 'day' ) );
 | 
						|
		//Debug::Arr( $result, 'FOURTH RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEmpty( $result['start_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['end_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['due_date'], '$result elements should  be empty.' );
 | 
						|
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		Debug::Text( 'Expected User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$result = $praef->calculateNextDate( null, TTDate::incrementDate( $now, 31, 'day' ) );
 | 
						|
		//Debug::Arr( $result, 'FIFTH RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, 30, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 39, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::getMiddleDayEpoch( TTDate::incrementDate( $result['end_date'], 1, 'day' ) ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testOnTermination
 | 
						|
	 */
 | 
						|
	function testOnTermination() {
 | 
						|
		global $dd;
 | 
						|
		Debug::text( 'Running setUp(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '05-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setReminderDays( 0 );
 | 
						|
		$praef->setFrequency( 90200 ); //On Termination Event Frequency
 | 
						|
		$praef->setEffectiveDate( strtotime( '05-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $praef->isValid() );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$praef->getPayrollRemittanceAgencyObject()->setAlwaysOnWeekDay( 0 );
 | 
						|
		$praef->getPayrollRemittanceAgencyObject()->save();
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '05-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'FIRST RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '07-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '07-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '05-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '15-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '20-Jun-2016' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, strtotime( '20-Jun-2016' ) );
 | 
						|
		Debug::Arr( $result, 'THIRD RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '20-Jun-2016 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '29-Jun-2016 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '30-Jun-2016 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testOnTerminationGaps
 | 
						|
	 */
 | 
						|
	function testOnTerminationGaps() {
 | 
						|
		global $dd;
 | 
						|
		$now = TTDate::getMiddleDayEpoch( time() );
 | 
						|
		Debug::text( 'Running setUp(): ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( TTDate::incrementDate( $now, -5, 'day' ) );
 | 
						|
		Debug::Text( 'FIRST User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setReminderDays( 0 );
 | 
						|
		$praef->setFrequency( 90200 ); //On Hire Event Frequency
 | 
						|
		$praef->setEffectiveDate( $now );
 | 
						|
		$this->assertEquals( true, $praef->isValid() );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate();
 | 
						|
		//Debug::Arr( $result, 'FIRST RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::incrementDate( $now, 5, 'day' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( $now );
 | 
						|
		Debug::Text( 'SECOND User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$result = $praef->calculateNextDate();
 | 
						|
		//Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::incrementDate( $now, 5, 'day' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$this->user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::Text( 'User ID: ' . $this->user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $this->user_id );
 | 
						|
		$user_obj->setTerminationDate( TTDate::incrementDate( $now, 30, 'day' ) );
 | 
						|
		Debug::Text( 'THIRD User Hire Date: ' . TTDate::getDate( 'DATE+TIME', $user_obj->getHireDate() ), __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate();
 | 
						|
		//Debug::Arr( $result, 'THIRD RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, -5, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 4, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::incrementDate( $now, 5, 'day' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		//test gap. should return empty dates
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, TTDate::incrementDate( $now, 20, 'day' ) );
 | 
						|
		//Debug::Arr( $result, 'FOURTH RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEmpty( $result['start_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['end_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['due_date'], '$result elements should  be empty.' );
 | 
						|
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
		$result = $praef->calculateNextDate( null, TTDate::incrementDate( $now, 31, 'day' ) );
 | 
						|
		//Debug::Arr( $result, 'FIFTH RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', TTDate::getBeginDayEpoch( TTDate::incrementDate( $now, 30, 'day' ) ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', TTDate::getEndDayEpoch( TTDate::incrementDate( $now, 39, 'day' ) ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', TTDate::incrementDate( $now, 40, 'day' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testOnTerminationByPayPeriod
 | 
						|
	 */
 | 
						|
	function testOnTerminationByPayPeriod() {
 | 
						|
		global $dd;
 | 
						|
 | 
						|
		$test_start_date = strtotime( '01-Jan-2017 12:00PM' ); //should be day before first pay perdio start date.
 | 
						|
		$ppsf_id = $this->setupPayPeriodTest( $test_start_date );
 | 
						|
 | 
						|
		$this->assertEquals( true, TTUUID::isUUID( $ppsf_id ), 'Pay period schedule id must be a UUID.' );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 90310 ); //On Hire Event Frequency
 | 
						|
		$praef->setDueDateDelayDays( 10 );
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2017' ) );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		//workaround for set requiring an object_id
 | 
						|
		$praef->setPayPeriodSchedule( [ $ppsf_id ] );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '01-Jan-2017' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save();
 | 
						|
		}
 | 
						|
		$this->addUserToPayPeriodSchedule( $ppsf_id, $user_id );
 | 
						|
 | 
						|
		$fake_time = strtotime( '01-Jan-2017' );
 | 
						|
		$result = $praef->calculateNextDate( null, $fake_time );
 | 
						|
 | 
						|
		Debug::Arr( $result, 'FIRST RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		//sanity check
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
 | 
						|
		//failure.
 | 
						|
		$this->assertNotEmpty( $result['start_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['end_date'], '$result elements should not be empty.' );
 | 
						|
		$this->assertNotEmpty( $result['due_date'], '$result elements should not be empty.' );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '10-Jan-2017' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save();
 | 
						|
		}
 | 
						|
		$this->addUserToPayPeriodSchedule( $ppsf_id, $user_id );
 | 
						|
 | 
						|
		$fake_time = strtotime( '01-Jan-2017' );
 | 
						|
		$result = $praef->calculateNextDate( null, $fake_time );
 | 
						|
 | 
						|
		Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$user_id = $dd->createUser( $this->company_id, $this->legal_entity_id, 999, null, null, null, null, null, null, null, null, null, null, null, strtotime( '24-Jan-2014' ) );
 | 
						|
		Debug::text( 'User ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		$user_obj = $this->getUserObject( $user_id );
 | 
						|
		$user_obj->setTerminationDate( strtotime( '10-Feb-2017' ) );
 | 
						|
		$this->assertEquals( true, $user_obj->isValid(), $user_obj->Validator->getTextErrors() );
 | 
						|
		if ( $user_obj->isValid() ) {
 | 
						|
			$user_obj->Save();
 | 
						|
		}
 | 
						|
		$this->addUserToPayPeriodSchedule( $ppsf_id, $user_id );
 | 
						|
 | 
						|
		$fake_time = strtotime( '10-Jan-2017' );
 | 
						|
		$result = $praef->calculateNextDate( null, $fake_time );
 | 
						|
 | 
						|
		Debug::Arr( $result, 'SECOND RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $result['start_date'] ), date( 'r', strtotime( '01-Jan-2017 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['end_date'] ), date( 'r', strtotime( '14-Jan-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', $result['due_date'] ), date( 'r', strtotime( '24-Jan-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
 | 
						|
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false );
 | 
						|
		}
 | 
						|
 | 
						|
		$fake_time = strtotime( '25-Jan-2017' );
 | 
						|
		$result = $praef->calculateNextDate( null, $fake_time );
 | 
						|
 | 
						|
		$this->assertEquals( true, is_array( $result ), '$result should be  an array.' );
 | 
						|
		$this->assertCount( 3, $result, '$result should have 3 elements.' );
 | 
						|
		$this->assertEmpty( $result['start_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['end_date'], '$result elements should  be empty.' );
 | 
						|
		$this->assertEmpty( $result['due_date'], '$result elements should  be empty.' );
 | 
						|
 | 
						|
		$fake_time = strtotime( '09-Feb-2017' );
 | 
						|
		$result = $praef->calculateNextDate( null, $fake_time );
 | 
						|
		//$result = $praef->calculateNextDate();
 | 
						|
 | 
						|
		Debug::Arr( $result, 'THIRD RESULT: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						|
		//LEFT OFF HERE
 | 
						|
		$this->assertEquals( date( 'r', (int)$result['start_date'] ), date( 'r', strtotime( '29-Jan-2017 00:00:00' ) ), 'Start date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', (int)$result['end_date'] ), date( 'r', strtotime( '11-Feb-2017 23:59:59' ) ), 'End date Matches.' );
 | 
						|
		$this->assertEquals( date( 'r', (int)$result['due_date'] ), date( 'r', strtotime( '21-Feb-2017 12:00:00' ) ), 'Due date Matches.' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testPreSave
 | 
						|
	 */
 | 
						|
	function testPreSave() { //testing that recalc is happening properly on save.
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Nov-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '01-Nov-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '30-Nov-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '10-Dec-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Dec-2016' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '01-Dec-2016  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '31-Dec-2016  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '10-Jan-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2017' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '01-Jan-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '31-Jan-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '10-Feb-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Feb-2017' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '01-Feb-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '28-Feb-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '10-Mar-2017 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Mar-2017' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->assertEquals( date( 'r', $praef->getStartDate() ), date( 'r', strtotime( '01-Mar-2017  12:00AM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getEndDate() ), date( 'r', strtotime( '31-Mar-2017  11:59:59PM' ) ) );
 | 
						|
		$this->assertEquals( date( 'r', $praef->getDueDate() ), date( 'r', strtotime( '10-Apr-2017 12:00PM' ) ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @group PayrollRemittanceAgencyEvent_testReminderDays
 | 
						|
	 */
 | 
						|
	function testReminderDays() {
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		$praef->setReminderDays( 0 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getNextReminderDate() ), date( 'r', strtotime( '10-Feb-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		$praef->setReminderDays( 3 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getNextReminderDate() ), date( 'r', strtotime( '07-Feb-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		$praef->setReminderDays( 5 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getNextReminderDate() ), date( 'r', strtotime( '05-Feb-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		$praef->setReminderDays( -5 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
		$this->assertEquals( date( 'r', $praef->getNextReminderDate( true ) ), date( 'r', strtotime( '15-Feb-2016 12:00PM' ) ) );
 | 
						|
 | 
						|
		//Make sure you test the case where this is no due date, and therefore no reminder date.
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 4100 ); //monthly
 | 
						|
		$praef->setPrimaryDayOfMonth( 10 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
 | 
						|
		$praef->setReminderDays( -5 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		//not saved. no due date means no reminder date.
 | 
						|
		$this->assertEquals( false, $praef->getNextReminderDate( true ) );
 | 
						|
 | 
						|
 | 
						|
		//Make sure you test the case where this is no due date, and therefore no reminder date.
 | 
						|
		$praef = TTnew( 'PayrollRemittanceAgencyEventFactory' ); /** @var PayrollRemittanceAgencyEventFactory $praef */
 | 
						|
		$praef->setPayrollRemittanceAgencyId( $this->agency_id );
 | 
						|
		$praef->setFrequency( 1000 ); //each pay period (with no pay period set)
 | 
						|
		$praef->setDueDateDelayDays( 0 );
 | 
						|
		$praef->setType( 'T4' );
 | 
						|
		$praef->setStatus( 10 ); //enabled
 | 
						|
		$praef->setReminderDays( -5 );
 | 
						|
		$praef->setEffectiveDate( strtotime( '01-Jan-2016' ) );
 | 
						|
 | 
						|
		//not saved. no due date means no reminder date.
 | 
						|
		$this->assertEquals( false, $praef->getNextReminderDate( true ) );
 | 
						|
		$praef->setEnableRecalculateDates( true );
 | 
						|
 | 
						|
		if ( $praef->isValid() ) {
 | 
						|
			$praef->Save( false, true );
 | 
						|
		}
 | 
						|
		//saved. should not be able to calculate a due date because no payperiods exist.
 | 
						|
		$this->assertEquals( false, $praef->getNextReminderDate( true ) );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
?>
 |