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

import com.cosmodas.EntCosmos.Abonofl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 * @author depv
 */
@Stateless
public class AbonoflFacade extends AbstractFacade<Abonofl> implements AbonoflFacadeLocal {

    @PersistenceContext(unitName = "wcosmodasPersistent")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public AbonoflFacade() {
        super(Abonofl.class);
    }

    @Override
    public List<Abonofl> ObtenerBoletasUsuarioIngresa(String usuarioCodigo, boolean estado) {
        Query q = em.createNamedQuery("Abonofl.findByUsuarioIngresa");
        q.setParameter("usuarioIngresa", usuarioCodigo);
        q.setParameter("aplicado", estado);
        return q.getResultList();
    }

    @Override
    public List<Abonofl> ObtenerBoletasUsuarioAnulado(String usuarioCodigo, boolean anulado) {
        Query q = em.createNamedQuery("Abonofl.findByUsuarioAnula");
        q.setParameter("usuarioIngresa", usuarioCodigo);
        q.setParameter("anulado", anulado);
        return q.getResultList();
    }


    @Override
    public void GuardarBoleta(Abonofl abono) {

        StringBuilder sql = new StringBuilder("select nuevo_abonof(?)");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, abono.getAbonoflPK().getTipo());
        List<String> result = q.getResultList();

        String nuevoCodigo = result.get(0);

        abono.getAbonoflPK().setCabono(nuevoCodigo);

        em.persist(abono);

    }

    @Override
    public void AnulaBoleta(Abonofl a) {

        Query q = em.createNamedQuery("Abonofl.AnulaBoleta");
        q.setParameter("tipo", a.getAbonoflPK().getTipo());
        q.setParameter("cabono", a.getAbonoflPK().getCabono());
        q.setParameter("comentarios", a.getComentarios());
        q.setParameter("anulado", true);

        q.executeUpdate();

    }

    @Override
    public List<Abonofl> obtenerBoletasV(String territorio) {
        List<Abonofl> rs = new ArrayList<>();
        Query q = em.createNamedQuery("Abonofl.findByTipoAndVerificada");
        q.setParameter("tipo", territorio);
        rs.addAll(q.getResultList());

        return rs;
    }

    @Override
    public List<Abonofl> obtnerNoprocesadas(String tipo, Boolean estado, Date fecha){
        List<Abonofl> rs = new ArrayList<>();
        Query q = em.createNamedQuery("Abonofl.noprocesadas");
        q.setParameter("tipo",tipo);
        q.setParameter("aplicado", estado);
        q.setParameter("fecha", fecha);
        rs.addAll(q.getResultList());

        return rs;

    }

    @Override
    public List<Abonofl> obtnerNoprocesadas(String tipo, Boolean estado){
        List<Abonofl> rs = new ArrayList<>();
        Query q = em.createNamedQuery("Abonofl.noprocesadaSinFecha");
        q.setParameter("tipo",tipo);
        q.setParameter("aplicado", estado);
        rs.addAll(q.getResultList());

        return rs;

    }

    @Override
    public List<Abonofl> anuladas(String tipo, Date fecha){
        List<Abonofl> rs = new ArrayList<>();
        Query q = em.createNamedQuery("Abonofl.anuladas");
        q.setParameter("tipo", tipo);
        q.setParameter("fecha", fecha);
        rs.addAll(q.getResultList());

        return rs;

    }

    @Override
    public List<Abonofl> todasTipo(String tipo, Date fecha){
        List<Abonofl> rs = new ArrayList<>();
        Query q = em.createNamedQuery("Abonofl.anuladas");
        q.setParameter("tipo", tipo);
        q.setParameter("fecha", fecha);
        rs.addAll(q.getResultList());

        return rs;

    }



}
