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(); } }
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(); } }