示例#1
0
        public static void SendAusenciaToWS(SINCRODEDBContext sincrodecontext, int idPro, DateTime fIniPro)
        {
            IConfiguration config = ConfigHelper.GetConfiguration();

            Log("Comenzando el envio de ausencias al WS");
            //Mando a crear la ausencia en Evalos
            //Creo el json con los datos q debo enviarle al ws
            string jsonabsence;
            string wsEvalosMethod = config["EvalosAccess"] + "absence/";
            string username       = config["EvalosUser"];
            string password       = config["EvalosPassword"];

            int cantTotalRegistros = 0;
            int cantRegistroPro    = 0;
            int cantErrores        = 0;
            int maxidProlog;

            void EnviarAusenciaWS(int idEmpleado, int idAusencia, Absence absence)
            {
                TblProcesoslog procesoLog;

                jsonabsence = JsonConvert.SerializeObject(absence);
                if (jsonabsence != "[]")
                {
                    if (config["ShowDetailsLog"].ToUpper() == "TRUE")
                    {
                        Log("Json usado en el envío al WS de ausencia " + jsonabsence);
                    }

                    try
                    {
                        var httpWebResponse = WebServiceRest.PutPostRequest(wsEvalosMethod, username, password, jsonabsence, "PUT");

                        string messageLog;
                        string messageError = string.Empty;

                        StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream());
                        string       body   = reader.ReadToEnd();

                        if (httpWebResponse.StatusCode == HttpStatusCode.OK)
                        {
                            cantRegistroPro++;
                            //Si la ausencia se envió satisfactoriamente se borra de la tabla de absentismos procesados
                            var ausenciaToDelete = sincrodecontext.TblAbsentismoProcesado.FirstOrDefault(m => m.IdAbs == idAusencia);
                            if (ausenciaToDelete != null)
                            {
                                sincrodecontext.TblAbsentismoProcesado.Remove(ausenciaToDelete);
                            }
                            else
                            {
                                Log(string.Format("No fue posible encontrar registro con Id {0} en TblAbsentismoProcesado", idAusencia));
                            }

                            messageLog = httpWebResponse.StatusDescription;
                        }
                        else
                        {
                            Log("Respuesta de POST de Ausencia, empleado " + absence.CodeEmployee + " => " + body);

                            cantErrores++;
                            messageLog   = httpWebResponse.StatusDescription;
                            messageError = httpWebResponse.StatusDescription;
                        }

                        //Salvo el log de los procesos
                        procesoLog = new TblProcesoslog()
                        {
                            IdProlog    = ++maxidProlog,
                            IdPro       = idPro,
                            IdEmp       = idEmpleado,
                            FechaIniPro = fIniPro,
                            DescProlog  = messageLog,
                            ExcProlog   = messageError
                        };
                        sincrodecontext.TblProcesoslog.Add(procesoLog);
                        sincrodecontext.SaveChanges();
                    }
                    catch (Exception e)
                    {
                        Log("Error en el envio de POST de Ausencia: " + e.Message);
                    }
                }
            }

            maxidProlog = sincrodecontext.TblProcesoslog.Any() ? sincrodecontext.TblProcesoslog.Max(l => l.IdProlog) : 0;

            var empleadosXDistinct = (from m in sincrodecontext.TblAbsentismoProcesado select m.IdEmp).Distinct().ToList();

            foreach (var empleado in empleadosXDistinct)
            {
                var ausenciasEmpleado = (from m1 in sincrodecontext.TblAbsentismoProcesado select m1).Where(m => m.IdEmp == empleado).ToList();

                foreach (var ausenciaEmpleado in ausenciasEmpleado)
                {
                    if (ausenciaEmpleado.FechaFin.HasValue)
                    {
                        var idAusencia = sincrodecontext.TblCodigosAusencias.FirstOrDefault(a => a.CodAusencia == ausenciaEmpleado.CodAusencia).IdAus;
                        var absence    = new Absence()
                        {
                            CodeEmployee = ausenciaEmpleado.DniEmp,
                            StartDate    = ausenciaEmpleado.FechaInicio.Date.ToString("yyyyMMdd", CultureInfo.InvariantCulture),
                            EndDate      = ausenciaEmpleado.FechaFin.Value.Date.ToString("yyyyMMdd", CultureInfo.InvariantCulture),
                            Incidence    = idAusencia,
                        };
                        cantTotalRegistros += 1;

                        EnviarAusenciaWS(empleado, ausenciaEmpleado.IdAbs, absence);
                    }
                }

                var proceso = sincrodecontext.TblProcesos.Where(p => p.IdPro == idPro).FirstOrDefault();
                proceso.RegistrosPro = cantRegistroPro;
                proceso.ErroresPro   = cantErrores;
                sincrodecontext.SaveChanges();
            }
        }
示例#2
0
        public static void SendMarcajeToWS(SINCRODEDBContext sincrodecontext, int idPro, DateTime fIniPro)
        {
            IConfiguration config = ConfigHelper.GetConfiguration();

            Log("Comenzando el envio de marcajes al WS");
            //Mando a crear el marcaje en Evalos
            //Creo el json con los datos q debo enviarle al ws
            string jsonattendance;
            string wsEvalosMethod = config["EvalosAccess"] + "booking/attendance/";
            string username       = config["EvalosUser"];
            string password       = config["EvalosPassword"];

            int cantTotalRegistros = 0;
            int cantRegistroPro    = 0;
            int cantErrores        = 0;
            int maxidProlog;

            List <Attendance> attendances   = new List <Attendance>();
            List <int>        attendanceIds = new List <int>();

            void EnviarMarcajesWS(int idEmpleado)
            {
                TblProcesoslog procesoLog;

                jsonattendance = JsonConvert.SerializeObject(attendances.ToArray());
                if (jsonattendance != "[]")
                {
                    if (config["ShowDetailsLog"].ToUpper() == "TRUE")
                    {
                        Log("Json usado en el envío al WS de marcaje " + jsonattendance);
                    }

                    try
                    {
                        var httpWebResponse = WebServiceRest.PutPostRequest(wsEvalosMethod, username, password, jsonattendance, "POST");

                        //Log("Respuesta del Post " + httpWebResponse.StatusCode + "" + httpWebResponse.StatusDescription);
                        string messageLog;
                        string messageError = string.Empty;

                        if (httpWebResponse.StatusCode == HttpStatusCode.Created)
                        {
                            StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream());
                            string       body   = reader.ReadToEnd();
                            Log("Respuesta de POST de Marcajes, empleado " + attendances.Last <Attendance>().CodeEmployee + " => " + body);
                            var jsonBody = JsonConvert.DeserializeObject <List <MarcajesResponse> >(body);
                            for (int i = 0; i < attendances.Count; i++)
                            {
                                if (jsonBody[i].Message == "OK")
                                {
                                    cantRegistroPro++;
                                    //Si el marcaje se envió satisfactoriamente se borra de la tabla de marcajes procesados
                                    var marcajeToDelete = sincrodecontext.TblMarcajeprocesado.FirstOrDefault(m => m.IdMar == attendanceIds[i]);
                                    if (marcajeToDelete != null)
                                    {
                                        sincrodecontext.TblMarcajeprocesado.Remove(marcajeToDelete);
                                    }
                                    else
                                    {
                                        Log(string.Format("No se encontró en la tabla TBL_MARCAJEPROCESADO un registro con ID = {0}", attendanceIds[i]));
                                    }
                                }
                                else
                                {
                                    Log("Error en marcaje " + attendances[i].Date + " => " + jsonBody[i].Message);
                                    cantErrores++;
                                    messageError = body;
                                }
                            }

                            messageLog = httpWebResponse.StatusDescription;
                            //Log("Respuesta satisfactoria del POST " + messagelog);
                        }
                        else
                        {
                            cantErrores += attendances.Count;
                            messageLog   = httpWebResponse.StatusDescription;
                            messageError = httpWebResponse.StatusDescription;
                            //Log("Respuesta incorrecta del POST " + messagelog);
                        }

                        //Salvo el log de los procesos
                        procesoLog = new TblProcesoslog()
                        {
                            IdProlog    = ++maxidProlog,
                            IdPro       = idPro,
                            IdEmp       = idEmpleado,
                            FechaIniPro = fIniPro,
                            DescProlog  = messageLog,
                            ExcProlog   = messageError
                        };
                        sincrodecontext.TblProcesoslog.Add(procesoLog);
                        sincrodecontext.SaveChanges();
                    }
                    catch (Exception e)
                    {
                        Log("Error en el envio de POST de Marcajes: " + e.Message);
                    }
                }
                attendances.Clear();
                attendanceIds.Clear();
            }

            maxidProlog = sincrodecontext.TblProcesoslog.Any() ? sincrodecontext.TblProcesoslog.Max(l => l.IdProlog) : 0;

            //var empleadosXDistincta = sincrodecontext.TblMarcajeprocesado.Select(m => m.IdEmp).Distinct();
            var empleadosXDistinct = (from m in sincrodecontext.TblMarcajeprocesado select m.IdEmp).Distinct().ToList();

            //Log("Cantidad de marcajes con distintos empleados en la tabla "+empleadosXDistinct.Count());

            foreach (var empleado in empleadosXDistinct)
            {
                //var marcajesEmpleado = sincrodecontext.TblMarcajeprocesado.Where(m => m.IdEmp == empleado);
                var marcajesEmpleado = (from m1 in sincrodecontext.TblMarcajeprocesado select m1).Where(m => m.IdEmp == empleado).ToList();

                foreach (var marcajeempleado in marcajesEmpleado)
                {
                    var attendance = new Attendance()
                    {
                        CodeEmployee = marcajeempleado.DniEmp,
                        Date         = marcajeempleado.FechaMarcajeMar.Date.ToString("yyyyMMdd", CultureInfo.InvariantCulture),
                        Time         = marcajeempleado.FechaMarcajeMar.ToString("HHmmss", CultureInfo.InvariantCulture),
                        Installation = "LOC",
                        Clock        = marcajeempleado.IdLectorMar.PadLeft(3, '0'),
                        Lector       = "01",
                        Incidence    = "00",
                        Card         = marcajeempleado.CodTarjetaMar,
                        //"Ip": "10.0.0.1"
                    };
                    attendances.Add(attendance);
                    attendanceIds.Add(marcajeempleado.IdMar);
                    cantTotalRegistros += 1;

                    //Si ya hay 100 marcajes se realiza el envío y se sigue iterando en el foreach
                    if (attendances.Count == 100)
                    {
                        //Envío de los datos de marcaje al WS de Evalos
                        EnviarMarcajesWS(empleado);
                    }
                }

                //Envío de los datos de marcaje al WS de Evalos
                EnviarMarcajesWS(empleado);

                var proceso = sincrodecontext.TblProcesos.Where(p => p.IdPro == idPro).FirstOrDefault();
                proceso.RegistrosPro = cantRegistroPro;
                proceso.ErroresPro   = cantErrores;
                sincrodecontext.SaveChanges();
            }
        }