function create_bus_enterprise_nature_fee($dbLink, $trans_id, $business_id, $owner_id, $permit_id, $permit_type, $action, $creator, $nature_code = NULL) { // removed bus nature code from tax_fee table instead transfer nature code to business nature code table if (is_array($nature_code)) { $nature_code_lst = "'" . join("','", $nature_code) . "'"; $sql = " SELECT a.business_nature_code, c.tax_fee_code, c.tax_fee_desc, c.tax_account_code, c.tax_formula "; $sql .= " FROM ebpls_business_nature AS a "; $sql .= " INNER JOIN ebpls_tax_fee_table as b ON a.tax_fee_code = b.tax_fee_code WHERE a.business_nature_code IN ('{$nature_code_lst}')"; } else { $sql = " SELECT a.business_nature_code, c.tax_fee_code, c.tax_fee_desc, c.tax_account_code, c.tax_formula "; $sql .= " FROM ebpls_business_nature AS a "; $sql .= " INNER JOIN ebpls_tax_fee_table as b ON a.tax_fee_code = b.tax_fee_code WHERE a.business_nature_code = '{$nature_code}'"; } ebpls_db_funcs_debug("create_bus_enterprise_nature_fee : {$sql}"); $result = mysql_query($sql, $dbLink); if ($result) { $i = 0; while ($row = mysql_fetch_array($result)) { $clsTaxFee = new EBPLTaxFeeSysRef($dbLink, false); $res_tax = $clsTaxFee->select($row["tax_fee_code"]); if (is_array($res_tax)) { $clsNature = new EBPLSTransactionBusinessNature($dbLink, true); $clsNature->setData(TRANS_BUSNATURE_TRANS_ID, $trans_id); $clsNature->setData(TRANS_BUSNATURE_BUSINESS_ID, $business_id); $clsNature->setData(TRANS_BUSNATURE_OWNER_ID, $owner_id); $clsNature->setData(TRANS_BUSNATURE_CAPITAL_INVESTMENT, "0.0"); $clsNature->setData(TRANS_BUSNATURE_LAST_GROSS, "0.0"); $clsNature->setData(TRANS_BUSNATURE_BUSINESS_NATURE_CODE, $row["business_nature_code"]); if ($clsNature->add() < 0) { ebpls_db_funcs_debug("create_bus_enterprise_nature_fee : error on creation of business nature record"); return -5; } $clsTaxFormula = $res_tax["result"][0]->getData(EBPLS_TAX_FORMULA); $sql = "INSERT INTO ebpls_transaction_payables ( trans_id, permit_id,permit_type, tax_fee_type, tax_fee_code, tax_business_nature_code, tax_fee_desc, tax_account_code, tax_total_amount_due, ts_create, last_updated_by )"; $sql .= " values( {$trans_id}, {$permit_id}, '{$permit_type}', 'BUSTAX','" . $row["tax_fee_code"] . "','" . $row["business_nature_code"] . "','" . $row["tax_fee_desc"] . "','" . $row["tax_account_code"] . "', 0, now(), '{$creator}')"; ebpls_db_funcs_debug("create_bus_enterprise_nature_fee tax/fee found : {$sql}"); $rs = mysql_query($sql, $dbLink); // add nature to business enterprise nature table if (!$rs) { set_db_error($dbLink); return -1; } $i++; } else { ebpls_db_funcs_debug("create_bus_enterprise_nature_fee tax/fee code not found : " . $row["tax_fee_code"]); set_db_error(NULL, "create_bus_enterprise_nature_fee tax/fee code not found : " . $row["tax_fee_code"]); return -3; } } return $i; } else { set_db_error($dbLink); return -2; } }
/** * Updates payments schedules accumulated interest/surcharges. * * **/ function updatePaymentSchedulesInterestSurcharges(&$trans_obj) { // retrieve payment schedule list which are not yet fully paid //$tps_records = $this->listPaymentSchedule( $trans_obj->getData(TRANS_ID), TPS_PAYMENT_STATE_UNPAID, TPS_PAYMENT_DUE_DATE, false ); $tps_records = $this->listSynchPaymentSchedule($trans_obj->getData(TRANS_ID), TPS_PAYMENT_STATE_UNPAID, TPS_PAYMENT_DUE_DATE, false); if (is_array($tps_records)) { $tmp_tps_included_records = NULL; mysql_query("LOCK TABLES", $this->m_dbLink); $clsAccounts = new EBPLChartOfAccountsSysRef($this->m_dbLink, false); $cash_account_code = $clsAccounts->getCashAccountCode(); if ($cash_account_code < 0) { $this->debug(-5, "Unable to load cash account code, return {$cash_account_code}!"); $this->setError(-5, "Unable to load cash account code, return {$cash_account_code}!"); return -5; } for ($i = 0; $i < count($tps_records); $i++) { // ---- LOAD TRANSACTOPM RECORD DATA $payment_id = $tps_records[$i]->getData(TPS_PAYMENT_ID); $fee_id = $tps_records[$i]->getData(TPS_PAYMENT_FEE_ID); $tax_fee_code = $tps_records[$i]->getData(TPS_PAYMENT_TAX_FEE_CODE); $tps_amount_due = $tps_records[$i]->getData(TPS_PAYMENT_TOTAL_AMOUNT_DUE); $tps_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_AMOUNT_PAID); $tps_penalty_amount = $tps_records[$i]->getData(TPS_PAYMENT_PENALTY_AMOUNT); $tps_penalty_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_PENALTY_AMOUNT_PAID); $tps_interest_amount = $tps_records[$i]->getData(TPS_PAYMENT_INTEREST_AMOUNT); $tps_interest_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_INTEREST_AMOUNT_PAID); $total_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_TOTAL_AMOUNT_PAID); $tps_due_date = $tps_records[$i]->getData(TPS_PAYMENT_DUE_DATE); $tps_synch_date = $tps_records[$i]->getData(TPS_PAYMENT_SYNCH_UPDATE); if ($tps_synch_date == date("Y-m-d")) { // skip those whose interest/surcharges have been updated... continue; } $clsTaxFee = new EBPLTaxFeeSysRef($this->m_dbLink, false); // ---- RETRIEVE TAX/FEE DATA $clsTaxFeePayable = $clsTaxFee->loadTaxFee($tax_fee_code); $clsTaxFeeSurcharge = $clsTaxFee->loadTaxFee($clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE)); $clsTaxFeeInterest = $clsTaxFee->loadTaxFee($clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); if ($clsTaxFeePayable == -1 || $clsTaxFeeSurcharge == -1 || $clsTaxFeeInterest == -1) { $this->debug("Unable to load tax fee code {$tax_fee_code}," . $clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE) . "," . $clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); $this->setError(-1, "Unable to load tax fee code {$tax_fee_code}," . $clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE) . "," . $clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); return -1; } // retrieve account codes $tax_fee_account_code = $clsTaxFeePayable->getData(EBPLS_TAX_ACCOUNT_CODE); $surcharge_account_code = $clsTaxFeeSurcharge->getData(EBPLS_TAX_ACCOUNT_CODE); $interest_account_code = $clsTaxFeeInterest->getData(EBPLS_TAX_ACCOUNT_CODE); // ---- LOAD FORMULA //$clsTaxFeePayableFormula = $clsTaxFeePayable->getData(EBPLS_TAX_FORMULA); // we dont need this, used on setting of payment mode only $clsTaxFeeSurchargeFormula = $clsTaxFeeSurcharge->getData(EBPLS_TAX_FORMULA); $clsTaxFeeInterestFormula = $clsTaxFeeInterest->getData(EBPLS_TAX_FORMULA); // ---- COMPUTE BALANCE // formula = ( Total Amount Due = (Payable Amount - Paid Amount) + ( Surcharge - Surcharge Paid ) + ( Interest - Interest Paid ) - ( Total Paid Amount ) // compute raw tax mount due less the raw tax amount paid $raw_tax_difference = $tps_amount_due - $tps_amount_paid; $total_amount_due = $raw_tax_difference; $this->debug("COMPUTE BALANCE : {$raw_tax_difference} = ( {$tps_amount_due} - {$tps_amount_paid} )"); // compute penalty incurred not yet paid on previous payment $penalty_tax_difference = $tps_penalty_amount - $tps_penalty_amount_paid; $total_amount_due += $penalty_tax_difference; $this->debug("COMPUTE PENALTY : {$penalty_tax_difference} = ( {$tps_penalty_amount} - {$tps_penalty_amount_paid} )"); // compute interest incurred not yet paid on previous payment $interest_tax_difference = $tps_interest_amount - $tps_interest_amount_paid; $total_amount_due += $interest_tax_difference; $this->debug("COMPUTE INTEREST : {$interest_tax_difference} = ( {$tps_interest_amount} - {$tps_interest_amount_paid} )"); // compute total balance payable // this will be used to calculate interest/surcharge, since these items requires balance amount $total_amount_payable = $total_amount_due - $total_amount_paid; //$this->debug("COMPUTE TOTAL : $total_amount_payable = $total_amount_due - $total_amount_paid"); // -------------------------------------------------------------------------- // ---- COMPUTE SURCHARGE / INTEREST $surcharge_amount = $clsTaxFeeSurchargeFormula->computeSurcharge($total_amount_payable, $tps_due_date); $interest_amount = $clsTaxFeeSurchargeFormula->computeSurcharge($total_amount_payable, $tps_due_date); $this->debug("SURCHARGE {$surcharge_amount}, INTEREST {$interest_amount}"); // add interest / surcharge to current taxes surcharge/interest balance amount $tps_penalty_amount += $surcharge_amount; $tps_interest_amount += $interest_amount; // -------------------------------------------------------------------------- // ---- UPDATE PAYMENT SCHEDULE RECORD unset($tps_records[$i]->data_elems); $tps_records[$i]->data_elems[TPS_PAYMENT_AMOUNT_PAID] = $tps_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_PENALTY_AMOUNT] = $tps_penalty_amount; $tps_records[$i]->data_elems[TPS_PAYMENT_PENALTY_AMOUNT_PAID] = $tps_penalty_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_INTEREST_AMOUNT] = $tps_interest_amount; $tps_records[$i]->data_elems[TPS_PAYMENT_INTEREST_AMOUNT_PAID] = $tps_interest_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_TOTAL_AMOUNT_PAID] = $total_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_SYNCH_UPDATE] = date("Y-m-d"); $retUpdate = $tps_records[$i]->_update($trans_obj, $payment_id, $admin); if ($retUpdate <= 0) { // invalid return, do rollback // call rollback $this->debug("Invalid return on _update on updatePaymentSchedules function, return {$retUpdate}!"); $this->setError(-1, "Invalid return on _update on updatePaymentSchedules function, return {$retUpdate}!"); return -1; } } mysql_query("UNLOCK TABLES", $this->m_dbLink); return 1; } else { //$this->debug("Unable to load transaction payment schedules on updatePaymentSchedules function, return $tps_records!"); $this->setError(-1, "Unable to load transaction payment schedules on updatePaymentSchedules function, return {$tps_records}!"); return -1; } }
function printIndividualCTCScript($ctc_type, $basic_tax_field, $tax_a1_fields, $tax_a2_fields, $tax_a3_fields, $out_total_amount_due, $out_total_interest_due, $out_total_paid_due) { if ($ctc_type == CTC_TYPE_INDIVIDUAL) { $clsCTC_A_EX = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_A_EXRet = $clsCTC_A_EX->select("CTC_A_EX"); $clsCTC_A_NEX = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_A_NEXRet = $clsCTC_A_NEX->select("CTC_A_NEX"); $clsCTC_B1 = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_B1Ret = $clsCTC_B1->select("CTC_B1"); $clsCTC_B2 = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_B2Ret = $clsCTC_B2->select("CTC_B2"); $clsCTC_B3 = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_B3Ret = $clsCTC_B3->select("CTC_B3"); $clsCTC_TTL_TAX = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TTL_TAXRet = $clsCTC_TTL_TAX->select("CTC_TTL_TAX"); $clsCTC_TAX_INT = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TAX_INTRet = $clsCTC_TAX_INT->select("CTC_TAX_INT"); $clsCTC_TAX_DUE = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TAX_DUERet = $clsCTC_TAX_DUE->select("CTC_TAX_DUE"); if (!(is_array($clsCTC_A_EXRet) && is_array($clsCTC_A_NEXRet) && is_array($clsCTC_B1Ret) && is_array($clsCTC_B2Ret) && is_array($clsCTC_B3Ret) && is_array($clsCTC_TAX_INTRet) && is_array($clsCTC_TAX_DUERet))) { $this->setError(-1, "System Configuration Error : One of the requiered CTC Records is nonexistent, Please check of Fee with code CTC_A_EX, CTC_A_NEX, CTC_B1, CTC_B2, CTC_B3 and CTC_B1 exist on tax/fee manager"); return -1; } else { $clsCTC_A_EX_Formula = $clsCTC_A_EXRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_B1_Formula = $clsCTC_B1Ret["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_B2_Formula = $clsCTC_B2Ret["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_B3_Formula = $clsCTC_B3Ret["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TTL_TAX_Formula = $clsCTC_TTL_TAXRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TAX_INT_Formula = $clsCTC_TAX_INTRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TAX_DUE_Formula = $clsCTC_TAX_DUERet["result"][0]->getData(EBPLS_TAX_FORMULA); echo "\n" . $clsCTC_A_EX_Formula->createAutocompleteJScript(array("x1" => $basic_tax_field["in"][0]), $basic_tax_field["out"], "checked"); echo "\n" . $clsCTC_B1_Formula->createAutocompleteJScript(array("x1" => $tax_a1_fields["in"][0]), $tax_a1_fields["out"]); echo "\n" . $clsCTC_B2_Formula->createAutocompleteJScript(array("x1" => $tax_a2_fields["in"][0]), $tax_a2_fields["out"]); echo "\n" . $clsCTC_B3_Formula->createAutocompleteJScript(array("x1" => $tax_a3_fields["in"][0]), $tax_a3_fields["out"]); echo "\n" . $clsCTC_TTL_TAX_Formula->createAutocompleteJScript($out_total_amount_due["in"], $out_total_amount_due["out"]); echo "\n" . $clsCTC_TAX_INT_Formula->createAutocompleteJScript($out_total_interest_due["in"], $out_total_interest_due["out"]); echo "\n" . $clsCTC_TAX_DUE_Formula->createAutocompleteJScript($out_total_paid_due["in"], $out_total_paid_due["out"]); } } else { $clsCTCB_A_EX = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTCB_A_EXRet = $clsCTCB_A_EX->select("CTCB_BASIC_TAX"); $clsCTCB_B1 = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTCB_B1Ret = $clsCTCB_B1->select("CTCB_B1"); $clsCTCB_B2 = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTCB_B2Ret = $clsCTCB_B2->select("CTCB_B2"); $clsCTC_TTL_TAX = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TTL_TAXRet = $clsCTC_TTL_TAX->select("CTCB_TTL_TAX"); $clsCTC_TAX_INT = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TAX_INTRet = $clsCTC_TAX_INT->select("CTCB_TAX_INT"); $clsCTC_TAX_DUE = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsCTC_TAX_DUERet = $clsCTC_TAX_DUE->select("CTC_TAX_DUE"); if (!(is_array($clsCTCB_A_EXRet) && is_array($clsCTCB_B1Ret) && is_array($clsCTCB_B2Ret) && is_array($clsCTC_TAX_INTRet) && is_array($clsCTC_TAX_DUERet))) { $this->setError(-1, "System Configuration Error : One of the requiered CTC Records is nonexistent, Please check of Fee with code CTCB_A_EX, CTCB_B1, CTCB_B2 exist on tax/fee manager"); return -1; } else { $clsCTCB_A_EX_Formula = $clsCTCB_A_EXRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTCB_B1_Formula = $clsCTCB_B1Ret["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTCB_B2_Formula = $clsCTCB_B2Ret["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TTL_TAX_Formula = $clsCTC_TTL_TAXRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TAX_INT_Formula = $clsCTC_TAX_INTRet["result"][0]->getData(EBPLS_TAX_FORMULA); $clsCTC_TAX_DUE_Formula = $clsCTC_TAX_DUERet["result"][0]->getData(EBPLS_TAX_FORMULA); //echo "\n" . $clsCTCB_A_EX_Formula->createAutocompleteJScript(Array("x1"=>$basic_tax_field["in"][0]),$basic_tax_field["out"]); echo "\n" . $clsCTCB_A_EX_Formula->createAutocompleteJScript(NULL, $basic_tax_field["out"]); echo "\n" . $clsCTCB_B1_Formula->createAutocompleteJScript(array("x1" => $tax_a1_fields["in"][0]), $tax_a1_fields["out"]); echo "\n" . $clsCTCB_B2_Formula->createAutocompleteJScript(array("x1" => $tax_a2_fields["in"][0]), $tax_a2_fields["out"]); echo "\n" . $clsCTC_TTL_TAX_Formula->createAutocompleteJScript($out_total_amount_due["in"], $out_total_amount_due["out"]); echo "\n" . $clsCTC_TAX_INT_Formula->createAutocompleteJScript($out_total_interest_due["in"], $out_total_interest_due["out"]); echo "\n" . $clsCTC_TAX_DUE_Formula->createAutocompleteJScript($out_total_paid_due["in"], $out_total_paid_due["out"]); } } }
function addCashPayment($trans_obj, $amount, $admin, $bCommit) { // retrieve payment schedule list which are not yet fully paid $clsTPS = new EBPLSTransactionPaymentSchedule($this->m_dbLink, false); $tps_records = $clsTPS->listPaymentSchedule($trans_obj->getData(TRANS_ID), TPS_PAYMENT_STATE_UNPAID, TPS_PAYMENT_DUE_DATE, false); if (is_array($tps_records)) { // check first if payment exceeds the balance (code assumes that payment schedules are update!) $tmp_amount_due = $clsTPS->getTotalAmountDue($trans_obj->getData(TRANS_ID)); if ($tmp_amount_due <= 0) { $this->setError(-2, "All tax/fee payables are paid."); return -3; } $this->debug("The current users balance is P" . number_format($tmp_amount_due, 2) . " < {$amount}!"); if (round($tmp_amount_due, 2) < round($amount, 2)) { // return error if payment amount given exceeds balance $this->debug("The current users balance is P" . number_format($tmp_amount_due, 2) . ", please indicate specified amount as cash payment."); $this->setError(-2, "The current users balance is P" . number_format($tmp_amount_due, 2) . ", please indicate specified amount as cash payment."); return -2; } $tmp_amount = $amount; $tmp_tps_included_records = NULL; // ----- START TRANSACTION HERE ----- $or_code = get_next_system_code($this->m_dbLink, CODES_OR_COL); $payment_code = get_next_system_code($this->m_dbLink, CODES_PAY_COL); $clsAccounts = new EBPLChartOfAccountsSysRef($this->m_dbLink, false); $cash_account_code = $clsAccounts->getCashAccountCode(); if ($cash_account_code < 0) { $this->debug("Unable to load cash account code, return {$cash_account_code}!"); $this->setError(-5, "Unable to load cash account code, return {$cash_account_code}!"); // roll back return -5; } $this->debug("OR CODE:{$or_code}, CASH ACCT CODE:{$cash_account_code}, PAYMENT:{$amount}"); unset($this->or_details); for ($i = 0; $i < count($tps_records); $i++) { // ---- LOAD TRANSACTION RECORD DATA $payment_id = $tps_records[$i]->getData(TPS_PAYMENT_ID); $fee_id = $tps_records[$i]->getData(TPS_PAYMENT_FEE_ID); $tax_fee_code = $tps_records[$i]->getData(TPS_PAYMENT_TAX_FEE_CODE); $tps_amount_due = $tps_records[$i]->getData(TPS_PAYMENT_TOTAL_AMOUNT_DUE); $tps_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_AMOUNT_PAID); $tps_penalty_amount = $tps_records[$i]->getData(TPS_PAYMENT_PENALTY_AMOUNT); $tps_penalty_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_PENALTY_AMOUNT_PAID); $tps_interest_amount = $tps_records[$i]->getData(TPS_PAYMENT_INTEREST_AMOUNT); $tps_interest_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_INTEREST_AMOUNT_PAID); $total_amount_paid = $tps_records[$i]->getData(TPS_PAYMENT_TOTAL_AMOUNT_PAID); // ---- RETRIEVE TAX/FEE DATA $clsTaxFee = new EBPLTaxFeeSysRef($this->m_dbLink, false); $clsTaxFeePayable = $clsTaxFee->loadTaxFee($tax_fee_code); $clsTaxFeeSurcharge = $clsTaxFee->loadTaxFee($clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE)); $clsTaxFeeInterest = $clsTaxFee->loadTaxFee($clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); if ($clsTaxFeePayable == -1 || $clsTaxFeeSurcharge == -1 || $clsTaxFeeInterest == -1) { $this->debug("Unable to load tax fee code {$tax_fee_code}," . $clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE) . "," . $clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); $this->setError(-1, "Unable to load tax fee code {$tax_fee_code}," . $clsTaxFeePayable->getData(EBPLS_SURCHARGE_TAX_FEE_CODE) . "," . $clsTaxFeePayable->getData(EBPLS_INTEREST_TAX_FEE_CODE)); // roll back return -1; } // retrieve account codes $tax_fee_account_code = $clsTaxFeePayable->getData(EBPLS_TAX_ACCOUNT_CODE); $surcharge_account_code = $clsTaxFeeSurcharge->getData(EBPLS_TAX_ACCOUNT_CODE); $interest_account_code = $clsTaxFeeInterest->getData(EBPLS_TAX_ACCOUNT_CODE); // ---- COMPUTE BALANCE // formula = ( Total Amount Due = (Payable Amount - Paid Amount) + ( Surcharge - Surcharge Paid ) + ( Interest - Interest Paid ) - ( Total Paid Amount ) // compute raw tax mount due less the raw tax amount paid $raw_tax_difference = $tps_amount_due - $tps_amount_paid; $total_amount_due = $raw_tax_difference; $this->debug("COMPUTE BALANCE : {$raw_tax_difference} = ( {$tps_amount_due} - {$tps_amount_paid} )"); // compute penalty incurred not yet paid on previous payment $penalty_tax_difference = $tps_penalty_amount - $tps_penalty_amount_paid; $total_amount_due += $penalty_tax_difference; $this->debug("COMPUTE PENALTY : {$penalty_tax_difference} = ( {$tps_penalty_amount} - {$tps_penalty_amount_paid} )"); // compute interest incurred not yet paid on previous payment $interest_tax_difference = $tps_interest_amount - $tps_interest_amount_paid; $total_amount_due += $interest_tax_difference; $this->debug("COMPUTE INTEREST : {$interest_tax_difference} = ( {$tps_interest_amount} - {$tps_interest_amount_paid} )"); // compute total balance payable // this will be used to calculate interest/surcharge, since these items requires balance amount $total_amount_payable = $total_amount_due - $total_amount_paid; //$this->debug("COMPUTE TOTAL : $total_amount_payable = $total_amount_due - $total_amount_paid"); // -------------------------------------------------------------------------- // ---- PROCESS PAYMENT // pay balance on raw tax amount if ($raw_tax_difference > 0) { if ($amount > $raw_tax_difference) { // deduct cash in hand with the raw tax amount paid $amount -= $raw_tax_difference; $tax_paid_set = $raw_tax_difference; $tps_amount_paid += $raw_tax_difference; } else { // deduct cash in hand with the raw tax amount paid $tps_amount_paid += $amount; $tax_paid_set = $amount; $amount = 0; } } // pay surcharge if ($penalty_tax_difference > 0 && $amount > 0) { if ($amount > $penalty_tax_difference) { // deduct cash in hand with the penalty tax unpaid $amount -= $penalty_tax_difference; $surcharge_paid_set = $penalty_tax_difference; $tps_penalty_amount_paid += $penalty_tax_difference; } else { // add penalty to tps_penalty_amount $tps_penalty_amount_paid += $amount; $surcharge_paid_set = $amount; $amount = 0; } $tps_penalty_amount_paid += $surcharge_paid_set; } // pay interest if ($interest_tax_difference > 0 && $amount > 0) { if ($amount > $interest_tax_difference) { // deduct cash in hand with the penalty tax unpaid $amount -= $interest_tax_difference; $interest_paid_set = $interest_tax_difference; $tps_interest_amount_paid += $interest_tax_difference; } else { // add interest to tps_interest_amount $tps_interest_amount_paid += $amount; $interest_paid_set = $amount; $amount = 0; } } // -------------------------------------------------------------------------- // ---- UPDATE PAYMENT SCHEDULE RECORD unset($tps_records[$i]->data_elems); $tps_records[$i]->data_elems[TPS_PAYMENT_AMOUNT_PAID] = $tps_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_PENALTY_AMOUNT_PAID] = $tps_penalty_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_INTEREST_AMOUNT_PAID] = $tps_interest_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_TOTAL_AMOUNT_PAID] = $tps_amount_paid + $tps_penalty_amount_paid + $tps_interest_amount_paid; $tps_records[$i]->data_elems[TPS_PAYMENT_LAST_UPDATED_BY] = $admin; $tps_records[$i]->data_elems[TPS_PAYMENT_LAST_UPDATE_TS] = date("Y-m-d H:i:s"); $this->debug("{$tps_amount_paid} == {$tps_amount_due} && {$tps_penalty_amount} == {$tps_penalty_amount_paid} && {$tps_interest_amount} == {$tps_interest_amount_paid} "); if ($tps_amount_paid == $tps_amount_due && $tps_penalty_amount == $tps_penalty_amount_paid && $tps_interest_amount == $tps_interest_amount_paid) { $tps_records[$i]->data_elems[TPS_PAYMENT_STATUS] = TPS_PAYMENT_STATE_PAID; $tps_records[$i]->data_elems[TPS_PAYMENT_DATE] = date("Y-m-d H:i:s"); } if ($bCommit) { $retUpdate = $tps_records[$i]->_update($trans_obj, $payment_id, $admin); } else { $retUpdate = 1; } if ($retUpdate > 0) { $this->debug("Adding OR Details [tps={$tax_paid_set},sps={$surcharge_paid_set},ips={$interest_paid_set}]"); if ($tax_paid_set > 0) { $ret1 = $this->addORDetails($or_code, $trans_obj->getData(TRANS_ID), $payment_id, $fee_id, $tax_fee_code, $cash_account_code, $tax_fee_account_code, $tax_paid_set, "CASH", $bCommit); if ($ret1 < 0) { $this->setError(-1, "error on execute of addORDetails params( {$or_code}, " . $trans_obj->getData(TRANS_ID) . ", {$payment_id}, {$fee_id}, {$tax_fee_code}, {$cash_account_code}, {$tax_fee_account_code}, {$tax_paid_set}, CASH, {$bCommit} )!"); // roll back here return -1; } } else { $ret2 = 1; } if ($surcharge_paid_set > 0) { $ret2 = $this->addORDetails($or_code, $trans_obj->getData(TRANS_ID), $payment_id, $fee_id, $tax_fee_code, $cash_account_code, $interest_account_code, $surcharge_paid_set, "SURCHARGE", $bCommit); if ($ret2 < 0) { $this->setError(-2, "error on execute of addORDetails params( {$or_code}, " . $trans_obj->getData(TRANS_ID) . ", {$payment_id}, {$fee_id}, {$tax_fee_code}, {$cash_account_code}, {$interest_account_code}, {$surcharge_paid_set}, SURCHARGE, {$bCommit} )!"); // roll back here return -2; } } else { $ret2 = 1; } if ($interest_paid_set > 0) { $ret3 = $this->addORDetails($or_code, $trans_obj->getData(TRANS_ID), $payment_id, $fee_id, $tax_fee_code, $cash_account_code, $surcharge_account_code, $interest_paid_set, "INTEREST", $bCommit); if ($ret3 < 0) { $this->setError(-3, "error on execute of addORDetails params( {$or_code}, " . $trans_obj->getData(TRANS_ID) . ", {$payment_id}, {$fee_id}, {$tax_fee_code}, {$cash_account_code}, {$surcharge_account_code}, {$interest_paid_set}, INTEREST, {$bCommit} )!"); // roll back here return -3; } } else { $ret3 = 1; } $this->debug("Adding OR Details [r1={$ret1},r2={$ret2},r3={$ret3}]"); } if ($amount <= 0) { $this->debug("Payment done!"); break; } } $this->debug("CREATE OR Payment done LEFT = {$amount}!"); if ($bCommit) { $retCreateOR = $this->create($or_code, $payment_code, $trans_obj->getData(TRANS_ID), $tmp_amount, $bCommit); if ($retCreateOR < 0) { // roll back here $this->debug("Error on create of OR header, return {$retCreateOR}!"); $this->setError(-6, "Error on create of OR header, return {$retCreateOR}!"); return -6; } $ret_or_code = update_system_code($this->m_dbLink, CODES_OR_COL, $or_code); $ret_payment_code = update_system_code($this->m_dbLink, CODES_PAY_COL, $payment_code); $tmp_amount_due = $clsTPS->getTotalAmountDue($trans_obj->getData(TRANS_ID)); if ($tmp_amount_due > 0) { $trans_obj->_setTransPaymentStatusINTERNAL($payment_code, $amount, 'PARTIAL', $admin); } else { $trans_obj->_setTransPaymentStatusINTERNAL($payment_code, $amount, 'PAID', $admin); } } // commit here return 1; } else { $this->setError(-1, "All payables have been paid."); return -1; } }
function computeTaxTotalAmounDue($depth = 0) { if ($depth == 1) { return 0; } // terminate recursive call on comutetax // load the tax/fee record with its attached formula $clsTaxFeeRef = new EBPLTaxFeeSysRef($this->m_dbLink, false); $res_formula = $clsTaxFeeRef->select($this->getData(TF_TAX_FEE_CODE)); if (is_array($res_formula)) { $clsTaxFormula = $res_formula["result"][0]->getData(EBPLS_TAX_FORMULA); if ($clsTaxFormula) { // pass paramters to formula before computation for ($i = 1; $i <= TF_TAX_MAX_PARAMS; $i++) { $clsTaxFormula->setParameterValue($i, $this->getData(constant("TF_TAX_TAXABLE_AMOUNT{$i}")) + 0.0); } // process prerequisite tax/fees if there are any $arr_parameters = $clsTaxFormula->getParameterDescription(null, true); $this->debug("param cnt : " . count($arr_parameters)); foreach ($arr_parameters as $key => $value) { if (eregi("^\\[TF=(.*)\\]\$", $value, $arrTaxFeeCode) && eregi("^x([0-9]+)\$", $key, $arrIndex)) { $clsTaxFeeTmp = new EBPLSTransactionFee($this->m_dbLink, false); $res_formula = $clsTaxFeeTmp->view($this->getData(TF_TRANS_ID), $arrTaxFeeCode[1]); if ($res_formula) { $clsTaxFeeTmp->computeTaxTotalAmounDue(1); $this->debug("Tax/Fee Amount: " . $clsTaxFeeTmp->getData(TF_TAX_TOTAL_AMOUNT_DUE) . "!"); $this->setData(constant("TF_TAX_TAXABLE_AMOUNT" . $arrIndex[1]), $clsTaxFeeTmp->getData(TF_TAX_TOTAL_AMOUNT_DUE)); $clsTaxFormula->setParameterValue($arrIndex[1], floatval($clsTaxFeeTmp->getData(TF_TAX_TOTAL_AMOUNT_DUE))); } else { $this->setError(-6, "Unable to load prerequisite tax/fee " . $arrTaxFeeCode[1] . "!"); $this->debug("Unable to load prerequisite tax/fee " . $arrTaxFeeCode[1] . "!"); return -6; } } else { $this->debug("no match on {$value}"); } } $clsTaxFormula->setParameterTagValue("[CAPITAL]", $this->m_BusTaxCapital); $clsTaxFormula->setParameterTagValue("[LAST_GROSS]", $this->m_BusTaxLastGross); $index1 = $clsTaxFormula->getParameterTagValueIndex("[CAPITAL]"); if ($index1) { $this->setData(constant("TF_TAX_TAXABLE_AMOUNT" . $index1), $this->m_BusTaxCapital); } $index2 = $clsTaxFormula->getParameterTagValueIndex("[LAST_GROSS]"); if ($index2) { $this->setData(constant("TF_TAX_TAXABLE_AMOUNT" . $index2), $this->m_BusTaxLastGross); } $this->debug("FORMULA {$index1}=" . $this->m_BusTaxCapital . ",{$index2}=" . $this->m_BusTaxLastGross . "<BR>"); // compute $tax_amount = $clsTaxFormula->computeTax($this->m_BusTaxCapital, $this->m_BusTaxLastGross); if ($tax_amount >= 0) { $this->data_elems[TF_TAX_TOTAL_AMOUNT_DUE] = $tax_amount; $this->debug("FORMULA compuation OK<BR>"); return 1; } else { $this->setError(-1, $clsTaxFormula->getError()); return $tax_amount; } } else { $this->setError(-5, "Unable to load formula of tax/fee " . $this->getData(TF_TAX_FEE_CODE) . "!"); $this->debug("Unable to load formula of tax/fee " . $this->getData(TF_TAX_FEE_CODE) . "!"); return -5; } } else { $this->data_elems[TF_TAX_TOTAL_AMOUNT_DUE] = 0; $this->debug("FORMULA ERROR (cant find tax/fee code : " . $this->getData(TF_TAX_FEE_CODE) . "<BR>"); return -4; } }