using Exferia_Aplicacion.General;
using Exferia_KairosPRO.General;
using Exferia_KairosPRO_EF;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_KairosPRO._2_Datos
{
    public class AUX_Datos
    {
        public string Existe_PresenciaAusenciaDiaFestivoJornada_porDia(long _lng_idEmpleado, long _lng_CodigoCliente, DateTime _dtt_Fecha)
        {
            KairosProEntities obj_KairosProEntities = null;

            string str_PresenciaAusenciaDiaFestivoJornada = "";

            try
            {
                obj_KairosProEntities = new KairosProEntities();
                obj_KairosProEntities.Configuration.LazyLoadingEnabled = false;

                //PRESENCIA PROGRAMADA........................................................................
                string str_SQL_PresenciasProgramadas =
                    " SELECT " + nameof(KRS_PresenciasProgramadas) + "." + nameof(KRS_PresenciasProgramadas.idJornadaCabecera) +
                    " FROM " + nameof(KRS_PresenciasProgramadas) +
                    " WHERE " +
                            nameof(KRS_PresenciasProgramadas) + "." + nameof(KRS_PresenciasProgramadas.idEmpleado) + "=@idEmpleado  AND " +
                            nameof(KRS_PresenciasProgramadas) + "." + nameof(KRS_PresenciasProgramadas.codigoCliente) + "=@codigoCliente  AND " +
                            nameof(KRS_PresenciasProgramadas) + "." + nameof(KRS_PresenciasProgramadas.fechaDesde) + "<=@fecha  AND " +
                            nameof(KRS_PresenciasProgramadas) + "." + nameof(KRS_PresenciasProgramadas.fechaHasta) + ">=@fecha ";
                //Parametros
                object[] arr_Parametros_PresenciasProgramadas = new object[]
                 {
                     new SqlParameter("@idEmpleado",  _lng_idEmpleado),
                     new SqlParameter("@codigoCliente",  _lng_CodigoCliente),
                     new SqlParameter("@fecha",  _dtt_Fecha.Date)
                 };

                long? lng_idJornadaCabecera_PresenciasProgramadas = obj_KairosProEntities.Database.SqlQuery<long>(str_SQL_PresenciasProgramadas, arr_Parametros_PresenciasProgramadas).FirstOrDefault();

                if (lng_idJornadaCabecera_PresenciasProgramadas != null && lng_idJornadaCabecera_PresenciasProgramadas.Value > 0)
                {
                    str_PresenciaAusenciaDiaFestivoJornada = Variables_KairosPRO.G_STR_TIPOJORNADADIA_PRESENCIAPROGRAMADA + "|" + lng_idJornadaCabecera_PresenciasProgramadas.Value;
                }
                //............................................................................................

                if (str_PresenciaAusenciaDiaFestivoJornada == "")
                {
                    //AUSENCIA PROGRAMADA........................................................................
                    string str_SQL_AusenciasProgramadas =
                    " SELECT " + nameof(KRS_AusenciasProgramadas) + "." + nameof(KRS_AusenciasProgramadas.id) +
                    " FROM " + nameof(KRS_AusenciasProgramadas) +
                    " WHERE " +
                            nameof(KRS_AusenciasProgramadas) + "." + nameof(KRS_AusenciasProgramadas.idEmpleado) + "=@idEmpleado  AND " +
                            nameof(KRS_AusenciasProgramadas) + "." + nameof(KRS_AusenciasProgramadas.codigoCliente) + "=@codigoCliente  AND " +
                            nameof(KRS_AusenciasProgramadas) + "." + nameof(KRS_AusenciasProgramadas.fechaDesde) + "<=@fecha  AND " +
                            nameof(KRS_AusenciasProgramadas) + "." + nameof(KRS_AusenciasProgramadas.fechaHasta) + ">=@fecha ";
                    //Parametros
                    object[] arr_Parametros_AusenciasProgramadas = new object[]
                     {
                     new SqlParameter("@idEmpleado",  _lng_idEmpleado),
                     new SqlParameter("@codigoCliente",  _lng_CodigoCliente),
                     new SqlParameter("@fecha",  _dtt_Fecha.Date)
                     };

                    long? lng_idAusenciasProgramadas = obj_KairosProEntities.Database.SqlQuery<long>(str_SQL_AusenciasProgramadas, arr_Parametros_AusenciasProgramadas).FirstOrDefault();

                    if (lng_idAusenciasProgramadas != null && lng_idAusenciasProgramadas.Value > 0)
                    {
                        str_PresenciaAusenciaDiaFestivoJornada = Variables_KairosPRO.G_STR_TIPOJORNADADIA_AUSENCIAPROGRAMADA + "|-1";
                    }
                    //............................................................................................

                    if (str_PresenciaAusenciaDiaFestivoJornada == "")
                    {
                        //DIAS FESTIVOS........................................................................
                        string str_SQL_DiasFestivos =
                        " SELECT " + nameof(KRS_DiasFestivos) + "." + nameof(KRS_DiasFestivos.id) +
                        " FROM " + nameof(KRS_DiasFestivos) +
                        " WHERE " +
                                nameof(KRS_DiasFestivos) + "." + nameof(KRS_DiasFestivos.codigoCliente) + "=@codigoCliente  AND " +
                                nameof(KRS_DiasFestivos) + "." + nameof(KRS_DiasFestivos.fechaDesde) + "<=@fecha  AND " +
                                nameof(KRS_DiasFestivos) + "." + nameof(KRS_DiasFestivos.fechaHasta) + ">=@fecha ";
                            //Parametros
                            object[] arr_Parametros_DiasFestivos = new object[]
                             {
                         new SqlParameter("@idEmpleado",  _lng_idEmpleado),
                         new SqlParameter("@codigoCliente",  _lng_CodigoCliente),
                         new SqlParameter("@fecha",  _dtt_Fecha.Date)
                             };

                            long? lng_idDiasFestivos = obj_KairosProEntities.Database.SqlQuery<long>(str_SQL_DiasFestivos, arr_Parametros_DiasFestivos).FirstOrDefault();

                            if (lng_idDiasFestivos != null && lng_idDiasFestivos.Value > 0)
                            {
                                str_PresenciaAusenciaDiaFestivoJornada = Variables_KairosPRO.G_STR_TIPOJORNADADIA_DIAFESTIVO + "|-1";
                            }
                        //............................................................................................

                        if (str_PresenciaAusenciaDiaFestivoJornada == "")
                        {
                            //JORNADA LABORAL ........................................................................
                            string str_SQL_JornadaLaboral = " SELECT " + nameof(KRS_PerfilesLinea) + "." + nameof(KRS_PerfilesLinea.idJornadaCabecera) +
                                                        " FROM " + nameof(KRS_Ejercicios_PerfilesCabecera) + " " +
                                                        " INNER JOIN " + nameof(KRS_PerfilesCabecera) + " On " + nameof(KRS_PerfilesCabecera) + "." + nameof(KRS_PerfilesCabecera.id) + " = " + nameof(KRS_Ejercicios_PerfilesCabecera) + "." + nameof(KRS_Ejercicios_PerfilesCabecera.idPerfilCabecera) + " and  " + nameof(KRS_PerfilesCabecera) + "." + nameof(KRS_PerfilesCabecera.codigoCliente) + " = " + nameof(KRS_Ejercicios_PerfilesCabecera) + "." + nameof(KRS_Ejercicios_PerfilesCabecera.codigoCliente) +
                                                        " INNER JOIN " + nameof(KRS_PerfilesLinea) + " On " + nameof(KRS_PerfilesCabecera) + "." + nameof(KRS_PerfilesCabecera.id) + " = " + nameof(KRS_PerfilesLinea) + "." + nameof(KRS_PerfilesLinea.idPerfilCabecera) + " and " + nameof(KRS_PerfilesCabecera) + "." + nameof(KRS_PerfilesCabecera.codigoCliente) + " = " + nameof(KRS_PerfilesLinea) + "." + nameof(KRS_PerfilesLinea.codigoCliente) + " " +
                                                        " WHERE " +
                                                            nameof(KRS_Ejercicios_PerfilesCabecera) + "." + nameof(KRS_Ejercicios_PerfilesCabecera.idEmpleado) + "=@idEmpleado  AND " +
                                                            nameof(KRS_Ejercicios_PerfilesCabecera) + "." + nameof(KRS_Ejercicios_PerfilesCabecera.codigoCliente) + "=@codigoCliente  AND " +
                                                            nameof(KRS_PerfilesLinea) + "." + nameof(KRS_PerfilesLinea.fechaDesde) + "<=@fecha  AND " +
                                                            nameof(KRS_PerfilesLinea) + "." + nameof(KRS_PerfilesLinea.fechaHasta) + ">=@fecha ";

                            //Parametros
                            object[] arr_Parametros_JornadaLaboral = new object[]
                             {
                                 new SqlParameter("@idEmpleado",  _lng_idEmpleado),
                                 new SqlParameter("@codigoCliente",  _lng_CodigoCliente),
                                 new SqlParameter("@fecha",  _dtt_Fecha.Date)
                             };

                            long? lng_idJornadaCabecera = obj_KairosProEntities.Database.SqlQuery<long>(str_SQL_JornadaLaboral, arr_Parametros_JornadaLaboral).FirstOrDefault();

                            if (lng_idJornadaCabecera != null && lng_idJornadaCabecera.Value>0)
                            {
                                str_PresenciaAusenciaDiaFestivoJornada = Variables_KairosPRO.G_STR_TIPOJORNADADIA_JORNADALABORAL + "|" + lng_idJornadaCabecera.Value;
                            }
                            //............................................................................................
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(AUX_Datos) + "/" + nameof(Existe_PresenciaAusenciaDiaFestivoJornada_porDia), true);
            }
            finally
            {
                obj_KairosProEntities.Database.Connection.Close();
                obj_KairosProEntities.Dispose();
            }

            return str_PresenciaAusenciaDiaFestivoJornada;
        }
    }
}
