url; return true; } /** * Converts a remittance source account object to a remittance bank account array for uploading. * @param $rs_obj * @return array */ function convertRemittanceSourceAccountObjectToBankAccountArray( $rs_obj ) { $remittances_bank_account_data = [ '_kind' => 'BankAccount', 'remote_id' => $rs_obj->getID(), 'type_id' => 'S', //Settlement 'name' => $rs_obj->getName(), 'domiciled_country' => $rs_obj->getCountry(), 'currency_iso_code' => $rs_obj->getCurrencyObject()->getISOCode(), 'bank_account_type' => 'C', //Checking 'bank_routing_number' => ( $rs_obj->getCountry() == 'CA' ) ? str_pad( $rs_obj->getValue1(), 4, 0, STR_PAD_LEFT ) . str_pad( $rs_obj->getValue2(), 5, 0, STR_PAD_LEFT ) : $rs_obj->getValue2(), 'bank_account_number' => $rs_obj->getValue3(), 'deleted' => $rs_obj->getDeleted(), ]; Debug::Arr( $remittances_bank_account_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $remittances_bank_account_data; } /** * Converts a remittance agency object to a agency authorization array for uploading. * @param $rae_obj * @return array|bool */ function convertRemittanceAgencyEventObjectToAgencyAuthorizationArray( $rae_obj ) { if ( !is_object( $rae_obj ) ) { return false; } $remittance_agency_data = [ '_kind' => 'AgencyAuthorization', 'remote_id' => $rae_obj->getID(), //'status_id' => 'P', //Pending Authorization -- This is handled automatically on the remote end. 'form_type_id' => $rae_obj->getType(), 'frequency_id' => $rae_obj->getFrequency(), 'agency_id' => $rae_obj->getPayrollRemittanceAgencyObject()->getAgency(), 'primary_identification' => $rae_obj->getPayrollRemittanceAgencyObject()->getPrimaryIdentification(), 'secondary_identification' => $rae_obj->getPayrollRemittanceAgencyObject()->getSecondaryIdentification(), 'tertiary_identification' => $rae_obj->getPayrollRemittanceAgencyObject()->getTertiaryIdentification(), 'deleted' => $rae_obj->getDeleted(), ]; Debug::Arr( $remittance_agency_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $remittance_agency_data; } /** * Converts a remittance destination account to a remittance bank account array for uploading. * @param $rd_obj * @param $rs_obj * @param $u_obj * @return array */ function convertRemittanceDestinationAccountObjectToBankAccountArray( $rd_obj, $rs_obj, $u_obj ) { $country = $rs_obj->getCountry(); $remittances_bank_account_data = [ '_kind' => 'BankAccount', 'remote_id' => $rd_obj->getID(), 'type_id' => 'N', //Normal 'name' => $u_obj->getFullName( true ), 'domiciled_country' => $country, 'currency_iso_code' => $rd_obj->getRemittanceSourceAccountObject()->getCurrencyObject()->getISOCode(), 'bank_account_type' => ( $rd_obj->getValue1() == '32' ) ? 'S' : 'C', //S=Savings, C=Checking 'bank_routing_number' => ( $country == 'CA' ) ? str_pad( $rd_obj->getValue1(), 4, 0, STR_PAD_LEFT ) . str_pad( $rd_obj->getValue2(), 5, 0, STR_PAD_LEFT ) : $rd_obj->getValue2(), 'bank_account_number' => $rd_obj->getValue3(), 'deleted' => $rd_obj->getDeleted(), ]; Debug::Arr( $remittances_bank_account_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $remittances_bank_account_data; } /** * @param $end_date * @param null $run_id * @return false|string */ function generateBatchID( $end_date, $run_id = null ) { //APR 02 R01 -- Only the first 7 characters are shown on settlement transactions. //was: PP APR02 R01 //$batch_id = 'PP '. date( 'Md', $end_date ) .' R'. str_pad( $run_id, 2, 0, STR_PAD_LEFT ); //Must be 15 or less characters. $batch_id = date( 'M d', $end_date ); if ( $run_id != '' ) { $batch_id .= ' R' . str_pad( $run_id, 2, 0, STR_PAD_LEFT ); //Must be 15 or less characters. } Debug::Text( 'Batch ID: ' . $batch_id, __FILE__, __LINE__, __METHOD__, 10 ); return $batch_id; } /** * Converts Pay Stub Transaction objects to a remittance transaction array for uploading. * @param $pst_obj * @param $ps_obj * @param $rs_obj * @param $uf_obj * @param $confirmation_number * @param $batch_id * @return array */ function convertPayStubTransactionObjectToTransactionArray( $pst_obj, $ps_obj, $rs_obj, $uf_obj, $confirmation_number, $batch_id ) { $settlement_bank_account_data = $this->convertRemittanceSourceAccountObjectToBankAccountArray( $rs_obj ); $bank_account_data = $this->convertRemittanceDestinationAccountObjectToBankAccountArray( $pst_obj->getRemittanceDestinationAccountObject(), $rs_obj, $uf_obj ); if ( is_object( $ps_obj->getPayPeriodObject() ) ) { //PP APR 02R01 $batch_id = $this->generateBatchID( $ps_obj->getPayPeriodObject()->getEndDate(), $ps_obj->getRun() ); //$batch_id = 'PP '. date( 'M d', $ps_obj->getPayPeriodObject()->getEndDate() ) .'R'. str_pad( $ps_obj->getRun(), 2, 0, STR_PAD_LEFT ); //Must be 15 or less characters. } $remittances_transaction_data = [ '_kind' => 'Transaction', 'remote_id' => $pst_obj->getID(), 'remote_batch_id' => $batch_id, 'settlement_bank_account_id' => $settlement_bank_account_data, 'bank_account_id' => $bank_account_data, 'category_id' => 'DD', //Direct Deposit 'type_id' => 'C', //Credit 'name' => $uf_obj->getFullName( true ), 'reference_number' => $confirmation_number, //Use the Pay Stub Transaction Object Transaction Date, rather than the pay stub transaction date itself, as in cases where the customer might need to back-date the pay stub transaction date, but forward date the direct deposit itself. // The batch_id is still based on the pay stub date itself, so that should continue to match. 'due_date' => TTDate::getISOTimeStamp( $pst_obj->getTransactionDate() ), //Don't pass epoch as the remote system won't know the timezone. 'amount' => $pst_obj->getAmount(), ]; Debug::Arr( $remittances_transaction_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $remittances_transaction_data; } /** * Converts a client payment object to a remittance bank account array for uploading. * @param $invoice_transaction_obj TransactionFactory * @param $client_payment_obj ClientPaymentFactory * @param $client_obj ClientFactory * @param $client_contact_obj ClientContactFactory * @return array */ function convertClientPaymentObjectToBankAccountArray( $invoice_transaction_obj, $client_payment_obj, $client_obj, $client_contact_obj ) { //$rd_obj, $rs_obj, $u_obj ) { //$country = $client_contact_obj->getCountry(); if ( $client_payment_obj->getBankAccountType() == 200 ) { Debug::Text( 'Using PaymentProcess Factory: EFT', __FILE__, __LINE__, __METHOD__, 10 ); $country = 'CA'; } else if ( $client_payment_obj->getBankAccountType() == 201 ) { Debug::Text( 'Using PaymentProcess Factory: ACH', __FILE__, __LINE__, __METHOD__, 10 ); $country = 'US'; } $bank_account_data = [ '_kind' => 'BankAccount', 'remote_id' => $client_payment_obj->getID(), 'type_id' => 'N', //Normal 'name' => $client_obj->getCompanyName(), 'domiciled_country' => $country, 'currency_iso_code' => $invoice_transaction_obj->getCurrencyObject()->getISOCode(), 'bank_account_type' => 'C', //S=Savings, C=Checking 'bank_routing_number' => ( $country == 'CA' ) ? str_pad( $client_payment_obj->getInstitution(), 4, 0, STR_PAD_LEFT ) . str_pad( $client_payment_obj->getTransit(), 5, 0, STR_PAD_LEFT ) : $client_payment_obj->getTransit(), 'bank_account_number' => $client_payment_obj->getAccount(), 'deleted' => $invoice_transaction_obj->getDeleted(), ]; Debug::Arr( $bank_account_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $bank_account_data; } /** * Converts Invoice Transaction objects to a remittance transaction array for uploading. * @param $invoice_transaction_obj TransactionFactory * @param $client_payment_obj ClientPaymentFactory * @param $client_obj ClientFactory * @param $client_contact_obj ClientContactFactory * @param $payment_gateway_obj PaymentGatewayFactory * @param $confirmation_number * @return array */ function convertInvoiceTransactionObjectToTransactionArray( $invoice_transaction_obj, $client_payment_obj, $client_obj, $client_contact_obj, $payment_gateway_obj, $confirmation_number ) { //, $rs_obj, $uf_obj, $confirmation_number, $batch_id ) { //$settlement_bank_account_data = $this->convertRemittanceSourceAccountObjectToBankAccountArray( $rs_obj ); $settlement_bank_account_data = $payment_gateway_obj->getCustomerID(); //Customer ID is the UUID of the payment services settlement bank account ID. $bank_account_data = $this->convertClientPaymentObjectToBankAccountArray( $invoice_transaction_obj, $client_payment_obj, $client_obj, $client_contact_obj ); if ( is_object( $invoice_transaction_obj ) ) { $batch_id = date( 'M d', $invoice_transaction_obj->getEffectiveDate() ); //Must be 9 or less characters, as its prepended with "TT AR " and has to be less than 15 characters overall. } $remittances_transaction_data = [ '_kind' => 'Transaction', 'remote_id' => $invoice_transaction_obj->getID(), 'remote_batch_id' => $batch_id, 'settlement_bank_account_id' => $settlement_bank_account_data, 'bank_account_id' => $bank_account_data, 'category_id' => 'AR', //Accounts Receivable 'type_id' => 'D', //Debit 'name' => $client_obj->getCompanyName(), 'reference_number' => $confirmation_number, 'due_date' => TTDate::getISOTimeStamp( $invoice_transaction_obj->getEffectiveDate() ), //Don't pass epoch as the remote system won't know the timezone. 'amount' => $invoice_transaction_obj->getAmount(), ]; Debug::Arr( $remittances_transaction_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $remittances_transaction_data; } /** * Converts a legal entity object to a remittance organization array for uploading. * @param $le_obj * @return array */ function convertLegalEntityObjectToOrganizationArray( $le_obj ) { $validator = new Validator(); $obj_class = "\124\124\114\x69\x63\x65\x6e\x73\x65"; $license = @new $obj_class; $primary_identification = null; //Get federal remittance agency in an attempt to get EIN/Business number. $filter_data['legal_entity_id'] = $le_obj->getId(); if ( strtoupper( $le_obj->getCountry() ) == 'CA' ) { $filter_data['agency_id'] = [ '10:CA:00:00:0010' ]; //CA federal } else if ( strtoupper( $le_obj->getCountry() ) == 'US' ) { $filter_data['agency_id'] = [ '10:US:00:00:0010' ]; //US federal } $ralf = TTnew( 'PayrollRemittanceAgencyListFactory' ); /** @var PayrollRemittanceAgencyListFactory $ralf */ $ralf->getAPISearchByCompanyIdAndArrayCriteria( $le_obj->getCompany(), $filter_data ); if ( $ralf->getRecordCount() > 0 ) { $ra_obj = $ralf->getCurrent(); $primary_identification = $ra_obj->getPrimaryIdentification(); } $legal_entity_data = [ '_kind' => 'Organization', 'remote_id' => $le_obj->getID(), 'legal_name' => $le_obj->getLegalName(), 'trade_name' => $le_obj->getTradeName(), 'short_name' => ( $le_obj->getShortName() != '' ) ? $le_obj->getShortName() : substr( $validator->stripNonAlphaNumeric( trim( $le_obj->getTradeName() ) ), 0, 15 ), //Short was recently added to legal entities, so if its not defined, use the first 15 chars of trade name instead. 'primary_identification' => $primary_identification, //Obtain from federal remittance agency 'address1' => $le_obj->getAddress1(), 'address2' => $le_obj->getAddress2(), 'city' => $le_obj->getCity(), 'province' => $le_obj->getProvince(), 'country' => $le_obj->getCountry(), 'postal_code' => $le_obj->getPostalCode(), 'work_phone' => $le_obj->getWorkPhone(), 'extra_data' => [ 'company_name' => $le_obj->getCompanyObject()->getName(), 'registration_key' => SystemSettingFactory::getSystemSettingValueByKey( 'registration_key' ), 'hardware_id' => $license->getHardwareID(), 'company_id' => $le_obj->getCompany(), 'legal_entity_id' => $le_obj->getId(), ], 'deleted' => $le_obj->getDeleted(), ]; Debug::Arr( $legal_entity_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $legal_entity_data; } /** * Converts a user object to a remittance user array for uploading. * @param $u_obj * @param null $remote_organization_id * @return array */ function convertUserObjectToUserArray( $u_obj, $remote_organization_id = null ) { $user_data = [ '_kind' => 'User', 'remote_id' => $u_obj->getID(), 'user_name' => $u_obj->getUserName(), 'first_name' => $u_obj->getFirstName(), 'middle_name' => $u_obj->getMiddleName(), 'last_name' => $u_obj->getLastName(), 'address1' => $u_obj->getAddress1(), 'address2' => $u_obj->getAddress2(), 'city' => $u_obj->getCity(), 'province' => $u_obj->getProvince(), 'country' => $u_obj->getCountry(), 'postal_code' => $u_obj->getPostalCode(), 'work_phone' => $u_obj->getWorkPhone(), 'work_phone_ext' => $u_obj->getWorkPhoneExt(), 'home_phone' => $u_obj->getHomePhone(), 'mobile_phone' => $u_obj->getMobilePhone(), 'birth_date' => ( $u_obj->getBirthDate() != '' ) ? TTDate::getISODateStamp( $u_obj->getBirthDate() ) : '', 'sin' => $u_obj->getSIN(), 'work_email' => $u_obj->getWorkEmail(), 'home_email' => $u_obj->getHomeEmail(), 'deleted' => $u_obj->getDeleted(), ]; if ( $remote_organization_id != '' ) { $user_data['organization_id'] = $remote_organization_id; } Debug::Arr( $user_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $user_data; } /** * Converts getPaymentServicesData() results to an AgencyReport array for uploading. * @param array $report_data * @param object $prae_obj * @param object $pra_obj * @param object $rs_obj * @param object $pra_user_obj * @return array|bool */ function convertReportPaymentServicesDataToAgencyReportArray( $report_data, $prae_obj, $pra_obj, $rs_obj, $pra_user_obj ) { if ( !isset( $report_data['agency_report_data'] ) ) { Debug::Arr( $report_data, 'ERROR! Invalid Agency Report Data! ', __FILE__, __LINE__, __METHOD__, 10 ); return false; } $settlement_bank_account_data = $this->convertRemittanceSourceAccountObjectToBankAccountArray( $rs_obj ); if ( isset( $report_data['object'] ) ) { Debug::Text( 'Report Object: ' . $report_data['object'], __FILE__, __LINE__, __METHOD__, 10 ); } $agency_report_data = [ '_kind' => 'AgencyReport', 'agency_id' => $prae_obj->getPayrollRemittanceAgencyObject()->getAgency(), 'settlement_bank_account_id' => $settlement_bank_account_data, 'status_id' => 'P', //Pending 'type_id' => 'D', //Deposit/Estimate 'form_type_id' => $prae_obj->getType(), 'period_start_date' => TTDate::getISODateStamp( $prae_obj->getStartDate() ), 'period_end_date' => TTDate::getISODateStamp( $prae_obj->getEndDate() ), 'due_date' => TTDate::getISOTimeStamp( $prae_obj->getDueDate() ), 'frequency_id' => $prae_obj->getFrequency(), ]; $agency_report_data = array_merge( $agency_report_data, $report_data['agency_report_data'] ); Debug::Arr( $agency_report_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $agency_report_data; } /** * Converts ROE objects to a agency report array for uploading. * @param $form_obj * @param $rae_obj * @param $ra_obj * @param $remote_id * @param $batch_id * @return array */ function convertROEToAgencyReportArray( $form_obj, $rae_obj, $ra_obj, $batch_id ) { //Separate ROE form object into a separate object for each record. foreach( $form_obj->getForms() as $tmp_form_obj ) { foreach( $tmp_form_obj->getRecords() as $tmp_form_record ) { $gf = new GovernmentForms(); //Always start with a fresh GovernmentForm object so there is no way we can mix forms between employees. $new_roe_obj = clone $tmp_form_obj; //Clone the form record we are on, so we can eliminate all other records. $new_roe_obj->clearRecords(); //Clear all records so we start from a clean slate $new_roe_obj->addRecord( $tmp_form_record ); //Add just this single employees record to the form. $gf->addForm( $new_roe_obj ); //Add just this single employees form. $xml_data = $gf->output( 'XML' ); //Make sure the ROEHEADER element is always retained as it contains ROE version numbers and such. $agency_report_data[] = [ '_kind' => 'AgencyReport', 'agency_id' => $rae_obj->getPayrollRemittanceAgencyObject()->getAgency(), 'status_id' => 'P', //Pending 'type_id' => 'R', //Report 'form_type_id' => $rae_obj->getType(), 'period_start_date' => TTDate::getISODateStamp( $tmp_form_record['first_date'] ), 'period_end_date' => TTDate::getISODateStamp( $tmp_form_record['last_date'] ), 'due_date' => TTDate::getISOTimeStamp( TTDate::getMiddleDayEpoch( ( time() + 86400 ) ) ), //Set due date to the next day. 'total_employees' => 1, 'subject_wages' => 0, 'taxable_wages' => 0, 'amount_withheld' => 0, 'amount_due' => 0, 'extra_data' => $tmp_form_record, 'xml_data' => $xml_data, 'frequency_id' => $rae_obj->getFrequency(), 'remote_id' => $tmp_form_record['id'], 'remote_batch_id' => $batch_id, ]; } } Debug::Arr( $agency_report_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $agency_report_data; } /** * Converts T4 objects to a agency report array for uploading. * @param $form_obj * @param $report_data * @param $rae_obj * @param $ra_obj * @param $remote_id * @param $batch_id * @return array */ function convertT4ToAgencyReportArray( $form_obj, $report_data, $rae_obj, $ra_obj, $remote_id, $batch_id ) { $xml_data = $form_obj->output( 'XML' ); $agency_report_data = [ '_kind' => 'AgencyReport', 'agency_id' => $rae_obj->getPayrollRemittanceAgencyObject()->getAgency(), 'status_id' => 'P', //Pending 'type_id' => 'R', //Report 'form_type_id' => $rae_obj->getType(), 'period_start_date' => TTDate::getISODateStamp( $rae_obj->getStartDate() ), //$pay_period_start_date, 'period_end_date' => TTDate::getISODateStamp( $rae_obj->getEndDate() ), 'due_date' => TTDate::getISOTimeStamp( $rae_obj->getDueDate() ), //They can be filed earlier than their due date. 'total_employees' => count( $report_data ), 'subject_wages' => 0, 'taxable_wages' => 0, 'amount_withheld' => 0, 'amount_due' => 0, 'extra_data' => $report_data, 'xml_data' => $xml_data, 'frequency_id' => $rae_obj->getFrequency(), 'remote_id' => $remote_id, 'remote_batch_id' => $batch_id, ]; Debug::Arr( $agency_report_data, 'Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $agency_report_data; } /** * Uploads organization data to TimeTrex PaymentServices. * @param $rows * @return bool */ function setOrganization( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } foreach ( $rows as $row ) { $api = new PaymentServicesClientAPI( 'APIOrganization' ); $api_result = $api->setOrganization( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } return true; } /** * @param $id * @return bool */ function getUser( $id ) { $api = new PaymentServicesClientAPI( 'APIOrganization' ); $api_result = $api->getUser( [ 'id' => $id ] ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return $api_result->getResultData(); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } } return false; } /** * Uploads user data to TimeTrex PaymentServices. * @param $rows * @return bool */ function setUser( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } foreach ( $rows as $row ) { $api = new PaymentServicesClientAPI( 'APIUser' ); $api_result = $api->setUser( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } return true; } /** * Create organization from Legal Entity * @param $row * @return bool */ function createNewOrganization( $row ) { if ( isset( $row['_kind'] ) ) { $row = [ $row ]; } $api = new PaymentServicesClientAPI( 'APIAuthentication' ); //Need to do this before logging in. $api_result = $api->setNewOrganization( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return $api_result->getResult(); //Return the ID so we can link a user to it. } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } /** * @param $row * @return bool */ function createNewUser( $row ) { if ( isset( $row['_kind'] ) ) { $row = [ $row ]; } $api = new PaymentServicesClientAPI( 'APIAuthentication' ); //Need to do this before logging in. $api_result = $api->setNewUser( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Arr( $api_result->getResult(), 'PaymentServices API: Retval: ', __FILE__, __LINE__, __METHOD__, 10 ); return $api_result->getResult(); //Return the ID so we can link a user to it. } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } /** * Deep validation of bank account. * @param $row * @return bool */ function validateBankAccount( $row ) { $api = new PaymentServicesClientAPI( 'APIBankAccount' ); $api_result = $api->validateBankAccount( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return true; } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return $api_result; //Return raw result object so we can get validation errors from it. //return FALSE; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } /** * Updates the remote remittance bank account information. * @param $rows * @return bool */ function setRemittanceSourceAccount( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } foreach ( $rows as $row ) { if ( isset( $row['deleted'] ) && $row['deleted'] == true ) { $api = new PaymentServicesClientAPI( 'APIBankAccount' ); $api_result = $api->getBankAccount( [ 'filter_data' => [ 'remote_id' => $row['remote_id'] ] ] ); if ( $api_result->isValid() === true ) { $bank_account_id = $api_result->getResult()[0]['id']; Debug::Text( 'PaymentServices API: Bank Account ID: ' . $bank_account_id, __FILE__, __LINE__, __METHOD__, 10 ); $api_result = $api->deleteBankAccount( $bank_account_id ); if ( $api_result->isValid() !== true ) { Debug::Arr( $api_result->getResult(), 'PaymentServices API: Failed deleting Bank Account ID: ' . $bank_account_id, __FILE__, __LINE__, __METHOD__, 10 ); } } } else { $api = new PaymentServicesClientAPI( 'APIBankAccount' ); $api_result = $api->setBankAccount( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } } return true; } /** * Updates the remote remittance agency information. * @param $rows * @return bool */ function setAgencyAuthorization( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } foreach ( $rows as $row ) { if ( isset( $row['deleted'] ) && $row['deleted'] == true ) { $api = new PaymentServicesClientAPI( 'APIAgencyAuthorization' ); $api_result = $api->getAgencyAuthorization( [ 'filter_data' => [ 'remote_id' => $row['remote_id'] ] ] ); if ( $api_result->isValid() === true ) { $agency_authorization_id = $api_result->getResult()[0]['id']; Debug::Text( 'PaymentServices API: Agency Authorization ID: ' . $agency_authorization_id, __FILE__, __LINE__, __METHOD__, 10 ); $api_result = $api->deleteAgencyAuthorization( $agency_authorization_id ); if ( $api_result->isValid() !== true ) { Debug::Arr( $api_result->getResult(), 'PaymentServices API: Failed deleting Agency Authorization ID: ' . $agency_authorization_id, __FILE__, __LINE__, __METHOD__, 10 ); } } } else { $api = new PaymentServicesClientAPI( 'APIAgencyAuthorization' ); $api_result = $api->setAgencyAuthorization( $row ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } else { //Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return false; //This will trigger a general error to the user. } } } return true; } /** * Uploads Agency Report for processing through TimeTrex PaymentServices. * @param $rows * @return bool */ function setAgencyReport( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } $api = new PaymentServicesClientAPI( 'APIAgencyReport' ); $api_result = $api->setAgencyReport( $rows ); return $api_result; } /** * Uploads Pay Stub transactions for processing through TimeTrex PaymentServices. * @param $rows * @return bool */ function setPayStubTransaction( $rows ) { if ( isset( $rows['_kind'] ) ) { $rows = [ $rows ]; } $api = new PaymentServicesClientAPI( 'APITransaction' ); $api_result = $api->setTransaction( $rows ); return $api_result; } /** * @param null $start_date * @param null $end_date * @return bool */ function getAccountStatementReport( $start_date = null, $end_date = null ) { $api = new PaymentServicesClientAPI( 'APIOrganization' ); $api_result = $api->getAccountStatementReport( $start_date, $end_date ); if ( $api_result !== false ) { if ( $api_result->isValid() === true ) { Debug::Text( 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); return $api_result->getResultData(); } else { Debug::Arr( $api_result, 'PaymentServices API: Retval: ' . $api_result->getResult(), __FILE__, __LINE__, __METHOD__, 10 ); } } return false; } /** * @return mixed */ function ping() { $api = new PaymentServicesClientAPI( 'APIAuthentication' ); return $api->ping(); } } ?>