PageRenderTime 27ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/storecommander/ead6f6fce09/SC/lib/cat/combination/cat_combination_update_queue.php

https://gitlab.com/ptisky/API_prestashop
PHP | 561 lines | 482 code | 42 blank | 37 comment | 101 complexity | 5b74074330441648a0788c29ea5c8de7 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. @error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
  24. @ini_set("display_errors", "ON");
  25. $id_lang = Tools::getValue('id_lang','0');
  26. $return = "ERROR: Try again later";
  27. // FUNCTIONS
  28. $updated_products = array();
  29. function checkDefaultAttributes($id_product)
  30. {
  31. $row = Db::getInstance()->getRow('
  32. SELECT id_product, id_product_attribute
  33. FROM `'._DB_PREFIX_.'product_attribute`
  34. WHERE `default_on` = 1 AND `id_product` = '.(int)($id_product));
  35. if ($row)
  36. return (int)($row['id_product_attribute']);
  37. $mini = Db::getInstance()->getRow('
  38. SELECT MIN(pa.id_product_attribute) as `id_attr`
  39. FROM `'._DB_PREFIX_.'product_attribute` pa
  40. WHERE `id_product` = '.(int)($id_product));
  41. if (!$mini)
  42. return 0;
  43. if (!Db::getInstance()->Execute('
  44. UPDATE `'._DB_PREFIX_.'product_attribute`
  45. SET `default_on` = 1
  46. WHERE `id_product_attribute` = '.(int)($mini['id_attr'])))
  47. return 0;
  48. return (int)($mini['id_attr']);
  49. }
  50. // Récupération de toutes les modifications à effectuer
  51. if(!empty($_POST["rows"]))
  52. {
  53. if(_PS_MAGIC_QUOTES_GPC_)
  54. $_POST["rows"] = stripslashes($_POST["rows"]);
  55. $rows = json_decode($_POST["rows"]);
  56. if(is_array($rows) && count($rows)>0)
  57. {
  58. $callbacks = '';
  59. // Première boucle pour remplir la table sc_queue_log
  60. // avec toutes ces modifications
  61. $log_ids = array();
  62. $date = date("Y-m-d H:i:s");
  63. foreach($rows as $num => $row)
  64. {
  65. $id = QueueLog::add($row->name, $row->row, $row->action, (!empty($row->params)?$row->params:array()), (!empty($row->callback)?$row->callback:null), $date);
  66. $log_ids[$num] = $id;
  67. }
  68. // Deuxième boucle pour effectuer les
  69. // actions les une après les autres
  70. foreach($rows as $num => $row)
  71. {
  72. if(!empty($log_ids[$num]))
  73. {
  74. $gr_id = intval($row->row);
  75. $action = $row->action;
  76. if(!empty($row->callback))
  77. $callbacks .= $row->callback.";";
  78. $_POST=array();
  79. $_POST = (array) json_decode($row->params);
  80. if(!empty($action) && $action=="delete" && !empty($gr_id))
  81. {
  82. $idpa_array=explode(',',Tools::getValue('id_product_attribute','0'));
  83. $id_product=Tools::getValue('id_product','0');
  84. if(!empty($id_product))
  85. {
  86. $updated_products[$id_product]=$id_product;
  87. $TODO="UPDATE "._DB_PREFIX_."product SET `date_upd`='".psql(date("Y-m-d H:i:s"))."' WHERE id_product=".intval($id_product).";";
  88. if(SCMS)
  89. $TODO.="UPDATE "._DB_PREFIX_."product_shop SET `date_upd`='".psql(date("Y-m-d H:i:s"))."' WHERE id_product=".intval($id_product)." AND id_shop IN (".psql(SCI::getSelectedShopActionList(true)).");";
  90. Db::getInstance()->Execute($TODO);
  91. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  92. {
  93. $shops = SCI::getSelectedShopActionList(false);
  94. $p = new Product($id_product, false, (int)$lang, (int)SCI::getSelectedShop());
  95. foreach($idpa_array AS $id_product_attribute)
  96. {
  97. if (is_numeric($id_product_attribute) && $id_product_attribute)
  98. {
  99. $c = new Combination($id_product_attribute);
  100. if (version_compare(_PS_VERSION_, '1.6.0.0', '>='))
  101. {
  102. $c->id_shop_list = Shop::getShops(false, null, true);
  103. }
  104. else
  105. $c->id_shop_list = SCI::getSelectedShopActionList(false);
  106. $c->delete();
  107. foreach($shops as $shop)
  108. {
  109. StockAvailable::removeProductFromStockAvailable(intval($id_product), intval($id_product_attribute), $shop);
  110. }
  111. $sql = "SELECT * FROM "._DB_PREFIX_."stock WHERE id_product_attribute = '".intval($id_product_attribute)."' ";
  112. $stocks = Db::getInstance()->ExecuteS($sql);
  113. foreach($stocks as $stock)
  114. {
  115. $sql="DELETE FROM "._DB_PREFIX_."stock_mvt WHERE id_stock='".intval($stock["id_stock"])."'";
  116. Db::getInstance()->Execute($sql);
  117. }
  118. $sql="DELETE FROM "._DB_PREFIX_."stock WHERE id_product_attribute = '".intval($id_product_attribute)."' ";
  119. Db::getInstance()->Execute($sql);
  120. $sql="DELETE FROM "._DB_PREFIX_."warehouse_product_location WHERE id_product_attribute = '".intval($id_product_attribute)."' ";
  121. Db::getInstance()->Execute($sql);
  122. }
  123. }
  124. $p->checkDefaultAttributes();
  125. if (!$p->hasAttributes())
  126. {
  127. /*$p->cache_default_attribute = 0;
  128. $p->update();*/
  129. $sql="UPDATE "._DB_PREFIX_."product SET cache_default_attribute='0' WHERE id_product='".intval($id_product)."'";
  130. Db::getInstance()->Execute($sql);
  131. $sql="UPDATE "._DB_PREFIX_."product_shop SET cache_default_attribute='0' WHERE id_product='".intval($id_product)."' AND id_shop IN (".SCI::getSelectedShopActionList(true).") ";
  132. Db::getInstance()->Execute($sql);
  133. }
  134. else
  135. {
  136. if(SCMS)
  137. {
  138. $id_default_attribute = (int)Product::getDefaultAttribute($id_product);
  139. $shops = implode(",", Shop::getShops(false, null, true));
  140. $result = Db::getInstance()->update('product_shop', array(
  141. 'cache_default_attribute' => $id_default_attribute,
  142. ), 'id_product = '.(int)$id_product." AND id_shop IN (".pSQL($shops).") ");
  143. $sql="UPDATE "._DB_PREFIX_."product_attribute_shop SET default_on='1' WHERE `id_product_attribute` = '".(int)$id_default_attribute."' AND id_shop IN (".pSQL($shops).") ";
  144. Db::getInstance()->Execute($sql);
  145. $result &= Db::getInstance()->update('product', array(
  146. 'cache_default_attribute' => $id_default_attribute,
  147. ), 'id_product = '.(int)$id_product);
  148. }
  149. else
  150. Product::updateDefaultAttribute(intval($id_product));
  151. }
  152. SCI::qtySumStockAvailable($id_product);
  153. }else{
  154. foreach($idpa_array AS $id_product_attribute)
  155. {
  156. if (is_numeric($id_product_attribute))
  157. {
  158. $sql="DELETE FROM "._DB_PREFIX_."product_attribute WHERE id_product_attribute='".intval($id_product_attribute)."'";
  159. Db::getInstance()->Execute($sql);
  160. $sql="DELETE FROM "._DB_PREFIX_."product_attribute_combination WHERE id_product_attribute='".intval($id_product_attribute)."'";
  161. Db::getInstance()->Execute($sql);
  162. $sql='DELETE FROM `'._DB_PREFIX_.'cart_product` WHERE `id_product_attribute` = '.intval($id_product_attribute);
  163. Db::getInstance()->Execute($sql);
  164. if (version_compare(_PS_VERSION_, '1.2.0.1', '>='))
  165. {
  166. $sql="DELETE FROM "._DB_PREFIX_."product_attribute_image WHERE id_product_attribute='".intval($id_product_attribute)."'";
  167. Db::getInstance()->Execute($sql);
  168. }
  169. if (version_compare(_PS_VERSION_, '1.4.0.0', '>=') && _s('APP_COMPAT_HOOK') && !_s('APP_COMPAT_EBAY'))
  170. {
  171. SCI::hookExec('deleteProductAttribute', array('id_product_attribute' => intval($id_product_attribute), 'id_product' => intval($id_product), 'deleteAllAttributes' => false));
  172. }elseif(_s('APP_COMPAT_EBAY')){
  173. Configuration::updateValue('EBAY_SYNC_LAST_PRODUCT', min(Configuration::get('EBAY_SYNC_LAST_PRODUCT'),intval($id_product)));
  174. }
  175. }
  176. }
  177. $default_id=checkDefaultAttributes(intval($id_product));
  178. if (version_compare(_PS_VERSION_, '1.4.0.0', '>='))
  179. {
  180. Db::getInstance()->Execute('
  181. UPDATE `'._DB_PREFIX_.'product`
  182. SET `cache_default_attribute` ='.intval($default_id).'
  183. WHERE `id_product` = '.intval($id_product));
  184. }
  185. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  186. {
  187. Db::getInstance()->Execute('
  188. UPDATE `'._DB_PREFIX_.'product_shop`
  189. SET `cache_default_attribute` ='.intval($default_id).'
  190. WHERE `id_product` = '.intval($id_product).' AND id_shop IN ('.SCI::getSelectedShopActionList(true,$id_product).')');
  191. }
  192. Db::getInstance()->Execute('
  193. UPDATE `'._DB_PREFIX_.'product`
  194. SET `quantity` =
  195. (
  196. SELECT SUM(`quantity`)
  197. FROM `'._DB_PREFIX_.'product_attribute`
  198. WHERE `id_product` = '.intval($id_product).'
  199. )
  200. WHERE `id_product` = '.intval($id_product));
  201. }
  202. if(_s("CAT_APPLY_ALL_CART_RULES"))
  203. SpecificPriceRule::applyAllRules(array((int)$id_product));
  204. }
  205. }
  206. elseif(!empty($action) && $action=="update" && !empty($gr_id))
  207. {
  208. $id_product=intval(Tools::getValue('id_product'));
  209. if(!empty($id_product))
  210. {
  211. $updated_products[$id_product]=$id_product;
  212. $TODO="UPDATE "._DB_PREFIX_."product SET `date_upd`='".psql(date("Y-m-d H:i:s"))."' WHERE id_product=".intval($id_product).";";
  213. if(SCMS)
  214. $TODO.="UPDATE "._DB_PREFIX_."product_shop SET `date_upd`='".psql(date("Y-m-d H:i:s"))."' WHERE id_product=".intval($id_product)." AND id_shop IN (".psql(SCI::getSelectedShopActionList(true)).");";
  215. Db::getInstance()->Execute($TODO);
  216. $doHookUpdateQuantity = false;
  217. $ecotaxrate=SCI::getEcotaxTaxRate();
  218. $id_product_attribute=$gr_id;
  219. $fields=array('reference','supplier_reference','ean13','upc','location','default_on','wholesale_price','minimal_quantity','unit_price_impact','available_date','sc_active');
  220. $shopfields=array('wholesale_price','unit_price_impact','default_on','minimal_quantity','available_date');
  221. $updated_field=(Tools::getValue('updated_field'));
  222. $todo=array();
  223. $shoptodo=array(); // used for actions in PS 1.5
  224. sc_ext::readCustomCombinationsGridConfigXML('updateSettings');
  225. foreach($fields AS $field)
  226. {
  227. if (isset($_POST[$field]))
  228. {
  229. if(version_compare(_PS_VERSION_, '1.6.1', '>=') && $field=="default_on")
  230. {
  231. $val = Tools::getValue($field);
  232. if(empty($val))
  233. $val = "NULL";
  234. else
  235. $val = "'".intval($val)."'";
  236. $todo[]='`'.$field."`=".$val;
  237. }
  238. else
  239. $todo[]='`'.$field."`='".psql(Tools::getValue($field))."'";
  240. if($field==$updated_field)
  241. addToHistory('cat_prop_attr','modification',$field,intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",psql(Tools::getValue($field)));
  242. }
  243. }
  244. if (version_compare(_PS_VERSION_, '1.4.0.0', '>=') && isset($_POST['default_on']) && intval($_POST['default_on'])==1)
  245. {
  246. $p=new Product($id_product);
  247. $p->deleteDefaultAttributes();
  248. $p->setDefaultAttribute($id_product_attribute);
  249. }
  250. if (isset($_POST['quantityupdate']) || isset($_POST['quantity']))
  251. {
  252. $quantity=intval(Tools::getValue('quantity'));
  253. $quantityUpdate=intval(Tools::getValue('quantityupdate',0));
  254. if ($quantityUpdate!=0)
  255. {
  256. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  257. {
  258. foreach(SCI::getSelectedShopActionList(false, $id_product) AS $id_shop)
  259. {
  260. $exist = StockAvailable::getStockAvailableIdByProductId((int)$id_product, (int)$id_product_attribute, (int)$id_shop);
  261. if(!empty($exist))
  262. SCI::updateQuantity((int)$id_product, (int)$id_product_attribute, $quantityUpdate, (int)$id_shop);
  263. else
  264. StockAvailable::setQuantity((int)$id_product, (int)$id_product_attribute, $quantityUpdate, (int)$id_shop);
  265. }
  266. //SCI::qtySumStockAvailable((int)$id_product);
  267. }
  268. $newQuantity = $quantity;
  269. }else{
  270. $newQuantity = $quantity;
  271. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  272. foreach(SCI::getSelectedShopActionList(false, $id_product) AS $id_shop)
  273. SCI::setQuantity($id_product, $id_product_attribute, $newQuantity, $id_shop);
  274. }
  275. $todo[]='`quantity`='.intval($newQuantity);
  276. if(_s("CAT_ACTIVE_HOOK_UPDATE_QUANTITY")=="1" && version_compare(_PS_VERSION_, '1.5.0.0', '<'))
  277. {
  278. $doHookUpdateQuantity = true;
  279. }
  280. if($field==$updated_field)
  281. addToHistory('cat_prop_attr','modification','quantity',intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",intval($newQuantity));
  282. }
  283. if (isset($_POST['price']) || isset($_POST['priceextax'])) // need tax rate?
  284. {
  285. $sql='SELECT t.rate,p.price,p.weight FROM `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'tax` t WHERE p.id_product='.intval($id_product).' AND t.id_tax=p.id_tax';
  286. if (version_compare(_PS_VERSION_, '1.4.0.0', '>='))
  287. $sql='SELECT t.rate,p.price,p.weight
  288. FROM `'._DB_PREFIX_.'product` p
  289. LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = '.(int)SCI::getDefaultCountryId().' AND tr.`id_state` = 0)
  290. LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
  291. WHERE p.id_product='.intval($id_product);
  292. $p=Db::getInstance()->getRow($sql);
  293. $taxrate=$p['rate']/100+1;
  294. }
  295. if (isset($_POST['priceextax'])) // excluding tax should be placed before including taxe for price round.
  296. {
  297. if (version_compare(_PS_VERSION_, '1.4.0.0', '>='))
  298. {
  299. $todo[]="`price`='".((floatval($_POST["priceextax"])-(floatval($_POST["productprice"]))))."'";
  300. $shoptodo[]="`price`='".((floatval($_POST["priceextax"])-(floatval($_POST["productprice"]))))."'";
  301. }elseif(!isset($_POST['price'])){ // priority to TTC value for old PS versions
  302. $todo[]="`price`='".((floatval($_POST["priceextax"])-(floatval($_POST["productprice"])))*$taxrate)."'";
  303. }
  304. if($field==$updated_field)
  305. addToHistory('cat_prop_attr','modification','price',intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",(floatval($_POST["priceextax"])-(floatval($_POST["productprice"]))));
  306. }
  307. if (isset($_POST['ecotax']) && isset($_POST['ecotaxentered']) && $_POST['ecotaxentered']==1)
  308. {
  309. if (version_compare(_PS_VERSION_, '1.3.0.0', '>='))
  310. {
  311. $todo[]="`ecotax`='".(floatval($_POST["ecotax"])/$ecotaxrate)."'";
  312. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  313. $shoptodo[]="`ecotax`='".(floatval($_POST["ecotax"])/$ecotaxrate)."'";
  314. }
  315. else
  316. $todo[]="`ecotax`='".floatval($_POST["ecotax"])."'";
  317. if($field==$updated_field)
  318. addToHistory('cat_prop_attr','modification','ecotax',intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",floatval($_POST["ecotax"]));
  319. }
  320. if (isset($_POST['price']) && version_compare(_PS_VERSION_, '1.4.0.0', '<'))
  321. {
  322. //$todo[]="`price`='".(floatval($_POST["price"])-(floatval($_POST["productpriceinctax"]-(_s('CAT_PROD_ECOTAXINCLUDED') && isset($_POST["pecotax"]) ? floatval($_POST["pecotax"]):0))))."'";
  323. $ecotax = (_s('CAT_PROD_ECOTAXINCLUDED') && isset($_POST["ecotax"]) ? floatval($_POST["ecotax"]):0);
  324. $pecotax = (_s('CAT_PROD_ECOTAXINCLUDED') && isset($_POST["productecotax"]) ? floatval($_POST["productecotax"]*$ecotaxrate):0);
  325. $todo[]="`price`='".floatval((floatval($_POST["price"])-$ecotax)-(floatval($_POST["productpriceinctax"])-$pecotax))."'";
  326. if($field==$updated_field)
  327. addToHistory('cat_prop_attr','modification','price',intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",(floatval($_POST["price"])-(floatval($_POST["productpriceinctax"]))));
  328. }
  329. if (isset($_POST['weight']))
  330. {
  331. $todo[]="`weight`='".(floatval($_POST["weight"])-(floatval($_POST["pweight"])))."'";
  332. $shoptodo[]="`weight`='".(floatval($_POST["weight"])-(floatval($_POST["pweight"])))."'";
  333. if($field==$updated_field)
  334. addToHistory('cat_prop_attr','modification','weight',intval($id_product_attribute),0,_DB_PREFIX_."product_attribute",(floatval($_POST["weight"])-(floatval($_POST["pweight"]))));
  335. }
  336. if (isset($_POST['available_later']) && SCI::getConfigurationValue("SC_DELIVERYDATE_INSTALLED")=="1")
  337. {
  338. if(!empty($_POST['available_later']))
  339. {
  340. $sql = "SELECT id_sc_available_later FROM "._DB_PREFIX_."sc_available_later WHERE available_later='".pSQL($_POST['available_later'])."' AND id_lang='".(int)$id_lang."'";
  341. $find_available_later=Db::getInstance()->ExecuteS($sql);
  342. if(!empty($find_available_later[0]["id_sc_available_later"]))
  343. $_POST['available_later'] = $find_available_later[0]["id_sc_available_later"];
  344. else
  345. {
  346. $sql = "INSERT INTO "._DB_PREFIX_."sc_available_later (id_lang, available_later) VALUES ('".(int)$id_lang."', '".pSQL($_POST['available_later'])."')";
  347. Db::getInstance()->Execute($sql);
  348. $_POST['available_later'] = Db::getInstance()->Insert_ID();
  349. }
  350. }
  351. else
  352. $_POST['available_later'] = 0;
  353. $todo[]="`id_sc_available_later`='".intval($_POST['available_later'])."'";
  354. }
  355. if (count($todo))
  356. {
  357. $sql = "UPDATE "._DB_PREFIX_."product SET `date_upd`=NOW() WHERE id_product=".intval($id_product);
  358. Db::getInstance()->Execute($sql);
  359. $sql = "UPDATE "._DB_PREFIX_."product_attribute SET `date_upd`=NOW(),".join(' , ',$todo)." WHERE id_product_attribute=".intval($id_product_attribute);
  360. Db::getInstance()->Execute($sql);
  361. if($doHookUpdateQuantity && isset($newQuantity))
  362. {
  363. if (!_s('APP_COMPAT_EBAY'))
  364. {
  365. if (_s('APP_COMPAT_HOOK'))
  366. SCI::hookExec('actionUpdateQuantity',
  367. array(
  368. 'id_product' => $id_product,
  369. 'id_product_attribute' => $id_product_attribute,
  370. 'quantity' => $newQuantity
  371. )
  372. );
  373. }
  374. }
  375. }
  376. if (isset($_POST['quantityupdate']) || isset($_POST['quantity']))
  377. {
  378. Db::getInstance()->Execute('
  379. UPDATE `'._DB_PREFIX_.'product`
  380. SET `quantity` =
  381. (
  382. SELECT SUM(`quantity`)
  383. FROM `'._DB_PREFIX_.'product_attribute`
  384. WHERE `id_product` = '.intval($id_product).'
  385. )
  386. WHERE `id_product` = '.intval($id_product));
  387. }
  388. if (version_compare(_PS_VERSION_, '1.5.0.0', '>='))
  389. {
  390. foreach($shopfields AS $field)
  391. {
  392. if (isset($_POST[$field]))
  393. {
  394. if(version_compare(_PS_VERSION_, '1.6.1', '>=') && $field=="default_on")
  395. {
  396. $val = $_POST[$field];
  397. if(empty($val))
  398. $val = "NULL";
  399. else
  400. $val = "'".intval($val)."'";
  401. $shoptodo[]='`'.$field."`=".$val;
  402. }
  403. else
  404. $shoptodo[]=psql($field)."='".psql($_POST[$field])."'";
  405. }
  406. }
  407. if (count($shoptodo))
  408. {
  409. $sql = "UPDATE "._DB_PREFIX_."product_attribute_shop SET ".join(' , ',$shoptodo)." WHERE id_product_attribute=".intval($id_product_attribute)." AND id_shop IN (".psql(SCI::getSelectedShopActionList(true)).")";
  410. Db::getInstance()->Execute($sql);
  411. }
  412. if (isset($_POST['supplier_reference']))
  413. {
  414. $sql = "SELECT id_supplier FROM "._DB_PREFIX_."product WHERE id_product=".intval($id_product);
  415. $row = Db::getInstance()->getRow($sql);
  416. $id_supplier=(int)$row['id_supplier'];
  417. // public function addSupplierReference($id_supplier, $id_product_attribute, $supplier_reference = null, $price = null, $id_currency = null)
  418. if ($id_supplier > 0)
  419. {
  420. $id_product_supplier = (int)ProductSupplier::getIdByProductAndSupplier((int)$id_product, (int)$id_product_attribute, (int)$id_supplier);
  421. if (!$id_product_supplier)
  422. {
  423. //create new record
  424. $product_supplier_entity = new ProductSupplier();
  425. $product_supplier_entity->id_product = (int)$id_product;
  426. $product_supplier_entity->id_product_attribute = (int)$id_product_attribute;
  427. $product_supplier_entity->id_supplier = (int)$id_supplier;
  428. $product_supplier_entity->product_supplier_reference = psql($_POST['supplier_reference']);
  429. $product_supplier_entity->product_supplier_price_te = 0;
  430. $product_supplier_entity->id_currency = 0;
  431. $product_supplier_entity->save();
  432. }
  433. else
  434. {
  435. $product_supplier = new ProductSupplier((int)$id_product_supplier);
  436. $product_supplier->product_supplier_reference = psql($_POST['supplier_reference']);
  437. $product_supplier->update();
  438. }
  439. }
  440. }
  441. if (isset($_POST['wholesale_price']))
  442. {
  443. $sql = "SELECT id_supplier FROM "._DB_PREFIX_."product WHERE id_product=".intval($id_product);
  444. $row = Db::getInstance()->getRow($sql);
  445. $id_supplier=(int)$row['id_supplier'];
  446. // public function addSupplierReference($id_supplier, $id_product_attribute, $supplier_reference = null, $price = null, $id_currency = null)
  447. if ($id_supplier > 0)
  448. {
  449. $id_product_supplier = (int)ProductSupplier::getIdByProductAndSupplier((int)$id_product, (int)$id_product_attribute, (int)$id_supplier);
  450. if (!$id_product_supplier)
  451. {
  452. //create new record
  453. $product_supplier_entity = new ProductSupplier();
  454. $product_supplier_entity->id_product = (int)$id_product;
  455. $product_supplier_entity->id_product_attribute = (int)$id_product_attribute;
  456. $product_supplier_entity->id_supplier = (int)$id_supplier;
  457. $product_supplier_entity->product_supplier_price_te = psql($_POST['wholesale_price']);
  458. $product_supplier_entity->id_currency = 0;
  459. $product_supplier_entity->save();
  460. }
  461. else
  462. {
  463. $product_supplier = new ProductSupplier((int)$id_product_supplier);
  464. $product_supplier->product_supplier_price_te = psql($_POST['wholesale_price']);
  465. $product_supplier->update();
  466. }
  467. }
  468. }
  469. }
  470. $deleted = false;
  471. foreach ($_POST as $key=>$value)
  472. {
  473. $sub = substr($key, 0, 5);
  474. if($sub=="attr_" && $key!="attr_ids")
  475. {
  476. if(!$deleted)
  477. {
  478. $sql = "DELETE FROM "._DB_PREFIX_."product_attribute_combination WHERE id_product_attribute='".(int)$id_product_attribute."'";
  479. Db::getInstance()->Execute($sql);
  480. $deleted=true;
  481. }
  482. if(!is_numeric($value))
  483. {
  484. $exp = explode("|||", $value);
  485. if(!empty($exp[1]))
  486. $value = $exp[1];
  487. }
  488. else
  489. $value = '';
  490. if(!empty($value))
  491. {
  492. $sql = "INSERT INTO "._DB_PREFIX_."product_attribute_combination (id_product_attribute, id_attribute)
  493. VALUES ('".(int)$id_product_attribute."','".(int)$value."')";
  494. Db::getInstance()->Execute($sql);
  495. }
  496. }
  497. }
  498. if (!_s('APP_COMPAT_EBAY'))
  499. {
  500. if (_s('APP_COMPAT_HOOK'))
  501. SCI::hookExec('updateProductAttribute', array('id_product_attribute' => intval($id_product_attribute),'product'=>new Product(intval($id_product))));
  502. }elseif(_s('APP_COMPAT_EBAY')){
  503. Configuration::updateValue('EBAY_SYNC_LAST_PRODUCT', min(Configuration::get('EBAY_SYNC_LAST_PRODUCT'),intval($id_product)));
  504. }
  505. sc_ext::readCustomCombinationsGridConfigXML('onAfterUpdateSQL');
  506. }
  507. }
  508. sc_ext::readCustomCombinationsGridConfigXML('extraVars');
  509. QueueLog::delete(($log_ids[$num]));
  510. }
  511. }
  512. // PM Cache
  513. if(!empty($updated_products))
  514. ExtensionPMCM::clearFromIdsProduct($updated_products);
  515. // RETURN
  516. $return = json_encode(array("callback"=>$callbacks));
  517. }
  518. }
  519. echo $return;