Example #1
0
        //Método llamado desde la aplicacion web
        public static void ProcesaAusencias(DateTime fechaini, DateTime fechafin, bool AutoPro = true)
        {
            IConfiguration config = ConfigHelper.GetConfiguration();

            if (!AutoPro)
            {
                string carpetaDestino = config["RutaFileTemp"];
                string remoteFile     = config["FileAbsentismos"];
                string fileName       = remoteFile.Substring(remoteFile.LastIndexOf("/") + 1);

                _listaAbsentismo = ProcessAbsentismosWorkbook(carpetaDestino + "\\" + fileName);
            }


            //Recorro todos empleados de TBL_EMPLEADOS para consultar sus ausencias
            try
            {
                int      maxidProceso;
                DateTime fechIniProceso = DateTime.Now;

                var context = new SINCRODEDBContext();
                {
                    var employees = context.TblEmpleados.ToList();

                    maxidProceso = context.TblProcesos.Any() ? context.TblProcesos.Max(p => p.IdPro) : 0;

                    //Inserto el proceso
                    var proceso = new TblProcesos()
                    {
                        IdPro        = ++maxidProceso,
                        FechaIniPro  = fechIniProceso,
                        FechaFinPro  = DateTime.Now,
                        EmpleadosPro = employees.Count,
                        ErroresPro   = 0,
                        AutoPro      = AutoPro,
                        RegistrosPro = 0,
                        TipoPro      = false
                    };
                    context.TblProcesos.Add(proceso);

                    int maxIdAbs = context.TblAbsentismoProcesado.Any()
                        ? context.TblAbsentismoProcesado.Max(p => p.IdAbs)
                        : 0;
                    int ausenciasCount = 0;
                    foreach (var employee in employees)
                    {
                        {
                            #region Obtener Ausencias

                            var ausenciasEmpleado = from a in _listaAbsentismo
                                                    where a.NifDni == employee.DniEmp && a.FechaFin.HasValue &&
                                                    ((a.FechaInicio >= fechaini && a.FechaInicio <= fechafin) ||
                                                     (a.FechaFin.Value >= fechaini && a.FechaFin.Value <= fechafin))
                                                    select new AusenciaEmpleado
                            {
                                DNI         = a.NifDni,
                                FechaInicio = a.FechaInicio,
                                FechaFin    = a.FechaFin,
                                CodAusencia = a.CodAusencia
                            };
                            #endregion

                            #region Salvar Ausencias en la tabla TBL_ABSENTISMOPROCESADO
                            foreach (var ausencia in ausenciasEmpleado)
                            {
                                //TODO depende de la base de datos Dassnet
                                //Para cada empleado inserto el marcaje
                                var absentismoProcesado = new TblAbsentismoProcesado()
                                {
                                    IdAbs       = ++maxIdAbs,
                                    IdEmp       = employee.IdEmp,
                                    DniEmp      = employee.DniEmp,
                                    IdPro       = maxidProceso,
                                    FechaInicio = ausencia.FechaInicio,
                                    FechaFin    = ausencia.FechaFin,
                                    CodAusencia = ausencia.CodAusencia
                                };
                                context.TblAbsentismoProcesado.Add(absentismoProcesado);
                                ausenciasCount++;
                            }
                        }
                    }

                    Log("Salvando los datos de absentismos");
                    context.SaveChanges();
                    Log("Salvados " + ausenciasCount + " ausencias");

                    //Llamar al ws de Evalos para enviar las ausencias
                    SendAusenciaToWS(context, maxidProceso, fechIniProceso);
                }
                #endregion
            }
            catch (Exception ex)
            {
                Log("#region Salvando en la tabla de ausencias: " + ex.ToString());
            }
        }
Example #2
0
        //Método llamado cuando el sincrode está en producción de forma automática
        public static void ProcesaMarcajes()
        {
            IConfiguration config = ConfigHelper.GetConfiguration();

            //Recorro todos empleados de TBL_EMPLEADOS para consultar su marcaje
            try
            {
                int      maxidProceso;
                DateTime fechIniProceso = DateTime.Now;

                using (var context = new SINCRODEDBContext())
                {
                    var employees = context.TblEmpleados.ToList();

                    //Tomo los datos necesarios para iniciar el proceso y salvarlo al final de procesar todos los marcajes
                    DateTime lastdateprocess = context.TblProcesos.Any(p => p.TipoPro)
                        ? context.TblProcesos.Where(p => p.TipoPro).Max(p => p.FechaIniPro)
                        : new DateTime(2019, 10, 1);
                    maxidProceso = context.TblProcesos.Any() ? context.TblProcesos.Max(p => p.IdPro) : 0;

                    string fechaIni = string.Format("{0}{1}{2}{3}{4}{5}", lastdateprocess.Year, lastdateprocess.Month.ToString().PadLeft(2, '0'), lastdateprocess.Day.ToString().PadLeft(2, '0'),
                                                    lastdateprocess.Hour.ToString().PadLeft(2, '0'), lastdateprocess.Minute.ToString().PadLeft(2, '0'), lastdateprocess.Second.ToString().PadLeft(2, '0'));
                    string fechaFin = string.Format("{0}{1}{2}{3}{4}{5}", fechIniProceso.Year, fechIniProceso.Month.ToString().PadLeft(2, '0'), fechIniProceso.Day.ToString().PadLeft(2, '0'),
                                                    fechIniProceso.Hour.ToString().PadLeft(2, '0'), fechIniProceso.Minute.ToString().PadLeft(2, '0'), fechIniProceso.Second.ToString().PadLeft(2, '0'));
                    long intfechaIni = Convert.ToInt64(fechaIni);
                    long intfechaFin = Convert.ToInt64(fechaFin);

                    //Inserto el proceso
                    var proceso = new TblProcesos()
                    {
                        IdPro        = ++maxidProceso,
                        FechaIniPro  = fechIniProceso,
                        FechaFinPro  = DateTime.Now,
                        EmpleadosPro = employees.Count,
                        ErroresPro   = 0,
                        AutoPro      = true,
                        RegistrosPro = 0
                    };
                    context.TblProcesos.Add(proceso);

                    int maxidMarcaje = context.TblMarcajeprocesado.Any()
                        ? context.TblMarcajeprocesado.Max(p => p.IdMar)
                        : 0;
                    int marcajescount = 0;
                    Log("Se procesa a partir de la última fecha procesada: " + lastdateprocess);
                    foreach (var employee in employees)
                    {
                        using (var dassnetcontext = new DASSNETContext())
                        {
                            #region Obtener Marcaje de Dassnet

                            var marcajesEmpleado = from m in dassnetcontext.MensajesAcceso
                                                   join p in dassnetcontext.PersonasT on m.FkPersona equals p.Id
                                                   join l in dassnetcontext.Lectores on m.FkLector equals l.Id
                                                   join t in dassnetcontext.Tarjetas on m.FkTarjeta equals t.Id into tempJoin
                                                   from j in tempJoin.DefaultIfEmpty()
                                                   where p.Dni == employee.DniEmp &&
                                                   Convert.ToInt64(m.FechaYhora) >= intfechaIni &&
                                                   Convert.ToInt64(m.FechaYhora) <= intfechaFin
                                                   select new MarcajeEmpleado
                            {
                                Id         = m.Id,
                                FechayHora = Utils.StrToDateTime(m.FechaYhora),
                                DNI        = p.Dni,
                                CodTarjeta = j == null ? "" : j.CodTarjeta,
                                CodLector  = l.Id,
                                Nombre     = l.Nombre
                            };
                            #endregion

                            #region Salvar Marcajes en la tabla TBL_MARCAJEPROCESADO
                            foreach (var marcaje in marcajesEmpleado)
                            {
                                #region Obtener Marcaje de Dassnet

                                //TODO depende de la base de datos Dassnet
                                //Para cada empleado inserto el marcaje
                                var marcajeprocesado = new TblMarcajeprocesado()
                                {
                                    IdMar           = ++maxidMarcaje,
                                    IdEmp           = employee.IdEmp,
                                    IdPro           = maxidProceso,
                                    FechaMarcajeMar = marcaje.FechayHora,
                                    DniEmp          = employee.DniEmp,
                                    CodTarjetaMar   = marcaje.CodTarjeta,
                                    IdLectorMar     = marcaje.CodLector.ToString(),
                                    NombreLectorMar = marcaje.Nombre
                                };
                                context.TblMarcajeprocesado.Add(marcajeprocesado);
                                marcajescount++;

                                #endregion
                            }
                        }
                    }

                    Log("Salvando los datos de marcaje");
                    context.SaveChanges();
                    Log("Salvados " + marcajescount + " marcajes");

                    //Llamar al ws de Evalos para mandarle el arreglo con los marcajes
                    SendMarcajeToWS(context, maxidProceso, fechIniProceso);
                }
                #endregion
            }
            catch (Exception ex)
            {
                Log("#region Salvando en la tabla marcaje: " + ex.ToString());
            }
        }