/*
         * private async void abrirHorarioEntrega(PedidoInfo pedido) {
         *  UserDialogs.Instance.ShowLoading("Carregando horários de entrega...");
         *  try
         *  {
         *      var regraHorario = PedidoHorarioFactory.create();
         *      var horarios = await regraHorario.listar(Pedido.IdLoja);
         *      if (horarios.Count > 1)
         *      {
         *          var horarioEntregaPage = new HorarioEntregaPage()
         *          {
         *              Title = "Horário de Entrega",
         *              Horarios = horarios
         *          };
         *          horarioEntregaPage.AoSelecionar += (s2, horario) =>
         *          {
         *              Pedido.DiaEntrega = horarioEntregaPage.DiaEntrega;
         *              Pedido.HorarioEntrega = horario.Horario;
         *              definirEntrega(Pedido);
         *          };
         *          UserDialogs.Instance.HideLoading();
         *          await Navigation.PushAsync(horarioEntregaPage);
         *      }
         *      else
         *      {
         *          UserDialogs.Instance.HideLoading();
         *          definirEntrega(Pedido);
         *      }
         *  }
         *  catch (Exception erro)
         *  {
         *      UserDialogs.Instance.HideLoading();
         *      UserDialogs.Instance.Alert(erro.Message, "Erro", "Fechar");
         *      //await DisplayAlert("Erro", erro.Message, "Entendi");
         *  }
         * }
         */

        protected virtual void inicializarComponente()
        {
            _entregaButton = new MenuButton {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Start,
                Icon  = "fa-motorcycle",
                Text  = "Receber em\nCasa",
                Style = Estilo.Current[Estilo.BTN_ROOT]
            };
            _entregaButton.Click += async(sender, e) => {
                Pedido.Entrega = EntregaEnum.Entrega;
                var regraUsuario = UsuarioFactory.create();
                var usuario      = regraUsuario.pegarAtual();

                /*
                 * if (usuario.Enderecos.Count == 1)
                 * {
                 *  var endereco = usuario.Enderecos[0];
                 *  Pedido.Cep = endereco.Cep;
                 *  Pedido.Logradouro = endereco.Logradouro;
                 *  Pedido.Complemento = endereco.Complemento;
                 *  Pedido.Numero = endereco.Numero;
                 *  Pedido.Bairro = endereco.Bairro;
                 *  Pedido.Cidade = endereco.Cidade;
                 *  Pedido.Uf = endereco.Uf;
                 *  Pedido.Latitude = endereco.Latitude;
                 *  Pedido.Longitude = endereco.Longitude;
                 *
                 *  definirEntrega(Pedido);
                 * }
                 */
                if (usuario.Enderecos.Count > 0)
                {
                    var enderecoListaPage = EnderecoUtils.gerarEnderecoLista((endereco) => {
                        Pedido.Cep         = endereco.Cep;
                        Pedido.Logradouro  = endereco.Logradouro;
                        Pedido.Complemento = endereco.Complemento;
                        Pedido.Numero      = endereco.Numero;
                        Pedido.Bairro      = endereco.Bairro;
                        Pedido.Cidade      = endereco.Cidade;
                        Pedido.Uf          = endereco.Uf;
                        Pedido.Latitude    = endereco.Latitude;
                        Pedido.Longitude   = endereco.Longitude;

                        //abrirHorarioEntrega(Pedido);
                        definirEntrega(Pedido);
                    });
                    var enderecos = new List <EnderecoInfo>();
                    foreach (var endereco in usuario.Enderecos)
                    {
                        enderecos.Add(endereco);
                    }
                    enderecoListaPage.Enderecos = enderecos;
                    await Navigation.PushAsync(enderecoListaPage);
                }
                else
                {
                    var cepPage = EnderecoUtils.gerarBuscaPorCep(async(endereco) =>
                    {
                        UserDialogs.Instance.ShowLoading("Atualizando endereço...");
                        try
                        {
                            var regraLogin = UsuarioFactory.create();
                            usuario.Enderecos.Add(UsuarioEnderecoInfo.clonar(endereco));
                            await regraLogin.alterar(usuario);
                            regraLogin.gravarAtual(usuario);

                            Pedido.Cep         = endereco.Cep;
                            Pedido.Logradouro  = endereco.Logradouro;
                            Pedido.Complemento = endereco.Complemento;
                            Pedido.Numero      = endereco.Numero;
                            Pedido.Bairro      = endereco.Bairro;
                            Pedido.Cidade      = endereco.Cidade;
                            Pedido.Uf          = endereco.Uf;
                            Pedido.Latitude    = endereco.Latitude;
                            Pedido.Longitude   = endereco.Longitude;

                            var regraHorario = PedidoHorarioFactory.create();
                            var horarios     = await regraHorario.listar(Pedido.IdLoja);
                            if (horarios.Count > 1)
                            {
                                var horarioEntregaPage = new HorarioEntregaPage()
                                {
                                    Title    = "Horário de Entrega",
                                    Horarios = horarios
                                };
                                horarioEntregaPage.AoSelecionar += (s2, e2) =>
                                {
                                    definirEntrega(Pedido);
                                };
                                UserDialogs.Instance.HideLoading();
                                await Navigation.PushAsync(horarioEntregaPage);
                            }
                            else
                            {
                                UserDialogs.Instance.HideLoading();
                                definirEntrega(Pedido);
                            }
                        }
                        catch (Exception erro)
                        {
                            UserDialogs.Instance.HideLoading();
                            UserDialogs.Instance.Alert(erro.Message, "Erro", "Fechar");
                            //await DisplayAlert("Erro", erro.Message, "Entendi");
                        }
                    }, false);
                    await Navigation.PushAsync(cepPage);
                }
            };
            _retirarNoLocalButton = new MenuButton
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Start,
                Icon  = "fa-home",
                Text  = "Retirar na Loja",
                Style = Estilo.Current[Estilo.BTN_ROOT]
            };
            _retirarNoLocalButton.Click += (sender, e) => {
                Pedido.Entrega = EntregaEnum.RetirarNaLoja;
                var regraUsuario = UsuarioFactory.create();
                var usuario      = regraUsuario.pegarAtual();
                if (usuario.Enderecos.Count == 1)
                {
                    var endereco = usuario.Enderecos[0];
                    Pedido.Cep         = endereco.Cep;
                    Pedido.Logradouro  = endereco.Logradouro;
                    Pedido.Complemento = endereco.Complemento;
                    Pedido.Numero      = endereco.Numero;
                    Pedido.Bairro      = endereco.Bairro;
                    Pedido.Cidade      = endereco.Cidade;
                    Pedido.Uf          = endereco.Uf;
                    Pedido.Latitude    = endereco.Latitude;
                    Pedido.Longitude   = endereco.Longitude;
                }
                definirEntrega(Pedido);
            };
        }
Пример #2
0
        public static Page gerarCarrinhoParaEntrega()
        {
            var carrinhoPage = new CarrinhoPage
            {
                Title = "Meu carrinho"
            };

            carrinhoPage.AoFinalizar += (s1, produtos) =>
            {
                LoginUtils.carregarUsuario((usuario) => {
                    var metodoEntregaPage = PedidoUtils.gerarEntregaMetodo(async(pedido) => {
                        if (await UserDialogs.Instance.ConfirmAsync("Deseja fechar o pedido?", "Aviso", "Sim", "Não", null))
                        {
                            var pagamentoMetodoPage = PagamentoUtils.gerarPagamento(async(pagamento) => {
                                UserDialogs.Instance.ShowLoading("Enviando...");
                                try
                                {
                                    pedido.IdPagamento = pagamento.IdPagamento;
                                    switch (pagamento.Tipo)
                                    {
                                    case TipoPagamentoEnum.CreditoOnline:
                                        pedido.FormaPagamento = FormaPagamentoEnum.CreditoOnline;
                                        break;

                                    case TipoPagamentoEnum.DebitoOnline:
                                        pedido.FormaPagamento = FormaPagamentoEnum.DebitoOnline;
                                        break;

                                    case TipoPagamentoEnum.Boleto:
                                        pedido.FormaPagamento = FormaPagamentoEnum.Boleto;
                                        break;

                                    case TipoPagamentoEnum.Dinheiro:
                                        pedido.FormaPagamento = FormaPagamentoEnum.Dinheiro;
                                        pedido.TrocoPara      = pagamento.TrocoPara;
                                        break;

                                    case TipoPagamentoEnum.CartaoOffline:
                                        pedido.FormaPagamento = FormaPagamentoEnum.CartaoOffline;
                                        break;
                                    }
                                    switch (pagamento.Situacao)
                                    {
                                    case SituacaoPagamentoEnum.Pago:
                                        pedido.Situacao = Pedido.Model.SituacaoEnum.Preparando;
                                        break;

                                    case SituacaoPagamentoEnum.AguardandoPagamento:
                                        pedido.Situacao = Pedido.Model.SituacaoEnum.AguardandoPagamento;
                                        break;

                                    default:
                                        pedido.Situacao = Pedido.Model.SituacaoEnum.Pendente;
                                        break;
                                    }
                                    var regraPedido = PedidoFactory.create();
                                    int idPedido    = pedido.Id;
                                    if (idPedido > 0)
                                    {
                                        await regraPedido.alterar(pedido);
                                    }
                                    else
                                    {
                                        idPedido = await regraPedido.inserir(pedido);
                                    }
                                    var pedidoFechado = await regraPedido.pegar(idPedido);
                                    var regraCarrinho = CarrinhoFactory.create();
                                    regraCarrinho.limpar();

                                    if (pedidoFechado.Entrega == EntregaEnum.RetiradaMapeada)
                                    {
                                        AcompanhamentoUtils.iniciarAcompanhamento(pedidoFechado);
                                    }

                                    if (pedidoFechado.Entrega == EntregaEnum.Entrega && pedido.Situacao != Pedido.Model.SituacaoEnum.AguardandoPagamento)
                                    {
                                        var regraHorario = PedidoHorarioFactory.create();
                                        var horarios     = await regraHorario.listar(pedidoFechado.IdLoja);
                                        if (horarios.Count > 1)
                                        {
                                            var horarioEntregaPage = new HorarioEntregaPage()
                                            {
                                                Title = "Horário de Entrega",
                                                //Pedido = pedidoFechado,
                                                Horarios = horarios
                                            };
                                            horarioEntregaPage.AoSelecionar += async(s2, horario) =>
                                            {
                                                UserDialogs.Instance.ShowLoading("Enviando...");
                                                try
                                                {
                                                    pedidoFechado.DiaEntrega     = horarioEntregaPage.DiaEntrega;
                                                    pedidoFechado.HorarioEntrega = horario;
                                                    pedidoFechado.Avisar         = false;

                                                    await regraPedido.alterar(pedidoFechado);
                                                    ((RootPage)App.Current.MainPage).PaginaAtual = new PedidoPage
                                                    {
                                                        Pedido = pedidoFechado
                                                    };
                                                    UserDialogs.Instance.HideLoading();
                                                }
                                                catch (Exception erro)
                                                {
                                                    UserDialogs.Instance.HideLoading();
                                                    UserDialogs.Instance.Alert(erro.Message, "Erro", "Fechar");
                                                }
                                            };
                                            UserDialogs.Instance.HideLoading();
                                            ((RootPage)App.Current.MainPage).PushAsync(horarioEntregaPage);
                                        }
                                        else
                                        {
                                            UserDialogs.Instance.HideLoading();
                                            ((RootPage)App.Current.MainPage).PaginaAtual = new PedidoPage {
                                                Pedido = pedidoFechado
                                            };
                                        }
                                    }
                                    else
                                    {
                                        UserDialogs.Instance.HideLoading();
                                        ((RootPage)App.Current.MainPage).PaginaAtual = new PedidoPage {
                                            Pedido = pedidoFechado
                                        };
                                    }
                                }
                                catch (Exception erro)
                                {
                                    UserDialogs.Instance.HideLoading();
                                    UserDialogs.Instance.Alert(erro.Message, "Erro", "Fechar");
                                }
                            });
                            var regraLoja = LojaFactory.create();
                            var loja      = regraLoja.pegarAtual();
                            pagamentoMetodoPage.UsaCredito  = loja.AceitaCreditoOnline;
                            pagamentoMetodoPage.UsaDebito   = loja.AceitaDebitoOnline;
                            pagamentoMetodoPage.UsaDinheiro = loja.AceitaDinheiro;
                            pagamentoMetodoPage.UsaBoleto   = loja.AceitaBoleto;
                            pagamentoMetodoPage.Pagamento   = PagamentoUtils.gerar(pedido);

                            ((RootPage)App.Current.MainPage).PushAsync(pagamentoMetodoPage);
                        }
                    });
                    metodoEntregaPage.Pedido = PedidoUtils.gerar(produtos);
                    ((RootPage)App.Current.MainPage).PushAsync(metodoEntregaPage);
                });
            };
            return(carrinhoPage);
        }