/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.arrebol.taxiservicios.beans.report;

import com.arrebol.taxiservicios.beans.Datatable;
import com.arrebol.taxiservicios.beans.TaxiGenericBean;
import com.arrebol.taxiservicios.controller.predio.AbonoLoteController;
import com.arrebol.taxiservicios.controller.predio.PredioController;
import com.arrebol.taxiservicios.controller.util.DateWrapper;
import com.arrebol.taxiservicios.model.enums.GenericEnumType;
import com.arrebol.taxiservicios.model.enums.TipoAbono;
import com.arrebol.taxiservicios.model.predio.AbonoLote;
import com.arrebol.taxiservicios.model.predio.AbonoLoteDetalle;
import com.arrebol.taxiservicios.model.predio.AbonoLoteView;
import com.arrebol.taxiservicios.model.predio.Predio;
import java.io.Serializable;
import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Currency;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.primefaces.event.ReorderEvent;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.chart.Axis;
import org.primefaces.model.chart.AxisType;
import org.primefaces.model.chart.BarChartModel;
import org.primefaces.model.chart.BarChartSeries;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.CategoryAxis;
import org.primefaces.model.chart.ChartSeries;
import org.primefaces.model.chart.LineChartModel;
import org.primefaces.model.chart.LineChartSeries;
import org.primefaces.model.chart.PieChartModel;

@Named("recuperacionBean")
@ViewScoped
public class RecuperacionBean extends TaxiGenericBean implements Serializable, Datatable {

    //Variables iniciales
    private Date fechaHoy;
    private Date fechaSemana;
    private Date fechaSemanaFin;
    private Date fechaPersonalizadaInicial;
    private Date fechaPersonalizadaFinal;
    private Date fechaFin;
    final Logger logger = LogManager.getLogger(RecuperacionBean.class);
    private Date fechaMes;
    private Date fechaMesFin;
    private Date fechaAnio;
    private Double totalSemanal;
    private Double totalDeudaSemanal;
    private Double totalMensual;
    private Double totalDeudaMensual;
    private Double totalAnual;
    private Double totalDeudaAnual;
    private Double totalPersonalizado;
    private Double totalDeudaPersonalizado;
    private Double totalDiario;
    private Double totalDeudaDiario;
    private Date fechaAnioFin;
    private List<AbonoLote> abonoLoteDiario;
    private List<AbonoLote> abonoLoteSemana;
    private List<AbonoLote> abonoLoteMes;
    private List<AbonoLote> abonoLoteAnio;
    private List<AbonoLote> abonoLotePersonalizado;

    private List<AbonoLoteView> listAbonoLoteDiarioView;
    private List<AbonoLoteView> listAbonoLoteSemanaView;
    private List<AbonoLoteView> listAbonoLoteMesView;
    private List<AbonoLoteView> listAbonoLoteAnioView;
    private List<AbonoLoteView> listAbonoLotePersonalizadoView;

    private AbonoLoteController controladorAbonoLote;
    private PredioController predioController;
    private List<Predio> ListPredio;
    private String idPredio;
    private String idPredio1;
    private String idPredio2;
    private String idPredio3;
    private String idPredio4;
    private String idPredio5;
    private CartesianChartModel combinedModel;
    private LineChartModel areaModel;

    @PostConstruct
    public void init() {
        logger.info("init RecuperacionBean");
        setPredioController(new PredioController());
        setListPredio(getPredioController().fillPredioDatatableByLocation(getLoggedUser().getLocation()));
        fechaHoy = new Date();
        fechaFin = new Date();
        fechaSemana = new Date();
        fechaPersonalizadaInicial = new Date();
        fechaPersonalizadaFinal = new Date();
        fechaMes = new Date();
        fechaAnio = new Date();
        totalSemanal = 0d;
        totalDeudaSemanal = 0d;
        totalMensual = 0d;
        totalDeudaMensual = 0d;
        totalPersonalizado = 0d;
        totalDeudaPersonalizado = 0d;
        totalDeudaAnual = 0d;
        totalAnual = 0d;
        totalDiario = 0d;
        totalDeudaDiario = 0d;
        controladorAbonoLote = new AbonoLoteController();
        buscarAbonoLotePorHoy();
        initSemanaFechaHoy();
        initMesFechaHoy();
        initAnioHoy();
        initPersonalizado();
        cargarGrafica();
    }

    public String validarColor(GenericEnumType valorComparar, Date fechaPagar) {
        if (valorComparar.equals(GenericEnumType.ENABLED)) {
            return "datatableRowGreen";
        } else if (fechaPagar.before(fechaHoy)) {
            Calendar fechaPagarCalendar = Calendar.getInstance();
            fechaPagarCalendar.setTime(fechaPagar);
            Calendar fechaHoyCalendar = Calendar.getInstance();
            fechaHoyCalendar.setTime(fechaHoy);
            long diferenciaEnMilisegundos = fechaPagarCalendar.getTimeInMillis() - fechaHoyCalendar.getTimeInMillis();
            long diferenciaEnDias = diferenciaEnMilisegundos / (24 * 60 * 60 * 1000);
            if (diferenciaEnDias >= 5 && diferenciaEnDias <= 0) {
                return "datatableRowLittle";
            } else if (diferenciaEnDias == 0) {
                return "datatableRowLittle";
            } else {
                return "datatableRowEmpty";
            }
        } else if (fechaPagar.after(fechaHoy)) {
            Calendar fechaPagarCalendar = Calendar.getInstance();
            fechaPagarCalendar.setTime(fechaPagar);
            Calendar fechaHoyCalendar = Calendar.getInstance();
            fechaHoyCalendar.setTime(fechaHoy);
            long diferenciaEnMilisegundos = fechaPagarCalendar.getTimeInMillis() - fechaHoyCalendar.getTimeInMillis();
            long diferenciaEnDias = diferenciaEnMilisegundos / (24 * 60 * 60 * 1000);
            if (diferenciaEnDias <= 5 && diferenciaEnDias >= 0) {
                return "datatableRowLittle";
            } else if (diferenciaEnDias > 5) {
                return "";
            } else {
                return "datatableRowEmpty";
            }
        }
        return "";
    }

    public void initSemanaFechaHoy() {
        try {
            Calendar start = Calendar.getInstance();
            start.setTime(fechaSemana);
            start.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            Calendar end = Calendar.getInstance();
            end.setTime(fechaSemana);
            //Debe sumar los 7 días de una semana 
            end.set(Calendar.DAY_OF_WEEK, 7);
            setFechaSemana(start.getTime());
            setFechaSemanaFin(end.getTime());
            buscarAbonoPorSemana(getIdPredio1());
        } catch (Exception e) {

        }
    }

    public void initMesFechaHoy() {
        try {
            Calendar start = Calendar.getInstance();
            start.setTime(fechaMes);
            start.set(Calendar.DAY_OF_MONTH, 1);
            Calendar end = Calendar.getInstance();
            end.setTime(fechaMes);
            end.set(Calendar.DAY_OF_MONTH, end.getActualMaximum(Calendar.DAY_OF_MONTH));
            setFechaMes(start.getTime());
            setFechaMesFin(end.getTime());
            buscarAbonoPorMes(getIdPredio2());
        } catch (Exception e) {

        }
    }

    public void initAnioHoy() {
        try {
            Calendar start = Calendar.getInstance();
            start.setTime(fechaAnio);
            Calendar primerDia = Calendar.getInstance();
            primerDia.set(start.get(Calendar.YEAR), 0, 1);
            Calendar ultimoDia = Calendar.getInstance();
            ultimoDia.set(start.get(Calendar.YEAR), 11, 31);
            setFechaAnio(primerDia.getTime());
            setFechaAnioFin(ultimoDia.getTime());
            buscarAbonoPorAnio(getIdPredio3());
        } catch (Exception e) {

        }
    }

    public void initPersonalizado() {
        try {
            buscarAbonoPersonalizado(getIdPredio4());
        } catch (Exception e) {

        }
    }

    public void buscarAbonoLotePorHoy() {
        try {
            Date fechaInicial = fechaMasUno(fechaHoy);
            Date fechaFinal = fechaMasUno(fechaFin);
            List<AbonoLoteView> abonosEsperados;
            if (getIdPredio() != null && !getIdPredio().isEmpty()) {
                setListAbonoLoteDiarioView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio);
            } else {
                setListAbonoLoteDiarioView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation()));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation());
            }

            totalDiario = 0d;
            totalDeudaDiario = 0d;
            //se suma el total pagado
            for (AbonoLoteView aLD : getListAbonoLoteDiarioView()) {               
                try {
                    List<AbonoLoteDetalle> valSubAbonos = controladorAbonoLote.buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(aLD.getId()));
                    if (valSubAbonos.isEmpty()) {
                        totalDiario += aLD.getCantidadPagada();
                    }
                } catch (Exception e) {
                }
            }

            //se suma el total que se debia pagar 
            for (AbonoLoteView abonosEsperado : abonosEsperados) {
                try {
                    if (!abonosEsperado.getTipoAbono().equals(TipoAbono.SUBABONO)) {
                        totalDeudaDiario += abonosEsperado.getPago();
                    }
                } catch (Exception e) {
                }
            }

        } catch (Exception e) {
            logger.error("Error al cargar los abonos diarios " + e);
        }

    }

    public void buscarAbonoPorSemana(String idPredio) {
        try {
            Date fechaInicial = fechaMasUno(fechaSemana);
            Date fechaFinal = fechaMasUno(fechaSemanaFin);
            List<AbonoLoteView> abonosEsperados;
            if (idPredio != null && !idPredio.isEmpty()) {
                setListAbonoLoteSemanaView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio);
            } else {
                setListAbonoLoteSemanaView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation()));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation());
            }

            totalSemanal = 0d;
            totalDeudaSemanal = 0d;
            //se suma el total pagado
            for (AbonoLoteView aLD : getListAbonoLoteSemanaView()) {
                try {
                    List<AbonoLoteDetalle> valSubAbonos = controladorAbonoLote.buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(aLD.getId()));
                    if (valSubAbonos.isEmpty()) {
                        totalSemanal += aLD.getCantidadPagada();
                    }
                } catch (Exception e) {
                }
            }

            //se suma el total que se debia pagar 
            for (AbonoLoteView abonosEsperado : abonosEsperados) {
                try {
                    if (!abonosEsperado.getTipoAbono().equals(TipoAbono.SUBABONO)) {
                        totalDeudaSemanal += abonosEsperado.getPago();
                    }
                } catch (Exception e) {
                }
            }

        } catch (Exception e) {
            logger.error("Error al cargar los abonos semanales " + e);
        }
    }

    public void buscarAbonoPorMes(String idPredio) {
        try {
            Date fechaInicial = fechaMasUno(fechaMes);
            Date fechaFinal = fechaMasUno(fechaMesFin);
            List<AbonoLoteView> abonosEsperados;
            if (idPredio != null && !idPredio.isEmpty()) {
                setListAbonoLoteMesView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio);
            } else {
                setListAbonoLoteMesView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation()));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation());
            }

            totalMensual = 0d;
            totalDeudaMensual = 0d;
            //se suma el total pagado
            for (AbonoLoteView aLD : getListAbonoLoteMesView()) {
                try {
                    List<AbonoLoteDetalle> valSubAbonos = controladorAbonoLote.buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(aLD.getId()));
                    if (valSubAbonos.isEmpty()) {
                        totalMensual += aLD.getCantidadPagada();
                    }
                } catch (Exception e) {
                }
            }

            //se suma el total que se debia pagar 
            for (AbonoLoteView abonosEsperado : abonosEsperados) {
                try {
                    if (!abonosEsperado.getTipoAbono().equals(TipoAbono.SUBABONO)) {
                        totalDeudaMensual += abonosEsperado.getPago();
                    }
                } catch (Exception e) {
                }
            }

        } catch (Exception e) {
            logger.error("Error al cargar los abonos mensuales " + e);
        }
    }

    public void buscarAbonoPorAnio(String idPredio) {
        try {
            Date fechaInicial = fechaMasUno(fechaAnio);
            Date fechaFinal = fechaMasUno(fechaAnioFin);
            List<AbonoLoteView> abonosEsperados;
            if (idPredio != null && !idPredio.isEmpty()) {
                setListAbonoLoteAnioView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio);
            } else {
                setListAbonoLoteAnioView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation()));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation());
            }

            totalAnual = 0d;
            totalDeudaAnual = 0d;
            //se suma el total pagado
            for (AbonoLoteView aLD : getListAbonoLoteAnioView()) {
                try {
                    List<AbonoLoteDetalle> valSubAbonos = controladorAbonoLote.buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(aLD.getId()));
                    if (valSubAbonos.isEmpty()) {
                        totalAnual += aLD.getCantidadPagada();
                    }
                } catch (Exception e) {
                }
            }

            //se suma el total que se debia pagar 
            for (AbonoLoteView abonosEsperado : abonosEsperados) {
                try {
                    if (!abonosEsperado.getTipoAbono().equals(TipoAbono.SUBABONO)) {
                        totalDeudaAnual += abonosEsperado.getPago();
                    }
                } catch (Exception e) {
                }
            }

        } catch (Exception e) {
            logger.error("Error al cargar los abonos anuales " + e);
        }
    }

    public void buscarAbonoPersonalizado(String idPredio) {
        try {
            Date fechaInicial = fechaMasUno(fechaPersonalizadaInicial);
            Date fechaFinal = fechaMasUno(fechaPersonalizadaFinal);
            List<AbonoLoteView> abonosEsperados;
            if (idPredio != null && !idPredio.isEmpty()) {
                setListAbonoLotePersonalizadoView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechasAndPredio(fechaInicial, fechaFinal, getLoggedUser().getLocation(), idPredio);
            } else {
                setListAbonoLotePersonalizadoView(controladorAbonoLote.buscarAbonoLoteViewPorRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation()));
                abonosEsperados = controladorAbonoLote.buscarAbonoLoteViewPorfechaAPagarRangoFechas(fechaInicial, fechaFinal, getLoggedUser().getLocation());
            }

            totalPersonalizado = 0d;
            totalDeudaPersonalizado = 0d;
            //se suma el total pagado
            for (AbonoLoteView aLD : getListAbonoLotePersonalizadoView()) {
                try {
                    List<AbonoLoteDetalle> valSubAbonos = controladorAbonoLote.buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(aLD.getId()));
                    if (valSubAbonos.isEmpty()) {
                        totalPersonalizado += aLD.getCantidadPagada();
                    }
                } catch (Exception e) {
                }
            }

            //se suma el total que se debia pagar 
            for (AbonoLoteView abonosEsperado : abonosEsperados) {
                try {
                    if (!abonosEsperado.getTipoAbono().equals(TipoAbono.SUBABONO)) {
                        totalDeudaPersonalizado += abonosEsperado.getPago();
                    }
                } catch (Exception e) {
                }
            }

        } catch (Exception e) {
            logger.error("Error al cargar los abonos personalizados " + e);
        }
    }

    private Date fechaMasUno(Date fecha) {
        Calendar fechaMasUno = Calendar.getInstance();
        fechaMasUno.setTime(fecha);
        fechaMasUno.add(Calendar.DAY_OF_MONTH, 1);
        return fechaMasUno.getTime();
    }

    public void cargarGrafica() {
        // Se inicializa la grafica 
        areaModel = new LineChartModel();
        LineChartSeries totales = new LineChartSeries();
        totales.setFill(true);
        totales.setLabel("Totales por mes");
        // se carga la lista de abonos
        setControladorAbonoLote(new AbonoLoteController());
        Calendar endDate = Calendar.getInstance();

        endDate.setTime(fechaMasUno(new Date()));

        Calendar startDate = Calendar.getInstance();

        startDate.setTime(fechaMasUno(new Date()));

        startDate.add(Calendar.MONTH, -6);

        //List<AbonoLote> abonos = getControladorAbonoLote().buscarAbonoLotePagadosPorRangoFechasAndPredio(GenericEnumType.ENABLED, startDate.getTime(), endDate.getTime(), getLoggedUser().getLocation(), getIdPredio5());
        List<AbonoLoteView> abonos = getControladorAbonoLote().buscarAbonoLoteViewPagadosPorRangoFechasAndPredio(GenericEnumType.ENABLED, startDate.getTime(), endDate.getTime(), getLoggedUser().getLocation(), getIdPredio5());

        // Map para almacenar totales por mes
        Map<String, Double> totalesPorMesYAnio = new LinkedHashMap<>();
        // Variable para mantener el máximo total alcanzado
        double maxTotal = 0.0;
        Calendar calendar = Calendar.getInstance();
        double currentTotal = 0.0;
        // Se valida si se encontraron abono 
        if (!abonos.isEmpty()) {
            for (AbonoLoteView abono : abonos) {
                List<AbonoLoteDetalle> valSubAbonos = getControladorAbonoLote().buscarAbonoLoteDetalleByAbonoLote(new AbonoLote(abono.getId()));
                if (valSubAbonos.isEmpty()) {
                    // Configurar el calendario con la fecha del abono
                    calendar.setTime(abono.getLastUpdatedOn());
                    int year = calendar.get(Calendar.YEAR);
                    int month = calendar.get(Calendar.MONTH);

                    String monthAndYear = year + "-" + month; // Crear una clave única para mes y año

                    if (totalesPorMesYAnio.containsKey(monthAndYear)) {
                        currentTotal = totalesPorMesYAnio.get(monthAndYear);
                    } else {
                        currentTotal = 0.0;
                    }
                    // Sumar al total del mes actual
                    currentTotal += abono.getCantidadPagada();
                    // Actualizar el máximo total si es necesario
                    if (currentTotal > maxTotal) {
                        maxTotal = currentTotal;
                    }
                    // Guardar el total actualizado
                    totalesPorMesYAnio.put(monthAndYear, currentTotal);
                }
            }

            // Se itera a través de cada entrada en el mapa totalesPorMesYAnio
            for (Map.Entry<String, Double> entry : totalesPorMesYAnio.entrySet()) {
                String monthAndYear = entry.getKey();
                double total = entry.getValue();

                // Obtener el nombre del mes y año del arreglo de nombres de meses
                String[] parts = monthAndYear.split("-");
                int year = Integer.parseInt(parts[0]);
                int month = Integer.parseInt(parts[1]);
                String monthName = new DateFormatSymbols().getMonths()[month];
                String label = monthName + " " + year;

                // Agregar el total a la gráfica con el nombre del mes y año como etiqueta
                totales.set(label, total);
            }

        } else {
            totales.set("mes", 0);
        }

        areaModel.addSeries(totales);
        areaModel.setTitle("Comparativa de recuperacion mensual");
        areaModel.setLegendPosition("ne");
        areaModel.setStacked(true);
        areaModel.setShowPointLabels(true);

        Axis xAxis = new CategoryAxis("Meses");
        areaModel.getAxes().put(AxisType.X, xAxis);
        Axis yAxis = areaModel.getAxis(AxisType.Y);
        yAxis.setLabel("Total");
        yAxis.setMin(0);
        yAxis.setMax(maxTotal);
    }

    public int compare(String o1, String o2) {
        String[] parts1 = o1.split("-");
        String[] parts2 = o2.split("-");
        // Comparar años
        int yearComparison = Integer.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]));
        if (yearComparison != 0) {
            return yearComparison;
        }
        // Comparar meses
        return Integer.compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]));
    }

    public String validarColorAbono(GenericEnumType estatus, Date fechaPagar) {
        Date hoy = new Date();

        // Crea un formato para establecer la hora, minutos y segundos en 00:00:00
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            fechaPagar = sdf.parse(sdf.format(fechaPagar));
            hoy = sdf.parse(sdf.format(hoy));
        } catch (ParseException e) {

        }

        // Calcula la diferencia en días
        long diferenciaEnMillis = fechaPagar.getTime() - hoy.getTime();
        long diferenciaEnDias = diferenciaEnMillis / (24 * 60 * 60 * 1000);

        if (estatus == null) {
            return "";
        } else if (estatus.equals(GenericEnumType.ENABLED)) {
            return "rowGreen";
        } else if (estatus.equals(GenericEnumType.INCOMPLETE)) {
            return "rowYellow";
        } else if (fechaPagar.before(hoy)) {
            return "rowRed";
        } else if (diferenciaEnDias > 0 && diferenciaEnDias <= 3) {
            return "rowOrange";
        } else {
            return "";
        }
    }

    public Date getFechaHoy() {
        return fechaHoy;
    }

    public void setFechaHoy(Date fechaHoy) {
        this.fechaHoy = fechaHoy;
    }

    public Date getFechaSemana() {
        return fechaSemana;
    }

    public void setFechaSemana(Date fechaSemana) {
        this.fechaSemana = fechaSemana;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public Date getFechaMes() {
        return fechaMes;
    }

    public void setFechaMes(Date fechaMes) {
        this.fechaMes = fechaMes;
    }

    public Date getFechaAnio() {
        return fechaAnio;
    }

    public void setFechaAnio(Date fechaAnio) {
        this.fechaAnio = fechaAnio;
    }

    public List<AbonoLote> getAbonoLoteDiario() {
        return abonoLoteDiario;
    }

    public void setAbonoLoteDiario(List<AbonoLote> abonoLoteDiario) {
        this.abonoLoteDiario = abonoLoteDiario;
    }

    public List<AbonoLote> getAbonoLoteSemana() {
        return abonoLoteSemana;
    }

    public void setAbonoLoteSemana(List<AbonoLote> abonoLoteSemana) {
        this.abonoLoteSemana = abonoLoteSemana;
    }

    public List<AbonoLote> getAbonoLoteMes() {
        return abonoLoteMes;
    }

    public void setAbonoLoteMes(List<AbonoLote> abonoLoteMes) {
        this.abonoLoteMes = abonoLoteMes;
    }

    public List<AbonoLote> getAbonoLoteAnio() {
        return abonoLoteAnio;
    }

    public void setAbonoLoteAnio(List<AbonoLote> abonoLoteAnio) {
        this.abonoLoteAnio = abonoLoteAnio;
    }

    public AbonoLoteController getControladorAbonoLote() {
        return controladorAbonoLote;
    }

    public void setControladorAbonoLote(AbonoLoteController controladorAbonoLote) {
        this.controladorAbonoLote = controladorAbonoLote;
    }

    public Date getFechaSemanaFin() {
        return fechaSemanaFin;
    }

    public void setFechaSemanaFin(Date fechaSemanaFin) {
        this.fechaSemanaFin = fechaSemanaFin;
    }

    public Date getFechaMesFin() {
        return fechaMesFin;
    }

    public void setFechaMesFin(Date fechaMesFin) {
        this.fechaMesFin = fechaMesFin;
    }

    public Date getFechaAnioFin() {
        return fechaAnioFin;
    }

    public void setFechaAnioFin(Date fechaAnioFin) {
        this.fechaAnioFin = fechaAnioFin;
    }

    public Double getTotalSemanal() {
        return totalSemanal;
    }

    public void setTotalSemanal(Double totalSemanal) {
        this.totalSemanal = totalSemanal;
    }

    public Double getTotalMensual() {
        return totalMensual;
    }

    public void setTotalMensual(Double totalMensual) {
        this.totalMensual = totalMensual;
    }

    public Double getTotalAnual() {
        return totalAnual;
    }

    public void setTotalAnual(Double totalAnual) {
        this.totalAnual = totalAnual;
    }

    public Date getFechaPersonalizadaInicial() {
        return fechaPersonalizadaInicial;
    }

    public void setFechaPersonalizadaInicial(Date fechaPersonalizadaInicial) {
        this.fechaPersonalizadaInicial = fechaPersonalizadaInicial;
    }

    public Date getFechaPersonalizadaFinal() {
        return fechaPersonalizadaFinal;
    }

    public void setFechaPersonalizadaFinal(Date fechaPersonalizadaFinal) {
        this.fechaPersonalizadaFinal = fechaPersonalizadaFinal;
    }

    public Double getTotalPersonalizado() {
        return totalPersonalizado;
    }

    public void setTotalPersonalizado(Double totalPersonalizado) {
        this.totalPersonalizado = totalPersonalizado;
    }

    public List<AbonoLote> getAbonoLotePersonalizado() {
        return abonoLotePersonalizado;
    }

    public void setAbonoLotePersonalizado(List<AbonoLote> abonoLotePersonalizado) {
        this.abonoLotePersonalizado = abonoLotePersonalizado;
    }

    public Double getTotalDeudaPersonalizado() {
        return totalDeudaPersonalizado;
    }

    public void setTotalDeudaPersonalizado(Double totalDeudaPersonalizado) {
        this.totalDeudaPersonalizado = totalDeudaPersonalizado;
    }

    public Double getTotalDeudaAnual() {
        return totalDeudaAnual;
    }

    public void setTotalDeudaAnual(Double totalDeudaAnual) {
        this.totalDeudaAnual = totalDeudaAnual;
    }

    public Double getTotalDeudaMensual() {
        return totalDeudaMensual;
    }

    public void setTotalDeudaMensual(Double totalDeudaMensual) {
        this.totalDeudaMensual = totalDeudaMensual;
    }

    public Double getTotalDeudaSemanal() {
        return totalDeudaSemanal;
    }

    public void setTotalDeudaSemanal(Double totalDeudaSemanal) {
        this.totalDeudaSemanal = totalDeudaSemanal;
    }

    public Double getTotalDiario() {
        return totalDiario;
    }

    public void setTotalDiario(Double totalDiario) {
        this.totalDiario = totalDiario;
    }

    public Double getTotalDeudaDiario() {
        return totalDeudaDiario;
    }

    public void setTotalDeudaDiario(Double totalDeudaDiario) {
        this.totalDeudaDiario = totalDeudaDiario;
    }

    public PredioController getPredioController() {
        return predioController;
    }

    public void setPredioController(PredioController predioController) {
        this.predioController = predioController;
    }

    public List<Predio> getListPredio() {
        return ListPredio;
    }

    public void setListPredio(List<Predio> ListPredio) {
        this.ListPredio = ListPredio;
    }

    public String getIdPredio() {
        return idPredio;
    }

    public void setIdPredio(String idPredio) {
        this.idPredio = idPredio;
    }

    public String getIdPredio1() {
        return idPredio1;
    }

    public void setIdPredio1(String idPredio1) {
        this.idPredio1 = idPredio1;
    }

    public String getIdPredio2() {
        return idPredio2;
    }

    public void setIdPredio2(String idPredio2) {
        this.idPredio2 = idPredio2;
    }

    public String getIdPredio3() {
        return idPredio3;
    }

    public void setIdPredio3(String idPredio3) {
        this.idPredio3 = idPredio3;
    }

    public String getIdPredio4() {
        return idPredio4;
    }

    public void setIdPredio4(String idPredio4) {
        this.idPredio4 = idPredio4;
    }

    @Override
    public void editRow(RowEditEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void onRowCancel(RowEditEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void onRowReorder(ReorderEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void addRow() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void deleteRow() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    public String getIdPredio5() {
        return idPredio5;
    }

    public void setIdPredio5(String idPredio5) {
        this.idPredio5 = idPredio5;
    }

    public CartesianChartModel getCombinedModel() {
        return combinedModel;
    }

    public void setCombinedModel(CartesianChartModel combinedModel) {
        this.combinedModel = combinedModel;
    }

    public LineChartModel getAreaModel() {
        return areaModel;
    }

    public void setAreaModel(LineChartModel areaModel) {
        this.areaModel = areaModel;
    }

    public List<AbonoLoteView> getListAbonoLoteDiarioView() {
        return listAbonoLoteDiarioView;
    }

    public void setListAbonoLoteDiarioView(List<AbonoLoteView> listAbonoLoteDiarioView) {
        this.listAbonoLoteDiarioView = listAbonoLoteDiarioView;
    }

    public List<AbonoLoteView> getListAbonoLoteSemanaView() {
        return listAbonoLoteSemanaView;
    }

    public void setListAbonoLoteSemanaView(List<AbonoLoteView> listAbonoLoteSemanaView) {
        this.listAbonoLoteSemanaView = listAbonoLoteSemanaView;
    }

    public List<AbonoLoteView> getListAbonoLoteMesView() {
        return listAbonoLoteMesView;
    }

    public void setListAbonoLoteMesView(List<AbonoLoteView> listAbonoLoteMesView) {
        this.listAbonoLoteMesView = listAbonoLoteMesView;
    }

    public List<AbonoLoteView> getListAbonoLoteAnioView() {
        return listAbonoLoteAnioView;
    }

    public void setListAbonoLoteAnioView(List<AbonoLoteView> listAbonoLoteAnioView) {
        this.listAbonoLoteAnioView = listAbonoLoteAnioView;
    }

    public List<AbonoLoteView> getListAbonoLotePersonalizadoView() {
        return listAbonoLotePersonalizadoView;
    }

    public void setListAbonoLotePersonalizadoView(List<AbonoLoteView> listAbonoLotePersonalizadoView) {
        this.listAbonoLotePersonalizadoView = listAbonoLotePersonalizadoView;
    }

}
