deivisonarthur / OSC-Magento-Brasil-6-Pro

One Step Checkout Brasil 6 Pro
75 stars 102 forks source link

Finalizar pedido bloqueado #159

Open leonambernini opened 9 years ago

leonambernini commented 9 years ago

Instalei o OSC no magento 1.9.2 limpo no tema rwd, quando fui testar ele funciona normalmente, deu um erro de JS na função de buscar o cep (jQuery.getScript(urlBase + "ajax/busca_cep?cep="+ cep + "", function() {) estava com as " erradas e o (var urlBase = window.location.href.slice(0, -6);) não estava setado no else, ai parou os erros, so que não habilita o botão FINALIZAR e não gera erro no console, apenas fica "Campos obrigatório" mesmo todos os campos estarem preenchidos.

rafaelstz commented 9 years ago

Já fiz à algum tempo um PR https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/pull/155

brunogemelli commented 9 years ago

@rafaelstz, estou com o mesmo erro do @leonambernini. Corrigi os erros no validation.js, mas o botão continua bloqueado. Console limpo aqui também ..

rafaelstz commented 9 years ago

Aplica essa correção que fiz para executar https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/pull/155

rafaelstz commented 9 years ago

@brunogemelli Olha a seleção no JS provavelmente está dando erro por utilizar :

FilipeSilvaCtba commented 9 years ago

@rafaelstz @brunogemelli Estou com o mesmo problema. Corrigi ja o erro #155 do ", o ajax agora está funcionando normal, porém após o cliente digitar o cep e se auto preencher o endereço e habilitar os meios de entrega, o botão finalizar passa a ficar cinza.

rafaelstz commented 9 years ago

@FilipeSilvaCtba o botão fica cinza até selecionar meio de entrega e de pagamento.

FilipeSilvaCtba commented 9 years ago

Olá @rafaelstz, na minha loja só tenho uma forma de pagamento, o pagseguro, então ele já vem selecionado por padrão, nem tem o radio button do lado dele pra selecionar, e quando clico no radio da forma de entrega que quero não habilita novamente o botão. Pelo que entendi era pra habilitar novamente o botão de entrega após eu clicar em uma das opções de entrega, mas não ta ocorrendo. Vou tentar investigar o porque! Grato pela atenção.

hansbonini commented 9 years ago

O problema esta na linha:

var urlBase = window.location.href.slice(0, -6);

No meu caso utilizo de url rewrites para colocar a url do carrinho em português impossibilitando o funcionamento adequado da função busca cep. A função slice remove os últimos 6 caracteres da url:

Original: http://exemplo.com/finalizar-compra/pagina-rapida/
Resultado da Variavel: http://exemplo.com/finalizar-compra/pagina-r/

Como citado acima, o problema nao foi apenas para o meu caso, a solução adequada foi trocar por uma função mais elaborada, que creio que sirva para todos os casos:

var regexURL = /(http:\/\/.*?\/.*?\/)/;
var urlBase = regexURL.exec(window.location.href).last();
FilipeSilvaCtba commented 9 years ago

@hansbonini @rafaelstz O que eu percebi é que em minha instalação o ajax não funcona quando eu seleciono um método de entrega, posso clicar em PAC ou SEDEX ou qualquer outro que o valor não atualiza do review ao lado. O que será que pode ser?

hansbonini commented 9 years ago

@FilipeSilvaCtba depois que resolvi o problema da URL do CEP. Me deparei com o mesmo problema. Ele nao executa o xhr que chama o SaveAddress para atualizar o carrinho. To tentando localizar o problema!


Uma versao mais antiga que tenho do OSC de 6 meses atras funciona perfeitamente no site. Entao creio que seja alguma modificacao nesse meio tempo.

hansbonini commented 9 years ago

Encontrei o problema que não permitia atualizar o review e liberar o botão de finalizar compra quando trocava de opção de método de envio.

@FilipeSilvaCtba, @rafaelstz, @leonambernini isso vai resolver nosso problema provisoriamente ate que eu elabore um fix melhor. Comentem as seguintes linhas no onestepcheckout.js.

    startRequest: function(url, options) {
        var action = this._getActionFromUrl(url);
        this.addActionBlocksToQueue(action);
        //if (this.currentRequest === null) {
            this.runRequest(url, options);
        //} else {
        //    this.requestQueue.push([url, options]);
        //}
    },

Sobre o problema: por algum motivo a fila de requisições esta travada, impossibilitando que elas sejam acionadas devidamente. @deivisonarthur, @isaaclopes pelo que entendi existe um timer que processa as requisições colocadas em fila. Saberiam me informar se houve alguma revisão recente no mesmo?

hansbonini commented 9 years ago

Avancei mais um pouco no debug e descobri que as filas de requisicoes (this.requestQueue) nao sao processadas devido a fila que remove os action blocks travar no reviewCart. Eu imaginava que o sistema possuia um timer para tratar a fila, mas depois entendi o processo.

O que acontece eh o seguinte:

   onRequestCompleteFn: function(transport) {
        try {
            var response = JSON.parse(transport.responseText.replace(/\n/g,""));
            console.log(response);
        } catch(e) {
            //error
            var response = {
                blocks: {}
            };
        }
        var action = this._getActionFromUrl(transport.request.url);
        console.log(action);

        this.removeActionBlocksFromQueue(action, response); // trava nessa função deixando de limpar a fila de requisições

        this.currentRequest = null;
        if (this.requestQueue.length > 0) {
            this._clearQueue();
            var args = this.requestQueue.shift();
            this.runRequest(args[0], args[1]);
        }

        // payment form reload fix
        OSCPayment.initObservers();
    },

Dentro da função removeActionBlocksFromQueue(), ao processar os quatro blocos {shipping_method, payment_method, review_cart, review_coupon), a função trava no bloco review_cart não retornando para a função onRequestCompleteFn para a limpeza da fila de requisições.

Mais especificamente nessa chamada da funcao removeActionBlocksFromQueue trava tudo, o bloco review_coupon fica por ser processado e nao tem o retorno pra limpeza da fila de requisições:

                    if ("removeActionBlocksFromQueueAfterFn" in me.blocks[blockName]) {
                         me.blocks[blockName].removeActionBlocksFromQueueAfterFn(response);
                    }
hansbonini commented 9 years ago

Coloquei o layout original e funcionou adequadamente, continuo procurando esse erro que parece afetar apenas layouts modificados do checkout.

JuanxCursed commented 8 years ago

Boa tarde pessoal, estou me deparando com o mesmo problema. O botão "Finalizar Pedido" ficar com o atributo disable, removendo esse atributo ele passa a fazer a validação mas ainda retorna um erro via alert, com a seguinte informação "Informe uma forma de entrega", e o console totalmente limpo. ja tentei todas as soluções acima, mas nada, eu uso o tema rwd, sem alteração nenhuma na tela de checkout. Na versão que eu fiz o download do OSC6 já tinha sido corrigido a issue #155 Alguma ideia de como resolver o problema?

hansbonini commented 8 years ago

@juanmonstra primeiro apague a pasta toda em app/design/frontend/rwd/default/template/onestepcheckout/ depois re-instale

hansbonini commented 8 years ago

Outra coisa, continuo recomendando um commit por parte do time do módulo pra trocar o slice por regex na variavel baseUrl

https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/issues/159#issuecomment-152609118

Chicodarave commented 8 years ago

Prezados, alguma solução definitiva para esse problema? Estou tendo ele, está impossibilitando o uso :( Magento 1.9.2.2 (instalação nova, só foi traduzida e instalado o OSC 6, tema RWD). Corrigi o problema de validação de e-mail, CPF e CEP como instruído pelo pessoal aqui no GitHub. validation.js alterei a linha 166 para "jQuery.getScript("/magento/index.php/onestepcheckout/ajax/busca_cep?cep="+ cep + "", function() {"

Obrigado!

Wnicolak commented 8 years ago

Há uma semana atrás fiz uma instalação limpa 1.9.2.2 com o tema RWD padrão, e utilizei o módulo disponível aqui do Github (Latest commit 3c4dc09 on 7 Dec 2015). Encontrei o mesmo problema do Botão finalizar compra bloqueado.

Específico para o tema RWD. Comparei os arquivos com uma versão mais antiga do OSC 6, que está em funcionamento, e percebi que faltava a pasta /js/onestepcheckout na raiz do magento, então simplesmente transferi (recortei) a pasta /skin/frontend/base/default/onestepcheckout/js para /js/onestepcheckout/js.

Atualizei o cache do navegador, voltaram todas as verificações js, CEP, CPF/CNPJ, as máscaras nos campos telefone, que inicialmente não funcionaram.

Tema modificado com base no RWD. Fiz uma nova instalação da mesma forma com os mesmos arquivos, mas modifiquei o tema RWD, criei uma nova pasta com nome /temanovo (skin e app). Então, novamente encontrei o problema do botão finalizar compra.

Tentei fazer da mesma forma que o exemplo acima, mas não funcionou. Então, excluí a pasta /js/onestepcheckout/js, da raiz do magento.

Fiz uma cópia da pasta /app/design/frontend/RWD/default/template/onestepcheckout, para meu novo tema : /app/design/frontend/TEMANOVO/default/template/onestepcheckout

E também de: /app/design/frontend/RWD/default/template/onestepcheckout para: l/app/design/frontend/TEMANOVO/default/template/onestepcheckout

E todas as validações voltaram, e o botão finalizar compra está disponível.

Nas duas situações não fiz qualquer alteração em qualquer arquivo, e o tema novo é uma cópia do tema padrão RWD.

kayobruno commented 8 years ago

Alguém conseguiu resolver o problema? Consegui resolver o bug no calcular frete que ficava travado, seguindo o que foi informado pelo @hansbonini Também resolveu o problema que não atualizava os valores quando era alterado o método de entrega, mas o botão do checkout continua disabled.

JuanxCursed commented 8 years ago

@hansbonini e @Wnicolak, eu testei as suas sugestões, reinstalar não mudou nada, copiar os arquivos também não funcionou, pelo menos não jogando para {BASE}/js/onestepcheckout, mas quando eu coloquei nas 3 pastas {BASE}/js, tema base e tema rwd, funcionou o botão, porem agora o ajax do CEP não funciona mais, e o layout virou uma bagunça, isso é o de menos e é fácil de arrumar, mas vcs teriam alguma ideia do que pode estar "bugando" a busca pelo CEP?

Wnicolak commented 8 years ago

Caro Juan! Inicialmente a solução funcionou para os clientes cadastrados. Mas outros problemas surgiram com a "solução". Atualizei o Magento para última versão, e estou usando o checkout padrão, sem validações e sem máscaras. Está ruim, mas voltou a converter. Desculpe não poder ajudar neste momento. (http://goo.gl/ukLK5o)

wyllyan commented 8 years ago

O problema com o botão “Finalizar” no RWD está associado à ausência de um elemento no arquivo de template onestep.phtml. O form.js tenta atualizá-lo, mas não encontra. A PR #222 corrige isso.

rafaelstz commented 8 years ago

Boa @wyllyan

isaaclopes commented 8 years ago

Obrigado feito o merge

FilipeSilvaCtba commented 8 years ago

Excelente @wyllyan, obrigado!

daviassumpcao commented 8 years ago

Aí você falou hein @wyllyan .. valeu demais