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

import com.contabilidad.EntConta.*;

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

/**
 * @author obper
 */
@Stateless
public class HorasAnticipoFacade extends AbstractFacade<HorasAnticipo> implements HorasAnticipoFacadeLocal {

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

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

    public HorasAnticipoFacade() {
        super(HorasAnticipo.class);
    }

    @Override
    public List<VEmpleadosFijos> buscarFijos() {

        List<VEmpleadosFijos> rs = new ArrayList<>();

        Query q = em.createNativeQuery("select * from vEmpleados_fijos", VEmpleadosFijos.class);


        rs.addAll(q.getResultList());
        return rs;
    }

    @Override
    public VEmpleadosFijos buscarEmpleado(String empleadoCodigo) {

        List<VEmpleadosFijos> rs = new ArrayList<>();

        Query q = em.createNativeQuery("select * from vEmpleados_fijos where codigo_empleado =? ", VEmpleadosFijos.class);
        q.setParameter(1, empleadoCodigo);

        rs.addAll(q.getResultList());

        return rs.get(0);
    }

    @Override
    public List<PersonalAsignado> obtenerPersonalAsignado(String usuarioCodigo) {

        List<PersonalAsignado> rs = new ArrayList<>();
        Query q = em.createNativeQuery("select * from personal_asignado where codigo_usuario = ?", PersonalAsignado.class);
        q.setParameter(1, usuarioCodigo);

        rs.addAll(q.getResultList());

        return rs;

    }

    @Override
    public void ingresarHoraExtra(String codigoEmpleado, Date fechaIni, Date fechaFin, String observa) {

        em.createNativeQuery("{call ingresar_hora_extra(?,?,?,?)}")
                .setParameter(1, codigoEmpleado)
                .setParameter(2, fechaIni)
                .setParameter(3, fechaFin)
                .setParameter(4, observa).executeUpdate();
    }

    @Override
    public List<HorasExtrasPersonal> obtnerHorasExEm(String codigoEmpleado) {
        List<HorasExtrasPersonal> rs = new ArrayList<>();

        Query q = em.createNativeQuery("CALL obtener_horas_extras_em(?)", HorasExtrasPersonal.class);
        q.setParameter(1, codigoEmpleado);

        rs.addAll(q.getResultList());

        return rs;
    }

    @Override
    public void borrarHoraExtra(String idHora) {

        Query q = em.createNativeQuery("delete FROM horas_extras_personal where id = ?;");
        q.setParameter(1, idHora);
        q.executeUpdate();


    }
    @Override
    public void borrarIngresoHoraAnticipo(String idHora) {

        Query q = em.createNativeQuery("delete FROM horas_anticipo where id = ?;");
        q.setParameter(1, idHora);
        q.executeUpdate();


    }
@Override
    public List<HorasAnticipo> obtenerSegunMes(int mes, boolean quincena) {

        List<HorasAnticipo> rs = new ArrayList<>();
    System.out.println(quincena + "entrada de quincena");

        if (!quincena){
            Query q = em.createNativeQuery("select * from horas_anticipo h where month(h.fecha) = ? and dayofmonth(h.fecha) <= 15  and year(h.fecha) = year(now())", HorasAnticipo.class);
            q.setParameter(1, mes);
            rs.addAll(q.getResultList());
        }else{
            Query q = em.createNativeQuery("select * from horas_anticipo h where month(h.fecha) = ? and dayofmonth(h.fecha) > 15 and year(h.fecha) = year(now())", HorasAnticipo.class);
            q.setParameter(1, mes);
            rs.addAll(q.getResultList());

        }



        return rs;
    }

}
