/*
 * 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.cosmodas.recibos;

import com.cosmodas.EntCosmos.*;
import com.cosmodas.FacadeCosmos.*;

import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import com.cosmodas.validaciones.NumeroALetras;
import com.cosmodas.EntCosmos.VAbonos;
import com.cosmodas.EntCosmos.VDetalleAbonos;
import com.utilitarios.ConversorArchivosSO;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.primefaces.extensions.event.ResizeEvent;
import org.primefaces.extensions.event.RotateEvent;
import org.primefaces.model.StreamedContent;


/**
 * @author obper
 */
@ManagedBean(name = "aplicaBoletasBeans")
@ViewScoped
public class AplicaBoletasBeans implements Serializable {

    @EJB
    private AbonoflFacadeLocal abflfl;
    @EJB
    private DatosCosultoresCompletosFacadeLocal dccfl;
    @EJB
    private BancosFacadeLocal bfl;
    @EJB
    private WcUsuariosFacadeLocal wcufl;
    @EJB
    private VCargosFacadeLocal vcfl;
    @EJB
    private AbonosFacadeLocal abfl;
    @EJB
    private PagoExtraFacadeLocal pexfl;
    @EJB
    private TerritoriosFacadeLocal tfl;
    @EJB
    private CargosFacadeLocal cfl;

    @Inject
    private Abonofl abonoSelect;
    private ExternalContext exc;
    private HttpSession session;
    @Inject
    private WcUsuarios usuario;
    @Inject
    private Sucursales sucursal;
    private List<Abonofl> listaAbonos;
    private String comentario;
    private String territorio;
    private StreamedContent boletaSelect;
    private List<Bancos> bancosList;
    private String bancoSelect;
    private String montoPago;
    private String bancoPago;
    private Date fechaPago;
    private Date fechaIngreso;
    private String tipoRecibo;
    private List<VCargos> cargosCosultor;
    private VAbonos abonApli;
    private String saldoAnterior;
    private String comentarioAnula;
    private JasperPrint jasperPrint;
    private boolean otrosComentarios;
    private int estadoAbonoSelect;
    private List<Territorios> misTerritorios;
    private String alarmaBoleta;
    private Date fechaDeBoletasHistorico;

    public Date getFechaDeBoletasHistorico() {
        return fechaDeBoletasHistorico;
    }

    public void setFechaDeBoletasHistorico(Date fechaDeBoletasHistorico) {
        this.fechaDeBoletasHistorico = fechaDeBoletasHistorico;
    }

    public String getAlarmaBoleta() {
        return obtenerAlarma();
    }

    public void setAlarmaBoleta(String alarmaBoleta) {
        this.alarmaBoleta = alarmaBoleta;
    }

    public int getEstadoAbonoSelect() {
        return estadoAbonoSelect;
    }

    public void setEstadoAbonoSelect(int estadoAbonoSelect) {
        this.estadoAbonoSelect = estadoAbonoSelect;
    }

    public boolean isOtrosComentarios() {
        return otrosComentarios;
    }

    public void setOtrosComentarios(boolean otrosComentarios) {
        this.otrosComentarios = otrosComentarios;
    }

    public String getComentarioAnula() {
        return comentarioAnula;
    }

    public void setComentarioAnula(String comentarioAnula) {
        this.comentarioAnula = comentarioAnula;
    }

    public String getSaldoAnterior() {
        return saldoAnterior;
    }

    public void setSaldoAnterior(String saldoAnterior) {
        this.saldoAnterior = saldoAnterior;
    }

    public List<VCargos> getCargosCosultor() {
        return cargosCosultor;
    }

    public void setCargosCosultor(List<VCargos> cargosCosultor) {
        this.cargosCosultor = cargosCosultor;
    }

    public AbonoflFacadeLocal getAbflfl() {
        return abflfl;
    }

    public void setAbflfl(AbonoflFacadeLocal abflfl) {
        this.abflfl = abflfl;
    }

    public String getTipoRecibo() {
        return tipoRecibo;
    }

    public void setTipoRecibo(String tipoRecibo) {
        this.tipoRecibo = tipoRecibo;
    }

    public String getMontoPago() {
        return montoPago;
    }

    public void setMontoPago(String montoPago) {
        this.montoPago = montoPago;
    }

    public String getBancoPago() {
        return bancoPago;
    }

    public void setBancoPago(String bancoPago) {
        this.bancoPago = bancoPago;
    }

    public Date getFechaPago() {
        return fechaPago;
    }

    public void setFechaPago(Date fechaPago) {
        this.fechaPago = fechaPago;
    }

    public Date getFechaIngreso() {
        return fechaIngreso;
    }

    public void setFechaIngreso(Date fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public String getBancoSelect() {
        return bancoSelect;
    }

    public void setBancoSelect(String bancoSelect) {
        this.bancoSelect = bancoSelect;
    }

    public List<Bancos> getBancosList() {
        return bancosList;
    }

    public void setBancosList(List<Bancos> bancosList) {
        this.bancosList = bancosList;
    }

    public StreamedContent getBoletaSelect() {
        return boletaSelect;
    }

    public void setBoletaSelect(StreamedContent boletaSelect) {
        this.boletaSelect = boletaSelect;
    }

    public String getTerritorio() {
        return territorio;
    }

    public void setTerritorio(String territorio) {
        this.territorio = territorio;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    public Abonofl getAbonoSelect() {

        return abonoSelect;
    }

    public void setAbonoSelect(Abonofl abonoSelect) {
        this.abonoSelect = abonoSelect;
    }

    public WcUsuarios getUsuario() {
        return usuario;
    }

    public void setUsuario(WcUsuarios usuario) {
        this.usuario = usuario;
    }

    public Sucursales getSucursal() {
        return sucursal;
    }

    public void setSucursal(Sucursales sucursal) {
        this.sucursal = sucursal;
    }

    public List<Abonofl> getListaAbonos() {
        return listaAbonos;
    }

    public void setListaAbonos(List<Abonofl> listaAbonos) {
        this.listaAbonos = listaAbonos;
    }

    public void obtenerboletas2() {

        if ("00".equals(territorio)) {
        } else {
            this.listaAbonos = abflfl.obtenerBoletasV(territorio);
        }
    }

    public List<Territorios> getMisTerritorios() {
        return misTerritorios;
    }

    public void setMisTerritorios(List<Territorios> misTerritorios) {
        this.misTerritorios = misTerritorios;
    }

    @PostConstruct
    public void init() {

        this.exc = FacesContext.getCurrentInstance().getExternalContext();
        this.usuario = (WcUsuarios) exc.getSessionMap().get("usuario");
        this.sucursal = (Sucursales) exc.getSessionMap().get("sucursal");
        this.misTerritorios = tfl.TerritorioPorSucursal(sucursal.getSucursalCodigo());
        this.bancosList = bfl.findAll();
        this.territorio = "00";
        this.abonoSelect = new Abonofl();
        this.listaAbonos = new ArrayList<>();
        this.otrosComentarios = true;
        this.estadoAbonoSelect = 0;
        this.alarmaBoleta = "";
        this.fechaDeBoletasHistorico = new Date();

        obtenerBoletasFino();

        switch (sucursal.getSucursalCodigo()) {

            case "02":
                this.tipoRecibo = "CE";
                break;
            case "03":
                this.tipoRecibo = "SY";
                break;
            case "04":
                this.tipoRecibo = "SM";
                break;
            case "05":
                this.tipoRecibo = "US";
                break;
            case "06":
                this.tipoRecibo = "ZA";
                break;
            case "07":
                this.tipoRecibo = "SA";
                break;
            case "08":
                this.tipoRecibo = "SO";
                break;
            case "11":
                this.tipoRecibo = "AP";
                break;

        }


    }


    public DatosCosultoresCompletos aboLi(String cosd) {
        DatosCosultoresCompletos rs = new DatosCosultoresCompletos();
        try {
            rs = dccfl.busquedaDatoAbono(cosd);
        } catch (Exception e) {

        }


        return rs;
    }

    public boolean rendereCalendar() {
        return estadoAbonoSelect > 0;
    }

    public void anulaBoleta(Abonofl a) {
        a.setComentarios(comentario);
        a.setUsuarioAplica(usuario.getUsuarioCodigo());
        a.setAnulado(true);
        abflfl.edit(a);
        obtenerBoletasFino();
        FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "Anuela", "Boleta Eliminada"));

    }

    public void aplicaBoleta(Abonofl a) {
        a.setVerificado(true);
        a.setUsuarioAplica(usuario.getUsuarioCodigo());
        abflfl.edit(a);
        obtenerBoletasFino();
        FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "Boleta aplicada", "Boleta Aplicada a " + a.getConsultorCodigo()));

    }

    public String verifica(Abonofl v) {

        if (v.isAnulado()) {
            return "Anulada";
        } else {
            if (v.isAplicado()) {

                if (!v.isImpreso()) {
                    return "No Impresa";
                } else {
                    return "Aplicado";
                }

            } else {
                return "Sin Revisar";
            }
        }
    }

    public void aplicaBoletas(String cosn) {

        DatosCosultoresCompletos consultorDat = new DatosCosultoresCompletos();
        abonApli = new VAbonos();

        //Boolean boletaDuplicada = cfl.validaBoletaBolean(consultorDat.getConsultorCodigo(),  Double.valueOf(montoPago), bancoPago);
        try {
            consultorDat = dccfl.busquedaDatoAbono(cosn);
        } catch (Exception e) {

        }

        saldoAnterior = consultorDat.getCargoPendiente().toString();
        List<VCargos> v = vcfl.obtenerConCargos(cosn);

        if (!v.isEmpty()) {

            String numeroAbono = abfl.ObtenerProximoRecibo(tipoRecibo);
            Double montoPagosD = Double.valueOf(montoPago);

            List<VCargos> rsOut = new ArrayList<>();
            VAbonos abo = new VAbonos();
            abo.setAbonoAnulado('F');
            abo.setAbonoCodigo(numeroAbono);
            abo.setAbonoComentario("FLOTANTE");
            abo.setAbonoEnvio('F');
            abo.setAbonoFecha(new Date());
            abo.setAbonoInventario(false);
            abo.setAbonoTipo(tipoRecibo);
            abo.setAbonoValor(new BigDecimal(montoPago));
            abo.setAbonoSaldoAnterior(new BigDecimal(consultorDat.getCargoPendiente()));
            abo.setBanco(bancoPago);
            abo.setConsultorCodigo(abonoSelect.getConsultorCodigo());
            abo.setSucursalCodigo(sucursal.getSucursalCodigo());
            abo.setAbonoFechaValor(fechaPago);
            vcfl.ingresarCabAbono(abo);

            abonApli = abo;

            for (VCargos vs : v) {

                VDetalleAbonos d = new VDetalleAbonos();
                d.setAbonoAnulado('F');
                d.setAbonoCodigo(numeroAbono);
                d.setAbonoTipo(tipoRecibo);

                if (montoPagosD > 0.00) {

                    Double nuevoCargo = 0.00;

                    BigDecimal bd = new BigDecimal(vs.getCargoPendiente().doubleValue() - montoPagosD).setScale(2, RoundingMode.HALF_UP);
                    nuevoCargo = bd.doubleValue();


                    if (nuevoCargo >= 0.00) {


                        d.setDetalleAbonoCantidad(montoPagosD);
                        d.setDocumentoCodigo(vs.getDocumentoCodigo());
                        d.setFacturaSerie(vs.getFacturaSerie());
                        d.setFacturaCodigo(vs.getFacturaCodigo());
                        d.setDetalleAbonoFecha(vs.getCargoFechaFactura());
                        d.setProgramaCodigo(vs.getProgramaCodigo());

                        vcfl.ingresarDetalleAbono(d);
                        vcfl.actualizarCargos(nuevoCargo, vs.getFacturaCodigo(), vs.getFacturaSerie());

                        montoPagosD = 0.00;
                    } else {
                        d.setDetalleAbonoCantidad(vs.getCargoPendiente().doubleValue());
                        d.setDocumentoCodigo(vs.getDocumentoCodigo());
                        d.setFacturaSerie(vs.getFacturaSerie());
                        d.setFacturaCodigo(vs.getFacturaCodigo());
                        d.setDetalleAbonoFecha(vs.getCargoFechaFactura());
                        d.setProgramaCodigo(vs.getProgramaCodigo());

                        vcfl.ingresarDetalleAbono(d);
                        vcfl.actualizarCargos(0.00, vs.getFacturaCodigo(), vs.getFacturaSerie());

                        BigDecimal bdpag = new BigDecimal(montoPagosD - vs.getCargoPendiente().doubleValue()).setScale(2, RoundingMode.HALF_UP);
                        montoPagosD = bdpag.doubleValue();

                    }


                }

            }

            if (montoPagosD > 0.00) {
                PagoExtraPK pexpk = new PagoExtraPK();
                pexpk.setAbonoCodigo(numeroAbono);
                pexpk.setAbonoTipo(tipoRecibo);
                pexpk.setConsultorCodigo(abonoSelect.getConsultorCodigo());

                PagoExtra pex = new PagoExtra();
                pex.setDocumentoCodigo("06");
                pex.setPagoExtraFecha(new Date());
                pex.setPagoExtraValor(new BigDecimal(montoPagosD));
                pex.setPagoExtraPK(pexpk);

                pexfl.create(pex);
                montoPagosD = 0.00;
            }

            abonoSelect.setNumeroRecibo(abo.getAbonoTipo() + "-" + abo.getAbonoCodigo());
            abonoSelect.setUsuarioAplica(usuario.getUsuarioCodigo());
            abonoSelect.setAplicado(true);

            abflfl.edit(abonoSelect);

            String rutaBoleta = "/opt/boletas/" + abonoSelect.getAbonoflPK().getTipo() + abonoSelect.getAbonoflPK().getCabono() + ".jpg";
            String destinoBoleta = "/opt/boletas/" + abo.getAbonoCodigo() + "-" + abo.getAbonoTipo() + ".jpg";

            try {
                String cmd = "cp " + rutaBoleta + " " + destinoBoleta; //Comando de apagado en linux
                Runtime.getRuntime().exec(cmd);
            } catch (IOException ioe) {
                System.out.println(ioe);
            }


            mensaje(FacesMessage.SEVERITY_INFO, "Abono Aplicado", consultorDat.getNombreConsultor());
        } else
            mensaje(FacesMessage.SEVERITY_ERROR, "SIN CARGOS", "Consultor Sin cargos");
    }

    public void setBoletaImg(Abonofl f) {
        ConversorArchivosSO co = new ConversorArchivosSO();
        try {
            this.boletaSelect = co.boletas("/opt/boletas/", f.getAbonoflPK().getTipo() + f.getAbonoflPK().getCabono() + ".jpg");

        } catch (Exception e) {
            this.boletaSelect = co.datosPersonal("default.jpg");
        }


        this.abonoSelect = f;

        this.bancoPago = f.getBanco();
        this.montoPago = f.getMonto().toString();
        this.fechaIngreso = f.getFecha();
        this.fechaPago = f.getFechaPago();

    }

    public String verificaColor(Abonofl v) {

        if (v.isAnulado()) {
            return "tomato";
        } else {
            if (v.isAplicado()) {
                if (!v.isImpreso()) {
                    return "red";
                } else {
                    return "green";
                }
            } else {
                return "blue";
            }
        }
    }

    public void rotateListener(RotateEvent e) {
      /*  final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Imagen Rotad",
                "Degree:" + e.getDegree());

        FacesContext.getCurrentInstance().addMessage(null, msg);*/
    }

    public void resizeListener(ResizeEvent e) {
      /*  final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Imagen Escalada",
                "Width:" + e.getWidth() + ", Height: " + e.getHeight());

        FacesContext.getCurrentInstance().addMessage(null, msg);*/
    }

    public void actionClose() {
        FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Boleta En sistema", "la imagen ha sido cargada"));
    }

    public void ImprimirBoleta(Abonofl fsa) throws JRException, IOException {

        VAbonos va = new VAbonos();

        va = vcfl.obtenerCodigoAbono(fsa.getNumeroRecibo());

        DatosCosultoresCompletos consultorDat = new DatosCosultoresCompletos();
        DateFormat fechaForm = new SimpleDateFormat("dd/MM/yyyy");
        NumeroALetras nu = new NumeroALetras();
        List<CuerpoRecibo> listRecibo = new ArrayList<>();
        try {
            consultorDat = dccfl.busquedaDatoAbono(va.getConsultorCodigo());
        } catch (Exception e) {

        }


        String impresorDst = "";
        String sucurDestino = "";

        switch (sucursal.getSucursalCodigo()) {
            case "01":
                impresorDst = "RECIBOS_CENTRAL";
            case "02":
                impresorDst = "RECIBOS_CENTRAL";
                break;
            case "03":
                impresorDst = "RECIBOS_SOYAPANGO";
                break;
            case "04":
                impresorDst = "RECIBOS_SAN_MIGUEL";
                break;
            case "05":
                impresorDst = "RECIBOS_USULUTAN";
                break;
            case "06":
                impresorDst = "RECIBOS_ZACATECOLUCA";
                break;
            case "07":
                impresorDst = "RECIBOS_SANTA_ANA";
                break;
            case "08":
                impresorDst = "RECIBOS_SONSONATE";
                break;
            case "11":
                impresorDst = "RECIBOS_APOPA";
                break;
            default:
                break;

        }

        if (sucursal.getSucursalDescarga().equalsIgnoreCase("02")) {
            sucurDestino = "01";
        } else {
            sucurDestino = sucursal.getSucursalDescarga();
        }

        CuerpoRecibo rec = new CuerpoRecibo();

        rec.setCodigoConsultor(va.getConsultorCodigo());
        rec.setFechaEmision(fechaForm.format(va.getAbonoFecha()));
        rec.setFechaAbono(fechaForm.format(va.getAbonoFechaValor()));
        rec.setFechaImpresion(fechaForm.format(va.getAbonoFechaValor()));
        rec.setMontoCancelar("$" + va.getAbonoValor().toString());
        rec.setTerriotorio("T." + consultorDat.getTerritorioCodigo());
        rec.setNombreBanco(bfl.find(va.getBanco()).getNombreBanco());
        rec.setMontoDeuda("$" + va.getAbonoSaldoAnterior().toString());
        rec.setMontoPendiente("$" + consultorDat.getCargoPendiente().toString());
        rec.setPagoEnLetras(nu.Convertir(va.getAbonoValor().toString(), true) + " " + "por abono a su cuenta.".toUpperCase());
        rec.setNombreCliente(consultorDat.getNombreConsultor());
        rec.setNumeroRecibo(va.getAbonoCodigo() + "-" + va.getAbonoTipo());
        rec.setReciboSerie(va.getAbonoTipo());
        rec.setSala(sucursal.getSalaNombreCorto());
        listRecibo.add(rec);

        JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(listRecibo);

        int width = 0;// img.getWidth();
        int height = 0;// img.getHeight();

        try {
            File bole = new File("/opt/boletas/" + va.getAbonoCodigo() + "-" + va.getAbonoTipo() + ".jpg");
            InputStream is = new FileInputStream(bole);
            BufferedImage img = ImageIO.read(is);
            width = img.getWidth();
            height = img.getHeight();


        } catch (IOException e) {
            e.printStackTrace();
        }
        String reportPath = "/opt/reportesJasper/recibosApps.jrxml";

        if (height > width) {
            ubicarImagenes(va.getAbonoCodigo() + "-" + va.getAbonoTipo() + ".jpg");
           reportPath = "/opt/reportesJasper/recibosAppsH.jrxml";

        } else {
        }

        JasperReport jasperReport = JasperCompileManager.compileReport(reportPath);
        //this.salida = jasperReport.toString();
        Map parametros = new HashMap();
        jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, beanCollectionDataSource);
        JasperExportManager.exportReportToPdfFile(jasperPrint, "/opt/recibosJasper/" + va.getAbonoCodigo() + "-" + va.getAbonoTipo() + ".pdf");
        try {
            Runtime.getRuntime().exec("lp -d " + impresorDst + " " + "/opt/recibosJasper/" + va.getAbonoCodigo() + "-" + va.getAbonoTipo() + ".pdf");
        } catch (IOException e) {
            System.out.println("EXCEPTION: " + e.getMessage());
        }

        mensaje(FacesMessage.SEVERITY_INFO, "IMPRESO", "BOLETA IMPRESA");
        fsa.setImpreso(true);
        abflfl.edit(fsa);
        obtenerBoletasFino();
    }


    public static BufferedImage rotateImage(BufferedImage imageToRotate) {
        int widthOfImage = imageToRotate.getWidth();
        int heightOfImage = imageToRotate.getHeight();
        int typeOfImage = imageToRotate.getType();

        BufferedImage newImageFromBuffer = new BufferedImage(widthOfImage, heightOfImage, typeOfImage);

        Graphics2D graphics2D = newImageFromBuffer.createGraphics();

        graphics2D.rotate(Math.toRadians(90), widthOfImage / 2, heightOfImage / 2);
        graphics2D.drawImage(imageToRotate, null, 0, 0);

        return newImageFromBuffer;
    }


    public static BufferedImage rotateImage2(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();

        // Crear una nueva imagen con las dimensiones intercambiadas
        BufferedImage rotatedImage = new BufferedImage(height, width, image.getType());

        // Crear una transformación afín para rotar la imagen
        AffineTransform transform = new AffineTransform();
        transform.rotate(Math.toRadians(90), height / 2, height / 2);

        // Obtener el objeto Graphics2D de la nueva imagen y aplicar la transformación
        Graphics2D g = rotatedImage.createGraphics();
        g.drawImage(image, transform, null);
        g.dispose();

        return rotatedImage;
    }


    private void ubicarImagenes(String numeroAbonoFl) {

        String imagenArchivo = "/opt/boletas/"+numeroAbonoFl;
        String dtsImagenArchivo = "/opt/boletas/boletasH/"+numeroAbonoFl;

        try {

            BufferedImage originalImage = ImageIO.read(new File(imagenArchivo));

            BufferedImage subImage = rotateImage2(originalImage);

            File rotatedImageFile = new File(dtsImagenArchivo);

            ImageIO.write(subImage, "jpg", rotatedImageFile);

            System.out.println("New Rotated Image File Path: "+rotatedImageFile.getPath());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void obtenerBoletasFino() {

        listaAbonos = new ArrayList<>();
        switch (estadoAbonoSelect) {
            case 0:
                if (!territorio.equals("00")) {
                    listaAbonos.addAll(abflfl.obtnerNoprocesadas(territorio, false));
                } else {
                    for (Territorios t : misTerritorios) {
                        listaAbonos.addAll(abflfl.obtnerNoprocesadas(t.getCodigoTerritorio(), false));
                    }
                }
                break;
            case 1:
                if (!territorio.equals("00")) {
                    listaAbonos.addAll(abflfl.obtnerNoprocesadas(territorio, true, fechaDeBoletasHistorico));
                } else {
                    for (Territorios t : misTerritorios) {
                        listaAbonos.addAll(abflfl.obtnerNoprocesadas(t.getCodigoTerritorio(), true, fechaDeBoletasHistorico));
                    }
                }
                break;
            case 2:
                if (!territorio.equals("00")) {
                    listaAbonos.addAll(abflfl.anuladas(territorio, fechaDeBoletasHistorico));
                } else {
                    for (Territorios t : misTerritorios) {
                        listaAbonos.addAll(abflfl.anuladas(t.getCodigoTerritorio(), fechaDeBoletasHistorico));
                    }
                }
                break;
            case 3:
                if (!territorio.equals("00")) {
                    listaAbonos.addAll(abflfl.todasTipo(territorio, fechaDeBoletasHistorico));
                } else {
                    for (Territorios t : misTerritorios) {
                        listaAbonos.addAll(abflfl.todasTipo(t.getCodigoTerritorio(), fechaDeBoletasHistorico));
                    }
                }
                break;
        }

    }


    public String obtenerAlarma() {

        String ruta = null;

        try {
            for (Abonofl abf : getListaAbonos()) {

                if (!abf.isAplicado()) {
                    ruta = "./../sonidos/alarma.mp3";
                }
            }
        } catch (Exception e) {
        }

        return ruta;

    }

    public void mensaje(FacesMessage.Severity severity, String summary, String detail) {
        FacesContext.getCurrentInstance().
                addMessage(null, new FacesMessage(severity, summary, detail));
    }

    public void validaAnulaBoleta() {
        otrosComentarios = comentarioAnula.equalsIgnoreCase("1") || comentarioAnula.length() == 0 ? false : true;
    }

    public void anularBoletaSe(Abonofl ab) {
        abonoSelect = ab;
    }

    public void anularBoleta(Abonofl ab) {

        ab.setAnulado(true);
        ab.setComentarios(comentarioAnula);
        ab.setAplicado(true);
        ab.setUsuarioAplica(usuario.getUsuarioCodigo());
        abflfl.edit(ab);
        obtenerBoletasFino();
        mensaje(FacesMessage.SEVERITY_WARN, "ANULADO", "boleta Anulada");

    }


    public AplicaBoletasBeans() {
    }
}
