Exemplo n.º 1
0
        public Mensaje getTablaDatosPorTablasPorControladorPorFiltrosEspecialesJS(DateTime?controlFecha, int controlAnio, string controladores, string tablaBaseClave, string tablaPersonalizadaClave, DBContextAdapter dbContextMaestra)
        {
            TablaDatos tablaDatos;

            try
            {
                inicializaVariableMensaje();
                setSession(dbContextMaestra.context);
                getSession().Database.BeginTransaction();


                tablaBaseClave          = tablaBaseClave == null ? "" : tablaBaseClave.Trim();
                tablaPersonalizadaClave = tablaPersonalizadaClave == null ? "" : tablaPersonalizadaClave.Trim();
                controladores           = controladores == null ? "" : controladores.Trim();
                var query = from o in getSession().Set <TablaDatos>() select o;
                if (tablaBaseClave.Length > 0)
                {
                    query = from sub in query
                            where sub.tablaBase.clave == tablaBaseClave
                            select sub;
                }
                else if (tablaPersonalizadaClave.Length > 0)
                {
                    query = from sub1 in query
                            where sub1.tablaPersonalizada.clave == tablaPersonalizadaClave
                            select sub1;
                }
                int id = query.Select(p => p.id).SingleOrDefault();
                if (controlFecha != null)
                {
                    var query2 = from tb in getSession().Set <TablaDatos>()
                                 select tb;
                    if (tablaBaseClave.Length > 0)
                    {
                        query2 = from tb in query2
                                 where query.Select(p => p.tablaBase.id).ToList().Contains(tb.tablaBase.id)
                                 select tb;
                    }
                    else
                    {
                        query2 = from tb in query2
                                 where query.Select(p => p.tablaBase.id).ToList().Contains(tb.tablaBase.id)
                                 select tb;
                    }
                    query2 = from sub in query2
                             where sub.controlPorFecha == controlFecha
                             select sub;

                    if (controlAnio > 0)
                    {
                        query2 = from sub in query2
                                 where sub.controlPorAnio == controlAnio
                                 select sub;
                    }
                    if (controladores.Length > 0)
                    {
                        query2 = from sub in query2
                                 where sub.controladores == controladores
                                 select sub;
                    }
                    query = from sub in query
                            where sub.id == (from a in query2
                                             select new
                    {
                        a.id
                    }).Max(p => p.id)
                            select sub;
                }
                else
                {
                    if (controlAnio > 0)
                    {
                        query = from sub in query
                                where sub.controlPorAnio == controlAnio
                                select sub;
                    }
                    if (controladores.Length > 0)
                    {
                        query = from sub in query
                                where sub.controladores == controladores
                                select sub;
                    }
                }
                tablaDatos = query.SingleOrDefault();
                var tablaDatoss = (from a in query
                                   select new
                {
                    a.controladores,
                    a.controlPorAnio,
                    a.controlPorFecha,
                    a.descripcion,
                    a.id,
                    a.renglonSeleccionado,
                    a.tablaBase_ID,
                    a.tablaPersonalizada_ID
                }).SingleOrDefault();
                object[,] valores = null;
                valores           = UtilidadesXML.extraeValoresNodos(UtilidadesXML.convierteBytesToXML(tablaDatos.fileXml));
                if (UtilidadesXML.ERROR_XML > 0)
                {
                    mensajeResultado = UtilidadesXML.mensajeError;
                    return(null);
                }
                object[] datos = new object[2];
                datos[0] = tablaDatoss;
                datos[1] = valores;
                var res = datos;
                mensajeResultado.resultado = res;
                mensajeResultado.noError   = 0;
                mensajeResultado.error     = "";
                getSession().Database.CurrentTransaction.Commit();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("getTablaDatosPorTablasPorControladorPorFiltrosEspeciales()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
                getSession().Database.CurrentTransaction.Rollback();
            }
            return(mensajeResultado);
        }
        public Mensaje saveDeleteRegistroIncapacidad(RegistroIncapacidad incapacidad, object[] clavesDeleteIncapacidad, int rango, Empleados empleados, RazonesSociales razonesSociales, DateTime fechaInicial, DateTime fechaFinal, DateTime fechaInicialAnterior, DateTime fechaFinalAnterior, object claveExcepcion, string formatoFecha, DateTime fechaInicEmpalme, DateTime fechaFinEmpalme, DBContextAdapter dbContext, DBContextAdapter dbContextMaestra)
        {
            try
            {
                commit = true;
                inicializaVariableMensaje();
                RegistroIncapacidad registro = null;
                setSession(dbContext.context);
                getSession().Database.BeginTransaction();
                List <TablaDatos> organized = (from o in getSession().Set <TablaDatos>()
                                               where o.tablaBase.clave == ClavesParametrosModulos.claveTipoTablaDiasFestivos.ToString() &&
                                               o.id == (from t in getSession().Set <TablaDatos>()
                                                        where t.tablaBase.id == o.tablaBase.id &&
                                                        t.controlPorFecha <= DateTime.Now
                                                        select new
                {
                    t.id
                }).Max(p => p.id)
                                               select o).ToList();
                organized = organized == null ? new List <TablaDatos>() : organized;
                List <DateTime> diasFestivos = new List <DateTime>();
                if (organized.Count > 0)
                {
                    byte[] convert = organized[0].fileXml;
                    Object[,] dias = UtilidadesXML.extraeValoresNodos(UtilidadesXML.convierteBytesToXML(convert));
                    DateTime fecha;
                    int      i;
                    for (i = 0; i < dias.Length; i++)
                    {
                        fecha = Convert.ToDateTime(dias[i, 0].ToString());
                        diasFestivos.Add(fecha);
                    }
                }
                getSession().Database.CurrentTransaction.Commit();

                setSession(dbContext.context);
                getSession().Database.BeginTransaction();
                if (clavesDeleteIncapacidad.Length > 0)
                {
                    commit = deleteListQuerys("RegistroIncapacidad", new CamposWhere("RegistroIncapacidad.id", clavesDeleteIncapacidad, OperadorComparacion.IN, OperadorLogico.AND), dbContext);
                    //deleteListQuerys("RegistroIncapacidad", "id", clavesDeleteIncapacidad);
                    registro = new RegistroIncapacidad();
                }

                if (commit)
                {
                    Object[] clavesDetallesAsistencia = getDetalleAsistencia(empleados, fechaInicialAnterior, fechaFinalAnterior, razonesSociales);
                    if (clavesDetallesAsistencia != null)
                    {
                        commit = deleteListQuerys("DetalleAsistencia", new CamposWhere("DetalleAsistencia.id", clavesDetallesAsistencia, OperadorComparacion.IN, OperadorLogico.AND), dbContext);
                        //deleteListQuerys("DetalleAsistencia", "id", clavesDetallesAsistencia);
                    }
                }
                if (commit)
                {
                    List <Asistencias> asistencias = getAsistenciasPorRangoFechas(empleados.clave, fechaInicial, fechaFinal, razonesSociales.clave);
                    if (mensajeResultado.noError == 0)
                    {
                        if (asistencias != null)
                        {
                            if (asistencias.Count > 0)
                            {
                                Object[] clavesDetallesAsistencia = new Object[asistencias.Count];
                                for (int i = 0; i < asistencias.Count; i++)
                                {
                                    clavesDetallesAsistencia[i] = asistencias[i].id;
                                }
                                commit = deleteListQuerys("Asistencias", new CamposWhere("Asistencias.id", clavesDetallesAsistencia, OperadorComparacion.IN, OperadorLogico.AND), dbContext);

                                //deleteListQuerys("Asistencias", "id", clavesDetallesAsistencia);
                            }
                        }
                    }
                }

                if (commit & incapacidad != null)
                {
                    DatosGlobales      datosGlobales = cargaDatosGlobales(empleados, razonesSociales, fechaInicial, fechaFinal, claveExcepcion);
                    List <Asistencias> asistencias   = obtenerAsistencias(incapacidad, empleados, fechaInicialAnterior, fechaFinalAnterior, fechaInicial, fechaFinal, razonesSociales, datosGlobales, diasFestivos, fechaInicEmpalme, fechaFinEmpalme);
                    commit = agregarListaAsistencias(asistencias, rango);
                }
                if (commit & incapacidad != null)
                {
                    registro = getSession().Set <RegistroIncapacidad>().Add(incapacidad);
                }
                if (commit)
                {
                    mensajeResultado.resultado = registro;
                    mensajeResultado.noError   = 0;
                    mensajeResultado.error     = "";
                    getSession().Database.CurrentTransaction.Commit();
                }
                else
                {
                    mensajeResultado.resultado = null;
                    getSession().Database.CurrentTransaction.Rollback();
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("saveDeleteRegistroIncapacidad()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
                getSession().Database.CurrentTransaction.Rollback();
            }
            return(mensajeResultado);
        }
Exemplo n.º 3
0
        public Mensaje calcularVacacionesDevengadasEmpleados(RazonesSociales razonesSociales, object[,] factorIntegracion, DBContextSimple dbContextSimple, DBContextMaster dbContextMaestra, bool usaCommit)
        {
            Object[,] reglaFactor = factorIntegracion;
            bool usoBDMaestra = false;

            devengadaActual = new Dictionary <string, VacacionesDevengadas>();
            try
            {
                //inicializaVariableMensaje();
                //if (dbContextSimple == null)
                //{
                //    setSession(dbContext);
                //}
                //else
                //{
                //    setSession(dbContextSimple);
                //}

                // dbContextSimple.Database.BeginTransaction();
                ControlVacDeveng control = (from c in dbContextSimple.Set <ControlVacDeveng>()
                                            where c.razonesSociales.clave == razonesSociales.clave &&
                                            c.fecha == (from ct in dbContextSimple.Set <ControlVacDeveng>()
                                                        select new { ct.fecha }).Max(p => p.fecha)
                                            select c).SingleOrDefault();

                DateTime        fechaUltimDev;
                List <DateTime> diasPendientes = null;
                if (control == null)
                {
                    diasPendientes = new List <DateTime>();
                    diasPendientes.Add(DateTime.Now);
                }
                else
                {
                    fechaUltimDev  = Convert.ToDateTime(control.fecha);
                    diasPendientes = getDaysBetweenDates(fechaUltimDev, new DateTime());
                }
                int d = 0;
                ControlVacDeveng controlCalculadas = null;
                for (d = 0; d < diasPendientes.Count; d++)
                {
                    if (diasPendientes.Count > 0)
                    {
                        //Obtiene empleados que cumplen aniversario en la empresa al día
                        List <PlazasPorEmpleado> plazasEmpleados = null;
                        DateTime fechapen = diasPendientes[d];
                        plazasEmpleados = (from o in dbContextSimple.Set <PlazasPorEmpleadosMov>()
                                           where
                                           (from m in dbContextSimple.Set <PlazasPorEmpleadosMov>()
                                            where m.plazasPorEmpleado.razonesSociales.clave == razonesSociales.clave &&
                                            m.plazasPorEmpleado.fechaFinal >= fechapen &&
                                            o.plazasPorEmpleado.fechaPrestaciones.Value.Month == fechapen.Month &&
                                            o.plazasPorEmpleado.fechaPrestaciones.Value.Day == fechapen.Day
                                            group new { m.plazasPorEmpleado.empleados, m } by new
                        {
                            m.plazasPorEmpleado.empleados.clave
                        } into g
                                            select new
                        {
                            Column1 = g.Max(p => p.m.id)
                        }).Contains(new { Column1 = o.id })
                                           select o.plazasPorEmpleado).ToList();

                        plazasEmpleados = plazasEmpleados == null ? new List <PlazasPorEmpleado>() : plazasEmpleados;
                        if (plazasEmpleados.Count > 0)
                        {
                            if (reglaFactor == null)
                            {//Obtiene  los factores de integracion
                                usoBDMaestra = true;
                                //if (dbContextMaster == null)
                                //{
                                //    setSession(dbContext);
                                //}
                                //else
                                //{
                                //    setSession(dbContextMaster);
                                //}
                                List <TablaDatos> values;
                                values = (from o in dbContextMaster.Set <TablaDatos>()
                                          where o.tablaBase.clave == ClavesParametrosModulos.claveTipoTablaFactorIntegracion.ToString() &&
                                          o.id == (from t in dbContextMaster.Set <TablaDatos>()
                                                   where t.tablaBase.id == o.tablaBase.id
                                                   select new { t.id }).Max(p => p.id)
                                          select o).ToList();
                                values = values == null ? new List <TablaDatos>() : values;
                                if (values.Count > 0)
                                {
                                    byte[]    convert = ((TablaDatos)values[0]).fileXml;
                                    XDocument doc     = UtilidadesXML.convierteBytesToXML(convert);
                                    reglaFactor = UtilidadesXML.extraeValoresNodos(doc);
                                }
                            }
                            //Llenar tabla de Vacaciones Devengadas por día
                            VacacionesDevengadas vd = null;
                            if (usoBDMaestra)
                            {
                                if (dbContextSimple == null)
                                {
                                    setSession(dbContextSimple);
                                }
                                else
                                {
                                    getSession().Database.Connection.Close();
                                    setSession(dbContextSimple);
                                }
                            }
                            for (int i = 0; i < plazasEmpleados.Count; i++)
                            {
                                Double antiguedad = (Double)calcularAntiguedadExacta(Convert.ToDateTime(plazasEmpleados[i].fechaPrestaciones));
                                //Obtiene vacaciones devengadas por año a ese empleado
                                VacacionesDevengadas vaca = (from a in dbContextSimple.Set <VacacionesDevengadas>()
                                                             where a.empleados.id == plazasEmpleados[i].empleados.id &&
                                                             a.ejercicio == Convert.ToInt32(antiguedad)
                                                             select a).SingleOrDefault();
                                if (vaca == null)
                                {
                                    vd = new VacacionesDevengadas();
                                    vd.razonesSociales = plazasEmpleados[i].razonesSociales;
                                    vd.empleados       = plazasEmpleados[i].empleados;
                                    vd.ejercicio       = Convert.ToInt32(antiguedad);
                                    Object[] factorEmpleado = (Object[])obtieneFactorIntegracion(reglaFactor, Convert.ToInt32(antiguedad));
                                    Object[] salarioAniv    = (from sdi in dbContextSimple.Set <SalariosIntegrados>()
                                                               where sdi.empleados.id == plazasEmpleados[i].empleados.id &&
                                                               sdi.fecha <= plazasEmpleados[i].fechaPrestaciones
                                                               group sdi by new
                                    {
                                        sdi.salarioDiarioFijo
                                    } into g
                                                               select new
                                    {
                                        Column1 = g.Max(p => p.fecha),
                                        g.Key.salarioDiarioFijo
                                    }).ToArray();
                                    if (salarioAniv == null)
                                    {
                                        vd.salarioAniversario = 0.0;
                                    }
                                    else
                                    {
                                        vd.salarioAniversario = (double)salarioAniv[1];
                                    }
                                    vd.factorPrima     = Convert.ToDouble(factorEmpleado[4].ToString());
                                    vd.diasVacaciones  = Convert.ToInt32(factorEmpleado[3].ToString());
                                    vd.registroInicial = false;
                                    double primaVac = Convert.ToDouble(factorEmpleado[4].ToString()) / 100 * Convert.ToInt32(factorEmpleado[3].ToString());
                                    vd.diasPrimaVaca = primaVac;
                                    dbContextSimple.Set <VacacionesDevengadas>().Add(vd);
                                    devengadaActual.Add(plazasEmpleados[i].empleados.clave, vd);
                                }
                            }
                        }
                    }
                    controlCalculadas       = new ControlVacDeveng();
                    controlCalculadas.fecha = diasPendientes[d];
                    controlCalculadas.razonesSociales_ID = razonesSociales.id;

                    dbContextSimple.Set <ControlVacDeveng>().Add(controlCalculadas);
                    dbContextSimple.SaveChanges();
                }
                if (usaCommit)
                {
                    dbContextSimple.Database.CurrentTransaction.Commit();
                }
                mensajeResultado.resultado = true;
                mensajeResultado.noError   = 0;
                mensajeResultado.error     = "";
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("calcularVacacionesDevengadasEmpleados()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
                dbContextSimple.Database.CurrentTransaction.Rollback();
            }
            return(mensajeResultado);
        }