package com.fp.dto.quota;

import java.io.Serializable;
import java.math.BigDecimal;

import com.fp.dto.AbstractDataBalanceTransport;

/**
 * Clase utilitaria del detalle de uan cuota de la tabla de amortizacion, se utilzia para alamacenar valores temporales
 * en los procesos ejemplo cobro de cuotas.
 * 
 * @author Jorge Vaca
 * @version 2.1
 */
public class QuotaDetail extends AbstractDataBalanceTransport implements Serializable, Cloneable {

    /** Version de la clase. */
    private static final long serialVersionUID = 1L;

    /** Indica que se hace un pago al tipo de saldo del detalle de la cuota. */
    private boolean applyPayment = false;

    /** Valor que se paga por tipo de saldo, con este valor se arma el financiero. */
    private BigDecimal paymentValue = BigDecimal.ZERO;

    /** Valor adeudado para el tipo de saldo. */
    private BigDecimal debtValue = BigDecimal.ZERO;

    /** Indica que se hace un pago anticipado al tipo de saldo del detalle de la cuota. */
    private boolean applyProjectedValue = false;

    /** Valor a pagar por adelantado, en los tipos de saldo de provisiones. */
    private BigDecimal projectedValue = BigDecimal.ZERO;

    /**
     * Indica que se caduca el registro por que se pago por completo, ejemplo, en cuotas vencidas se cobra el interes
     * normal adeudado, en este caso se caduca el registro, los tipos de saldo que no son interes como cargos, si se
     * cobra por completo se caduca el registro.
     */
    private boolean expire = false;

    /** Indica que se paga por completo el valor adeudado de un tipo de saldo de la cuoata. */
    private boolean fullPaymet = false;

    /**
     * Indica que actuliaza el valor de la provision a cero, cuando deja de provisionar una cuota, o cuando esta se paga
     * completa.
     */
    private boolean updateProvisionToZero = false;

    /**
     * Almacena la defincion de cobro, asociado al registro de detalle de la cuota, con la definicion de de la
     * transaccion se arma el financiero.
     */
    private Object transactionPayment;

    /** Valor que a reversar en pagos con fecha valor. */
    private BigDecimal discountBackValue = BigDecimal.ZERO;

    /** Valor de tipos de saldo ACC que se cobra adelantado. */
    private BigDecimal advancedValue = BigDecimal.ZERO;

    /**
     * True indica que se genero historia del registro.
     */
    private boolean history = false;

    /** True indica que se adiciono un nuevo registro. */
    private boolean added = false;

    /**
     * Entrega el valor de: applyPayment
     * 
     * @return boolean
     */
    public boolean isApplyPayment() {
        return this.applyPayment;
    }

    /**
     * Fija el valor de applyPayment
     * 
     * @param applyPayment value to set
     */
    public void setApplyPayment(boolean applyPayment) {
        this.applyPayment = applyPayment;
    }

    /**
     * Entrega el valor de: paymentValue
     * 
     * @return BigDecimal
     */
    public BigDecimal getPaymentValue() {
        return this.paymentValue;
    }

    /**
     * Fija el valor de paymentValue
     * 
     * @param paymentValue value to set
     */
    public void setPaymentValue(BigDecimal paymentValue) {
        this.paymentValue = paymentValue;
    }

    /**
     * Entrega el valor de: debtValue
     * 
     * @return BigDecimal
     */
    public BigDecimal getDebtValue() {
        return this.debtValue;
    }

    /**
     * Fija el valor de debtValue
     * 
     * @param debtValue value to set
     */
    public void setDebtValue(BigDecimal debtValue) {
        this.debtValue = debtValue;
    }

    /**
     * Entrega el valor de: applyProjectedValue
     * 
     * @return boolean
     */
    public boolean isApplyProjectedValue() {
        return this.applyProjectedValue;
    }

    /**
     * Fija el valor de applyProjectedValue
     * 
     * @param applyProjectedValue value to set
     */
    public void setApplyProjectedValue(boolean applyProjectedValue) {
        this.applyProjectedValue = applyProjectedValue;
    }

    /**
     * Entrega el valor de: projectedValue
     * 
     * @return BigDecimal
     */
    public BigDecimal getProjectedValue() {
        return this.projectedValue;
    }

    /**
     * Fija el valor de projectedValue
     * 
     * @param projectedValue value to set
     */
    public void setProjectedValue(BigDecimal projectedValue) {
        this.projectedValue = projectedValue;
    }

    /**
     * Entrega el valor de: expire
     * 
     * @return boolean
     */
    public boolean isExpire() {
        return this.expire;
    }

    /**
     * Fija el valor de expire
     * 
     * @param expire value to set
     */
    public void setExpire(boolean expire) {
        this.expire = expire;
    }

    /**
     * Entrega el valor de: fullPaymet
     * 
     * @return boolean
     */
    public boolean isFullPaymet() {
        return this.fullPaymet;
    }

    /**
     * Fija el valor de fullPaymet
     * 
     * @param fullPaymet value to set
     */
    public void setFullPaymet(boolean fullPaymet) {
        this.fullPaymet = fullPaymet;
    }

    /**
     * Entrega el valor de: updateProvisionToZero
     * 
     * @return boolean
     */
    public boolean isUpdateProvisionToZero() {
        return this.updateProvisionToZero;
    }

    /**
     * Fija el valor de updateProvisionToZero
     * 
     * @param updateProvisionToZero value to set
     */
    public void setUpdateProvisionToZero(boolean updateProvisionToZero) {
        this.updateProvisionToZero = updateProvisionToZero;
    }

    /**
     * Entrega el valor de: transactionPayment
     * 
     * @return Object
     */
    public Object getTransactionPayment() {
        return this.transactionPayment;
    }

    /**
     * Fija el valor de transactionPayment
     * 
     * @param transactionPayment value to set
     */
    public void setTransactionPayment(Object transactionPayment) {
        this.transactionPayment = transactionPayment;
    }

    /**
     * Entrega el valor de: discountBackValue
     * 
     * @return BigDecimal
     */
    public BigDecimal getDiscountBackValue() {
        return this.discountBackValue;
    }

    /**
     * Fija el valor de discountBackValue
     * 
     * @param discountBackValue value to set
     */
    public void setDiscountBackValue(BigDecimal discountBackValue) {
        this.discountBackValue = discountBackValue;
    }

    /**
     * Entrega el valor de: advancedValue
     * 
     * @return BigDecimal
     */
    public BigDecimal getAdvancedValue() {
        return this.advancedValue;
    }

    /**
     * Fija el valor de advancedValue
     * 
     * @param advancedValue value to set
     */
    public void setAdvancedValue(BigDecimal advancedValue) {
        this.advancedValue = advancedValue;
    }

    /**
     * Entrega el valor de: history
     * 
     * @return boolean
     */
    public boolean isHistory() {
        return this.history;
    }

    /**
     * Fija el valor de history
     * 
     * @param history value to set
     */
    public void setHistory(boolean history) {
        this.history = history;
    }

    /**
     * Entrega el valor de: added
     * 
     * @return boolean
     */
    public boolean isAdded() {
        return this.added;
    }

    /**
     * Fija el valor de added
     * 
     * @param added value to set
     */
    public void setAdded(boolean added) {
        this.added = added;
    }
}
