PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/storecommander/ead6f6fce09/SC/lib/cat/msproduct/cat_msproduct_get.php

https://gitlab.com/ptisky/API_prestashop
PHP | 311 lines | 259 code | 18 blank | 34 comment | 22 complexity | cdfa1cdabea5190ca39ed77e65d736d4 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',0);
  24. $id_lang=intval(Tools::getValue('id_lang'));
  25. $cntProducts=count(explode(',',$idlist));
  26. $shops = array();
  27. $filters = "";
  28. $colonnes = "";
  29. $xml = "";
  30. $sql ="SELECT *
  31. FROM "._DB_PREFIX_."shop
  32. WHERE deleted!='1'
  33. ORDER BY name";
  34. $res = Db::getInstance()->executeS($sql);
  35. foreach($res as $shop)
  36. {
  37. $shop['name'] = str_replace("&", _l('and'), $shop['name']);
  38. $shops[$shop["id_shop"]] = $shop["name"]." (#".$shop["id_shop"].")";
  39. }
  40. // Tax
  41. $arrTax=array(0 => '-');
  42. $tax=array(0 => 0);
  43. if (version_compare(_PS_VERSION_, '1.4.0.0', '>='))
  44. {
  45. $sql='SELECT trg.name, trg.id_tax_rules_group,t.rate
  46. FROM `'._DB_PREFIX_.'tax_rules_group` trg
  47. LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (trg.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = '.(int)SCI::getDefaultCountryId().' AND tr.`id_state` = 0)
  48. LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
  49. WHERE trg.active=1';
  50. $res=Db::getInstance()->ExecuteS($sql);
  51. foreach($res as $row){
  52. if ($row['name']=='') $row['name']=' ';
  53. $arrTax[$row['id_tax_rules_group']]=$row['name'];
  54. $tax[$row['id_tax_rules_group']]=$row['rate'];
  55. }
  56. }else{
  57. $sql = "SELECT id_tax,rate FROM "._DB_PREFIX_."tax";
  58. $res=Db::getInstance()->ExecuteS($sql);
  59. foreach($res as $row){
  60. $arrTax[$row['id_tax']]=$row['rate'];
  61. $tax[$row['id_tax']]=$row['rate'];
  62. }
  63. }
  64. // SETTINGS, FILTERS AND COLONNES
  65. $sourceGridFormat=SCI::getGridViews("msproduct");
  66. $sql_gridFormat = $sourceGridFormat;
  67. sc_ext::readCustomMsProductGridConfigXML('gridConfig');
  68. $gridFormat=$sourceGridFormat;
  69. $cols=explode(',',$gridFormat);
  70. $all_cols = explode(',',$gridFormat);
  71. $colSettings=array();
  72. $colSettings=SCI::getGridFields("msproduct");
  73. sc_ext::readCustomMsProductGridConfigXML('colSettings');
  74. /*
  75. 0: coef = PV HT - PV HT
  76. 1: coef = (PV HT - PA HT)*100 / PA HT
  77. 2: coef = PV HT / PA HT
  78. 3: coef = PV TTC / PA HT
  79. 4: coef = (PV TTC - PA HT)*100 / PA HT
  80. 5: coef = (PV HT - PA HT)*100 / PV HT
  81. */
  82. function getColIndex($col)
  83. {
  84. global $cols;
  85. foreach($cols as $key=>$field)
  86. {
  87. if($field==$col)
  88. return $key+7;
  89. }
  90. return -1;
  91. }
  92. $marginMatrix=array(
  93. 0=>'[=c'.getColIndex('price').'-c'.getColIndex('wholesale_price').']',
  94. 1=>'[=(c'.getColIndex('price').'-c'.getColIndex('wholesale_price').')*100/c'.getColIndex('wholesale_price').']',
  95. 2=>'[=c'.getColIndex('price').'/c'.getColIndex('wholesale_price').']',
  96. 3=>'[=c'.getColIndex('price_inc_tax').'/c'.getColIndex('wholesale_price').']',
  97. 4=>'[=(c'.getColIndex('price_inc_tax').'-c'.getColIndex('wholesale_price').')*100/c'.getColIndex('wholesale_price').']',
  98. 5=>'[=(c'.getColIndex('price').'-c'.getColIndex('wholesale_price').')*100/c'.getColIndex('price').']'
  99. );
  100. $marginMatrix_form=array(
  101. 0=>'{price}-{wholesale_price}',
  102. 1=>'({price}-{wholesale_price})*100/{wholesale_price}',
  103. 2=>'{price}/{wholesale_price}',
  104. 3=>'{price_inc_tax}/{wholesale_price}',
  105. 4=>'({price_inc_tax}-{wholesale_price})*100/{wholesale_price}',
  106. 5=>'({price}-{wholesale_price})*100/{price}'
  107. );
  108. function getFooterColSettings()
  109. {
  110. global $cols,$colSettings;
  111. $footer='';
  112. foreach($cols AS $id => $col)
  113. {
  114. if (sc_array_key_exists($col,$colSettings) && sc_array_key_exists('footer',$colSettings[$col]))
  115. $footer.=$colSettings[$col]['footer'].',';
  116. else
  117. $footer.=',';
  118. }
  119. return $footer;
  120. }
  121. function getFilterColSettings()
  122. {
  123. global $cols,$colSettings;
  124. $filters='';
  125. foreach($cols AS $id => $col)
  126. {
  127. if($colSettings[$col]['filter']=="na")
  128. $colSettings[$col]['filter'] = "";
  129. $filters.=$colSettings[$col]['filter'].',';
  130. }
  131. $filters=trim($filters,',');
  132. return $filters;
  133. }
  134. function getColSettingsAsXML()
  135. {
  136. global $cols,$colSettings;
  137. $uiset = uisettings::getSetting('cat_msproduct');
  138. $tmp = explode('|',$uiset);
  139. $tmp = explode('-',$tmp[2]);
  140. $sizes = array();
  141. foreach($tmp AS $v)
  142. {
  143. $s = explode(':',$v);
  144. $sizes[$s[0]] = $s[1];
  145. }
  146. $tmp = explode('|',$uiset);
  147. $tmp = explode('-',$tmp[0]);
  148. $hidden = array();
  149. foreach($tmp AS $v)
  150. {
  151. $s = explode(':',$v);
  152. $hidden[$s[0]] = $s[1];
  153. }
  154. $xml='';
  155. foreach($cols AS $id => $col)
  156. {
  157. $xml.='<column id="'.$col.'"'.(sc_array_key_exists('format',$colSettings[$col])?
  158. ' format="'.$colSettings[$col]['format'].'"':'').
  159. ' width="'.( sc_array_key_exists($col,$sizes) ? $sizes[$col] : $colSettings[$col]['width']).'"'.
  160. ' hidden="'.( sc_array_key_exists($col,$hidden) ? $hidden[$col] : 0 ).'"'.
  161. ' align="'.$colSettings[$col]['align'].'"
  162. type="'.$colSettings[$col]['type'].'"
  163. sort="'.$colSettings[$col]['sort'].'"
  164. color="'.$colSettings[$col]['color'].'">'.$colSettings[$col]['text'];
  165. if (sc_array_key_exists('options',$colSettings[$col]))
  166. {
  167. foreach($colSettings[$col]['options'] AS $k => $v)
  168. {
  169. $xml.='<option value="'.str_replace('"','\'',$k).'"><![CDATA['.$v.']]></option>';
  170. }
  171. }
  172. $xml.='</column>'."\n";
  173. }
  174. return $xml;
  175. }
  176. function generateValue($col, $prodrow)
  177. {
  178. global $colSettings, $tax;
  179. $prodrow = (array)$prodrow;
  180. $return = "";
  181. switch($col){
  182. case'wholesale_price':
  183. $return .= "<cell".($prodrow['wholesale_price'] > $prodrow['price']?' bgColor="#FF0000" style="color:#FFFFFF"':'').">".number_format($prodrow['wholesale_price'], (_s('CAT_PROD_WHOLESALEPRICE4DEC')?4:2), '.', '')."</cell>";
  184. break;
  185. case'quantity':
  186. $return .= "<cell>".SCI::getProductQty((int)$prodrow['id'])."</cell>";
  187. break;
  188. case'advanced_stock_management':
  189. $type_advanced_stock_management = 1;// Not Advanced Stock Management
  190. if(SCAS)
  191. {
  192. if($prodrow['advanced_stock_management']==1)
  193. {
  194. $type_advanced_stock_management = 2;// With Advanced Stock Management
  195. if(!StockAvailable::dependsOnStock((int)$prodrow['id_product'], $prodrow['id_selected_shop']))
  196. $type_advanced_stock_management = 3;// With Advanced Stock Management + Manual management
  197. }
  198. }
  199. $return .= "<cell>".$type_advanced_stock_management."</cell>";
  200. break;
  201. case'ecotax':
  202. $return .= "<cell>".number_format( $prodrow['ecotax'] * SCI::getEcotaxTaxRate() , 2, '.', '')."</cell>";
  203. break;
  204. case'price':
  205. $return .= "<cell".(sc_array_key_exists('wholesale_price',$prodrow) && $prodrow['wholesale_price'] > $prodrow['price']?' bgColor="#FF0000" style="color:#FFFFFF"':'').">".number_format($prodrow['price'], 2, '.', '')."</cell>";
  206. break;
  207. case'available_now':case'available_later':
  208. $return .= "<cell".(sc_array_key_exists($col,$prodrow) ? '><![CDATA['.$prodrow[$col].']]>' : ' type="ro">NA')."</cell>";
  209. break;
  210. case'link_rewrite':
  211. $return .= '<cell><![CDATA['.$prodrow[$col].']]></cell>';
  212. break;
  213. case'price_inc_tax':
  214. $return .= "<cell>".number_format($prodrow['price']*($tax[intval($prodrow['id_tax_rules_group'])]/100+1)+( $prodrow['ecotax']*SCI::getEcotaxTaxRate() ), 2, '.', '')."</cell>";
  215. break;
  216. case'margin':
  217. $return .= '<cell></cell>';
  218. break;
  219. case'supplier_reference':
  220. $sql_supplier ="SELECT *
  221. FROM "._DB_PREFIX_."product_supplier
  222. WHERE id_product = '".(int)$prodrow['id_product']."'
  223. AND id_product_attribute=0
  224. AND id_supplier = '".(int)$prodrow['id_supplier']."'";
  225. $product_supplier = Db::getInstance()->ExecuteS($sql_supplier);
  226. $ref_supp = "";
  227. if(!empty($product_supplier[0]['product_supplier_reference']))
  228. $ref_supp = $product_supplier[0]['product_supplier_reference'];
  229. $return .= '<cell><![CDATA['.$ref_supp.']]></cell>';
  230. break;
  231. default:
  232. if (sc_array_key_exists('buildDefaultValue',$colSettings[$col]) && $colSettings[$col]['buildDefaultValue']!='')
  233. {
  234. if ($colSettings[$col]['buildDefaultValue']=='ID' )
  235. $return .= "<cell>ID".$prodrow['id_product']."</cell>";
  236. }else{
  237. if ($col=='id_product')
  238. $return .= "<cell>".$prodrow['id']."</cell>";
  239. elseif ($col=='id_shop')
  240. $return .= "<cell>".$prodrow['id_selected_shop']."</cell>";
  241. else
  242. $return .= "<cell><![CDATA[".$prodrow[$col]."]]></cell>";
  243. }
  244. }
  245. return $return;
  246. }
  247. /*
  248. * PRODUCT SHOP
  249. */
  250. $sql ="SELECT ps.* ";
  251. sc_ext::readCustomMsProductGridConfigXML('SQLSelectDataSelect');
  252. $sql.=" FROM "._DB_PREFIX_."product_shop ps
  253. ".((!empty($sc_agent->id_employee))?" INNER JOIN "._DB_PREFIX_."employee_shop es ON (es.id_shop = ps.id_shop AND es.id_employee = '".(int)$sc_agent->id_employee."') ":"")."";
  254. sc_ext::readCustomMsProductGridConfigXML('SQLSelectDataLeftJoin');
  255. $sql.=" WHERE ps.id_product IN (".psql($idlist).")
  256. ORDER BY ps.id_product, ps.id_shop";
  257. $res = Db::getInstance()->executeS($sql);
  258. foreach($res as $product_by_shop)
  259. {
  260. if(!empty($product_by_shop["id_product"]) && !empty($product_by_shop["id_shop"]))
  261. {
  262. $product = new Product($product_by_shop["id_product"], false, $id_lang,$product_by_shop["id_shop"]);
  263. $product->id_selected_shop = $product_by_shop['id_shop'];
  264. $product->id_product = $product_by_shop["id_product"];
  265. $xml .="<row id=\"".$product_by_shop['id_product']."_".$product_by_shop['id_shop']."\">";
  266. sc_ext::readCustomMsProductGridConfigXML('rowUserData',(array)$product);
  267. foreach ($cols as $field)
  268. {
  269. if(!empty($field) && !empty($colSettings[$field]))
  270. {
  271. $xml .= generateValue($field, $product);
  272. }
  273. }
  274. $xml .="</row>";
  275. }
  276. }
  277. if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
  278. header("Content-type: application/xhtml+xml");
  279. } else {
  280. header("Content-type: text/xml");
  281. }
  282. echo("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
  283. echo '<rows><head>';
  284. echo getColSettingsAsXML();
  285. echo '<afterInit><call command="attachHeader"><param>'.getFilterColSettings().'</param></call>
  286. <call command="attachFooter"><param><![CDATA['.getFooterColSettings().']]></param></call></afterInit>';
  287. echo '</head>'."\n";
  288. echo '<userdata name="uisettings">'.uisettings::getSetting('cat_msproduct').'</userdata>'."\n";
  289. echo '<userdata name="marginMatrix_form">'.$marginMatrix_form[_s('CAT_PROD_GRID_MARGIN_OPERATION')].'</userdata>'."\n";
  290. sc_ext::readCustomMsProductGridConfigXML('gridUserData');
  291. echo $xml;
  292. ?>
  293. </rows>