/// <summary> /// Handle /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override async Task <bool> Handle(RegisterQuickTestRequest request, CancellationToken cancellationToken) { Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false); ResultadoTestMedico test = new ResultadoTestMedico() { FechaTest = request.FechaTest.HasValue ? request.FechaTest.Value : DateTime.UtcNow, Control = request.Control, Igg = request.Igg, Igm = request.Igm, IdFichaMedica = empleado.IdFichaMedica.Value }; repository.Add(test); await repository.SaveChangesAsync().ConfigureAwait(false); return(true); }
/// <summary> /// Handle /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async override Task <bool> Handle(RegisterTemperatureMeditionSecurityRequest request, CancellationToken cancellationToken) { idEmpleado = request.IdEmployee; Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false); ParametroMedico paramTempe = await repositoryParametroMedico.GetAll().FirstOrDefaultAsync(c => c.Nombre == ParametroMedico.ParameterTypes.TemperaturaAlta.ToString()).ConfigureAwait(false); SeguimientoMedico seguimiento = new SeguimientoMedico() { IdFichaMedica = empleado.IdFichaMedica.Value, Comentarios = "Security Scan Temperature Medition", Activo = true, FechaSeguimiento = request.MeditionDateTime.HasValue ? request.MeditionDateTime.Value : DateTimeOffset.Now }; seguimiento.ValoracionParametroMedico = new List <ValoracionParametroMedico>() { new ValoracionParametroMedico() { Valor = request.IsTemperatureOverThreshold, IdParametroMedicoNavigation = paramTempe, } }; List <SeguimientoMedico> oldSeguimentos = await repositorySeguimientos.GetBy(c => c.IdFichaMedica == empleado.IdFichaMedica.Value && c.ValoracionParametroMedico.Select(d => d.IdParametroMedico).Any(e => e == paramTempe.Id)) .ToListAsync().ConfigureAwait(false); foreach (var item in oldSeguimentos) { item.Activo = false; } repositorySeguimientos.UpdateRange(oldSeguimentos); repositorySeguimientos.Add(seguimiento); await this.repositorySeguimientos.SaveChangesAsync().ConfigureAwait(false); // creamos un nuevo pasaporte en base a la nueva info proporcionada var estados = await repositoryEstados.GetAll() .Include(c => c.IdTipoEstadoNavigation) .Include(c => c.IdColorEstadoNavigation) .ToDictionaryAsync(e => e.Nombre); //------------------------------------------------------------------------------------------- Pasaporte currentPassport = await GetLastPassportAsync(empleado.Id).ConfigureAwait(false); List <ResultadoTestPcr> pcrList = await GetAllResultadoPcrAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgG = await GetLastAnalisticIgG(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgM = await GetLastAnalisticIgM(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoTestMedico lastTestRapido = await GetLastTestRapidoAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastFiebre = seguimiento.ValoracionParametroMedico.FirstOrDefault(); var ultimosResul = await GetLastResultadoEncuestaAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); createPassportService.CreateWithStatedCalculated(empleado, request.MeditionDateTime ?? DateTimeOffset.UtcNow, estados, currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, ultimosResul.Fiebre, ultimosResul.Otros, ultimosResul.Contacto); //------------------------------------------------------------------------------------------- repositoryEmpleado.Update(empleado); await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false); return(true); }
/// <summary> /// Handle /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override async Task <bool> Handle(RegisterSymptomInquiryResultRequest request, CancellationToken cancellationToken) { idEmpleado = request.IdEmployee; Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false); if (empleado == null || empleado.IdFichaMedica == null) // Si no hay ficha médica no está bien registrado. { throw new MultiMessageValidationException(new ErrorMessage() { Code = "NOT_FOUND", Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.Empleado) }); } var symptoms = await repositorySintomas.GetAll().ToDictionaryAsync(e => e.Id).ConfigureAwait(false); if (request.Values.Any(rf => !symptoms.ContainsKey(rf.Id))) { throw new MultiMessageValidationException(new ErrorMessage() { Code = "NOT_FOUND", Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.TipoSintoma) }); } var estados = await repositoryEstados.GetAll() .Include(c => c.IdTipoEstadoNavigation) .Include(c => c.IdColorEstadoNavigation) .ToDictionaryAsync(e => e.Nombre).ConfigureAwait(false); Guid grupoRespuestas = Guid.NewGuid(); List <ResultadoEncuestaSintomas> resultados = request.Values.Select(s => new ResultadoEncuestaSintomas() { IdFichaMedica = empleado.IdFichaMedica.Value, IdTipoSintomaNavigation = symptoms[s.Id], Valor = s.Value, GrupoRespuestas = grupoRespuestas }).ToList(); this.repositoryEncuesta.AddRange(resultados); await repositoryEncuesta.SaveChangesAsync().ConfigureAwait(false); //------------------------------------------------------------------------------------------- Pasaporte currentPassport = await GetLastPassportAsync(empleado.Id).ConfigureAwait(false); List <ResultadoTestPcr> pcrList = await GetAllResultadoPcrAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgG = await GetLastAnalisticIgG(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgM = await GetLastAnalisticIgM(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoTestMedico lastTestRapido = await GetLastTestRapidoAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); //ValoracionParametroMedico lastFiebre = await GetLastFiebreAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoEncuestaSintomas fiebre = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "Fiebre").Value.Id); ResultadoEncuestaSintomas otros = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "OtrosSintomas").Value.Id); ResultadoEncuestaSintomas contacto = resultados.FirstOrDefault(c => c.IdTipoSintoma == symptoms.FirstOrDefault(d => d.Value.Nombre == "Contacto").Value.Id); createPassportService.CreateWithStatedCalculated(empleado, request.CurrentDeviceDateTime, estados, currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, null, fiebre, otros, contacto); //------------------------------------------------------------------------------------------- await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false); return(true); }
/// <summary> /// Handle /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async override Task <bool> Handle(RegisterGenerationManualRequest request, CancellationToken cancellationToken) { idEmpleado = request.IdEmployee; Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false); var oldState = empleado.Pasaporte .SingleOrDefault(p => p.Activo == true)?.IdEstadoPasaporteNavigation; var newState = await repositoryEstados .GetAll() .Include(e => e.IdTipoEstadoNavigation) .Include(e => e.IdColorEstadoNavigation) .FirstOrDefaultAsync(s => s.EstadoId == (request.IsGreenPaper ? (int)EstadoPasaporte.PapertStatesId.NoSintomaticoPaper : (int)EstadoPasaporte.PapertStatesId.SintomaticoPaper)).ConfigureAwait(false); // Inicio de transacción //repositoryEstados.UnitOfWork.BeginTransaction(); createPassportService.CreateFromChoosenState(empleado, request.RegistrationDateTime.HasValue ? request.RegistrationDateTime.Value : DateTimeOffset.Now, newState, true); //Si el pasaporte papel es verde calculamos el pasaporte if (request.IsGreenPaper) { Guid guid = Guid.NewGuid(); List <ResultadoEncuestaSintomas> newResultadoEncuestaSintomas = (await repositoryTipoSintoma .GetAll() .ToListAsync().ConfigureAwait(false)) .Select(ts => new ResultadoEncuestaSintomas { IdTipoSintomaNavigation = ts, Valor = false, GrupoRespuestas = guid, }).ToList(); foreach (ResultadoEncuestaSintomas res in newResultadoEncuestaSintomas) { empleado.IdFichaMedicaNavigation.ResultadoEncuestaSintomas.Add(res); } //repositoryEmpleado.Update(empleado); //await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false); var estados = await repositoryEstados.GetAll() .Include(c => c.IdTipoEstadoNavigation) .Include(c => c.IdColorEstadoNavigation) .ToDictionaryAsync(e => e.Nombre); Pasaporte currentPassport = await GetLastPassportAsync(empleado.Id).ConfigureAwait(false); List <ResultadoTestPcr> pcrList = await GetAllResultadoPcrAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgG = await GetLastAnalisticIgG(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastAnalitIgM = await GetLastAnalisticIgM(empleado.IdFichaMedica.Value).ConfigureAwait(false); ResultadoTestMedico lastTestRapido = await GetLastTestRapidoAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); ValoracionParametroMedico lastFiebre = await GetLastFiebreAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false); var ultimosResul = GetLastResultadoEncuesta(newResultadoEncuestaSintomas); createPassportService.CreateWithStatedCalculated(empleado, request.RegistrationDateTime ?? DateTimeOffset.UtcNow, estados, currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, ultimosResul.Fiebre, ultimosResul.Otros, ultimosResul.Contacto); } repositoryEmpleado.Update(empleado); await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false); // commit de la transacción //repositoryEmpleado.UnitOfWork.Commit(); return(true); }
/// <summary> /// Crea un nuevo pasaporte para el empleadoa partir de su información actual e histórica. /// </summary> /// <param name="empleado">Empleado.</param> /// <param name="localDateOfRegistry">Fecha.</param> /// <param name="estados">Estados</param> /// <param name="currentEstadoPasaporte">Estado actual del pasaporte</param> /// <param name="pcrList">Listado de resultados PCR</param> /// <param name="lastAnalitIgG">Último resultado de a´nalítica IgG</param> /// <param name="lastTestRapido">Último test rápido</param> /// <param name="lastFiebre">Última valoración de fiebre</param> /// <param name="utiDeclFiebre">Última declaració de fiebre</param> /// <param name="utiDeclOtros">Última declaración de otros síntomas</param> /// <param name="utiDeclContato">Última declaración de contacto</param> public void CreateWithStatedCalculated(Empleado empleado, DateTimeOffset localDateOfRegistry, Dictionary <string, EstadoPasaporte> estados, EstadoPasaporte currentEstadoPasaporte, List <ResultadoTestPcr> pcrList, ValoracionParametroMedico lastAnalitIgG, ValoracionParametroMedico lastAnalitIgM, ResultadoTestMedico lastTestRapido, ValoracionParametroMedico lastFiebre, ResultadoEncuestaSintomas utiDeclFiebre, ResultadoEncuestaSintomas utiDeclOtros, ResultadoEncuestaSintomas utiDeclContato) { StateMatrizData matriz = new StateMatrizData(pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, utiDeclFiebre, utiDeclOtros, utiDeclContato); EstadoPasaporte newEstadoPasaporte = matriz.Calculate(estados); // lanzo evento OnCalculateNewStateEvent(new CalculateNewStateEventArgs() { Matrix = matriz }); /// En una transición calculada no se puede ir a mejor según las prioridades de estado if ((currentEstadoPasaporte?.IdColorEstadoNavigation?.Prioridad ?? 9999) < newEstadoPasaporte.IdColorEstadoNavigation.Prioridad) { // Mejora el color ---> viejo estado CreateFromChoosenState(empleado, localDateOfRegistry, currentEstadoPasaporte, false); OnAddOldPassportEventt(new EventArgs()); return; } if ((currentEstadoPasaporte?.IdTipoEstadoNavigation?.Prioridad ?? 9999) < newEstadoPasaporte.IdTipoEstadoNavigation.Prioridad) { // Mejora el tipo de estado ---> viejo estado CreateFromChoosenState(empleado, localDateOfRegistry, currentEstadoPasaporte, false); OnAddOldPassportEventt(new EventArgs()); return; } // Empeora el color -> nuevo estado // Se mantiene el color, empeora tipo de estado -> nuevo estado // Se mantiene el color, se mantiene le tipo de estado -> nuevo estado CreateFromChoosenState(empleado, localDateOfRegistry, newEstadoPasaporte, false); OnAddNewPassportEvent(new EventArgs()); }