Sergio Pernas Posted August 14, 2020 Share Posted August 14, 2020 (edited) Hola! Estoy ultimando una tienda y el cliente quiere obligar a que las direcciones de envío y facturación estén en el mismo país. Estoy en 1.7.6.2. ¿Cómo se podría hacer? ¿Alguna idea? Gracias, Sergio Edited August 14, 2020 by Sergio Pernas versión (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted August 14, 2020 Share Posted August 14, 2020 Puedes usar los hooks actionSubmitCustomerAddressForm o actionValidateCustomerAddressForm para comprobar las direcciones antes de guardarlas y emitir un error si no cumplen lo que necesitas. También se me ocurre que, en el formulario de creación de direcciones de envío nuevas, establezcas el campo "país" en el mismo valor que el cliente tenga puesto en la dirección de facturación y lo deshabilites u ocultes para que el cliente no pueda cambiarlo. O hacer un override del método "makeAddressForm" de la clase FormController y filtrar ahí los países si se requiere antes de cargar el formulario para crear una dirección nueva. Link to comment Share on other sites More sharing options...
Sergio Pernas Posted August 14, 2020 Author Share Posted August 14, 2020 Estoy tomando el camino de hacerlo en javascript, porque los clientes pueden tener direcciones de diferentes países al mismo tiempo. Estoy teniendo algunos problemas con la consistencia entre los dos grupos de botones de radio, la verdad. Si alguien puede echarle un ojo al código, genial, porque yo creo que ya no lo estoy viendo, y mantener la consistencia entre dos grupos de botones tampoco es tan difícl 😅 {assign "paises" []} {foreach $customer.addresses as $address key="clavePaises" name="buclePaises"} {$paises[$smarty.foreach.buclePaises.index] = [$address.id,$address.country]} {/foreach} <script> window.onload = function() { $(document).ready(function() { var paises = "{$paises|@json_encode}"; var paisesString = paises.replace(/"/g,'"'); var paisesok = new Array(); paisesok = JSON.parse(paisesString); var paisInvoice = ""; var paisDelivery = ""; var invoice = ""; var delivery = ""; var resultadoComparacion = true; invoice = "" + $('input[type=radio][name=id_address_invoice]').val(); delivery = "" + $('input[type=radio][name=id_address_delivery]').val(); console.log("invoice " + invoice + " delivery " + delivery); $('input[type=radio][name=id_address_invoice]').change(function() { //comparamos los ids de las direcciones de envío y facturación if (this.value == $('input[type=radio][name=id_address_delivery]').val()) { // todo va bien, son la misma dirección, así que tienen el mismo país invoice = "" + this.value; resultadoComparacion = true; } else { //son diferentes invoice = "" + this.value; resultadoComparacion = false; paisesok.forEach(funcionPaises); function funcionPaises(paisUnico) { console.log("bucle en invoice - invoice " + invoice + " delivery " + delivery); if (paisUnico[0]==invoice) { paisInvoice = paisUnico[1]; }; if (paisUnico[0]==delivery) { paisDelivery = paisUnico[1]; }; }; } if (resultadoComparacion) { console.log("todo bien") } else { if (paisDelivery==paisInvoice) { console.log("todo bien tb") } else { console.log("no hija no") } } console.log("invoice " + invoice + " delivery " + delivery); }); $('input[type=radio][name=id_address_delivery]').change(function() { //comparamos los ids de las direcciones de envío y facturación if (this.value == $('input[type=radio][name=id_address_invoice]').val()) { // todo va bien, son la misma dirección, así que tienen el mismo país delivery = "" + this.value; resultadoComparacion = true; } else { //son diferentes delivery = "" + this.value; resultadoComparacion = false; paisesok.forEach(funcionPaises); function funcionPaises(paisUnico) { console.log("bucle en delivery - invoice " + invoice + " delivery " + delivery); if (paisUnico[0]==invoice) { paisInvoice = paisUnico[1]; }; if (paisUnico[0]==delivery) { paisDelivery = paisUnico[1]; }; }; } if (resultadoComparacion) { console.log("todo bien") } else { if (paisDelivery==paisInvoice) { console.log("todo bien tb") } else { console.log("no hija no") } } console.log("invoice " + invoice + " delivery " + delivery); }); }); } </script> Gracias, Sergio Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now