예제 #1
0
            /// <summary>
            /// Handle
            /// </summary>
            /// <param name="request"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public async override Task <bool> Handle(RegisterTemperatureMeditionRequest request, CancellationToken cancellationToken)
            {
                Empleado empleado = await repositoryEmpleado
                                    .GetBy(p => p.Id == request.IdEmployee)
                                    .Include(p => p.IdFichaMedicaNavigation)
                                    .SingleOrDefaultAsync()
                                    .ConfigureAwait(false);

                if (empleado == null)
                {
                    throw new MultiMessageValidationException(new ErrorMessage()
                    {
                        Code    = "NOT_FOUND",
                        Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.Empleado)
                    });
                }

                if (empleado.IdFichaMedica == null)
                {
                    throw new MultiMessageValidationException(new ErrorMessage()
                    {
                        Code    = "NOT_FOUND",
                        Message = string.Format(ValidatorsMessages.NOT_FOUND, ValidatorFields.FichaMedica)
                    });
                }

                ParametroMedico paramTempe = await repositoryParametroMedico.GetAll().FirstOrDefaultAsync(c => c.Nombre == ParametroMedico.ParameterTypes.TemperaturaAlta.ToString()).ConfigureAwait(false);

                SeguimientoMedico seguimiento = new SeguimientoMedico()
                {
                    IdFichaMedica    = empleado.IdFichaMedica.Value,
                    Comentarios      = "Temperature Medition",
                    Activo           = true,
                    FechaSeguimiento = request.MeditionDateTime.HasValue ? request.MeditionDateTime.Value : DateTimeOffset.Now
                };

                seguimiento.ValoracionParametroMedico = new List <ValoracionParametroMedico>()
                {
                    new ValoracionParametroMedico()
                    {
                        Valor             = request.IsTemperatureOverThreshold,
                        IdParametroMedico = paramTempe.Id,
                    }
                };

                List <SeguimientoMedico> oldSeguimentos = await repositorySeguimientos.GetAll().Where(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.Update(item);
                }

                repositorySeguimientos.Add(seguimiento);
                await this.repositorySeguimientos.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);
            }