public ActionResult Visualizar(int id)
        {
            var agendamentoBusca = _agendamentoRepositorio
                                   .ObterPosicionamentoPorId(id);

            if (agendamentoBusca == null)
            {
                throw new Exception("Posicionamento não encontrado ou excluído");
            }

            var veiculoBusca = _agendamentoRepositorio
                               .ObterVeiculoAgendamento(id);

            var viewModel = new AgendamentoVeiculosViewModel
            {
                DataPrevista        = agendamentoBusca.DataPrevista.DataFormatada(),
                Porto               = agendamentoBusca.Porto,
                Navio               = agendamentoBusca.Navio,
                Exportador          = agendamentoBusca.Exportador,
                Reserva             = agendamentoBusca.Reserva,
                Viagem              = agendamentoBusca.Viagem,
                NovaViagemDescricao = agendamentoBusca.NovaViagemDescricao,
                RazaoSocial         = agendamentoBusca.Cliente,
                CpfCnpj             = agendamentoBusca.ClienteCpfCnpj,
                MotivoDescricao     = agendamentoBusca.MotivoDescricao,
            };

            viewModel.VeiculosAgendados.Add(veiculoBusca ?? new VeiculoAgendadoDTO());

            return(View(viewModel));
        }
        public ActionResult Agendar()
        {
            var viewModel = new AgendamentoVeiculosViewModel();

            PopularPeriodos(viewModel);
            PopularMotivos(viewModel);

            return(View(viewModel));
        }
 public void PopularMotivos(AgendamentoVeiculosViewModel viewModel)
 {
     viewModel.Motivos = _motivosRepositorio.ObterMotivos().ToList();
 }
 public void PopularPeriodos(AgendamentoVeiculosViewModel viewModel)
 {
     viewModel.Periodos = _periodosRepositorio.ObterPeriodos().ToList();
 }
        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}");
            }
        }