コード例 #1
0
ファイル: PaymentReceiptDetails.php プロジェクト: armic/erpts
 function initReceipt($payment, $taxType)
 {
     $receipt = new Receipt();
     $receipt->setReceiptDate(date("Y-m-d", strtotime("now")));
     $receipt->setReceivedFrom($payment->getOwnerID());
     $receipt->setTaxType($taxType);
     if ($payment->getDueID() != "") {
         $due = $this->captureDueDetails($payment->getDueID());
     } else {
         if ($payment->getBacktaxTDID() != "") {
             $due = $this->captureBacktaxTDDetails($payment->getBacktaxTDID(), $payment->getDueType());
         } else {
             // should not get here.
             // cannot establish taxDue and thus a proper receipt.
             // exit("error. payment has no dueID / backtaxTDID associated. cannot establish receipts");
         }
     }
     switch ($taxType) {
         case "basic":
             $receipt->setTaxDue(un_number_format($due->getBasicTax()));
             break;
         case "sef":
             $receipt->setTaxDue(un_number_format($due->getSefTax()));
             break;
         case "idle":
             $receipt->setTaxDue(un_number_format($due->getIdleTax()));
             break;
     }
     // use: basicAdvancedPaymentDiscount = (advancedPaymentDiscount/taxDue)(basicTax)
     $advancedPaymentDiscount = un_number_format($payment->getAdvancedPaymentDiscount()) / un_number_format($payment->getTaxDue());
     $advancedPaymentDiscount = $advancedPaymentDiscount * un_number_format($receipt->getTaxDue());
     $receipt->setAdvancedPaymentDiscount($advancedPaymentDiscount);
     // use: basicEarlyPaymentDiscount = (earlyPaymentDiscount/taxDue)(basicTax)
     $earlyPaymentDiscount = un_number_format($payment->getEarlyPaymentDiscount()) / un_number_format($payment->getTaxDue());
     $earlyPaymentDiscount = $earlyPaymentDiscount * un_number_format($receipt->getTaxDue());
     $receipt->setEarlyPaymentDiscount($earlyPaymentDiscount);
     // if amountPaidForQuartersForTaxType > 0 use
     // use: basicPenalty = (penalty/balanceDue)(basicTax)
     // else
     // use: basicPenalty = (penalty/taxDue)(basicTax)
     if ($amountPaidForQuartersForTaxType > 0) {
         $penalty = un_number_format($payment->getPenalty()) / un_number_format($payment->getBalanceDue());
         $penalty = $penalty * un_number_format($receipt->getTaxDue());
     } else {
         $penalty = un_number_format($payment->getPenalty()) / un_number_format($payment->getTaxDue());
         $penalty = $penalty * un_number_format($receipt->getTaxDue());
     }
     $receipt->setPenalty($penalty);
     $receipt->setAmnesty($payment->getAmnesty());
     // use:
     // basicBalanceDue = basicTax
     // ** if discount > 0 : basicBalanceDue = basicTax - [basicEarlyPaymentDiscount or basicAdvancedPaymentDiscount]
     // ** if amnesty is true : basicBalanceDue += basicPenalty
     // basicBalance Due = basicBalanceDue - paidBasic
     $balanceDue = $receipt->getTaxDue();
     if ($receipt->getAdvancedPaymentDiscount() > 0) {
         $balanceDue = $receipt->getTaxDue() - $receipt->getAdvancedPaymentDiscount();
     } else {
         if ($receipt->getEarlyPaymentDiscount() > 0) {
             $balanceDue = $receipt->getTaxDue() - $receipt->getEarlyPaymentDiscount();
         }
     }
     if ($receipt->getAmnesty() != "true") {
         $balanceDue = $balanceDue + un_number_format($receipt->getPenalty());
     }
     $paidTotals = $this->getPaidTotals($payment->getDueID(), $payment->getBacktaxTDID(), $payment->getDueType(), $taxType);
     // if Due Type is "Annual" and previous "Quarter" payments have been made, adjust the Tax Due:
     // this is for reverted annual payments from quarterly mode
     if (is_a($due, "Due")) {
         if ($due->getDueType() == "Annual") {
             $amountPaidForQuartersForTaxType = $this->getAmountPaidForQuarters($due, $taxType);
         }
         if ($amountPaidForQuartersForTaxType > 0) {
             $paidTotals = $amountPaidForQuartersForTaxType;
         }
     }
     $balanceDue = $balanceDue - $paidTotals;
     $receipt->setBalanceDue($balanceDue);
     // use: basicAmountPaid = (basicBalanceDue/balanceDue)(amountPaid)
     $amountPaid = un_number_format($receipt->getBalanceDue()) / un_number_format($payment->getBalanceDue());
     $amountPaid = $amountPaid * un_number_format($payment->getAmountPaid());
     $receipt->setAmountPaid($amountPaid);
     return $receipt;
 }