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 ); $this->currency_id = $dd->createCurrency( $this->company_id, 10 ); //Permissions are required so the user has permissions to run reports. $dd->createPermissionGroups( $this->company_id, 40 ); //Administrator only. $dd->createPayStubAccount( $this->company_id ); $dd->createPayStubAccountLink( $this->company_id ); $this->getPayStubAccountLinkArray(); $dd->createUserWageGroups( $this->company_id ); $dd->createPayrollRemittanceAgency( $this->company_id, null, $this->legal_entity_id ); //Must go before createCompanyDeduction() //Company Deductions $dd->createCompanyDeduction( $this->company_id, null, $this->legal_entity_id ); //Create multiple state tax/deductions. $sp = TTNew( 'SetupPresets' ); /** @var SetupPresets $sp */ $sp->setCompany( $this->company_id ); $sp->setUser( null ); $sp->PayStubAccounts( 'US', 'CA' ); $sp->PayrollRemittanceAgencys( 'US', 'CA', null, null, $this->legal_entity_id ); $sp->CompanyDeductions( 'US', 'CA', null, null, $this->legal_entity_id ); //Need to define the California State Unemployment Percent. $cdlf = TTnew( 'CompanyDeductionListFactory' ); /** @var CompanyDeductionListFactory $cdlf */ $cdlf->getByCompanyIdAndName( $this->company_id, 'CA - Unemployment Insurance - Employer' ); if ( $cdlf->getRecordCount() > 0 ) { $cd_obj = $cdlf->getCurrent(); $cd_obj->setUserValue1( 0.047 ); //Percent. if ( $cd_obj->isValid() ) { $cd_obj->Save(); } } else { $this->assertTrue( false, 'CA - Unemployment Insurance failed to be created.' ); } //Need to define the California State Unemployment Percent. $cdlf = TTnew( 'CompanyDeductionListFactory' ); /** @var CompanyDeductionListFactory $cdlf */ $cdlf->getByCompanyIdAndName( $this->company_id, 'NY - Unemployment Insurance - Employer' ); if ( $cdlf->getRecordCount() > 0 ) { $cd_obj = $cdlf->getCurrent(); $cd_obj->setUserValue1( 0.056 ); //Percent. if ( $cd_obj->isValid() ) { $cd_obj->Save(); } } else { $this->assertTrue( false, 'NY - Unemployment Insurance failed to be created.' ); } $remittance_source_account_ids[$this->legal_entity_id][] = $dd->createRemittanceSourceAccount( $this->company_id, $this->legal_entity_id, $this->currency_id, 10 ); // Check $remittance_source_account_ids[$this->legal_entity_id][] = $dd->createRemittanceSourceAccount( $this->company_id, $this->legal_entity_id, $this->currency_id, 20 ); // US - EFT $remittance_source_account_ids[$this->legal_entity_id][] = $dd->createRemittanceSourceAccount( $this->company_id, $this->legal_entity_id, $this->currency_id, 30 ); // CA - EFT //createUser() also handles remittance destination accounts. $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 100, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 10, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 11, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 12, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 13, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 14, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 15, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 16, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 17, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 18, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 19, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 20, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); //Different State $this->user_id[] = $dd->createUser( $this->company_id, $this->legal_entity_id, 21, null, null, null, null, null, null, null, $remittance_source_account_ids, null, null, null, strtotime('01-Jan-2010') ); //Different State //Get User Object. $ulf = new UserListFactory(); $this->user_obj = $ulf->getById( $this->user_id[0] )->getCurrent(); $this->createPayPeriodSchedule(); $this->createPayPeriods(); $this->getAllPayPeriods(); $dd->createTaxForms( $this->company_id, $this->user_id[0] ); $this->assertTrue( TTUUID::isUUID( $this->company_id ) ); $this->assertGreaterThan( 0, $this->user_id[0] ); } public function tearDown(): void { Debug::text( 'Running tearDown(): ', __FILE__, __LINE__, __METHOD__, 10 ); } function getPayStubAccountLinkArray() { $this->pay_stub_account_link_arr = [ 'total_gross' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 40, 'Total Gross' ), 'total_deductions' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 40, 'Total Deductions' ), 'employer_contribution' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 40, 'Employer Total Contributions' ), 'net_pay' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 40, 'Net Pay' ), 'regular_time' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 'vacation_accrual_release' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Vacation - Accrual Release' ), 'vacation_accrual' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 50, 'Vacation Accrual' ), ]; 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 createPayPeriods() { $max_pay_periods = 28; $ppslf = new PayPeriodScheduleListFactory(); $ppslf->getById( $this->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 ) { $end_date = TTDate::getEndDayEpoch( strtotime( '23-Dec-2018' ) ); } 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() { $pplf = new PayPeriodListFactory(); //$pplf->getByCompanyId( $this->company_id ); $pplf->getByPayPeriodScheduleId( $this->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 getPayStubEntryArray( $pay_stub_id ) { //Check Pay Stub to make sure it was created correctly. $pself = new PayStubEntryListFactory(); $pself->getByPayStubId( $pay_stub_id ); if ( $pself->getRecordCount() > 0 ) { foreach ( $pself as $pse_obj ) { $ps_entry_arr[$pse_obj->getPayStubEntryNameId()][] = [ 'rate' => $pse_obj->getRate(), 'units' => $pse_obj->getUnits(), 'amount' => $pse_obj->getAmount(), 'ytd_amount' => $pse_obj->getYTDAmount(), ]; } } if ( isset( $ps_entry_arr ) ) { return $ps_entry_arr; } return false; } function createPayStubAmendment( $pay_stub_entry_name_id, $amount, $effective_date, $user_id ) { $psaf = new PayStubAmendmentFactory(); $psaf->setUser( $user_id ); $psaf->setPayStubEntryNameId( $pay_stub_entry_name_id ); //CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Bonus') $psaf->setStatus( 50 ); //Active $psaf->setType( 10 ); // $psaf->setRate( 10 ); // $psaf->setUnits( 10 ); $psaf->setAmount( $amount ); $psaf->setEffectiveDate( $effective_date ); $psaf->setAuthorized( true ); if ( $psaf->isValid() ) { $psaf->Save(); } else { Debug::text( ' ERROR: Pay Stub Amendment Failed!', __FILE__, __LINE__, __METHOD__, 10 ); } return true; } function createPayStub( $user_id ) { for ( $i = 0; $i <= 26; $i++ ) { //Calculate pay stubs for each pay period. $cps = new CalculatePayStub(); $cps->setUser( $user_id ); $cps->setPayPeriod( $this->pay_period_objs[$i]->getId() ); $cps->calculate(); } return true; } /** * @group Form940Report_testMonthlyDepositSingleEmployeeCreditReductionA */ function testMonthlyDepositSingleEmployeeCreditReductionA() { foreach ( $this->user_id as $user_id ) { //1st Quarter - Stay below 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); //2nd Quarter - Cross 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.26, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.25, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.24, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.23, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); //3rd Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.22, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.21, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.20, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.19, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.18, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.17, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.16, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); //4th Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.15, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.14, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.13, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.12, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.11, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.10, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.09, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); //Extra pay period outside the 1st and 2nd quarter. $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.01, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStub( $user_id ); break; //Only do a single employee. } //Generate Report for 1st Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_1st_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.80', 'after_adjustment_tax' => '88.93', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '6125.67', 'exempt_payments' => '61.89', 'excess_payments' => '0.00', 'taxable_wages' => '6063.78', 'before_adjustment_tax' => '36.38', 'adjustment_tax' => '230.42', 'after_adjustment_tax' => '266.81', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 6125.67, $form_objs->objs[0]->l3 ); $this->assertEquals( 61.89, $form_objs->objs[0]->l4 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l5 ); $this->assertEquals( 61.89, $form_objs->objs[0]->l6 ); $this->assertEquals( 6063.78, $form_objs->objs[0]->l7 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 230.42, $form_objs->objs[0]->l11 ); $this->assertEquals( 266.80, $form_objs->objs[0]->l12 ); $this->assertEquals( 266.80, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 266.81, $form_objs->objs[0]->l16a ); $this->assertEquals( null, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 2nd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_2nd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '35.58', 'after_adjustment_tax' => '41.19', ], 1 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '7145.59', 'exempt_payments' => '71.92', 'excess_payments' => '6137.45', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '35.58', 'after_adjustment_tax' => '41.19', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 13271.26, $form_objs->objs[0]->l3 ); $this->assertEquals( 133.81, $form_objs->objs[0]->l4 ); $this->assertEquals( 6137.45, $form_objs->objs[0]->l5 ); $this->assertEquals( 6271.26, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l12 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 41.19, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( null, $form_objs->objs[0]->l16d ); //Generate Report for 3rd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_3rd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '6124.37', 'exempt_payments' => '61.63', 'excess_payments' => '6062.74', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 19395.63, $form_objs->objs[0]->l3 ); $this->assertEquals( 195.44, $form_objs->objs[0]->l4 ); $this->assertEquals( 12200.19, $form_objs->objs[0]->l5 ); $this->assertEquals( 12395.63, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l12 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 4th Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_4th_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '7144.68', 'exempt_payments' => '71.92', 'excess_payments' => '7072.76', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l12 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10 $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.80', 'after_adjustment_tax' => '88.93', ], 3 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '35.58', 'after_adjustment_tax' => '41.19', ], 4 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '26540.31', 'exempt_payments' => '267.36', 'excess_payments' => '19272.95', 'taxable_wages' => '7000.00', 'before_adjustment_tax' => '42.00', 'adjustment_tax' => '266.00', 'after_adjustment_tax' => '308.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 100.03, $form_objs->objs[0]->l10 ); $this->assertEquals( 478.77, $form_objs->objs[0]->l12 ); $this->assertEquals( 478.77, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 266.81, $form_objs->objs[0]->l16a ); $this->assertEquals( 41.19, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for entire year *without* Line 10 $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments //$form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.81', 'after_adjustment_tax' => '88.94', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '76.80', 'after_adjustment_tax' => '88.93', ], 3 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '35.58', 'after_adjustment_tax' => '41.19', ], 4 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '26540.31', 'exempt_payments' => '267.36', 'excess_payments' => '19272.95', 'taxable_wages' => '7000.00', 'before_adjustment_tax' => '42.00', 'adjustment_tax' => '266.00', 'after_adjustment_tax' => '308.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l12 ); $this->assertEquals( 378.74, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 266.81, $form_objs->objs[0]->l16a ); $this->assertEquals( 41.19, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); return true; } /** * @group Form940Report_testMonthlyDepositSingleEmployeeNoCreditReductionA */ function testMonthlyDepositSingleEmployeeNoCreditReductionA() { foreach ( $this->user_id as $user_id ) { //1st Quarter - Stay below 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); //2nd Quarter - Cross 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.26, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.25, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.24, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.23, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); //3rd Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.22, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.21, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.20, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.19, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.18, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.17, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.16, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); //4th Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.15, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.14, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.13, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.12, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.11, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.10, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.09, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); //Extra pay period outside the 1st and 2nd quarter. $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.01, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStub( $user_id ); break; //Only do a single employee. } //Generate Report for 1st Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_1st_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '6125.67', 'exempt_payments' => '61.89', 'excess_payments' => '0.00', 'taxable_wages' => '6063.78', 'before_adjustment_tax' => '36.38', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '36.38', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 6125.67, $form_objs->objs[0]->l3 ); $this->assertEquals( 61.89, $form_objs->objs[0]->l4 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l5 ); $this->assertEquals( 61.89, $form_objs->objs[0]->l6 ); $this->assertEquals( 6063.78, $form_objs->objs[0]->l7 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l12 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( null, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 2nd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_2nd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '5.62', ], 1 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '7145.59', 'exempt_payments' => '71.92', 'excess_payments' => '6137.45', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '5.62', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 13271.26, $form_objs->objs[0]->l3 ); $this->assertEquals( 133.81, $form_objs->objs[0]->l4 ); $this->assertEquals( 6137.45, $form_objs->objs[0]->l5 ); $this->assertEquals( 6271.26, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( null, $form_objs->objs[0]->l16d ); //Generate Report for 3rd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_3rd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '6124.37', 'exempt_payments' => '61.63', 'excess_payments' => '6062.74', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 19395.63, $form_objs->objs[0]->l3 ); $this->assertEquals( 195.44, $form_objs->objs[0]->l4 ); $this->assertEquals( 12200.19, $form_objs->objs[0]->l5 ); $this->assertEquals( 12395.63, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 4th Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_4th_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '7144.68', 'exempt_payments' => '71.92', 'excess_payments' => '7072.76', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10 $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 3 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '5.62', ], 4 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '26540.31', 'exempt_payments' => '267.36', 'excess_payments' => '19272.95', 'taxable_wages' => '7000.00', 'before_adjustment_tax' => '42.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '42.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 100.03, $form_objs->objs[0]->l10 ); $this->assertEquals( 142.03, $form_objs->objs[0]->l12 ); $this->assertEquals( 142.03, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for entire year *without* Line 10 $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments //$form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '2042.01', 'exempt_payments' => '20.67', 'excess_payments' => '0.00', 'taxable_wages' => '2021.34', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 1 => [ 'date_month' => 'February', 'total_payments' => '2041.89', 'exempt_payments' => '20.63', 'excess_payments' => '0.00', 'taxable_wages' => '2021.26', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 2 => [ 'date_month' => 'March', 'total_payments' => '2041.77', 'exempt_payments' => '20.59', 'excess_payments' => '0.00', 'taxable_wages' => '2021.18', 'before_adjustment_tax' => '12.13', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '12.13', ], 3 => [ 'date_month' => 'April', 'total_payments' => '2041.65', 'exempt_payments' => '20.55', 'excess_payments' => '1084.88', 'taxable_wages' => '936.22', 'before_adjustment_tax' => '5.62', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '5.62', ], 4 => [ 'date_month' => 'May', 'total_payments' => '3062.37', 'exempt_payments' => '30.81', 'excess_payments' => '3031.56', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '2041.57', 'exempt_payments' => '20.56', 'excess_payments' => '2021.01', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '2041.51', 'exempt_payments' => '20.55', 'excess_payments' => '2020.96', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '2041.45', 'exempt_payments' => '20.54', 'excess_payments' => '2020.91', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '2041.41', 'exempt_payments' => '20.54', 'excess_payments' => '2020.87', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '2041.43', 'exempt_payments' => '20.57', 'excess_payments' => '2020.86', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '3061.98', 'exempt_payments' => '30.81', 'excess_payments' => '3031.17', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '2041.27', 'exempt_payments' => '20.54', 'excess_payments' => '2020.73', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '26540.31', 'exempt_payments' => '267.36', 'excess_payments' => '19272.95', 'taxable_wages' => '7000.00', 'before_adjustment_tax' => '42.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '42.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 26540.31, $form_objs->objs[0]->l3 ); $this->assertEquals( 267.36, $form_objs->objs[0]->l4 ); $this->assertEquals( 19272.95, $form_objs->objs[0]->l5 ); $this->assertEquals( 19540.31, $form_objs->objs[0]->l6 ); $this->assertEquals( 7000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 42.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 36.38, $form_objs->objs[0]->l16a ); $this->assertEquals( 5.62, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); return true; } /** * @group Form940Report_testMonthlyDepositManyEmployeesCreditReductionA */ function testMonthlyDepositManyEmployeesCreditReductionA() { foreach ( $this->user_id as $user_id ) { //1st Quarter - Stay below 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); //2nd Quarter - Cross 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.26, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.25, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.24, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.23, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); //3rd Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.22, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.21, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.20, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.19, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.18, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.17, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.16, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); //4th Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.15, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.14, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.13, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.12, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.11, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.10, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.09, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); //Extra pay period outside the 1st and 2nd quarter. $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.01, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStub( $user_id ); } //Generate Report for 1st Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_1st_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; //01-Jan-2019 $report_config['time_period']['end_date'] = $report_dates['end_date']; //31-Mar-2019 $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.54', 'after_adjustment_tax' => '1156.21', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.50', 'after_adjustment_tax' => '1156.16', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '998.46', 'after_adjustment_tax' => '1156.11', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '79633.71', 'exempt_payments' => '804.57', 'excess_payments' => '0.00', 'taxable_wages' => '78829.14', 'before_adjustment_tax' => '472.97', 'adjustment_tax' => '2995.51', 'after_adjustment_tax' => '3468.48', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 79633.71, $form_objs->objs[0]->l3 ); $this->assertEquals( 804.57, $form_objs->objs[0]->l4 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l5 ); $this->assertEquals( 804.57, $form_objs->objs[0]->l6 ); $this->assertEquals( 78829.14, $form_objs->objs[0]->l7 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 2995.51, $form_objs->objs[0]->l11 ); $this->assertEquals( 3468.48, $form_objs->objs[0]->l12 ); $this->assertEquals( 3468.48, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 3468.48, $form_objs->objs[0]->l16a ); $this->assertEquals( null, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 2nd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_2nd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '462.49', 'after_adjustment_tax' => '535.52', ], 1 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '92892.67', 'exempt_payments' => '934.96', 'excess_payments' => '79786.85', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '462.49', 'after_adjustment_tax' => '535.52', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 172526.38, $form_objs->objs[0]->l3 ); $this->assertEquals( 1739.53, $form_objs->objs[0]->l4 ); $this->assertEquals( 79786.85, $form_objs->objs[0]->l5 ); $this->assertEquals( 81526.38, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l12 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 535.52, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 3915.08, $form_objs->objs[0]->l16d ); //Generate Report for 3rd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_3rd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '79616.81', 'exempt_payments' => '801.19', 'excess_payments' => '78815.62', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 252143.19, $form_objs->objs[0]->l3 ); $this->assertEquals( 2540.72, $form_objs->objs[0]->l4 ); $this->assertEquals( 158602.47, $form_objs->objs[0]->l5 ); $this->assertEquals( 161143.19, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l12 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 4377.57, $form_objs->objs[0]->l16d ); //Generate Report for 4th Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_4th_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '92880.84', 'exempt_payments' => '934.96', 'excess_payments' => '91945.88', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l12 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 4377.57, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10. $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.54', 'after_adjustment_tax' => '1156.21', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.50', 'after_adjustment_tax' => '1156.16', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '998.46', 'after_adjustment_tax' => '1156.11', ], 3 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '462.49', 'after_adjustment_tax' => '535.52', ], 4 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '345024.03', 'exempt_payments' => '3475.68', 'excess_payments' => '250548.35', 'taxable_wages' => '91000.00', 'before_adjustment_tax' => '546.00', 'adjustment_tax' => '3458.00', 'after_adjustment_tax' => '4004.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546, $form_objs->objs[0]->l8 ); $this->assertEquals( 100.03, $form_objs->objs[0]->l10 ); $this->assertEquals( 5023.60, $form_objs->objs[0]->l12 ); $this->assertEquals( 5023.60, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 3468.48, $form_objs->objs[0]->l16a ); $this->assertEquals( 535.52, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 1019.60, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10 *without line 10* $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments //$form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = true; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.54', 'after_adjustment_tax' => '1156.21', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '998.50', 'after_adjustment_tax' => '1156.16', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '998.46', 'after_adjustment_tax' => '1156.11', ], 3 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '462.49', 'after_adjustment_tax' => '535.52', ], 4 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '345024.03', 'exempt_payments' => '3475.68', 'excess_payments' => '250548.35', 'taxable_wages' => '91000.00', 'before_adjustment_tax' => '546.00', 'adjustment_tax' => '3458.00', 'after_adjustment_tax' => '4004.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l12 ); $this->assertEquals( 4923.57, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 3468.48, $form_objs->objs[0]->l16a ); $this->assertEquals( 535.52, $form_objs->objs[0]->l16b ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16c ); $this->assertEquals( 919.57, $form_objs->objs[0]->l16d ); return true; } /* * @group Form940Report_testMonthlyDepositManyEmployeesNoCreditReductionA */ function testMonthlyDepositManyEmployeesNoCreditReductionA() { foreach ( $this->user_id as $user_id ) { //1st Quarter - Stay below 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.34, TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.33, TTDate::getMiddleDayEpoch( $this->pay_period_objs[1]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.32, TTDate::getMiddleDayEpoch( $this->pay_period_objs[2]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.31, TTDate::getMiddleDayEpoch( $this->pay_period_objs[3]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.30, TTDate::getMiddleDayEpoch( $this->pay_period_objs[4]->getEndDate() ), $user_id ); //2nd Quarter - Cross 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[5]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[6]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[7]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.26, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[8]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.25, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[9]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.24, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[10]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.23, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[11]->getEndDate() ), $user_id ); //3rd Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.22, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[12]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.21, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[13]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.20, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[14]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.19, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[15]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.18, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[16]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.17, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[17]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.16, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[18]->getEndDate() ), $user_id ); //4th Quarter - All above 7000 FUTA limit $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.15, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.29, TTDate::getMiddleDayEpoch( $this->pay_period_objs[19]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.14, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.28, TTDate::getMiddleDayEpoch( $this->pay_period_objs[20]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.13, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[21]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.12, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[22]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.11, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[23]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.10, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[24]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.09, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[25]->getEndDate() ), $user_id ); //Extra pay period outside the 1st and 2nd quarter. $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Regular Time' ), 1000.01, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStubAmendment( CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ), 10.27, TTDate::getMiddleDayEpoch( $this->pay_period_objs[26]->getEndDate() ), $user_id ); $this->createPayStub( $user_id ); } //Generate Report for 1st Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_1st_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.65', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '79633.71', 'exempt_payments' => '804.57', 'excess_payments' => '0.00', 'taxable_wages' => '78829.14', 'before_adjustment_tax' => '472.97', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '472.97', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 79633.71, $form_objs->objs[0]->l3 ); $this->assertEquals( 804.57, $form_objs->objs[0]->l4 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l5 ); $this->assertEquals( 804.57, $form_objs->objs[0]->l6 ); $this->assertEquals( 78829.14, $form_objs->objs[0]->l7 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l12 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( null, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 2nd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_2nd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '73.03', ], 1 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '92892.67', 'exempt_payments' => '934.96', 'excess_payments' => '79786.85', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '73.03', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 172526.38, $form_objs->objs[0]->l3 ); $this->assertEquals( 1739.53, $form_objs->objs[0]->l4 ); $this->assertEquals( 79786.85, $form_objs->objs[0]->l5 ); $this->assertEquals( 81526.38, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 3rd Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_3rd_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '79616.81', 'exempt_payments' => '801.19', 'excess_payments' => '78815.62', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 252143.19, $form_objs->objs[0]->l3 ); $this->assertEquals( 2540.72, $form_objs->objs[0]->l4 ); $this->assertEquals( 158602.47, $form_objs->objs[0]->l5 ); $this->assertEquals( 161143.19, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for 4th Quarter $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_dates = TTDate::getTimePeriodDates( 'this_year_4th_quarter', TTDate::getMiddleDayEpoch( $this->pay_period_objs[0]->getEndDate() ) ); $report_config['time_period']['start_date'] = $report_dates['start_date']; $report_config['time_period']['end_date'] = $report_dates['end_date']; $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 1 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 2 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 3 => [ 'date_month' => 'Grand Total[3]:', 'total_payments' => '92880.84', 'exempt_payments' => '934.96', 'excess_payments' => '91945.88', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10. $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments $form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.65', ], 3 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '73.03', ], 4 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '345024.03', 'exempt_payments' => '3475.68', 'excess_payments' => '250548.35', 'taxable_wages' => '91000.00', 'before_adjustment_tax' => '546.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '546.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 100.03, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 646.03, $form_objs->objs[0]->l12 ); $this->assertEquals( 646.03, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 100.03, $form_objs->objs[0]->l16d ); //Generate Report for entire year with Line 10 *without line 10* $report_obj = new Form940Report(); $report_obj->setUserObject( $this->user_obj ); $report_obj->setPermissionObject( new Permission() ); $form_config = $report_obj->getCompanyFormConfig(); $form_config['exempt_payments']['include_pay_stub_entry_account'] = [ CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName( $this->company_id, 10, 'Tips' ) ]; //Exempt Payments //$form_config['line_10'] = 100.03; //This is ignored unless the time period is the entire year. $form_config['enable_credit_reduction_test'] = false; //Forces bogus credit reducation rates for testing. $report_obj->setFormConfig( $form_config ); $report_config = Misc::trimSortPrefix( $report_obj->getTemplate( 'by_month' ) ); $report_config['time_period']['time_period'] = 'custom_date'; $report_config['time_period']['start_date'] = strtotime( '01-Jan-2019' ); $report_config['time_period']['end_date'] = strtotime( '31-Dec-2019' ); //Need to do the entire year so 'line_10' from above is used. $report_obj->setConfig( $report_config ); //var_dump($report_config); $report_output = $report_obj->getOutput( 'raw' ); //var_export($report_output); $should_match_arr = [ 0 => [ 'date_month' => 'January', 'total_payments' => '26546.13', 'exempt_payments' => '268.71', 'excess_payments' => '0.00', 'taxable_wages' => '26277.42', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 1 => [ 'date_month' => 'February', 'total_payments' => '26544.57', 'exempt_payments' => '268.19', 'excess_payments' => '0.00', 'taxable_wages' => '26276.38', 'before_adjustment_tax' => '157.66', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.66', ], 2 => [ 'date_month' => 'March', 'total_payments' => '26543.01', 'exempt_payments' => '267.67', 'excess_payments' => '0.00', 'taxable_wages' => '26275.34', 'before_adjustment_tax' => '157.65', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '157.65', ], 3 => [ 'date_month' => 'April', 'total_payments' => '26541.45', 'exempt_payments' => '267.15', 'excess_payments' => '14103.44', 'taxable_wages' => '12170.86', 'before_adjustment_tax' => '73.03', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '73.03', ], 4 => [ 'date_month' => 'May', 'total_payments' => '39810.81', 'exempt_payments' => '400.53', 'excess_payments' => '39410.28', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 5 => [ 'date_month' => 'June', 'total_payments' => '26540.41', 'exempt_payments' => '267.28', 'excess_payments' => '26273.13', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 6 => [ 'date_month' => 'July', 'total_payments' => '26539.63', 'exempt_payments' => '267.15', 'excess_payments' => '26272.48', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 7 => [ 'date_month' => 'August', 'total_payments' => '26538.85', 'exempt_payments' => '267.02', 'excess_payments' => '26271.83', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 8 => [ 'date_month' => 'September', 'total_payments' => '26538.33', 'exempt_payments' => '267.02', 'excess_payments' => '26271.31', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 9 => [ 'date_month' => 'October', 'total_payments' => '26538.59', 'exempt_payments' => '267.41', 'excess_payments' => '26271.18', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 10 => [ 'date_month' => 'November', 'total_payments' => '39805.74', 'exempt_payments' => '400.53', 'excess_payments' => '39405.21', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 11 => [ 'date_month' => 'December', 'total_payments' => '26536.51', 'exempt_payments' => '267.02', 'excess_payments' => '26269.49', 'taxable_wages' => '0.00', 'before_adjustment_tax' => '0.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '0.00', ], 12 => [ 'date_month' => 'Grand Total[12]:', 'total_payments' => '345024.03', 'exempt_payments' => '3475.68', 'excess_payments' => '250548.35', 'taxable_wages' => '91000.00', 'before_adjustment_tax' => '546.00', 'adjustment_tax' => '0.00', 'after_adjustment_tax' => '546.00', '_total' => true, ], ]; $this->assertEquals( $report_output, $should_match_arr ); $report_obj->_outputPDFForm( 'pdf_form' ); //Calculate values for Form so they can be checked too. $form_objs = $report_obj->getFormObject(); //var_dump($form_objs->objs[0]->data); $this->assertObjectHasAttribute( 'objs', $form_objs ); $this->assertArrayHasKey( '0', $form_objs->objs ); $this->assertObjectHasAttribute( 'data', $form_objs->objs[0] ); // //***NOTE: When unit testing is enabled Form940ReportTest forces credit reduction rates for some states, so if testing through the UI you must force unit test mode enabled to get the same results. // Also don't forget to setup the Exempt Payments in the UI. // $this->assertEquals( 345024.03, $form_objs->objs[0]->l3 ); $this->assertEquals( 3475.68, $form_objs->objs[0]->l4 ); $this->assertEquals( 250548.35, $form_objs->objs[0]->l5 ); $this->assertEquals( 254024.03, $form_objs->objs[0]->l6 ); $this->assertEquals( 91000.00, $form_objs->objs[0]->l7 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l8 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l10 ); $this->assertEquals( 0.00, $form_objs->objs[0]->l11 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l12 ); $this->assertEquals( 546.00, $form_objs->objs[0]->l13 ); $this->assertEquals( null, $form_objs->objs[0]->l14 ); $this->assertEquals( 472.97, $form_objs->objs[0]->l16a ); $this->assertEquals( 73.03, $form_objs->objs[0]->l16b ); $this->assertEquals( null, $form_objs->objs[0]->l16c ); $this->assertEquals( 0.00, $form_objs->objs[0]->l16d ); return true; } } ?>