public void EjecutarNotificaciones() { try { EscalamientoModel escalamiento = new EscalamientoModel(); List <TicketModel> ticket = notificacionesDataAccess.GetData(); foreach (TicketModel i in ticket) { TicketModel elemento = i; if (elemento.UltimoEscalamiento == 0) { TiempoDeAtencionModel tiempoDeAtencion = CalculaTiempoAtencion(elemento.FechaRecepcion, elemento.HorasAtencion); if (!tiempoDeAtencion.EnTiempo) { PrimerEscalamiento(elemento); escalamiento.TicketId = elemento.TicketId; escalamiento.FechaEscalamiento = DateTime.Now; escalamiento.TipoEscalamiento = 1; notificacionesDataAccess.SetData(escalamiento); } } if (elemento.UltimoEscalamiento == 1) { TiempoDeAtencionModel tiempoDeAtencion = CalculaTiempoAtencion(elemento.FechaRecepcion, elemento.HorasAtencion + elemento.HorasSegundoEscalamiento); if (!tiempoDeAtencion.EnTiempo) // Se verifica que la fecha actual sea mayor a la fecha maxima de entrega de correo { SegundoEscalamiento(elemento); escalamiento.TicketId = elemento.TicketId; escalamiento.FechaEscalamiento = DateTime.Now; escalamiento.TipoEscalamiento = 2; notificacionesDataAccess.SetData(escalamiento); } } } } catch (DataAccessException) { //throw new DataAccessException(e.ToString()); } catch (MailException) { //throw new MailException(e.ToString()); } catch (Exception) { //throw new Exception(e.ToString()); } }
public TiempoDeAtencionModel CalculaTiempoAtencion(DateTime fechaRecepcion, int horasAtencion) { try { TiempoDeAtencionModel tiempoAtencion = new TiempoDeAtencionModel(); int totalHoras = 0; var diasLaborables = 0; var fechaActual = DateTime.Now; var horaFechaActual = DateTime.Now.Hour; var minutoFechaActual = DateTime.Now.Minute; var horaFechaRecepcion = fechaRecepcion.Hour; var minutosFechaRecepcion = (fechaRecepcion.Minute == 0) ? 60 : fechaRecepcion.Minute; if (fechaRecepcion.Date <= fechaActual.Date) { TiempoDeAtencionModel tiempoActualTranscurrido = new TiempoDeAtencionModel(); var fechaRecepcionEspejo = fechaRecepcion.AddDays(1); var diasInhabiles = notificacionesDataAccess.ConsultarTotalDiasInhabiles(fechaRecepcion); var diaFechaRecepcion = fechaRecepcion.Date < fechaActual.Date && (horaFechaRecepcion == 8 && (minutosFechaRecepcion == 0 || minutosFechaRecepcion == 60)) ? 1 : 0; var horasFaltantesDeHorario = 0; if (fechaRecepcion.Date != fechaActual.Date) { if (horaFechaRecepcion == 8 && (minutosFechaRecepcion == 0 || minutosFechaRecepcion == 60)) { horasFaltantesDeHorario = 0; } else if (horaFechaRecepcion == 8 && minutosFechaRecepcion > 0 && minutosFechaRecepcion < 60 || horaFechaRecepcion >= 8) { horasFaltantesDeHorario = 17 - fechaRecepcion.Hour; horasFaltantesDeHorario = (fechaRecepcion.Minute > 0) ? horasFaltantesDeHorario - 1 : horasFaltantesDeHorario; } } while (fechaRecepcionEspejo.Date < fechaActual.Date) { if (fechaRecepcionEspejo.DayOfWeek != DayOfWeek.Saturday && fechaRecepcionEspejo.DayOfWeek != DayOfWeek.Sunday) { diasLaborables++; } fechaRecepcionEspejo = fechaRecepcionEspejo.AddDays(1); } if (notificacionesDataAccess.EsDiaInhabil()) { diasLaborables++; diasLaborables = (diasLaborables - diasInhabiles) + diaFechaRecepcion; totalHoras = (fechaRecepcion.Date == fechaActual.Date) ? 0 : horasFaltantesDeHorario; } else { if (fechaActual.DayOfWeek != DayOfWeek.Saturday && fechaActual.DayOfWeek != DayOfWeek.Sunday) { if (fechaRecepcion.Date == fechaActual.Date) { tiempoActualTranscurrido.Dias = (fechaRecepcion.Hour == 8 && fechaRecepcion.Minute == 0 && horaFechaActual >= 17) ? 1 : 0; } else { tiempoActualTranscurrido.Dias = horaFechaActual < 17 ? 0 : 1; } if ((fechaRecepcion.Date == fechaActual.Date || fechaRecepcion.Date != fechaActual.Date) && horaFechaActual < 8) { tiempoActualTranscurrido.Horas = 0; } else if (horaFechaActual == 8 && horaFechaRecepcion == 8 && fechaRecepcion.Minute <= minutoFechaActual) { tiempoActualTranscurrido.Horas = fechaRecepcion.Date != fechaActual.Date ? 1 : 0; } else if ((fechaRecepcion.Date == fechaActual.Date || fechaRecepcion.Date != fechaActual.Date) && horaFechaRecepcion == 8 && minutosFechaRecepcion == 0) { tiempoActualTranscurrido.Horas = (horaFechaActual >= 17) ? 0 : horaFechaActual - 8; tiempoActualTranscurrido.Horas = (fechaRecepcion.Date != fechaActual.Date) ? tiempoActualTranscurrido.Horas + 1 : tiempoActualTranscurrido.Horas; } else if (fechaRecepcion.Date == fechaActual.Date && (horaFechaRecepcion == 8 && minutosFechaRecepcion >= 0 && minutosFechaRecepcion < 60 || horaFechaRecepcion > 8)) { if (horaFechaActual > 17) { tiempoActualTranscurrido.Horas = (minutosFechaRecepcion > 0 && minutosFechaRecepcion < 60) ? 17 - horaFechaRecepcion - 1 : 17 - horaFechaRecepcion; } else { tiempoActualTranscurrido.Horas = (fechaRecepcion.Minute <= minutoFechaActual) ? horaFechaActual - horaFechaRecepcion : horaFechaActual - horaFechaRecepcion - 1; } } else if (fechaRecepcion.Date != fechaActual.Date && (horaFechaRecepcion == 8 && minutosFechaRecepcion > 0 && minutosFechaRecepcion < 60 || horaFechaRecepcion > 8)) { if (horaFechaActual >= 17) { tiempoActualTranscurrido.Horas = 0; } else { tiempoActualTranscurrido.Horas = (minutosFechaRecepcion <= minutoFechaActual) ? horaFechaActual - 7 : horaFechaActual - 8; } } else if (fechaRecepcion.Date != fechaActual.Date && horaFechaActual >= 8) { if (horaFechaActual == 8 && minutoFechaActual == 0 || horaFechaActual > 17) { tiempoActualTranscurrido.Horas = 0; } else if (horaFechaActual == 8 && minutoFechaActual != 0) { tiempoActualTranscurrido.Horas = fechaRecepcion.Minute <= minutoFechaActual ? 1 : 0; } else if (horaFechaActual >= 8 && horaFechaActual <= 17) { tiempoActualTranscurrido.Horas = fechaRecepcion.Minute <= minutoFechaActual ? horaFechaActual - 8 : horaFechaActual - 9; } } else if (fechaRecepcion.Date == fechaActual.Date && fechaActual.Hour < 17) { tiempoActualTranscurrido.Horas = horaFechaActual - 8; } } else { tiempoActualTranscurrido.Horas = 0; tiempoActualTranscurrido.Dias = 0; } diasLaborables = (tiempoActualTranscurrido.Horas + horasFaltantesDeHorario >= 9) ? diasLaborables + 1 : diasLaborables; diasLaborables = (diasLaborables - diasInhabiles) + tiempoActualTranscurrido.Dias + diaFechaRecepcion; totalHoras = (tiempoActualTranscurrido.Horas + horasFaltantesDeHorario >= 9) ? (tiempoActualTranscurrido.Horas + horasFaltantesDeHorario) - 9 : tiempoActualTranscurrido.Horas + horasFaltantesDeHorario; } } var minutos = (horaFechaActual >= 17) ? 60 : minutoFechaActual; tiempoAtencion.Dias = diasLaborables; tiempoAtencion.Horas = totalHoras; tiempoAtencion.EnTiempo = horasAtencion > (diasLaborables * 9) + totalHoras || ((horasAtencion == (diasLaborables * 9) + totalHoras) && minutosFechaRecepcion == minutos); return(tiempoAtencion); } catch (Exception e) { throw new Exception("Hubo un error al realizar el conteo de horas", e); } }
public IList <ReporteModel> ConsultarTicketsReporte(ReporteModel reporteModel) { try { iGenericDataAccess.OpenConnection(); string filtroConsultaReporte = String.Empty; VwTicketsRepSelTicketsReporte vwTicketsRep = new VwTicketsRepSelTicketsReporte { DescripcionEstatus = reporteModel.DescripcionEstatus }; if (!string.IsNullOrEmpty(reporteModel.FechaInicio) && !string.IsNullOrEmpty(reporteModel.FechaFin)) { filtroConsultaReporte = "CAST(FechaRegistro AS DATE) >= CAST( '" + reporteModel.FechaInicio + "' AS DATE) AND CAST(FechaRegistro AS DATE) <= CAST('" + reporteModel.FechaFin + "' AS DATE)"; } IList <VwTicketsRepSelTicketsReporte> vwTicketsReporte = iGenericDataAccess.Consultar( vwTicketsRep, new OptionsQueryZero() { ExcludeNumericsDefaults = true, ExcludeBool = true, WhereComplementary = filtroConsultaReporte }); iGenericDataAccess.CloseConnection(); IList <ReporteModel> ticketsList = new List <ReporteModel>(); TiempoAtencionModel tiempoAtencion = new TiempoAtencionModel(); for (int i = 0; i < vwTicketsReporte.Count; i++) { TiempoDeAtencionModel tiempoDeAtencion = iSeguimientoTicketsDataAccess.CalculaTiempoAtencion(vwTicketsReporte[i].FechaRecepcion, vwTicketsReporte[i].HorasAtencion, (vwTicketsReporte[i].FechaCierre == "N/A") ? DateTime.Now : Convert.ToDateTime(vwTicketsReporte[i].FechaCierre, fotmato)); tiempoAtencion.DiasInhabiles = vwTicketsReporte[i].DiasInhabiles; tiempoAtencion.FechaRecepcion = vwTicketsReporte[i].FechaRecepcion; ReporteModel reporteModelFinal = new ReporteModel { TicketId = vwTicketsReporte[i].TicketId, FechaRegistro = DateToString(vwTicketsReporte[i].FechaRegistro), FechaRecepcion = DateToString(vwTicketsReporte[i].FechaRecepcion), FechaCierre = vwTicketsReporte[i].FechaCierre, Cliente = vwTicketsReporte[i].Cliente, Caratula = vwTicketsReporte[i].Caratula, DescripcionTicket = vwTicketsReporte[i].DescripcionTicket, NombrePer = vwTicketsReporte[i].NombrePer, PaternoPer = string.IsNullOrEmpty(vwTicketsReporte[i].PaternoPer) ? string.Empty : vwTicketsReporte[i].PaternoPer, MaternoPer = string.IsNullOrEmpty(vwTicketsReporte[i].MaternoPer) ? string.Empty : vwTicketsReporte[i].MaternoPer, HorasAtencion = vwTicketsReporte[i].HorasAtencion, DescripcionEstatus = vwTicketsReporte[i].DescripcionEstatus, TiempoAtencion = tiempoDeAtencion.Dias + " dia(s) , " + tiempoDeAtencion.Horas + " hora(s)", CveEstatus = vwTicketsReporte[i].CveEstatus, NumTicket = i + 1, AseguradoraId = vwTicketsReporte[i].AseguradoraId, Nombre = (vwTicketsReporte[i].AseguradoraId == 0) ? "NA" : vwTicketsReporte[i].Nombre, NumeroOt = vwTicketsReporte[i].NumeroOt, NumeroOtSics = vwTicketsReporte[i].NumeroOtSics, EstatusAtencion = tiempoDeAtencion.EnTiempo }; ticketsList.Add(reporteModelFinal); } return(ticketsList.OrderBy(x => x.TicketId).ToList()); } catch (Exception e) { iGenericDataAccess.CloseConnection(); throw new DalException(CodesTickets.ERR_00_01, e); } }