Jump to content

Direcciones de envío y facturación en el mismo país


Recommended Posts

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

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(/&quot;/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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...