deivisonarthur / OSC-Magento-Brasil-6-Pro

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

Forçar reload ao selecionar cartão #36

Open Alecostantini opened 10 years ago

Alecostantini commented 10 years ago

Prezados, estamos com um problema.

Quando selecionamos a opção boleto, o Review é carregado novamente e o valor do desconto configurado também.

Para quando alternamos para cartão de crédito, o desconto do boleto permanece e não ocorre o reload do Review.

Como fazemos para forçar este reload no ato de selecionar o cartão de crédito, da mesmo forma como ocorre com o boleto?

Obrigado.

rtorresjunior commented 10 years ago

@Fertusco

eu tive esse mesmo problema, e comentei com o Deivison, o que acontece é que por padrão o magento ele faz o reload do review somente após vc preencher os dados do cartão, onde ele faz a validação e faz o reload no review. É padrão do magento isso, portanto, acho que uma alternativa seria colocar um aviso, ou algo do tipo...

Abraço

Alecostantini commented 10 years ago

Boa noite @rtorresjunior

Na verdade não é padrão do Magento e sim do módulo OneStepCheckout desenvolvido pela Deivison, pois um de seus clientes precisam capturar os dados do cartão anteriormente ao reload para ver se estão elegíveis ao desconto pagando em 1x.

É uma funcionalidade customizável, mas não estamos achando o Event que dispara a atualização do Review quando selecionado a forma Cartão de Crédito.

Espero que consigamos suporte por aqui, mas caso eu descubra solução, postarei aqui no Git antes de marcar como resolvido.

Abraços

rtorresjunior commented 10 years ago

@Fertusco entendi brother...

se voce conseguir resolver passa aqui pro pessoal que é uma atualização muito importante...

Valeu irmao

isaaclopes commented 9 years ago

Ola isso não é no modulo do OSC .

Ele verifica os campos obrigatórios, no caso dos cartão é obrigatório ( SEU MODULO DE PAGAMENTO ), então ele não da reload!

O que você precisa fazer é: em jQuery / Javascript / Prototype ao clicar no tipo Cartão remover todas as validação de obrigatoriedade da class do input do cartão.

PS. se seu modulo de pagamento estiver se estendendo para classe "Mage_Payment_Model_Method_Cc" e ou a função "public function validate()" estiver validando os campos digitados , verifique primeiro a função se não o JS NÃO IRA FUNCIONAR.

ex. de jQuery que estamos usando em produção!

jQuery('input[name="payment[method]"]').on('click', function () { jQuery('#SEU_CODE_cc_type').removeClass('required-entry validate-cc-type-select'); jQuery('#SEU_CODE_cc_number').removeClass('validate-cc-number validate-cc-type'); jQuery('#SEU_CODE_cc_owner').removeClass('required-entry'); jQuery('#SEU_CODE_expiration').removeClass('validate-cc-exp required-entry'); jQuery('#SEU_CODE_expiration_yr').removeClass('required-entry'); jQuery('#SEU_CODE_cc_cid').removeClass('cvv required-entry validate-cc-cvn');

if (this.value == 'SEU_CODE') {
    setInterval(function () {

        jQuery('#SEU_CODE_cc_type').addClass('required-entry validate-cc-type-select');
        jQuery('#SEU_CODE_cc_number').addClass('validate-cc-number validate-cc-type');
        jQuery('#SEU_CODE_cc_owner').addClass('required-entry');
        jQuery('#SEU_CODE_expiration').addClass('validate-cc-exp required-entry');
        jQuery('#SEU_CODE_expiration_yr').addClass('required-entry');
        jQuery('#SEU_CODE_cc_cid').addClass('cvv required-entry validate-cc-cvn');
    }, 3000);
}

});

malaguttis commented 9 years ago

Não seria interessante incluir uma opção na administração do módulo para efetuar ou não o reload ao selecionar o método de pagamento.

Litiano commented 9 years ago

Estou com o mesmo problema, e não entendo nada de JQuery e JavaScript. Eu entendi que o reload só é feito após preencher todos os campos. Não seria melhor colocar o reload pra ser feito ao trocar a forma de pagamento, mesmo sem ela está preenchida? Se eu usar o código acima para remover a validação, o campo deixará de ser obrigatório e prejudicara na finalização da compra?

Desde já agradeço.

deivisonarthur commented 9 years ago

Brother as solicitações sobre adicionar melhorias são intensas, porém não temos tempo hábil para tocar os projetos open source, assim peço a contribuição da comunidade para implementar. Nós temos varias exclusividades e demandas para nossos clientes, mas não alinhamos o que temos open. Se tiver como enviar as melhorias nos avaliamos e autorizamos no git.


Atenciosamente

Deivison Arthur L. Serpa Founder & CEO Inovarti - Soluções Avançadas em E-commerce

Cel: (21) 99203-8986 Skype: deivisonarthur

sites e blog:

"A Inovarti http://www.inovarti.com.br/ é uma empresa que aspira inovação e para nós o full acompanhamento tecnológico garante a evolução e crescimento de nossos clientes. Alinhamos nossa exclusiva qualidade diferenciada com as melhores parceiras tecnológica do mercado."

"É melhor esperar que um programador produtivo torne-se disponível do que esperar que o primeiro programador disponível torne-se produtivo!"

Em 10 de dezembro de 2014 15:43, Litiano notifications@github.com escreveu:

Estou com o mesmo problema, e não entendo nada de JQuery e JavaScript. Eu entendi que o reload só é feito após preencher todos os campos. Não seria melhor colocar o reload pra ser feito ao trocar a forma de pagamento, mesmo sem ela está preenchida? Se eu usar o código acima para remover a validação, o campo deixará de ser obrigatório e prejudicara na finalização da compra?

Desde já agradeço.

Reply to this email directly or view it on GitHub https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/issues/36#issuecomment-66491602 .

eneiasramos commented 9 years ago

Caros, estou usando o seguinte código para forçar o reload na mudança de opções de pagamento:

app/design/frontend/base/default/template/onestepcheckout/onestep/form/payment_method.phtml:

jQuery("input[name='payment[method]']").click(function (){ OSCPayment.switchToMethod(); });

Foi útil pois estávamos usando descontos em 1 método e precisávamos do reload ao clicar em outro...

Abraços!

Litiano commented 9 years ago

Tentei seu código, mas no meu caso ficou sem carregar os campos de cartão de crédito.

fainohub commented 9 years ago

Olá, alguém teve uma solução??

Isaac Lopes, não entendi o que se deve fazer quando o módulo de pagamento estende para a classe "Mage_Payment_Model_Method_Cc". Fiz como você mostrou ali, removendo a validação dos campos, mas como meu módulo estende desta classe do magento, realmente não funcionou. Você pode me dar uma dica de como resolver isto?

Obrigado!

ghost commented 9 years ago

Atualização:

app/design/frontend/base/default/template/onestepcheckout/onestep/form/payment_method.phtml:

Final do arquivo:

jQuery("input[name='payment[method]']").click(function (event){
// event.preventDefault();
var _code = jQuery(this).val();
OSCPayment.switchToMethod();
OSCPayment.switchToMethod(_code);
});

Abraços!

roneclay-zz commented 9 years ago

@neneias Valeu.

Não posso reclamar deste módulo por ser gratuito, mas esta nova versão está meio capenga, mas mesmo assim é melhor que a antiga.

Acredito que devamos contribuir mais pro módulo, como mencionado pelo @deivisonarthur .

@neneias você enviou esta dica para o repositório?

O único problema é: O reload acontece, mas os valores não são atualizados, pois a forma de pagamento não é atualizada :(

roneclay-zz commented 9 years ago

No módulo antigo bastava:

jQuery("#method_x").click(function() { checkout.update({ 'review': 1, 'payment-method': 1 }); });

E pronto... na vesão 6 nao achei nada similar.

ghost commented 9 years ago

Olá @roneclay ! Tudo bem ?

Nos testes que fiz em um cliente funcionou bem... mas vou testar mais... :)

Vou enviar a dica para o repositório.

Abçs!

isaaclopes commented 9 years ago

acabei de fazer um comit. PS. vale lembrar que se no seu modulo de pagamento contiver a função https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L83

vai ter problema https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/issues/36#issuecomment-65133830 pois dar o reload é simples, o que precisa ser executado é o salvar!. pode usar como @eneiasramos comentou jQuery("input[name='payment[method]']").click(function (){ OSCPayment.forcesavePayment(); });

ou um metodo especifico.

$$('input[name="payment[method]"]').find(function(radio) { Event.observe(radio, 'change', function() { if(radio.value == 'SEUMETODODODEPAGAMENTO') { OSCPayment.forcesavePayment(); } }); });

roneclay-zz commented 9 years ago

@isaaclopes eu devo está falhando em algum ponto.

<script>
    jQuery(document).ready(function(event){
        $$('input[name="payment[method]"]').find(function(radio) {
            Event.observe(radio, 'change', function() {
                var _code = jQuery(this).val();
                if(radio.value == _code) {
                    OSCPayment.switchToMethod(_code);
                    OSCPayment.forcesavePayment();
                }
            });
        });
    });
</script>

Não tive sucesso. O resumo atualiza, mas o JSON retorna "Não é possível definir forma de pagamento." e com isso o método de pagamento não muda.

PS - Uso o módulo do Mercado Pago do Gabriel Matsuoka v2.0.0.

isaaclopes commented 9 years ago

@roneclay então justamente o que disse em https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L83 o reload não depende apenas da OSC.

Porque não da reload? https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/blob/master/skin/frontend/base/default/onestepcheckout/js/payment.js#L206 ele verifica se os campos do seu pagamento esta validado!

O que foi incluido? https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/blob/master/skin/frontend/base/default/onestepcheckout/js/payment.js#L177 Força a salvar.

Porque da mensagem "Não é possível definir forma de pagamento." ? https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L152

PS. se seu modulo de pagamento estiver se estendendo para classe "Mage_Payment_Model_Method_Cc" https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L28 e ou a função "public function validate()" https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L83estiver validando os campos digitados. NÃO IRA FUNCIONAR.

sobre o seu script não deu erro de js?

davirs commented 9 years ago

funciona o auto reload mas com um detalhe. você tem que obrigatoriamente mexer em todas os campos, inclusive nas parcelas. se você quer comprar com 1 parcela, que já é predefinido e não for lá manualmente e re-selecionar esta parcela o módulo não atualiza...

eu acho que na verdade o script para forçar o reaload tem que ser disparado no campo código de segurança e não nas parcelas...

isaaclopes commented 9 years ago

ola @davirs mas vc quem coloca onde quer!

exemplo funcionando em producao, no modulo de pagamento que utilizo, não na OSC.

arquivo, cc.phtml

//ao clicar na opção de pagamento $$('input[name="payment[method]"]').find(function(radio) { Event.observe(radio, 'change', function() { if(radio.value == '<?php echo $_code ?>') { //limpar os campos do cartao var block = 'paymentform' + radio.value; [block].each(function(el) { var element = $(el); if (element) { element.select('input', 'select').each(function(field) { field.value = ''; }); } }); //força o salvar ignorando validate de JS "required-entry" e outros OSCPayment.forcesavePayment(); } });

});

o restante fica normal se vc "mexer em todos os campo" tirando a obrigatoriedade ele sempre vai ficar dando reload a cada campo, pois os campos serão validado!

giga4 commented 9 years ago

Galera eu entendi q o problema esta no meu módulo (no caso uso o Mundipagg da uecommerce que eles me mandaram). Mas onde devo mexer pra resolver o problema, alguém faz idéia.?.. vlw

CarlosScarpato commented 9 years ago

Eu sei que é uma solução porca, mas bem porca, porém, por enquanto, até eu conseguir melhorar, funcionou. o único problema é que faz um reload na página toda.

alterei o arquivo: app/design/frontend/base/default/template/onestepcheckout/onestep/form/shipping_method.phtml

criei nos scripts uma função: function reloadPage(){ location.reload(); } (eu sei, como eu disse é uma solução porca)

e nos inputs, radio, chamo essa função por onclick="reloadPage();"

é lógico, vai demorar ... mas resolve o problema momentaneamente.

Estou usando o tema rwd para estudos.

abs

(obs: se alguém tiver alguma outra ideia .... pra melhorar esse remendo.. .. eu agradeço)

ghost commented 8 years ago

Caros,

disponibilizei alguns ajustes para os problemas de reload:

https://github.com/eneiasramos/OSC-Magento-Brasil-6-Pro/

Abçs!

magnored commented 8 years ago

@neneias Cara agradeço muito a ajuda...mas ainda nao deu certo pra mim ...estou usando o modulo do pagseguro do rmartins Caso queria testar no meu ambiente é só falar que eu disponibilizo via Teamviewer

eneiasramos commented 8 years ago

@magnored você fez um clone do meu projeto? Tem URL da loja?

magnored commented 8 years ago

@neneias Sim, editei todos os arquivos Verifique em www.fprinter.com.br/loja se quiser me chamar no skype tbm estou online: rodrigo.dizero@gmail.com

eneiasramos commented 8 years ago

@magnored preciso que desabilite o merge de JS e compilação de PHP...

magnored commented 8 years ago

@neneias Feito, compilação desativada e unir o JS tbm

eneiasramos commented 8 years ago

@magnored ao que parece está funcionando: quando altero o frete ele atualiza o pagamento... pode testar aí?

magnored commented 8 years ago

@neneias image Quando eu altero o frete ele ja teria que dar o desconto de 5% no TEF ou Boleto, pra mim ainda nao esta atualizando... To usando o chrome, sera que seria um problema de cache ?

eneiasramos commented 8 years ago

@magnored eu consegui aqui... estou usando o Firefox. fast-printer-osc-desconto-boleto

magnored commented 8 years ago

@neneias Quando voce clica no cartao tbm?

magnored commented 8 years ago

@neneias aparentemente era problema com meu cache mesmo Estou testando agora e deu tudo certo!!

eneiasramos commented 8 years ago

@magnored você tem um erro no seu checkout que precisa ser corrigido:

fast-printer-osc-erro

E sua regra de desconto está para todos os tipos de cartões!

fainohub commented 8 years ago

Demais @neneias!! Funcionou perfeitamente!! Nossa, muito obrigado mesmo :+1:

Apenas o meu cadastro de novos clientes que parou de funcionar, não sei se foi por causa dessa modificação ou outra coisa que mexi na loja...

magnored commented 8 years ago

@neneias no modulo do ricardo nao existe a possibilidade de colocar o desconto para somente um tipo de cartao, entao esta geral mesmo (e pra mim tem que ser assim) Referente ao erro eu vi que é algum bug do tema, estou tentando ver se descubro o que é

magnored commented 8 years ago

@neneias conseguir arrumar o bug do JS... Mas acho que ainda nao esta 100% image Simulei uma opcao na ql eu primeiro cliquei em boleto e seguida cliquei em cartao. Voce pode ver que no total ele atualizou, mas no plugin do ricardo o valor esta com o desconto e quando eu tento concluir a compra ele informa a divergencia nos valores

lucassdoliveira commented 8 years ago

@eneiasramos @neneias Boa tarde.

Fiz o procedimento e instalei novamente o módulo utilizando suas atualizações, porem continua com o mesmo problema.

O módulo que utilizo para pagamento com cartão de crédito CIELO é o módulo Oitoo.

Acho que já tentei toda as opções apresentadas aqui, porem continuo com o mesmo problema.

AndreFSilveira commented 8 years ago

No meu caso, cuido de uma loja onde existem regras de desconto diferenciados para o boleto(CushyBoleto) e para cartão de crédito(Maxima). Estava com o mesmo problema passei semanas pesquisando, e 'resolvi' o problema com uma pequeno ajuste técnico (gambiarra).

*No arquivo - SUA-LOJA/skin/frontend/base/default/onestepcheckout/js/shipment.js

*No Arquivo - SUA-LOJA/skin/frontend/base/default/onestepcheckout/js/payment.js

-Após a função de update " OnestepcheckoutCore.updater.startRequest(this.savePaymentUrl, { method: 'post', parameters: Form.serialize(this.container, true) });" - inseri a "gambiarra"

"if (jQuery('input[name="shipping_method"]:checked').length > 0){ jQuery('input[name="shipping_method"]:checked').click(); }else{ jQuery('input[name="shipping_method"]').first().click(); }"

Ou seja após ser selecionado o método de pagamento eu fiz com q o onestepcheckout faça uma atualização dos valores do frete, dessa maneira ele atualiza também os valores conforme o método de pagamento.

Espero ter ajudado.

filimm commented 8 years ago

@AndreFSilveira Cara, eu coloquei assim:

/**if (!isValid) {
            return;
        }**/
        OnestepcheckoutCore.updater.startRequest(this.savePaymentUrl, {
            method: 'post',
            parameters: Form.serialize(this.container.id, true)
        });

        if (jQuery('input[name="shipping_method"]:checked').length > 0){
jQuery('input[name="shipping_method"]:checked').click();
}else{
jQuery('input[name="shipping_method"]').first().click();
}

É isso mesmo?

Aqui não deu jeito algum.

Aliás, @eneiasramos Baixei a sua versão no seu git e continua a mesma coisa.

Se eu escolho boleto ele dá o desconto, mas se por ventura eu voltar para outro método de pagamento ele continua dando o desconto, não recalcula.

Se alguém puder me dar uma luz eu agradeço muito! A loja que estou trabalhando está em http://cfcareho.nextmp.net

Abraços!

eneiasramos commented 8 years ago

Olá @filimm ! Tudo bem?

Pode haver alguma inconsistência no seu template. Vide erros JS encontrados:

cfcareho-osc-teste-desconto

filimm commented 8 years ago

@eneiasramos obrigado pelo retorno! Bem, alterei o tema para o RWD e o erro de JS continua ocorrendo. Acredito porque essa chamada seja do próprio OSC. É como se a forma de entrega não estivesse selecionada quando carregamos o checkout.

filimm commented 8 years ago

Então, fazendo uma verificação mais profunda eu entendi que esse erro de JS está dizendo que OSCShipment não foi definido. O script que se encontra no payment_method.phtml é:

<script type="text/javascript">
$$('input[name="payment[method]"]').each(function(item,index){
    Element.observe(item,'change',function(){
        // for Discount purpose...
        OSCPayment.forcesavePayment();
        //OSCShipment.switchToMethod(OSCShipment.currentMethod, true);
        OSCShipment.switchToMethod(OSCShipment.currentMethod, true);
    });
});
</script>

Esse método switchToMethodé referenciada no arquivo shipment.js com a criação da classe OnestepcheckoutShipment = Class.create();

No final desse arquivo shipment.js existe a referencia ao método que está dando erro:

switchToMethod: function(methodCode, forced = false) {
        if (this.currentMethod !== methodCode || forced) {
            OnestepcheckoutCore.updater.startRequest(this.saveShipmentUrl, {
                method: 'post',
                parameters: Form.serialize(this.container.id, true)
            });
            OSCShipment.currentMethod = this.currentMethod = methodCode;
        }
    }

A minha pergunta é como eu defindo uma classe OSCShipment dentro de payment_method.phtml para que a execução do método pode ser feita de forma correta?

eneiasramos commented 8 years ago

Olá @filimm ! Tudo bem?

A criação do objeto OSCShipment é feito no arquivo: https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/blob/master/app/design/frontend/base/default/template/onestepcheckout/onestep/form/shipping_method.phtml

Att,

filimm commented 8 years ago

Fala @eneiasramos . Conferi o arquivo que você citou e está exatamente igual ao que eu tenho. Agora, se é nesse arquivo que ele faz a criação do objeto, por que diabos ainda retorna o erro dizendo que esse objeto não foi definido ? É como se não estivesse trazendo essa informação para ser trabalhada pelo OSC.

isaaclopes commented 8 years ago

ola @filimm o bloqueio que esta tendo não é na OSC é no seu modulo de pagamento http://cloud.inovarti.com.br/0k1L1T0Z1A0Z ja explicado acima, é o mesmo que acontece com muitos módulos de pagamento https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/issues/36#issuecomment-93892071 , se reparar no print é o mesma frase

Porque da mensagem "Não é possível definir forma de pagamento." ? https://github.com/magento/hackathon_january_2014/blob/9676522b7883776c8dd5c750354d4a88f51168f7/app/code/core/Mage/Payment/Model/Method/Cc.php#L152

*informações porque quando seleciono cartão não limpa o desconto

filimm commented 8 years ago

Fala @isaaclopes beleza? Cara acho que o problema da forma de pagamento eu resolvi, mas ainda continuo com o problema da forma de entrega. Quando há apenas uma opção de entrega ele não finaliza o checkout, aparece uma janela exigindo que eu informe uma forma de entrega. O problema é que nesse caso, diferente dos Correios não tem outra opção para selecionar (ex: pac ou sedex) que faria um reload na página. Ele já vem com essa opção marcada e no entanto o sistema age como se não estivesse marcado.

filimm commented 8 years ago

Resolvi do modo português: Como a coisa só funciona quando você faz uma "escolha" eliminei o "checked" de quanto tiver apenas uma opção. Não sei se isso é a melhor prática, mas resolveu!

Em /app/design/frontend/base/default/template/onestepcheckout/onestep/form/shipping_method.phtml

Linha 36:

<?php if ($_sole) : ?>
<input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked"  class="radio"/>

Vai ficar assim:

<?php if ($_sole) : ?>
<input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" class="radio"/>

Explicando: isso obrigará o usuário a dar um clique na forma de entrega, mesmo que tenha apenas uma, quando ele der o clique haverá o reload e não dará mais o erro para "Informar forma de entrega"

isaaclopes commented 8 years ago

opa @filimm vc tem um erro de JS http://cloud.inovarti.com.br/3m3f160b121E sobre a linha 36 pode usar sem o check tb! / ou ao carregar simular um click

esta faltando um script no seu arquivo https://github.com/deivisonarthur/OSC-Magento-Brasil-6-Pro/blob/master/app/design/frontend/base/default/template/onestepcheckout/onestep/form/shipping_method.phtml#L56

filimm commented 8 years ago

@isaaclopes Fala ae. Cara, o arquivo que eu tenho é exatamente esse e o erro continua ocorrendo. Faz ideia do que possa ser isso? Pra mim essa erro está diretamente ligado ao fato da página não passar a informação da forma de entrega.

isaaclopes commented 8 years ago

@filimm acho que o base deve ser! mas sei layout não tem vc deve ter copiado ele e faltou essa parte.

o meu http://cloud.inovarti.com.br/3N3i370G2T2k o seu http://cloud.inovarti.com.br/2q1f0C3y2s3y realmente esta faltando no seu!

da uma olhada em /app/design/frontend/SEUTEMPLATE/default/template/onestepcheckout/onestep/form/shipping_method.phtml ou /app/design/frontend/base/default/SEUTEMPLATE/onestepcheckout/onestep/form/shipping_method.phtml