com.dnsoft.inmobiliaria.utils.CalculaMora.java Source code

Java tutorial

Introduction

Here is the source code for com.dnsoft.inmobiliaria.utils.CalculaMora.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dnsoft.inmobiliaria.utils;

import com.dnsoft.inmobiliaria.beans.Recibo;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Days;

/**
 *
 * @author Diego Noble
 */
public class CalculaMora {

    Recibo alquier;
    BigDecimal interesMensual;
    BigDecimal importeInicial;

    public CalculaMora(Recibo alquier) {
        this.alquier = alquier;
    }

    /*public BigDecimal calcularMora() {
        
     //A pagar = (1+ Interes/100) * Importe Inicial
     importeFinal = importeInicial.add(moraGenerada());
     return importeFinal;
        
     }*/
    public BigDecimal moraGeneradaPagoParcial(BigDecimal pagoParcial) {
        BigDecimal moraGenerada = BigDecimal.valueOf(0);
        int diasAtraso = calculaDiasAtraso();
        importeInicial = pagoParcial;

        if (verificaSiAplicaMora() == false) {
            interesMensual = BigDecimal.valueOf(alquier.getContrato().getPorcentajeMoraTotal());

            //interes = (% interez mensual)*(Dias atraso/30)
            BigDecimal interesAplicar = interesMensual
                    .multiply(BigDecimal.valueOf(diasAtraso).divide(new BigDecimal(30), 4, RoundingMode.CEILING));

            //Mora generada = (importe inicial * interes)/100
            moraGenerada = importeInicial.multiply(interesAplicar).divide(BigDecimal.valueOf(100)).setScale(2,
                    RoundingMode.CEILING);
        }
        return moraGenerada;

    }

    public BigDecimal moraGenerada() {

        BigDecimal moraGenerada = BigDecimal.valueOf(0.0000);
        int diasAtraso = calculaDiasAtraso();
        importeInicial = alquier.getSaldo();

        if (verificaSiAplicaMora() == false) {
            interesMensual = BigDecimal.valueOf(alquier.getContrato().getPorcentajeMoraTotal());

            //interes = (% interez mensual)*(Dias atraso/30)
            BigDecimal interesAplicar = interesMensual
                    .multiply(BigDecimal.valueOf(diasAtraso).divide(new BigDecimal(30), 4, RoundingMode.CEILING));

            //Mora generada = (importe inicial * interes)/100
            moraGenerada = importeInicial.multiply(interesAplicar).divide(BigDecimal.valueOf(100)).setScale(2,
                    RoundingMode.CEILING);
        }
        return moraGenerada;

    }

    public boolean verificaSiAplicaMora() {

        // int tolerancia = alquier.getContrato().getToleranciaMora();
        Date vencimiento = alquier.getFechaVencimiento();

        DateTime vencimientoCalendar = new DateTime(vencimiento);
        DateTime fechaPago = new DateTime(new Date());

        int diasVencidos = Days.daysBetween(vencimientoCalendar, fechaPago).getDays();

        return 1 > diasVencidos;

    }

    private int calculaDiasAtraso() {

        //se aplica mora a partir de esa fecha que incluye la tolerancia
        //int tolerancia = alquier.getContrato().getToleranciaMora();
        Date vencimiento = alquier.getFechaVencimiento();

        Calendar calendarVencimiento = Calendar.getInstance();
        calendarVencimiento.setTime(vencimiento);
        //calendarTolerancia.add(Calendar.DAY_OF_YEAR, tolerancia);

        DateTime fechaVencimiento = new DateTime(calendarVencimiento);
        DateTime fechaPago = new DateTime(new Date());

        int diasAtrasados = Days.daysBetween(fechaVencimiento, fechaPago).getDays();

        return diasAtrasados;
    }

}