function createPaymentSchedule(&$trans_obj, $payment_mode, $bSeparateTaxesFromFees, $bIsUpdate, $admin)
 {
     $arrayDivisor = array(TRANS_PAYMENT_MODE_MONTHLY => 12, TRANS_PAYMENT_MODE_QUARTERLY => 4, TRANS_PAYMENT_MODE_SEMIANNUAL => 2, TRANS_PAYMENT_MODE_ANNUAL => 1);
     $divisor = $arrayDivisor[$payment_mode];
     if ($divisor == "") {
         $this->setError(-1, "Payment mode invalid {$payment_mode}!");
         $this->debug("Payment mode invalid {$payment_mode}!");
         return -1;
     }
     $this->debug("createPaymentSchedule( &{$trans_obj}, {$payment_mode}, {$bSeparateTaxesFromFees}, {$bIsUpdate}, {$admin} )");
     $clsPayables = new EBPLSTransactionFee($this->m_dbLink, false);
     $i = 0;
     if ($bSeparateTaxesFromFees) {
         // group all fee records payments as one payment
         $fee_records = $clsPayables->listFee($trans_obj->getData(TRANS_ID), array(PAYABLE_TYPE_FEE, PAYABLE_TYPE_TAX));
         $i = $this->_createPaymentSchedule($trans_obj, $payment_mode, $fee_records, 1, $bIsUpdate);
         $this->debug("created payment sched for fees {$i}");
         $payable_amount = 0;
         if (is_array($fee_records) && count($fee_records)) {
             for ($fee_index = 0; $fee_index < count($fee_records); $fee_index++) {
                 $payable_amount += $fee_records[$fee_index]->getData(TF_TAX_TOTAL_AMOUNT_DUE);
             }
         }
         // distribute tax payments to the opted payment schedule
         $tax_records = $clsPayables->listFee($trans_obj->getData(TRANS_ID), PAYABLE_TYPE_BUSTAX);
         $i += $this->_createPaymentSchedule($trans_obj, $payment_mode, $tax_records, $divisor, $bIsUpdate);
         if (is_array($tax_records) && count($tax_records)) {
             for ($fee_index = 0; $fee_index < count($tax_records); $fee_index++) {
                 $payable_amount += $tax_records[$fee_index]->getData(TF_TAX_TOTAL_AMOUNT_DUE);
             }
         }
         $this->debug("created payment sched for taxes {$i}, pay = {$payable_amount}");
     } else {
         // distribute taxes/fees payments to the opted payment schedule
         $fee_records = $clsPayables->listFee($trans_obj->getData(TRANS_ID));
         $i = $this->_createPaymentSchedule($trans_obj, $payment_mode, $fee_records, $divisor, $bIsUpdate);
         $payable_amount = 0;
         if (is_array($fee_records) && count($fee_records)) {
             for ($fee_index = 0; $fee_index < count($fee_records); $fee_index++) {
                 $payable_amount += $fee_records[$fee_index]->getData(TF_TAX_TOTAL_AMOUNT_DUE);
             }
         }
         $this->debug("created payment sched for taxes/fees {$i}, pay = {$payable_amount}");
     }
     if ($i > 0) {
         $this->debug("_setTransPaymentModeINTERNAL {$payable_amount}");
         // update parent table payment mode and payment mode
         $trans_obj->_setTransPaymentModeINTERNAL($payment_mode, $payable_amount, NULL, $bSeparateTaxesFromFees, $admin);
     }
     return $i;
 }
 function getFeesList()
 {
     if (!is_numeric($this->getData(TRANS_ID))) {
         $this->debug("getFeesListt Failed, transaction not loaded, load by invoking loadTransaction.");
         $this->setError(-1, "getFeesListt Failed, transaction not loaded, load by invoking loadTransaction.");
         return -1;
     }
     $clsTransReq = new EBPLSTransactionFee($this->m_dbLink);
     $fees_list = $clsTransReq->listFee($this->getData(TRANS_ID));
     return $fees_list;
 }