Pedir DNI en el che...
 
Avisos
Vaciar todo

Pedir DNI en el checkout (Magento 2.3)

6 Respuestas
3 Usuarios
0 Me gustas
1,434 Visitas
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Hola,

estoy buscando como añadir el dni en el checkout cuando la comrpa sea superior a 400€. Encontre esta solucion:

[URL unfurl=true] https://www.factoriadigital.com/mgnt/threads/anadir-campo-cif-dni-para-cliente.2092/ [/URL]

Pero solo es aplicable cuando el usuario añade una nueva direccion o es invitado (porque es cuando se pide el campo) Que ocurre con un usuario ya logueado? Como le obligo a poner el dni en compras superiores a ese precio en la sección del checkout?

Alguien conoce alguna manera?

Gracias, un saludo!

 
Respondido : 14/04/2020 11:40 am
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

Hola bravo,

Como idea, se me ocurre que podrías poner un condicional que compruebe el subtotal de la compra y muestre el campo en cualquier paso que lo quisieras poner, no necesariamente en las direcciones.
Si además no necesitas validación de que sea un campo requerido, más fácil aún, ya que con que establezcas que el input tenga como nombre shipping_address[vat_id] (este dato te lo estoy dando de memoria, puede que el name sea distinto), debería aceptarlo como campo de la dirección.

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 14/04/2020 1:23 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Si, el campo seria requerido siempre que la compra sea +400. De tu propuesta entiendo que en el checkout deberia poner el input:

<input name="shipping_address[vat_id] " id="" value="".../>

Y esto lo reconoceria como el DNI y lo trataría en BD y demas una vez haga el submit?

 
Respondido : 14/04/2020 2:09 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

Sí, debería, ya que al final es un formulario AJAX y se procesa el quote con los parámetros recibidos por POST y ese input se mandará también al estar dentro del mismo formulario.

El input sería tal y como comentas, sí, siempre y cuando el name sea el correcto, que es del que te he comentado que te lo dije de memoria. Si quieres, compáralo con el de una nueva dirección o pedido de invitado, que ahí seguro que te queda más claro.

Al ser requerido, ya no sé si podrás validarlo siempre, aunque siempre puedes hacer uso de los validadores de formulario en frontend de Magento, poniendo un required-entry o similar como class del input, aunque sea.

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 14/04/2020 2:13 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

A ver, he procedido de otra manera. Mi intención es ocultar siempre el campo dni en el checkout y mostrarlo si la compra es superior a 400. Consigo recuperar el total de la compra y hago la correspondiente condición y funciona, siempre y cuando utilice un evento onclick de javascript.



<script >

function myFunction() {

document.getElementsByName("vat_id")[0].style.display='none';

document.getElementsByName("shippingAddress.vat_id")[0].style.display='none';

}

</script>

window.onload = myFunction;

Ese trozo (simplificado) me funciona siempre y cuando un boton tenga el evento onclick. Si veis tengo dos elementos que cojo (vad_id) y (shippingAddress.vat_id).

El de vad_id es uno que yo puse para ver si podia mostrarlo y ocultarlo. Una vez que funcionaba probe con el del formulario del checkout, el segundo. Bien pues funcionan con onclick. Pero quiero que esto funcione cargandose la pagina asi que utilizo: window.onload = myFunction;

En este caso me oculta de primera hora mi campo llamado vat_name pero el del formulario del checkout(shippingAddress.vat_id) no se oculta. Y esta correcto porque como digo con onclick funciona... Creo que tiene que ver algo mas con ajax o la manera que carga el formulario ( que no se como lo hace)

Todo este código lo estoy implementando en vendor/magento/module-checkout/view/frontend/templates/onepage.html

Aqui el código completo:

<?php

/**

* Copyright © Magento, Inc. All rights reserved.

* See COPYING.txt for license details.

*/


/** @var $block MagentoCheckoutBlockOnepage */

?>


<?php

//cogemos el total del carro

$objectManager = MagentoFrameworkAppObjectManager::getInstance();

$cart = $objectManager->get('MagentoCheckoutModelCart');

$grandTotal = $cart->getQuote()->getGrandTotal();

echo "total:".$grandTotal;


//si el total es mayor a x ocultamos campo VAT


if ($grandTotal>=10) {

?>

<button onclick ="myFunction()">Disable Text field</button>

<input name="vat_id" id="vat_id" value="..." />






<?php

}

elseif ($grandTotal<10) {

echo "no dni";

}

?>


<div id="checkout" data-bind="scope:'checkout'" class="checkout-container">

<div id="checkout-loader" data-role="checkout-loader" class="loading-mask" data-mage-init='{"checkoutLoader": {}}'>

<div class="loader">

<img src="<?= $block->escapeUrl($block->getViewFileUrl('images/loader-1.gif')) ?>"

alt="<?= $block->escapeHtmlAttr(__('Loading...')) ?>"

style="position: absolute;">

</div>

</div>

<!-- ko template: getTemplate() --><!-- /ko -->

<script type="text/x-magento-init">

{

"#checkout": {

"Magento_Ui/js/core/app": <?= /* @noEscape */ $block->getJsLayout() ?>

}

}

</script>

<script>

window.checkoutConfig = <?= /* @noEscape */ $block->getSerializedCheckoutConfig() ?>;

// Create aliases for customer.js model from customer module

window.isCustomerLoggedIn = window.checkoutConfig.isCustomerLoggedIn;

window.customerData = window.checkoutConfig.customerData;

// window.onload = myFunction;

</script>

<script >

function myFunction() {

document.getElementsByName("vat_id")[0].style.display='none';

document.getElementsByName("shippingAddress.vat_id")[0].style.display='none';

}



</script>

<script>

require([

'mage/url',

'Magento_Ui/js/block-loader'

], function(url, blockLoader) {

blockLoader("<?= $block->escapeJs($block->escapeUrl($block->getViewFileUrl('images/loader-1.gif'))) ?>");

return url.setBaseUrl('<?= $block->escapeJs($block->escapeUrl($block->getBaseUrl())) ?>');

})

window.onload = myFunction;

</script>


</div>

A ver si alguien me arroja luz y porque con windows.onload no me funciona

Gracia!

 
Respondido : 20/04/2020 11:16 am
(@josecruzchavez)
Respuestas: 9
Active Member
 

Creo más conveniente crear un plugin que te permita realizar una verificación cuando se actualice el precio, esto por el tema de los cupones o las reglas de carrito.
En el siguiente enlace te muestran como crear un plugin que se ejecuta después de que se actualice le precio
[URL unfurl=true] https://magento.stackexchange.com/questions/138531/magento-2-how-to-update-cart-after-cart-update-event-checkout-cart-update-ite [/URL]

Desarrollador Web especializado en comercio electrónico (Magento).
https://gestiondigitalweb.com | josecruz@gestiondigitalweb.com

 
Respondido : 22/04/2020 8:36 am