Esempio n. 1
0
        public ActionResult Agendar([Bind(Include = "MotivoId, DataPrevista, CpfCnpj, NovaViagemId, ConteineresSelecionados")] AgendamentoConteinerViewModel viewModel)
        {
            var agendamento = new Agendamento(
                viewModel.MotivoId,
                viewModel.DataPrevista.ToDateTime(),
                viewModel.CpfCnpj,
                viewModel.NovaViagemId,
                TipoAgendamento.Conteiner,
                User.ObterDespachanteId());

            agendamento.AdicionarConteineres(viewModel.ConteineresSelecionados);

            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 cntr in viewModel.ConteineresSelecionados)
                {
                    var posicionamentoBusca = _agendamentoRepositorio.ExistePosicionamento(viewModel.MotivoId, viewModel.DataPrevista.ToDateTime(), cntr);

                    if (posicionamentoBusca != null)
                    {
                        if (posicionamentoBusca != null)
                        {
                            ModelState.AddModelError(string.Empty, $"Já existe um Agendamento para a Unidade {posicionamentoBusca.Sigla} na Data {viewModel.DataPrevista} para {posicionamentoBusca.Motivo}");
                        }
                    }
                }

                if (ModelState.Values.SelectMany(v => v.Errors).Any())
                {
                    return(RetornarErros());
                }

                var protocolo = _agendamentoRepositorio.GravarPosicionamentoCntr(agendamento);

                viewModel.ConteineresAgendados = _agendamentoRepositorio
                                                 .ObterConteineresAgendamento(protocolo).ToList();

                viewModel.ProtocoloUnificado = protocolo;

                return(PartialView("_Concluido", viewModel));
            }
            catch (Exception ex)
            {
                throw new Exception($"Falha ao Gravar o Agendamento {ex.Message}");
            }
        }