Jump to content

Mise à jour SQL stock produits avec attribut


SandraNanou

Recommended Posts

Bonsoir,

Je me casse la tête pour comprendre pourquoi mon code ne fonctionne pas !! J'ai développé un petit script qui permet de mettre à jour mes prix et stocks via un csv :

foreach ($donneesFormate as $donneeFormate) {
	
    $mysqlquery.="UPDATE  ps_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE ps_stock_available AS s
					INNER JOIN ps_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN ps_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";
					
}

$donneeFormate fait référence aux colonnes de mon csv :

$donneeFormate[1] : colonne Références

$donneeFormate[2] : colonne Quantité

$donneeFormate[3] : colonne Prix

 

Ce code fonctionne très bien pour la MAJ de produits standards. Malheureusement, j'ai également des produits avec attributs.

J'ai tenté ce code :

$mysqlquery=" UPDATE ps_stock_available AS s 
		INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
		SET s.quantity = ".$donneeFormate[2]." WHERE reference = '".$donneeFormate[1]."';

 Ce qui est étrange, c'est que si je rentre cette ligne de code directement dans PHP my admin, il fonctionne. Par exemple :

UPDATE ps_stock_available AS s
	INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute
	SET s.quantity = 777 WHERE p.reference = 77881/39

Mais mon code ne fonctionne jamais quand je l'ajoute à ma boucle.

 

Vous avez une idée de là où je me suis tromprée ?

Merci pour votre aide,

Sandra

Edited by SandraNanou (see edit history)
Link to comment
Share on other sites

En effet, je me suis embrouillé en essayant tous les codes possibles ^^

Celui là fonctionne quand je fais la requête directement dans ma base de données :

UPDATE ps_stock_available AS s INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute SET s.quantity = 777 WHERE reference = "77881/39"

 

Link to comment
Share on other sites

ok..

un die(var_dump($mysqlquery)); donne quoi, juste après cette ligne ?

$mysqlquery=" UPDATE ps_stock_available AS s 
		INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
		SET s.quantity = ".$donneeFormate[2]." WHERE reference = '".$donneeFormate[1]."';
Link to comment
Share on other sites

14 hours ago, SandraNanou said:

Bonsoir,

Je me casse la tête pour comprendre pourquoi mon code ne fonctionne pas !! J'ai développé un petit script qui permet de mettre à jour mes prix et stocks via un csv :


foreach ($donneesFormate as $donneeFormate) {
	
    $mysqlquery.="UPDATE  ps_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE ps_stock_available AS s
					INNER JOIN ps_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN ps_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";
					
}

$donneeFormate fait référence aux colonnes de mon csv :

$donneeFormate[1] : colonne Références

$donneeFormate[2] : colonne Quantité

$donneeFormate[3] : colonne Prix

 

Ce code fonctionne très bien pour la MAJ de produits standards. Malheureusement, j'ai également des produits avec attributs.

J'ai tenté ce code :


$mysqlquery=" UPDATE ps_stock_available AS s 
		INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
		SET s.quantity = ".$donneeFormate[2]." WHERE reference = '".$donneeFormate[1]."';

 Ce qui est étrange, c'est que si je rentre cette ligne de code directement dans PHP my admin, il fonctionne. Par exemple :


UPDATE ps_stock_available AS s
	INNER JOIN ps_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute
	SET s.quantity = 777 WHERE p.reference = 77881/39

Mais mon code ne fonctionne jamais quand je l'ajoute à ma boucle.

 

Vous avez une idée de là où je me suis tromprée ?

Merci pour votre aide,

Sandra

 

 

Aussi, c'est le bon code? Vous ne savez pas pourquoi il y a un opérateur append ($ mysqlquery. = "") Dans la requête?

Link to comment
Share on other sites

Bonsoir,

Je vous remet la totalité de mon code pour vous aider avec le vrai nom des tables pour ne pas m'embrouiller pour rien !

En gros, on récupère tous les soirs un fichier sur le ftp (csvstock), que l'on récupère, converti en csv et modifie pour ne garder que 4 colonnes : Fournisseur, Référence produit, prix et quantité.

Pour les produits simples, on va récupérer l'ID correspondant à la Référence produit dans la  table myBoutik_product puis on met la table à jour ainsi que myBoutik_product_shop via l'ID produit ainsi récupéré.

Cette requête fonctionne bien.

J'aimerais faire la même chose pour les produits avec attributs. Récupérer l'ID attribut correspondant à la Référence produit dans la table myBoutik_product_attribute puis mettre à jour le stock produit dans la table myBoutik_stock_available via l'ID attribute. 

Il faudra ensuite que je trouve une solution pour mettre les prix des attributs à jour mais chaque problème en son temps^^

$filename = dirname(__FILE__).'/in/csvstock';
$date=new DateTime();
$dateFormat=$date->format('Ymd-Hi');
$newname="FLUX001_".$dateFormat.".csv";

if (file_exists($filename)) {
    echo "Le fichier $filename existe. Debut de la synchro<br/>";
} else {
    echo "Le fichier $filename n'a pas ete synchronise";
    die();
}

if (rename($filename, dirname(__FILE__).'/in/'.$newname)) {
    echo "Le fichier $filename a été renommé en $newname.<br/>";
} else {
    echo "Le fichier $filename n'a pas pu être renommé";
    die();
}

//sépare les données et crée les colonnes 
$donnees=array();
$row = 1;
if (($handle = fopen(dirname(__FILE__).'/in/'.$newname, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
        $donnees[]=$data;
    }
    fclose($handle);
}

$donneesFormate=array();
foreach($donnees as $donnee){
    $donneesFormate[]=array($donnee[2], $donnee[3], (int)$donnee[4], (float)$donnee[7]);
}


//2-c Crée un backup qu'il place dans  /in/backup
if (rename(dirname(__FILE__).'/in/'.$newname, dirname(__FILE__).'/in/backup/'.$newname)) {
    echo "Le fichier $newname a été placé dans /in/backup<br/>";
} else {
    echo "Le fichier $newname n'a pas pu être placé dans /in/backup<br/>";
}


//2-d Crée un fichier FLUX002_aaaammjj-hhmm.csv qui ne garde que les colonnes : Fournisseur, Référence, quantité, prix que le programme stocke dans /stock/out

$fp = fopen(dirname(__FILE__).'/stock/FLUX002_'.$dateFormat.'.csv', 'w');
foreach ($donneesFormate as $donneeFormate) {
    fputcsv($fp, $donneeFormate, ';');
}
fclose($fp);


$user = '***';
$pass = '***';

$db = new PDO('mysql:host=******;dbname=***', $user, $pass);

$mysqlquery='';

foreach ($donneesFormate as $donneeFormate) {
	$mysqlquery.="UPDATE  myBoutik_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE myBoutik_stock_available AS s
					INNER JOIN myBoutik_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN myBoutik_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";

	$mysqlquery.=" UPDATE myBoutik_stock_available AS s 
					INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
					SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " '";

}


var_dump($mysqlquery);
$stmt = $db->prepare($mysqlquery);
$stmt->execute();
echo 'done';

J'espère être plus claire.

Merci beaucoup pour votre aide,

Sandra

 

Link to comment
Share on other sites

il manque un point-virgule à la dernière ligne:

SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " '";

ceci serait mieux vu qu'on est dans une boucle foreach, le reste de vos requêtes ne sera pas lu par le moteur sql sinon^^

 

SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " ';";
Link to comment
Share on other sites

Quelque chose comme ça ?

$mysqlquery.=" UPDATE myBoutik_stock_available AS s 
					INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product
					SET s.quantity = SUM(".$donneeFormate[2].") WHERE reference = '". $donneeFormate[1] . " '; AND id_product_attribute= 0 ";

 

Link to comment
Share on other sites

J'ai tenté cette requête directement dans la BDD mais j'ai une erreur :

#1052 - Column 'id_product_attribute' in where clause is ambiguous

Ma ligne de code :

UPDATE myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		SET s.quantity = 789 WHERE reference = '77881/39' AND id_product_attribute= 0

 

Link to comment
Share on other sites

ok j'ai trouvé ^^

UPDATE myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		SET s.quantity = 789 WHERE reference = '77881/39' AND s.id_product_attribute= 0

Mais ma requête ne donne rien dans ma boucle :

$mysqlquery.="UPDATE myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		SET s.quantity = 789 WHERE reference = '77881/39' AND s.id_product_attribute= 0";

Une erreur de guillemet ou point virgule encore ?!?

Edited by SandraNanou (see edit history)
Link to comment
Share on other sites

oui mais non, dans un update on ne peut pas joindre comme ça^^

Que vous donne:

SELECT s.id_product from myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		WHERE reference = '77881/39' AND s.id_product_attribute= 0
Link to comment
Share on other sites

Je les avait changé manuellement au final, le site est accessible.

J'essayais d'entrer un nombre prédéfini pour id_product_attribute 0 avant de passer à l'étape addition. 

Cette requête SQL fonctionnait :

UPDATE myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		SET s.quantity = 789 WHERE reference = '77881/39' AND s.id_product_attribute= 0

 

Edited by SandraNanou (see edit history)
Link to comment
Share on other sites

$mysqlquery.="SELECT s.id_product from myBoutik_stock_available AS s 
		INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product = s.id_product 
		WHERE reference = '77881/39' AND s.id_product_attribute= 0";

Comment dois-je faire pour stocker mon ID et mettre à jour la table ? Il faut que je créée une autre boucle ?

Link to comment
Share on other sites

Non...

UPDATE myBoutik_stock_available 

SET quantity = xxx

WHERE id_product = (SELECT id_product FROM myBoutik_product_attribute
                                       WHERE reference = '77881/39');

 

La quantité, vous la calculez avant dans votre csv

Link to comment
Share on other sites

Merci ça fonctionne !!

Mais calculer la quantité totale dans le csv, ça parait compliqué, il est envoyé par l'ERP, je n'ai pas vraiment la main dessus. 

Je ne peux pas additionner toutes les quantités des mêmes Id produits ?

Mais alors la, je ne sais pas pas ou commencer !

Link to comment
Share on other sites

Le 23/08/2018 à 11:35 AM, SandraNanou a dit :

foreach ($donneesFormate as $donneeFormate) { fputcsv($fp, $donneeFormate, ';'); } fclose($fp);

Euh... c'est bien vous qui créez celui-là, non ?

Créez une clé $quantité['reference'] que vous initialisez à 0 puis que vous  incrémentez

Link to comment
Share on other sites

non le code existait déjà, je fais une mise à jour car les tables de prestashop ont changé (le shop était sur presta 1.4). 

Je n'ai clairement pas le niveau^^

$quantité['reference'] devrait être une nouvelle colonne ? Et comment l'incrémenter ? Toutes les références dans le cvs sont différentes.

 

 

Link to comment
Share on other sites

ok alors on va faire autrement^^

Une fois le traitement terminé, vous lancez un update général:

$query = 'SELECT SUM(`quantity`) as total, `id_product`
		FROM `myBoutik_stock_available`
		WHERE `id_product_attribute` != 0
		GROUP BY `id_product`';

$request = $db->prepare($query);
$request->execute();
$results = $request->fetchAll();

$update_query = '';
foreach($results as $result) {
	if($result['total'] > 0)
		$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' WHERE id_product = '.(int)$result['id_product'].';'
}

$update = $db->prepare($update_query);
$update->execute();

 

Link to comment
Share on other sites

La quantité se met a 375 partout.

 

Le code en entier :

// Renomme le fichier en web_art - FLUX001_aaaammjj-hhmm.csv
$filename = dirname(__FILE__).'/in/web_stock';
$date=new DateTime();
$dateFormat=$date->format('Ymd-Hi');
$newname="FLUX001_".$dateFormat.".csv";

if (file_exists($filename)) {
    echo "Le fichier $filename existe. Debut de la synchro<br/>";
} else {
    echo "Le fichier $filename n'a pas ete synchronise";
    die();
}

if (rename($filename, dirname(__FILE__).'/in/'.$newname)) {
    echo "Le fichier $filename a été renommé en $newname.<br/>";
} else {
    echo "Le fichier $filename n'a pas pu être renommé";
    die();
}

//sépare les données et crée les colonnes (voir fichier joint pour exemple avec le fichier brut et sa transformation)
$donnees=array();
$row = 1;
if (($handle = fopen(dirname(__FILE__).'/in/'.$newname, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
        $donnees[]=$data;
    }
    fclose($handle);
}

$donneesFormate=array();
foreach($donnees as $donnee){
    $donneesFormate[]=array($donnee[2], $donnee[3], (int)$donnee[4], (float)$donnee[7]);
}


//2-c Crée un backup qu'il place dans  /echange/in/backup
if (rename(dirname(__FILE__).'/in/'.$newname, dirname(__FILE__).'/in/backup/'.$newname)) {
    echo "Le fichier $newname a été placé dans /echange/in/backup<br/>";
} else {
    echo "Le fichier $newname n'a pas pu être placé dans /echange/in/backup<br/>";
}



//2-d Crée un fichier FLUX002_aaaammjj-hhmm.csv qui ne garde que les colonnes : Fournisseur, Référence, quantité, prix
//que le programme stocke dans /echange/out

$fp = fopen(dirname(__FILE__).'/out/FLUX002_'.$dateFormat.'.csv', 'w');
foreach ($donneesFormate as $donneeFormate) {
    fputcsv($fp, $donneeFormate, ';');
}
fclose($fp);


$user = '***';
$pass = '***';

$db = new PDO('mysql:host=***;dbname=***', $user, $pass);

$mysqlquery='';

foreach ($donneesFormate as $donneeFormate) {

    $mysqlquery.="UPDATE  myBoutik_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE  myBoutik_product_attribute SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	
	$mysqlquery.="UPDATE myBoutik_stock_available AS s
					INNER JOIN myBoutik_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN myBoutik_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";
					
	$mysqlquery.=" UPDATE myBoutik_stock_available AS s 
					INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
					SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " ';";
					
	
		//MAJ de la colonne QTE de l'attribut 0
		$query = 'SELECT SUM(`quantity`) as total, `id_product`
				FROM `myBoutik_stock_available`
				WHERE `id_product_attribute` != 0
				GROUP BY `id_product`';

		$request = $db->prepare($query);
		$request->execute();
		$results = $request->fetchAll();

		$update_query = '';
		foreach($results as $result) {
			if($result['total'] > 0)
				$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' 
				WHERE id_product = '.(int)$result['id_product'].';' ;
		}

$update = $db->prepare($update_query);
$update->execute();


}
var_dump($mysqlquery);
$stmt = $db->prepare($mysqlquery);
$stmt->execute();
echo 'done';

 

Link to comment
Share on other sites

oups j'ai oublié un bout^^

foreach($results as $result) {
	if($result['total'] > 0)
		$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' WHERE id_product = '.(int)$result['id_product'].' AND id_product_attribute = 0;'
}

 

Link to comment
Share on other sites

Votre code complet

// Renomme le fichier en web_art - FLUX001_aaaammjj-hhmm.csv
$filename = dirname(__FILE__).'/in/web_stock';
$date=new DateTime();
$dateFormat=$date->format('Ymd-Hi');
$newname="FLUX001_".$dateFormat.".csv";

if (file_exists($filename)) {
    echo "Le fichier $filename existe. Debut de la synchro<br/>";
} else {
    echo "Le fichier $filename n'a pas ete synchronise";
    die();
}

if (rename($filename, dirname(__FILE__).'/in/'.$newname)) {
    echo "Le fichier $filename a été renommé en $newname.<br/>";
} else {
    echo "Le fichier $filename n'a pas pu être renommé";
    die();
}

//sépare les données et crée les colonnes (voir fichier joint pour exemple avec le fichier brut et sa transformation)
$donnees=array();
$row = 1;
if (($handle = fopen(dirname(__FILE__).'/in/'.$newname, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
        $donnees[]=$data;
    }
    fclose($handle);
}

$donneesFormate=array();
foreach($donnees as $donnee){
    $donneesFormate[]=array($donnee[2], $donnee[3], (int)$donnee[4], (float)$donnee[7]);
}


//2-c Crée un backup qu'il place dans  /echange/in/backup
if (rename(dirname(__FILE__).'/in/'.$newname, dirname(__FILE__).'/in/backup/'.$newname)) {
    echo "Le fichier $newname a été placé dans /echange/in/backup<br/>";
} else {
    echo "Le fichier $newname n'a pas pu être placé dans /echange/in/backup<br/>";
}



//2-d Crée un fichier FLUX002_aaaammjj-hhmm.csv qui ne garde que les colonnes : Fournisseur, Référence, quantité, prix
//que le programme stocke dans /echange/out

$fp = fopen(dirname(__FILE__).'/out/FLUX002_'.$dateFormat.'.csv', 'w');
foreach ($donneesFormate as $donneeFormate) {
    fputcsv($fp, $donneeFormate, ';');
}
fclose($fp);


$user = '***';
$pass = '***';

$db = new PDO('mysql:host=***;dbname=***', $user, $pass);

$mysqlquery='';

foreach ($donneesFormate as $donneeFormate) {

    $mysqlquery.="UPDATE  myBoutik_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE  myBoutik_product_attribute SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	
	$mysqlquery.="UPDATE myBoutik_stock_available AS s
					INNER JOIN myBoutik_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN myBoutik_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";
					
	$mysqlquery.=" UPDATE myBoutik_stock_available AS s 
					INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
					SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " ';";

}

$stmt = $db->prepare($mysqlquery);
$stmt->execute();
echo 'done';
	
//MAJ de la colonne QTE de l'attribut 0
$query = 'SELECT SUM(`quantity`) as total, `id_product`
		FROM `myBoutik_stock_available`
		WHERE `id_product_attribute` != 0
		GROUP BY `id_product`';

$request = $db->prepare($query);
$request->execute();
$results = $request->fetchAll();

$update_query = '';
foreach($results as $result) {
	if($result['total'] > 0)
		$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' WHERE id_product = '.(int)$result['id_product'].' AND id_product_attribute = 0;';
}

$update = $db->prepare($update_query);
$update->execute();

 

Edited by Eolia (see edit history)
Link to comment
Share on other sites

Comme ça :

<?php

// Renomme le fichier en web_stock - FLUX001_aaaammjj-hhmm.csv
$filename = dirname(__FILE__).'/in/web_stock';
$date=new DateTime();
$dateFormat=$date->format('Ymd-Hi');
$newname="FLUX001_".$dateFormat.".csv";

if (file_exists($filename)) {
    echo "Le fichier $filename existe. Debut de la synchro<br/>";
} else {
    echo "Le fichier $filename n'a pas ete synchronise";
    die();
}

if (rename($filename, dirname(__FILE__).'/in/'.$newname)) {
    echo "Le fichier $filename a été renommé en $newname.<br/>";
} else {
    echo "Le fichier $filename n'a pas pu être renommé";
    die();
}

//sépare les données et crée les colonnes (voir fichier joint pour exemple avec le fichier brut et sa transformation)
$donnees=array();
$row = 1;
if (($handle = fopen(dirname(__FILE__).'/in/'.$newname, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) {
        $donnees[]=$data;
    }
    fclose($handle);
}

$donneesFormate=array();
foreach($donnees as $donnee){
    $donneesFormate[]=array($donnee[2], $donnee[3], (int)$donnee[4], (float)$donnee[7]);
}


//2-c Crée un backup qu'il place dans  /echange/in/backup
if (rename(dirname(__FILE__).'/in/'.$newname, dirname(__FILE__).'/in/backup/'.$newname)) {
    echo "Le fichier $newname a été placé dans /echange/in/backup<br/>";
} else {
    echo "Le fichier $newname n'a pas pu être placé dans /echange/in/backup<br/>";
}


//2-d Crée un fichier FLUX002_aaaammjj-hhmm.csv qui ne garde que les colonnes : Fournisseur, Référence, quantité, prix
//que le programme stocke dans /echange/out

$fp = fopen(dirname(__FILE__).'/out/FLUX002_'.$dateFormat.'.csv', 'w');
foreach ($donneesFormate as $donneeFormate) {
    fputcsv($fp, $donneeFormate, ';');
}
fclose($fp);


$user = '***';
$pass = '***';

$db = new PDO('mysql:host=***;dbname=***', $user, $pass);

$mysqlquery='';

foreach ($donneesFormate as $donneeFormate) {

    $mysqlquery.="UPDATE  myBoutik_product SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	$mysqlquery.="UPDATE  myBoutik_product_attribute SET  quantity = ".$donneeFormate[2].", price = ".$donneeFormate[3]." WHERE  reference = '".$donneeFormate[1]."';";
	
	
	$mysqlquery.="UPDATE myBoutik_stock_available AS s
					INNER JOIN myBoutik_product_shop AS ps ON ps.id_product = s.id_product
					INNER JOIN myBoutik_product AS p ON p.id_product = ps.id_product
					SET s.quantity = ".$donneeFormate[2].", ps.price=".$donneeFormate[3]." WHERE p.reference = '".$donneeFormate[1]."';";
					
	$mysqlquery.=" UPDATE myBoutik_stock_available AS s 
					INNER JOIN myBoutik_product_attribute AS ps ON ps.id_product_attribute = s.id_product_attribute 
					SET s.quantity = ".$donneeFormate[2]." WHERE reference = '". $donneeFormate[1] . " ';";
					
}
var_dump($mysqlquery);
$stmt = $db->prepare($mysqlquery);
$stmt->execute();
echo 'done';


$query = 'SELECT SUM(`quantity`) as total, `id_product`
		FROM `myBoutik_stock_available`
		WHERE `id_product_attribute` != 0
		GROUP BY `id_product`';

		$request = $db->prepare($query);
		$request->execute();
		$results = $request->fetchAll();

		$update_query = '';
		
		foreach($results as $result) {
			if($result['total'] > 0)
				$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' WHERE id_product = '.(int)$result['id_product'].' AND id_product_attribute = 0;';
}

$update = $db->prepare($update_query);
$update->execute();




 

J'ai les bonnes données pour 2 produits mais pas le total

updateStock.png

Link to comment
Share on other sites

J'ai juste ajouté un ; à 

foreach($results as $result) {
	if($result['total'] > 0)
		$update_query .= 'UPDATE myBoutik_stock_available SET quantity = '.(int)$result['total'].' WHERE id_product = '.(int)$result['id_product'].' AND id_product_attribute = 0;' ;
}

ça m'insère les bonnes données pour les id_product_attribute 1978 et 1979 mais ajoute 375 pour les autres.

updateStock.png

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...