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 9 ans 11 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 9 ans 11 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 9 ans 11 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 9 ans 11 mois - il y a 9 ans 11 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 9 ans 11 mois par philippet.

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

Plus d'informations
il y a 9 ans 11 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.