/modules/storecommander/ead6f6fce09/SC/lib/cat/supplier/cat_supplier_update.php

https://gitlab.com/ptisky/API_prestashop · PHP · 449 lines · 377 code · 21 blank · 51 comment · 61 complexity · 5432e5e46a63920f8ccec3ff6da94483 MD5 · raw file

  1. <?php
  2. /**
  3. * Store Commander
  4. *
  5. * @category administration
  6. * @author Store Commander - support@storecommander.com
  7. * @version 2015-09-15
  8. * @uses Prestashop modules
  9. * @since 2009
  10. * @copyright Copyright &copy; 2009-2015, Store Commander
  11. * @license commercial
  12. * All rights reserved! Copying, duplication strictly prohibited
  13. *
  14. * *****************************************
  15. * * STORE COMMANDER *
  16. * * http://www.StoreCommander.com *
  17. * * V 2015-09-15 *
  18. * *****************************************
  19. *
  20. * Compatibility: PS version: 1.1 to 1.6.1
  21. *
  22. **/
  23. $idlist=Tools::getValue('idlist','');
  24. $action=Tools::getValue('action','');
  25. $id_lang=Tools::getValue('id_lang','0');
  26. $id_supplier=Tools::getValue('id_supplier','0');
  27. $value=Tools::getValue('value','0');
  28. $multiple = false;
  29. if(strpos($idlist, ",") !== false)
  30. $multiple = true;
  31. $ids = explode(",", $idlist);
  32. if($action!='' && !empty($id_supplier) && !empty($idlist)/* && !empty($id_actual_supplier)*/)
  33. {
  34. switch($action)
  35. {
  36. case 'fields':
  37. $field=Tools::getValue('field','');
  38. foreach($ids as $id)
  39. {
  40. if(isset($value))
  41. {
  42. $sql = '
  43. SELECT *
  44. FROM `'._DB_PREFIX_.'product_supplier` ps
  45. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  46. AND ps.`id_product` = "'.(int)$id.'"
  47. AND ps.`id_product_attribute` = 0';
  48. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  49. if(empty($check_in_supplier[0]["id_product_supplier"]))
  50. {
  51. $new = new ProductSupplier();
  52. $new->id_product = (int)$id;
  53. $new->id_supplier = (int)$id_supplier;
  54. $new->id_product_attribute = 0;
  55. $new->$field = $value;
  56. $new->save();
  57. }
  58. else
  59. {
  60. $new = new ProductSupplier($check_in_supplier[0]["id_product_supplier"]);
  61. $new->$field = $value;
  62. $new->save();
  63. }
  64. $product = new Product((int)$id, false, (int)$id_lang, (int)SCI::getSelectedShop());
  65. // Si pas de fournisseur par défaut
  66. if(empty($product->id_supplier))
  67. {
  68. // on le met en défaut
  69. $product->id_supplier = (int)$id_supplier;
  70. // Si ref non vide
  71. if(!empty($new->product_supplier_reference))
  72. $product->supplier_reference = $new->product_supplier_reference;
  73. // Si ref par défaut non vide et que ref vide
  74. elseif(!empty($product->supplier_reference) && empty($new->product_supplier_reference))
  75. {
  76. $new->product_supplier_reference = $product->supplier_reference;
  77. $new->save();
  78. }
  79. // Si prix d'achat vide
  80. if(empty($product->wholesale_price) && !empty($new->product_supplier_price_te))
  81. $product->wholesale_price = $new->product_supplier_price_te;
  82. // Si prix d'achat par défaut non vide et que prix d'achat vide
  83. elseif(!empty($product->wholesale_price) && empty($new->product_supplier_price_te))
  84. {
  85. $new->product_supplier_price_te = $product->wholesale_price;
  86. $new->save();
  87. }
  88. $product->save();
  89. }
  90. else
  91. {
  92. // Si le champs modifié est la reference
  93. // et que fournisseur par défaut
  94. // on remplace la valeur par défaut
  95. // par la nouvelle référence
  96. if($field=="product_supplier_reference" && $product->id_supplier==$id_supplier)
  97. {
  98. $product->supplier_reference = $new->product_supplier_reference;
  99. $product->save();
  100. }
  101. // Si le champs modifié est le prix d'achat
  102. // et que fournisseur par défaut
  103. // on remplace la valeur par défaut
  104. // par la nouvelle référence
  105. if($field=="product_supplier_price_te" && $product->id_supplier==$id_supplier)
  106. {
  107. $product->wholesale_price = $new->product_supplier_price_te;
  108. $product->save();
  109. }
  110. }
  111. }
  112. }
  113. break;
  114. case 'present':
  115. if($value=="true")
  116. $value = 1;
  117. else
  118. $value = 0;
  119. foreach($ids as $id)
  120. {
  121. $product = new Product((int)$id, false, (int)$id_lang, (int)SCI::getSelectedShop());
  122. if($value=="1")
  123. {
  124. $sql = '
  125. SELECT *
  126. FROM `'._DB_PREFIX_.'product_supplier` ps
  127. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  128. AND ps.`id_product` = "'.(int)$id.'"
  129. AND ps.`id_product_attribute` = 0';
  130. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  131. if(empty($check_in_supplier[0]["id_product_supplier"]))
  132. {
  133. $new = new ProductSupplier();
  134. $new->id_product = (int)$id;
  135. $new->id_supplier = (int)$id_supplier;
  136. $new->id_product_attribute = 0;
  137. $new->save();
  138. }
  139. // Si pas de fournisseur par défaut
  140. if(empty($product->id_supplier))
  141. {
  142. // on le met en défaut
  143. $product->id_supplier = (int)$id_supplier;
  144. // Si ref par défaut non vide et que ref vide
  145. if(!empty($product->supplier_reference) && empty($new->product_supplier_reference))
  146. {
  147. $new->product_supplier_reference = $product->supplier_reference;
  148. $new->save();
  149. }
  150. // Si prix d'achat par défaut non vide et que prix d'achat vide
  151. if(!empty($product->wholesale_price) && empty($new->product_supplier_price_te))
  152. {
  153. $new->product_supplier_price_te = $product->wholesale_price;
  154. $new->save();
  155. }
  156. $product->save();
  157. }
  158. else
  159. {
  160. // Si ce fournisseur est le fournisseur par défaut
  161. // mais qu'il n'était pas présent
  162. // on lui met la référence par défaut
  163. if(!empty($product->supplier_reference) && empty($new->product_supplier_reference) && $product->id_supplier==$id_supplier)
  164. {
  165. $new->product_supplier_reference = $product->supplier_reference;
  166. $new->save();
  167. }
  168. if(!empty($product->wholesale_price) && empty($new->product_supplier_price_te) && $product->id_supplier==$id_supplier)
  169. {
  170. $new->product_supplier_price_te = $product->wholesale_price;
  171. $new->save();
  172. }
  173. }
  174. }
  175. elseif(empty($value))
  176. {
  177. $sql = '
  178. SELECT *
  179. FROM `'._DB_PREFIX_.'product_supplier` ps
  180. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  181. AND ps.`id_product` = "'.(int)$id.'"';
  182. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  183. if(!empty($check_in_supplier[0]["id_product_supplier"]))
  184. {
  185. $sql = 'DELETE FROM `'._DB_PREFIX_.'product_supplier`
  186. WHERE `id_supplier` = "'.(int)$id_supplier.'"
  187. AND `id_product` = "'.(int)$id.'"';
  188. Db::getInstance()->execute($sql);
  189. }
  190. // Si fournisseur par défaut
  191. if(!empty($product->id_supplier) && $product->id_supplier==$id_supplier)
  192. {
  193. $product->id_supplier = null;
  194. $product->supplier_reference = null;
  195. $product->save();
  196. }
  197. }
  198. $combinations = $product->getAttributeCombinations((int)$id_lang);
  199. if(!empty($combinations))
  200. {
  201. foreach($combinations as $combination)
  202. {
  203. $id_product = $id;
  204. $id = $combination["id_product_attribute"];
  205. if($value=="1")
  206. {
  207. $sql = '
  208. SELECT *
  209. FROM `'._DB_PREFIX_.'product_supplier` ps
  210. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  211. AND ps.`id_product_attribute` = "'.(int)$id.'"';
  212. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  213. if(empty($check_in_supplier[0]["id_product_supplier"]))
  214. {
  215. $new = new ProductSupplier();
  216. $new->id_product = (int)$id_product;
  217. $new->id_supplier = (int)$id_supplier;
  218. $new->id_product_attribute = (int)$id;
  219. $new->save();
  220. }
  221. }
  222. elseif(empty($value))
  223. {
  224. $sql = '
  225. SELECT *
  226. FROM `'._DB_PREFIX_.'product_supplier` ps
  227. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  228. AND ps.`id_product_attribute` = "'.(int)$id.'"';
  229. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  230. if(!empty($check_in_supplier[0]["id_product_supplier"]))
  231. {
  232. $sql = 'DELETE FROM `'._DB_PREFIX_.'product_supplier`
  233. WHERE `id_supplier` = "'.(int)$id_supplier.'"
  234. AND `id_product_attribute` = "'.(int)$id.'"';
  235. Db::getInstance()->execute($sql);
  236. }
  237. }
  238. }
  239. }
  240. }
  241. break;
  242. case 'default':
  243. if($value=="true")
  244. $value = 1;
  245. else
  246. $value = 0;
  247. foreach($ids as $id)
  248. {
  249. $product = new Product((int)$id, false, (int)$id_lang, (int)SCI::getSelectedShop());
  250. if($value=="1")
  251. {
  252. $sql = '
  253. SELECT *
  254. FROM `'._DB_PREFIX_.'product_supplier` ps
  255. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  256. AND ps.`id_product` = "'.(int)$id.'"
  257. AND ps.`id_product_attribute` = 0';
  258. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  259. if(empty($check_in_supplier[0]["id_product_supplier"]))
  260. {
  261. $new = new ProductSupplier();
  262. $new->id_product = (int)$id;
  263. $new->id_supplier = (int)$id_supplier;
  264. $new->id_product_attribute = 0;
  265. $new->save();
  266. }
  267. else
  268. {
  269. $new = new ProductSupplier((int)$check_in_supplier[0]["id_product_supplier"]);
  270. }
  271. $product->id_supplier = (int)$id_supplier;
  272. if(!empty($new->product_supplier_reference))
  273. $product->supplier_reference = $new->product_supplier_reference;
  274. if(!empty($new->product_supplier_price_te))
  275. $product->wholesale_price = $new->product_supplier_price_te;
  276. $product->save();
  277. $combinations = $product->getAttributeCombinations((int)$id_lang);
  278. if(!empty($combinations))
  279. {
  280. foreach($combinations as $combination)
  281. {
  282. $id_product = $id;
  283. $id = $combination["id_product_attribute"];
  284. $sql = '
  285. SELECT *
  286. FROM `'._DB_PREFIX_.'product_supplier` ps
  287. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  288. AND ps.`id_product_attribute` = "'.(int)$id.'"';
  289. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  290. if(empty($check_in_supplier[0]["id_product_supplier"]))
  291. {
  292. $new = new ProductSupplier();
  293. $new->id_product = (int)$id_product;
  294. $new->id_supplier = (int)$id_supplier;
  295. $new->id_product_attribute = (int)$id;
  296. $new->save();
  297. }
  298. }
  299. }
  300. }
  301. }
  302. break;
  303. case 'mass_present':
  304. if($value=="true")
  305. $value = 1;
  306. else
  307. $value = 0;
  308. $suppliers = explode(",", $id_supplier);
  309. foreach($suppliers as $id_supplier)
  310. {
  311. foreach($ids as $id)
  312. {
  313. $product = new Product((int)$id, false, (int)$id_lang, (int)SCI::getSelectedShop());
  314. if($value=="1")
  315. {
  316. $sql = '
  317. SELECT *
  318. FROM `'._DB_PREFIX_.'product_supplier` ps
  319. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  320. AND ps.`id_product` = "'.(int)$id.'"
  321. AND ps.`id_product_attribute` = 0';
  322. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  323. if(empty($check_in_supplier[0]["id_product_supplier"]))
  324. {
  325. $new = new ProductSupplier();
  326. $new->id_product = (int)$id;
  327. $new->id_supplier = (int)$id_supplier;
  328. $new->id_product_attribute = 0;
  329. $new->save();
  330. }
  331. // Si pas de fournisseur par défaut
  332. if(empty($product->id_supplier))
  333. {
  334. // on le met en défaut
  335. $product->id_supplier = (int)$id_supplier;
  336. // Si ref par défaut non vide et que ref vide
  337. if(!empty($product->supplier_reference) && empty($new->product_supplier_reference))
  338. {
  339. $new->product_supplier_reference = $product->supplier_reference;
  340. $new->save();
  341. }
  342. $product->save();
  343. }
  344. else
  345. {
  346. // Si ce fournisseur est le fournisseur par défaut
  347. // mais qu'il n'était pas présent
  348. // on lui met la référence par défaut
  349. if(!empty($product->supplier_reference) && empty($new->product_supplier_reference) && $product->id_supplier==$id_supplier)
  350. {
  351. $new->product_supplier_reference = $product->supplier_reference;
  352. $new->save();
  353. }
  354. }
  355. }
  356. elseif(empty($value))
  357. {
  358. $sql = '
  359. SELECT *
  360. FROM `'._DB_PREFIX_.'product_supplier` ps
  361. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  362. AND ps.`id_product` = "'.(int)$id.'"';
  363. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  364. if(!empty($check_in_supplier[0]["id_product_supplier"]))
  365. {
  366. $sql = 'DELETE FROM `'._DB_PREFIX_.'product_supplier`
  367. WHERE `id_supplier` = "'.(int)$id_supplier.'"
  368. AND `id_product` = "'.(int)$id.'"';
  369. Db::getInstance()->execute($sql);
  370. }
  371. // Si fournisseur par défaut
  372. if(!empty($product->id_supplier) && $product->id_supplier==$id_supplier)
  373. {
  374. $product->id_supplier = null;
  375. $product->supplier_reference = null;
  376. $product->save();
  377. }
  378. }
  379. $combinations = $product->getAttributeCombinations((int)$id_lang);
  380. if(!empty($combinations))
  381. {
  382. foreach($combinations as $combination)
  383. {
  384. $id_product = $id;
  385. $id = $combination["id_product_attribute"];
  386. if($value=="1")
  387. {
  388. $sql = '
  389. SELECT *
  390. FROM `'._DB_PREFIX_.'product_supplier` ps
  391. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  392. AND ps.`id_product_attribute` = "'.(int)$id.'"';
  393. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  394. if(empty($check_in_supplier[0]["id_product_supplier"]))
  395. {
  396. $new = new ProductSupplier();
  397. $new->id_product = (int)$id_product;
  398. $new->id_supplier = (int)$id_supplier;
  399. $new->id_product_attribute = (int)$id;
  400. $new->save();
  401. }
  402. }
  403. elseif(empty($value))
  404. {
  405. $sql = '
  406. SELECT *
  407. FROM `'._DB_PREFIX_.'product_supplier` ps
  408. WHERE ps.`id_supplier` = "'.(int)$id_supplier.'"
  409. AND ps.`id_product_attribute` = "'.(int)$id.'"';
  410. $check_in_supplier = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
  411. if(!empty($check_in_supplier[0]["id_product_supplier"]))
  412. {
  413. $sql = 'DELETE FROM `'._DB_PREFIX_.'product_supplier`
  414. WHERE `id_supplier` = "'.(int)$id_supplier.'"
  415. AND `id_product_attribute` = "'.(int)$id.'"';
  416. Db::getInstance()->execute($sql);
  417. }
  418. }
  419. }
  420. }
  421. }
  422. }
  423. break;
  424. }
  425. // PM Cache
  426. if(!empty($ids))
  427. ExtensionPMCM::clearFromIdsProduct($ids);
  428. }