THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Bug stock

(10-02-2013 21:37:24)


Thélia 1.5.3.4

Lors qu'une commande est passée et que le paiement est effecuté par Paypal, le stock est déduit alors qu'on ne sait même pas si la personne à payé ou non.

Offline

#2 Re: Bug stock

(10-02-2013 21:46:04)


alesk wrote:

Thélia 1.5.3.4

Lors qu'une commande est passée et que le paiement est effecuté par Paypal, le stock est déduit alors qu'on ne sait même pas si la personne à payé ou non.

si comme tu l'écris le paiement est effectué par Paypal , la personne à donc payé ! Si tu veuxx dire par là que tu n'es pas certain que le paiement ne soit pas refusé par la suite , je ne vois pas à quel moment tu veux que le stock soit décraimenté

Offline

#3 Re: Bug stock

(10-02-2013 22:09:33)


Ce n'est pas un bug: c'est le fonctionnement par défaut des plugins de paiement. Il y a une methode pour changer ce comportement, en recherchant sur le forum tu devrais trouver (je n'ai pas le lien sous la main)


OpenStudio Toulouse

Offline

#4 Re: Bug stock

(06-10-2013 16:27:40)


J'ai le même problème!

Avez-vous trouvé la sotution SVP?

Offline

#5 Re: Bug stock

(20-10-2013 20:41:14)


Pour Paypal et CMCIC, mais surement aussi pour les autres modes de paiement, la commande monte lors du choix du moyen de paiement. L'article est déstocké et la commande passe en "non payé". Si le client change d'avis à ce moment, le restockage doit être fait manuellement en cochant annuler. Et même dans ce cas, la ligne reste en base de données pour rien.

Ma parade : ajouter un script de nettoyage au plugin Colissimo. Chaque visiteur qui clic sur Colissimo comme moyen de transport provoque le restockage des "non payé" de plus de 12 heures (pas les achats en cours) et la suppression de ces commandes de la base pour faire un peu de ménage. Ca ne s'applique qu'aux paiement sélectionnés ; ici Paypal et CMCIC. Donc, pas de soucis avec les chèques.

Colissimo.class.php :

	private function f_purge_nonpaye($pay)
		{
		if ($li = @mysqli_connect(THELIA_BD_HOST, THELIA_BD_LOGIN, THELIA_BD_PASSWORD, THELIA_BD_NOM))
			{
			// 1. ID articles (par vente) a restocker et ligne a SUPP
			$r = $li->query("SELECT R.id FROM venteprod R, commande C, modules M WHERE R.commande=C.id AND C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."'");
			// 2. Mise a jour du stock
			while ($id = $r->fetch_row())
				{ $li->query("UPDATE venteprod R, stock S, ventedeclidisp D, produit P SET S.valeur=S.valeur+R.quantite, P.stock=P.stock+R.quantite WHERE S.produit=P.id AND P.ref=R.ref AND S.declidisp=D.declidisp AND D.venteprod=R.id AND R.id='".$id[0]."'"); }
			// 3-V1. Changement de statut des commandes : bascule statut en annule : 5
			//$li->query("UPDATE commande C, modules M SET C.statut=5 WHERE C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."'");
			// 3-V2. Suppression des commandes en BDD (plusieurs tables)
			$li->query("DELETE FROM ventedeclidisp WHERE venteprod IN (SELECT R.id FROM venteprod R, commande C, modules M WHERE R.commande=C.id AND C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."')");
			$li->query("DELETE FROM venteadr WHERE id IN (SELECT C.adrfact FROM commande C, modules M WHERE C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."') OR id IN (SELECT C.adrlivr FROM commande C, modules M WHERE C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."')");
			$li->query("DELETE FROM venteprod WHERE commande IN (SELECT C.id FROM commande C, modules M WHERE C.statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(C.date))>43200 AND C.paiement=M.id AND M.nom='".$pay."')");
			$li->query("DELETE FROM commande WHERE statut=1 AND (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(date))>43200 AND paiement IN (SELECT id FROM modules WHERE nom='".$pay."')");
			// 4. Deconnexion MySql
			$li->close();
			}
		}

	public function calcule()
		{
		// Supplement purge non paye (apres 12 heures) et restockage
		$this->f_purge_nonpaye('paypal2');
		$this->f_purge_nonpaye('cmcic');

Il y a sans doute une méthode moins bourrin mais celle-ci est facile et efficace.


Y a surement un truc.