예제 #1
0
        public IActionResult Vaga(long VagaId)
        {
            var funcionariosEmWa     = _funcionarioRepository.GetTodosAtivosEmWA();
            var vaga                 = _vagaRepository.GetPorId(VagaId);
            var tecnologiasDaVaga    = _tecnologiaRepository.GetTecnologiasPorVaga(vaga);
            var funcionariosAlocados = _alocacaoRepository.GetFuncionariosNaVaga(vaga);


            var viewModel = new VagaAlocacaoViewModel()
            {
                FuncionariosEmWA     = funcionariosEmWa.ToViewModel(_tecnologiaRepository),
                Vaga                 = vaga.ToViewModel(tecnologiasDaVaga),
                FuncionariosAlocados = funcionariosAlocados.ToViewModel(_tecnologiaRepository)
            };


            return(View("vaga-alocacao", viewModel));
        }
예제 #2
0
        public VagaAlocacaoViewModel GerarViewModelComErros(Vaga vaga, Dictionary <string, string> errors, List <Funcionario> funcionariosAlocadosDoBanco = null)
        {
            if (funcionariosAlocadosDoBanco == null)
            {
                funcionariosAlocadosDoBanco = _alocacaoRepository.GetFuncionariosNaVaga(vaga);
            }

            var funcionariosEmWa  = _funcionarioRepository.GetTodosAtivosEmWA();
            var tecnologiasDaVaga = _tecnologiaRepository.GetTecnologiasPorVaga(vaga);

            var viewModel = new VagaAlocacaoViewModel() //Deve retornar todas as informações (Tecnologia, Vaga e funcionarios em wa) para a View
            {
                FuncionariosEmWA     = funcionariosEmWa.ToViewModel(_tecnologiaRepository),
                Vaga                 = vaga.ToViewModel(tecnologiasDaVaga),
                FuncionariosAlocados = funcionariosAlocadosDoBanco.ToViewModel(_tecnologiaRepository)
            };

            foreach (var error in errors)
            {
                ModelState.AddModelError(error.Key, error.Value);
            }

            return(viewModel);
        }
예제 #3
0
        public IActionResult AlocarEmVaga(VagaAlocacaoViewModel alocaVM)
        {
            try
            {
                if (!alocaVM.Vaga.Id.HasValue)
                {
                    return(Vaga(0));
                }

                Vaga vaga = _vagaRepository.GetPorId(alocaVM.Vaga.Id.Value);

                List <Funcionario> funcionariosAlocadosModels = new List <Funcionario>();
                alocaVM.FuncionariosAlocados.ForEach(funcVm =>
                {
                    var funcionario = _funcionarioRepository.GetPorId(funcVm.Id.Value);
                    funcionariosAlocadosModels.Add(funcionario);
                });


                int qtdFuncionariosParaAlocar = funcionariosAlocadosModels.Where(func => func.NaoEstaAlocado(vaga)).Count();

                List <long>        funcionariosIdsParaAlocar            = funcionariosAlocadosModels.Select(func => func.id).ToList();
                List <Funcionario> funcionariosAlocadosDoBanco          = _alocacaoRepository.GetFuncionariosNaVaga(vaga);
                List <long>        funcionariosIdsAlocadosParaDesalocar = funcionariosAlocadosDoBanco
                                                                          .Select(func => func.id)
                                                                          .Where(id => !funcionariosIdsParaAlocar.Contains(id))
                                                                          .ToList();


                bool limiteDeVagasExcedido = qtdFuncionariosParaAlocar > alocaVM.Vaga.QtdVaga;
                if (limiteDeVagasExcedido)
                {
                    var errors = new Dictionary <string, string>()
                    {
                        { "Vaga.QtdVaga", $"Limite de vagas excedido! A vaga possui apenas {alocaVM.Vaga.QtdVaga} posição(oes)." }
                    };

                    return(View("vaga-alocacao", GerarViewModelComErros(vaga, errors, funcionariosAlocadosDoBanco)));
                }

                bool ninguemParaDesalocarEAlocar = funcionariosIdsAlocadosParaDesalocar.Count == 0 && funcionariosIdsParaAlocar.Count == 0;
                if (ninguemParaDesalocarEAlocar)
                {
                    var errors = new Dictionary <string, string>()
                    {
                        { "Vaga.QtdVaga", "É Preciso selecionar pelo menos um funcionário." }
                    };
                    return(View("vaga-alocacao", GerarViewModelComErros(vaga, errors, funcionariosAlocadosDoBanco)));
                }


                foreach (Funcionario funcionario in funcionariosAlocadosModels)
                {
                    if (funcionario.NaoEstaAlocado(vaga))
                    {
                        AlocarFuncionarioEmVaga(funcionario, vaga);
                    }
                }

                DesalocarFuncionariosPorId(funcionariosIdsAlocadosParaDesalocar, vaga);

                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex));
            }
        }