Пример #1
0
        public async Task <IActionResult> GetMatchList(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }


            //Recolher dados estatisticos do Match feito anteriormente.
            var matchStatsInfoDb = _context.MatchStats.ToList();
            var matchStatsInfo   = new MatchStatsInfo
            {
                //NrRecords = matchStatsInfoDb.Count(),
                GrupoSanguineoMulher = matchStatsInfoDb.Count(x => x.GrupoSanguineoMulher),
                GrupoSanguineoHomem  = matchStatsInfoDb.Count(x => x.GrupoSanguineoHomem),
                CorOlhosMulher       = matchStatsInfoDb.Count(x => x.CorOlhosMulher),
                CorCabeloMulher      = matchStatsInfoDb.Count(x => x.CorCabeloMulher),
                RacaHomem            = matchStatsInfoDb.Count(x => x.RacaHomem),
                CorPeleMulher        = matchStatsInfoDb.Count(x => x.CorPeleMulher),
                CorOlhosHomem        = matchStatsInfoDb.Count(x => x.CorOlhosHomem),
                CorCabeloHomem       = matchStatsInfoDb.Count(x => x.CorCabeloHomem),
                CorPeleHomem         = matchStatsInfoDb.Count(x => x.CorPeleHomem),
                TexturaCabeloHomem   = matchStatsInfoDb.Count(x => x.TexturaCabeloHomem),
                TexturaCabeloMulher  = matchStatsInfoDb.Count(x => x.TexturaCabeloMulher),
                RacaMulher           = matchStatsInfoDb.Count(x => x.RacaMulher),
            };

            //Recolher dados do casal e lista de dadores filtrados com factor de exclusao
            var casal     = _context.Casal.FirstOrDefault(x => x.CasalID == id);
            var matchList = _context.Dador
                            .Where(x => x.Amostras.Any(y => y.PedidoGametas == null))
                            .Where(x => casal.GamMatch(x))
                            .ToList();

            //Mecanismo de ordenação baseada nas escolhas frequentes do utilizador
            var listaOrdenada = MatchHelper.GetOrdedList(matchList, casal, matchStatsInfo);

            if (!listaOrdenada.Any())
            {
                casal.PedidoGametas.EstadoProcessoPedido = EstadoProcesso.EmListaEspera;

                //TODO apresentar mensagem utilizador de "sem match possiveis de momento"
                return(NotFound());
            }

            ViewBag.CasalId = id;
            return(View("ListaDadores", listaOrdenada));
        }