Пример #1
0
        public async Task <IActionResult> Edit(int id, [Bind("DadorId,FaseDador,EstadoDador")] Dador dador)
        {
            if (id != dador.DadorId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var dadorDb = _encryptor.DecryptData(await _context.Dador.SingleAsync(x => x.DadorId == id));
                    dadorDb.EstadoDador = dador.EstadoDador;
                    dadorDb.FaseDador   = dador.FaseDador;
                    _context.Update(dadorDb);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!DadorExists(dador.DadorId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(dador));
        }
Пример #2
0
        /// <summary>
        /// Verifica compatibilidade segundo tabela ABO
        /// </summary>
        /// <param name="casal">Casal a verificar</param>
        /// <param name="dador">Dador a verificar</param>
        /// <returns>Compatibilidade possivel entre dador e casal</returns>
        public static bool VerificaCompatibilidade_Abo(Casal casal, Dador dador)
        {
            var gruposCasal = casal.ConvertGrupoSanguineo();

            if (gruposCasal.Contains(GrupoSanguineoMatchEnum.AB))
            {
                return(true);
            }

            //A+B
            if (gruposCasal.Contains(GrupoSanguineoMatchEnum.A) && gruposCasal.Contains(GrupoSanguineoMatchEnum.B))
            {
                return(true);
            }

            //Dador == O
            if (dador.GrupoSanguineo.ConvertGrupoSanguineo() == GrupoSanguineoMatchEnum.O)
            {
                return(true);
            }

            if (gruposCasal.Contains(dador.GrupoSanguineo.ConvertGrupoSanguineo()))
            {
                return(true);
            }


            return(false);
        }
        public async Task <IActionResult> Edit(int id, [Bind("DadorId,Nome,Morada,DataNasc,LocalNasc,DocIdentificacao,Nacionalidade,Profissao,GrauEscolaridade,EstadoCivil,Altura,Peso,CorPele,CorOlhos,CorCabelo,TexturaCabelo,GrupoSanguineo,Etnia,IniciaisDador,FaseDador,EstadoDador,DadosDador,NumAbortos,TotalGestacoes")] Dador dador)
        {
            if (id != dador.DadorId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(dador);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!DadorExists(dador.DadorId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(dador));
        }
Пример #4
0
        /// <summary>
        /// Valida se existe compatibilidade entre casal e dador,
        /// utilizando o factor de exclusao (ABO, RH e Olhos)
        /// </summary>
        /// <param name="casal">Casal a verificar</param>
        /// <param name="dador">Dador a verificar</param>
        /// <returns>Compatibilidade possivel entre dador e casal</returns>
        public static bool GamMatch(this Casal casal, Dador dador)
        {
            //mecanismo de match

            return(VerificaCompatibilidade_Rh(casal, dador) &&
                   VerificaCompatibilidade_Abo(casal, dador) &&
                   VerificaCompatibilidade_Olhos(casal, dador));
        }
Пример #5
0
        public async Task <IActionResult> Create([Bind("DadorId,Nome,Morada,DataNasc,LocalNasc,DocIdentificacao,Nacionalidade,Profissao,GrauEscolaridade,EstadoCivil,NumFilhos,Altura,Peso,CorPele,CorOlhos,CorCabelo,TexturaCabelo,GrupoSanguineo,Etnia,IniciaisDador,FaseDador,EstadoDador,DadosDador,NumAbortos,TotalGestacoes")] Dador dador, Microsoft.AspNetCore.Http.IFormFile file)
        {
            var fileUpload = "";


            dador.TipoRegisto = RegistoDadorEnum.Normal;

            if (ModelState.IsValid)
            {
                var settings  = _context.Settings.FirstOrDefault();
                var happyHour = false;
                if (settings != null)
                {
                    if (DateTime.Now.TimeOfDay <= settings.HappyHourEnd &&
                        DateTime.Now.TimeOfDay >= settings.HappyHourBegin)
                    {
                        //happyHour = true;
                        dador.TipoRegisto = RegistoDadorEnum.HappyHour;

                        //save image
                        if (file.Length > 0)
                        {
                            fileUpload = await file.SaveFileDefault(_hostingEnvironment,
                                                                    Path.Combine(_hostingEnvironment.WebRootPath, "uploads", "dador"));

                            if (fileUpload != "")
                            {
                                dador.FotoId = fileUpload;
                                // Verificação cara

                                var resultado = await MatchHelper.MicrosoftCognitiveServices.Faces.FindSimilarFaceList(
                                    Path.Combine(_hostingEnvironment.WebRootPath, "uploads", "dador", fileUpload), fileUpload);

                                if (resultado.Item1.Any())
                                {
                                    if (resultado.Item1.FirstOrDefault().Confidence >= settings.PhotoMatchValue)
                                    {
                                        dador.TipoRegisto = RegistoDadorEnum.Extra;
                                    }
                                }
                            }
                        }
                    }
                }

                dador.IniciaisDador = RetrieveInitials(dador.Nome);

                dador = _encryptor.EncryptData(dador);

                _context.Add(dador);
                await _context.SaveChangesAsync();



                return(RedirectToAction("IndexRegistered", "Home"));
            }
            return(View(dador));
        }
Пример #6
0
        public Dador DecryptData(Dador dador)
        {
            IList <string> data = ConstructDataList(dador);

            IList <string> result = _dadorEncryptor.TryDecryptListStrings(data);

            dador = ConstructDador(result, dador);

            return(dador);
        }
Пример #7
0
        /// <summary>
        /// Verifica compatibilidade de RH
        /// </summary>
        /// <param name="casal">Casal a verificar</param>
        /// <param name="dador">Dador a verificar</param>
        /// <returns>Compatibilidade possivel entre dador e casal</returns>
        public static bool VerificaCompatibilidade_Rh(Casal casal, Dador dador)
        {
            //Sintonia entre casal e diferença do dador provoca exclusao
            if (((int)casal.GrupoSanguineoMulher) % 2 == ((int)casal.GrupoSanguineoMulher) % 2 &&
                ((int)casal.GrupoSanguineoMulher) % 2 != ((int)dador.GrupoSanguineo) % 2)
            {
                return(false);
            }

            return(true);
        }
        private static ApplicationDbContext GetContextWithoutData()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;

            context = new ApplicationDbContext(options);

            var dador = new Dador
            {
                DadorId          = 1,
                Nome             = "Marcelo Moreno",
                Morada           = "Praça D. Joao II",
                DataNasc         = DateTime.UtcNow,
                LocalNasc        = "Amarante",
                DocIdentificacao = "123987456",
                Nacionalidade    = "Portugal",
                Profissao        = "Engenheiro Quimico",
                GrauEscolaridade = GrauEscolaridadeEnum.Mestrado,
                EstadoCivil      = EstadoCivilEnum.Viuvo,
                NumFilhos        = 0,
                Altura           = 185,
                Peso             = 78,
                CorPele          = CorPeleEnum.Clara,
                CorOlhos         = CorOlhosEnum.Verde,
                CorCabelo        = CorCabeloEnum.Preto,
                TexturaCabelo    = TexturaCabeloEnum.Grisalho,
                GrupoSanguineo   = GrupoSanguineoEnum.ABNeg,
                Etnia            = EtniaEnum.Negro,
                IniciaisDador    = "MM123",
                FaseDador        = FaseDadorEnum.PrimeiraDadiva,
                EstadoDador      = EstadoDadorEnum.ProcessoInativo,
                DadosDador       = ValidacaoEnum.Aceite,
                NumAbortos       = 0,
                TotalGestacoes   = 0
            };

            context.Add(dador);
            context.SaveChanges();

            var amostra = new Amostra
            {
                DadorId       = 1,
                EstadoAmostra = EstadoAmostraEnum.PorAnalisar,
                TipoAmostra   = TipoAmostraEnum.Sangue,
                DataRecolha   = DateTime.UtcNow,
            };

            context.Add(amostra);
            context.SaveChanges();

            return(context);
        }
Пример #9
0
 private Dador ConstructDador(IList <string> result, Dador dador)
 {
     if (result.Any())
     {
         dador.DocIdentificacao = result.ElementAt(0);
         dador.IniciaisDador    = result.ElementAt(1);
         dador.LocalNasc        = result.ElementAt(2);
         dador.Morada           = result.ElementAt(3);
         dador.Nacionalidade    = result.ElementAt(4);
         dador.Nome             = result.ElementAt(5);
         dador.Profissao        = result.ElementAt(6);
     }
     return(dador);
 }
Пример #10
0
        private IList <string> ConstructDataList(Dador dador)
        {
            IList <string> data = new List <string>
            {
                dador.DocIdentificacao,
                dador.IniciaisDador,
                dador.LocalNasc,
                dador.Morada,
                dador.Nacionalidade,
                dador.Nome,
                dador.Profissao
            };

            return(data);
        }
Пример #11
0
        /// <summary>
        /// Devolve um MatchStats, obtido atravez da comparacao entre dador e casal,
        /// detalhando as semelhancas entre ambos
        /// </summary>
        /// <param name="casal">casal selecionado</param>
        /// <param name="dador">dador a comparar</param>
        /// <returns>MatchStats, com informação sobre match entre dador e casal</returns>
        public static MatchStats GetMatchStats(Casal casal, Dador dador)
        {
            var matchStats = new MatchStats
            {
                GrupoSanguineoMulher = casal.GrupoSanguineoMulher == dador.GrupoSanguineo,
                GrupoSanguineoHomem  = casal.GrupoSanguineoHomem == dador.GrupoSanguineo,
                CorCabeloHomem       = casal.CorCabeloHomem == dador.CorCabelo,
                CorCabeloMulher      = casal.CorCabeloMulher == dador.CorCabelo,
                CorOlhosHomem        = casal.CorOlhosHomem == dador.CorOlhos,
                CorOlhosMulher       = casal.CorOlhosMulher == dador.CorOlhos,
                CorPeleHomem         = casal.CorPeleHomem == dador.CorPele,
                CorPeleMulher        = casal.CorPeleMulher == dador.CorPele,
                RacaHomem            = casal.RacaHomem == dador.Etnia,
                RacaMulher           = casal.RacaHomem == dador.Etnia,
                TexturaCabeloHomem   = casal.TexturaCabeloHomem == dador.TexturaCabelo,
                TexturaCabeloMulher  = casal.TexturaCabeloMulher == dador.TexturaCabelo,
                CasalId = casal.CasalID,
                DadorId = dador.DadorId,
            };

            return(matchStats);
        }
Пример #12
0
 /// <summary>
 /// Verifica compatibilidade de olhos
 /// </summary>
 /// <param name="casal">Casal a verificar</param>
 /// <param name="dador">Dador a verificar</param>
 /// <returns>Compatibilidade possivel entre dador e casal</returns>
 public static bool VerificaCompatibilidade_Olhos(Casal casal, Dador dador)
 {
     //TODO faltam enums
     return(true);
 }
        public async Task <IActionResult> Edit(int id, [Bind("Nome,DocIdentificacao,QuestionarioId,Perguntas,Respostas")] InqueritoAssistenteSocialViewModel inqueritoAssistenteSocialViewModel)
        {
            if (id != inqueritoAssistenteSocialViewModel.QuestionarioId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    IList <Dador> todosDadores = _encryptorDador.DecryptDataList(await _context.Dador.ToListAsync());

                    Dador dador = todosDadores.Where(d => d.Nome == inqueritoAssistenteSocialViewModel.Nome).Where(d => d.DocIdentificacao == inqueritoAssistenteSocialViewModel.DocIdentificacao).SingleOrDefault();
                    //Dador dadorInit = await _context.Dador.Where(d => d.Nome == encryptNome).Where(d => d.DocIdentificacao == encryptDocId).SingleOrDefaultAsync();

                    if (dador == null)
                    {
                        return(RedirectToAction(nameof(NotRegistered)));
                    }

                    List <Pergunta> perguntas = await _context.Pergunta.Where(p => p.QuestionarioId == inqueritoAssistenteSocialViewModel.QuestionarioId).Include(p => p.Respostas).ToListAsync();

                    bool rExists = perguntas.Any(p => p.Respostas.Where(r => r.DadorId == dador.DadorId).Any());

                    if (rExists)
                    {
                        return(RedirectToAction(nameof(AlreadyAnswered)));
                    }

                    for (int i = 0; i < perguntas.Count; i++)
                    {
                        Resposta resposta = new Resposta
                        {
                            DadorId       = dador.DadorId,
                            Dador         = dador,
                            PerguntaId    = perguntas[i].PerguntaId,
                            Pergunta      = perguntas[i],
                            TextoResposta = inqueritoAssistenteSocialViewModel.Respostas[i]
                        };

                        _context.Add(resposta);
                    }

                    //Analyze sentiment CORRIGIR
                    bool valido = await ValidarSentimentosAsync(inqueritoAssistenteSocialViewModel.Perguntas, inqueritoAssistenteSocialViewModel.Respostas);

                    if (valido)
                    {
                        List <double?> sentimentScores = _textEmotionService.AnalyzeEmotion(inqueritoAssistenteSocialViewModel.Respostas.FindAll(r => !r.Equals("Sim") && !r.Equals("Nao")));

                        // Invalid
                        if (sentimentScores.Exists(s => s < 0.3))
                        {
                            //Invalido
                            dador.ValidacaoInqueritoAS = ValidacaoEnum.Rejeitado;

                            _context.Update(_encryptorDador.EncryptData(dador));
                        }
                        else
                        {
                            // Valido
                            dador.ValidacaoInqueritoAS = ValidacaoEnum.Aceite;

                            _context.Update(_encryptorDador.EncryptData(dador));
                        }
                    }
                    else
                    {
                        dador.ValidacaoInqueritoAS = ValidacaoEnum.Rejeitado;

                        _context.Update(_encryptorDador.EncryptData(dador));
                    }

                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!QuestionarioExists(inqueritoAssistenteSocialViewModel.QuestionarioId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }

                return(RedirectToAction("IndexAnsweredAS", "Home"));
            }
            return(View(inqueritoAssistenteSocialViewModel));
        }
Пример #14
0
        private static ApplicationDbContext GetContextWithoutData()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;

            context = new ApplicationDbContext(options);

            var dador = new Dador
            {
                DadorId = 1,
                Nome    = "TESTER"
            };

            var amostraPorAnalis = new Amostra
            {
                DadorId       = 1,
                EstadoAmostra = EstadoAmostraEnum.PorAnalisar,
                TipoAmostra   = TipoAmostraEnum.Espermatozoide,
                DataRecolha   = DateTime.UtcNow,
                Dador         = dador
            };

            context.Add(amostraPorAnalis);
            context.SaveChanges();

            var amostraEmAnalis = new Amostra
            {
                DadorId       = 1,
                EstadoAmostra = EstadoAmostraEnum.EmAnalise,
                TipoAmostra   = TipoAmostraEnum.Espermatozoide,
                DataRecolha   = DateTime.UtcNow,
                Dador         = dador
            };

            context.Add(amostraEmAnalis);
            context.SaveChanges();

            var amostraAnalis = new Amostra
            {
                DadorId       = 1,
                EstadoAmostra = EstadoAmostraEnum.Analisada,
                TipoAmostra   = TipoAmostraEnum.Espermatozoide,
                DataRecolha   = DateTime.UtcNow,
                Dador         = dador
            };

            context.Add(amostraAnalis);
            context.SaveChanges();

            var amostraCrio = new Amostra
            {
                DadorId       = 1,
                EstadoAmostra = EstadoAmostraEnum.Criopreservada,
                TipoAmostra   = TipoAmostraEnum.Espermatozoide,
                DataRecolha   = DateTime.UtcNow,
                Dador         = dador
            };

            context.Add(amostraCrio);
            context.SaveChanges();

            return(context);
        }