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)); }
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); }
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)); } }