package com.fitbank.installment;

import java.math.BigDecimal;

import com.fitbank.common.helper.Constant;

/**
 * Clase que genera una tabla de interes anticipado y capital al vencimiento. 
 * @author BANTEC Inc.
 */
public class AdvanceInterestInstallment extends AbstractQuota {

	/* (non-Javadoc)
	 * @see com.fitbank.installment.AbstractQuota#calculate(com.fitbank.installment.InstallmentTable)
	 */
	public void calculate(InstallmentTable pQuotaTable) throws Exception {
		isAdvancedInterest = true;
		this.quotaTable = pQuotaTable;
		this.quotanumber = pQuotaTable.getBegincalculationperiod();
		super.reducedcapital = quotaTable.getAmount();
		boolean end = false;
		super.calculateTotalperiod(pQuotaTable);
		int size = quotaTable.getTotalperiod() ;
		size = size + quotaTable.getBegincalculationperiod()-1;  
		super.interestFrquencyDays = quotaTable.getDaysperperiod();
		for (int i = this.quotaTable.getBegincalculationperiod(); i <= size; i++) {
			super.calculatePayDate(this.quotaTable);
			if(i == size){
				end = true;
			}
			super.processByCategory(true);
			this.calculateCuota(end);
			this.quotanumber++;
			if(super.stop){
				break;
			}
		}//end for
	}
	  

	  
	/**
	 * Calcula tabla de pago dado una cuota fija.
	 * @throws Exception
	 */
	protected void calculateCuota(boolean pEnd) throws Exception{	    	    
		BigDecimal capital = Constant.BD_ZERO;
		// Obtiene el valor de interes y comision de la cuota
		// Si se trata de la ultima cuota
		if(pEnd){
			// Carga todo el capital reducido al capital de la cuota
			capital = this.quotaTable.getAmount();
		}
		super.addQuota(this.quotanumber,this.quotaTable.getAmount(),capital,true);
	}
	  
}
