public ActionResult Agendar([Bind(Include = "MotivoId, DataPrevista, CpfCnpj, NovaViagemId, VeiculosSelecionados")] AgendamentoVeiculosViewModel viewModel) { var agendamento = new Agendamento( viewModel.MotivoId, viewModel.DataPrevista.ToDateTime(), viewModel.CpfCnpj, viewModel.NovaViagemId, TipoAgendamento.Veiculos, User.ObterDespachanteId()); agendamento.AdicionarVeiculos(viewModel.VeiculosSelecionados); if (!Validar(agendamento)) { return(RetornarErros()); } var clienteBusca = _clientesRepositorio .ObterClientePorDocumento(viewModel.CpfCnpj.ApenasNumeros()); if (clienteBusca == null) { throw new Exception($"Nenhum Cliente foi encontrado com o documento {viewModel.CpfCnpj}"); } agendamento.SetarCliente(clienteBusca.Id); agendamento.Status = StatusPosicionamento.NaoIniciado; try { foreach (var veiculo in viewModel.VeiculosSelecionados) { var posicionamentoBusca = _agendamentoRepositorio.ExistePosicionamento(viewModel.MotivoId, viewModel.DataPrevista.ToDateTime(), veiculo); if (posicionamentoBusca != null) { if (posicionamentoBusca != null) { ModelState.AddModelError(string.Empty, $"Já existe um Agendamento para o Chassi {posicionamentoBusca.Chassis} na Data {viewModel.DataPrevista} para {posicionamentoBusca.Motivo}"); } } } if (ModelState.Values.SelectMany(v => v.Errors).Any()) { return(RetornarErros()); } var protocolo = _agendamentoRepositorio.GravarPosicionamentoVeiculo(agendamento); viewModel.VeiculosAgendados = _agendamentoRepositorio .ObterItensVeiculoAgendamento(protocolo).ToList(); viewModel.ProtocoloUnificado = protocolo; return(PartialView("_Concluido", viewModel)); } catch (Exception ex) { throw new Exception($"Falha ao Gravar o Agendamento {ex.Message}"); } }