En visitant ce site, vous acceptez l'utilisation de cookies afin de vous proposer les meilleurs services possibles.

    la même Commande en doublon, dupliquées, duplicate order, en même temps

    Plus d'informations
    il y a 10 ans 5 mois #1 par philippet
    Hello,

    J'ai un gros challenge avec VirtueMart 3.0.16 + joomla3.5.1

    J'ai un site qui génère beaucoup de commandes.

    Mais par moment, je me retrouve avec des commandes en doublon

    la même commande est créée en double avec le même temps de création à la seconde prés même produit même user
    mais numéros de commande différentes qui se suivent.

    J'ai déjà eu ce problème sur VM1, j'ai pas vraiment réussi à trouver la cause. Et dans VM1 j'avais mis une rustine qui contrôlait si le temps de création de la commande précédente était le même si c'est cela = pas de génération d'une deuxiéme commande.

    voici ce que j'utilisais pour palier à ce problème, au vm1 de lépoque dans \components\com_virtuemart\themes\pbv_gadgets\user_class\ps_checkout.php
    //test doublon
    $q = "SELECT * FROM #__{vm}_orders WHERE user_id = '".$auth["user_id"]."' AND order_number = '".$fields['order_number']."' AND cdate = '".$fields['cdate']."' ";
    $db->query($q);
    $result = $db->next_record();
    if(!$result){
    
    		// Insert the main order information
    		$db->buildQuery( 'INSERT', '#__{vm}_orders', $fields );
    		$result = $db->query();


    j'ai beau chercher des solutions via gogol y a:
    stackoverflow.com/questions/28829987/vir...art-duplicate-orders
    forum.virtuemart.net/index.php?topic=122883.0

    Avez-vous rencontré cela? comment analyser? d'où ca peut venir? une solution?

    A quel moment, a quel endroit des fonctions je peut mettre un contrôle, style VM1 précédent, avant une génération de commande?

    a+,
    philippet

    Connexion ou Créer un compte pour participer à la conversation.

    Plus d'informations
    il y a 10 ans 5 mois #2 par philippet
    Bonjour,

    j'ai passé pas mal de temps à comprendre pourquoi j'ai des commandes ,emails de confirmations, logs, en double, en duplicate 100%.
    exactement le même temps. sauf numéros de commande différentes. virtuemart_order_id différents. de 1 incrémentation.

    Avec un editeur de débugging (style eclipse) j'ai réussi à simuler cela.

    bizarrement, dans la page panier au moment de confirmer, j'ai 2 applications qui se lancent en parallèle.
    Dés le lancement du débuggage, la page index de joomla se lance 2 fois !? pourquoi? comment este-ce possible?
    Quel est la cause qui peut créer cela? le browser utilisé internet explorer.
    Si vous avez une idée, welcome.

    je continue mes recherches.

    a +
    philippet

    Connexion ou Créer un compte pour participer à la conversation.

    • studio42
    • Portrait de studio42
    • Hors Ligne
    • Modérateur
    • Modérateur
    • Dev Joomla & Virtuemart
    Plus d'informations
    il y a 10 ans 5 mois #3 par studio42
    Y a ptête le bouton qui a 2 événement(cliques) vérifiez avec google chrome dans le debugger(F12), onglet >Elements et dans les onglets secondaires > jQuery audit.
    Dans la liste : Events donne tous les événements associés à ce click.
    Mais bon, j'y crois moyen.

    www.st42.fr Truc et astuce Joomla et virtuemart
    shop.st42.fr téléchargement Joomla et extension pour virtuemart
    Gratuit ! Nettoyage des medias : shop.st42.fr/fr/produits/virtuemart-netoyage-des-medias.htm Nouveau!

    Connexion ou Créer un compte pour participer à la conversation.

    Plus d'informations
    il y a 10 ans 5 mois - il y a 10 ans 5 mois #4 par philippet
    bonjour studio42,

    merci pour l'astuce.
    j'ai testé le debugger de chrome et ajouté l extension jQuery audit de chrome .

    voici en capture je vois un seul event sur le button "confirmer la commande"



    J'ai remarqué que ça peut-être dû à mon template ou ya un override de /templates/mytemplate/html/com_virtuemart/cart
    quand je fais un test avec le template protostar qui n'a pas de override j'ai pas de doublon
    Mais sur mon template, je n'arrive pas à trouver la cause.
    bizarrement, la majorité des doublons viennent des clients qui utilise internet explorer.

    Une autre idée, svp?

    a+
    philippet
    Dernière édition: il y a 10 ans 5 mois par philippet.

    Connexion ou Créer un compte pour participer à la conversation.

    Plus d'informations
    il y a 10 ans 5 mois #5 par philippet
    Hello,

    Je penses avoir trouver la cause. :silly: :woohoo:
    Merci too much studio42 pour l'orientation. :silly:

    Enfait, quand on copie le tpl de /components/com_virtuemart/views/cart/tmpl/default.php
    vers son template perso /templates/templateperso/html/com_virtuemart/cart/default.php

    gros piège on copie aussi les fonctions ajax du script default.php

    ici les lignes
    if(VmConfig::get('oncheckout_ajax',false)){
    	vmJsApi::addJScript('updDynamicListeners',"
    if (typeof Virtuemart.containerSelector === 'undefined') Virtuemart.containerSelector = '#cart-view';
    if (typeof Virtuemart.container === 'undefined') Virtuemart.container = jQuery(Virtuemart.containerSelector);
    
    jQuery(document).ready(function() {
    	if (Virtuemart.container)
    		Virtuemart.updDynFormListeners();
    }); ");
    }
    
    
    vmJsApi::addJScript('vm.checkoutFormSubmit',"
    Virtuemart.bCheckoutButton = function(e) {
    	e.preventDefault();
    	jQuery(this).vm2front('startVmLoading');
    	jQuery(this).attr('disabled', 'true');
    	jQuery(this).removeClass( 'vm-button-correct' );
    	jQuery(this).addClass( 'vm-button' );
    	jQuery(this).fadeIn( 400 );
    	var name = jQuery(this).attr('name');
    	var div = '<input name=\"'+name+'\" value=\"1\" type=\"hidden\">';
    
    	jQuery('#checkoutForm').append(div);
    	//Virtuemart.updForm();
    	jQuery('#checkoutForm').submit();
    }
    jQuery(document).ready(function($) {
    	jQuery(this).vm2front('stopVmLoading');
    	var el = jQuery('#checkoutFormSubmit');
    	el.unbind('click dblclick');
    	el.on('click dblclick',Virtuemart.bCheckoutButton);
    });
    	");
    
    if( !VmConfig::get('oncheckout_ajax',false)) {
    	vmJsApi::addJScript('vm.STisBT',"
    		jQuery(document).ready(function($) {
    
    			if ( $('#STsameAsBTjs').is(':checked') ) {
    				$('#output-shipto-display').hide();
    			} else {
    				$('#output-shipto-display').show();
    			}
    			$('#STsameAsBTjs').click(function(event) {
    				if($(this).is(':checked')){
    					$('#STsameAsBT').val('1') ;
    					$('#output-shipto-display').hide();
    				} else {
    					$('#STsameAsBT').val('0') ;
    					$('#output-shipto-display').show();
    				}
    				var form = jQuery('#checkoutFormSubmit');
    				form.submit();
    			});
    		});
    	");
    }
    
    $this->addCheckRequiredJs();
    echo vmJsApi::writeJS();

    supprimez-les ou commentez-les.

    strange comme c'est overridé ca devrait pas le faire 2 fois, why?

    à plus
    philippet

    Connexion ou Créer un compte pour participer à la conversation.