Exemplo n.º 1
0
        public async Task <IActionResult> Create(ConsultaViewModel consultaViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(consultaViewModel));
            }

            if (consultaViewModel.Data > DateTime.Now.AddDays(30))
            {
                ModelState.AddModelError(string.Empty, "Consulta pode ser agendeda apenas com 30 dias de antecedência.");
                consultaViewModel = await PopularMedicos(consultaViewModel);

                consultaViewModel = await PopularPacientes(consultaViewModel);

                consultaViewModel = await PopularExames(consultaViewModel);

                return(View(consultaViewModel));
            }

            var consulta = _mapper.Map <Consulta>(consultaViewModel);

            if (!await MedicoPossuiDisponibilidade(consulta))
            {
                ModelState.AddModelError(string.Empty, "Médico não possui disponibilidade!");
                consultaViewModel = await PopularMedicos(consultaViewModel);

                consultaViewModel = await PopularPacientes(consultaViewModel);

                consultaViewModel = await PopularExames(consultaViewModel);

                return(View(consultaViewModel));
            }

            if (!await PacientePossuiDisponibilidade(consulta))
            {
                ModelState.AddModelError(string.Empty, "Paciente já possui um agendamento no horario!");
                consultaViewModel = await PopularMedicos(consultaViewModel);

                consultaViewModel = await PopularPacientes(consultaViewModel);

                consultaViewModel = await PopularExames(consultaViewModel);

                return(View(consultaViewModel));
            }

            var colecaoDeExames = new List <Exame>();

            foreach (var exameId in consultaViewModel.ExamesId)
            {
                var exame = await _exameRepository.ObterPorIdTracking(exameId);

                colecaoDeExames.Add(exame);
            }

            consulta.Exame = colecaoDeExames;
            await _consultaRepository.Adicionar(consulta);

            return(RedirectToAction("Index"));
        }