/modules/sale/lib/internals/product.php

https://gitlab.com/alexprowars/bitrix · PHP · 266 lines · 229 code · 23 blank · 14 comment · 6 complexity · b9fb46d635dd74b1ad8e8f06f532a0be MD5 · raw file

  1. <?php
  2. /**
  3. * Bitrix Framework
  4. * @package bitrix
  5. * @subpackage sale
  6. * @copyright 2001-2012 Bitrix
  7. *
  8. * @ignore
  9. * @see \Bitrix\Catalog\ProductTable
  10. */
  11. namespace Bitrix\Sale\Internals;
  12. use Bitrix\Main;
  13. use Bitrix\Main\Localization\Loc;
  14. Loc::loadMessages(__FILE__);
  15. if (!Main\Loader::includeModule('iblock'))
  16. {
  17. return;
  18. }
  19. class ProductTable extends Main\Entity\DataManager
  20. {
  21. public static function getTableName()
  22. {
  23. return 'b_catalog_product';
  24. }
  25. public static function getMap()
  26. {
  27. // Get weight factor
  28. $siteId = '';
  29. $weight_koef = 0;
  30. $site_currency = '';
  31. if (class_exists('\CBaseSaleReportHelper'))
  32. {
  33. if (\CBaseSaleReportHelper::isInitialized())
  34. {
  35. $siteId = \CBaseSaleReportHelper::getDefaultSiteId();
  36. if ($siteId !== null)
  37. {
  38. $weight_koef = intval(\CBaseSaleReportHelper::getDefaultSiteWeightDivider());
  39. }
  40. // Get site currency
  41. $site_currency = \CBaseSaleReportHelper::getSiteCurrencyId();
  42. }
  43. }
  44. if ($weight_koef <= 0) $weight_koef = 1;
  45. global $DB;
  46. if (function_exists('___dbCastIntToChar') !== true)
  47. {
  48. eval(
  49. 'function ___dbCastIntToChar($dbtype, $param)'.
  50. '{'.
  51. ' $result = $param;'.
  52. ' if (ToLower($dbtype) === "mssql")'.
  53. ' {'.
  54. ' $result = "CAST(".$param." AS VARCHAR)";'.
  55. ' }'.
  56. ' return $result;'.
  57. '}'
  58. );
  59. }
  60. $fieldsMap = array(
  61. 'ID' => array(
  62. 'data_type' => 'integer',
  63. 'primary' => true
  64. ),
  65. /*'IBLOCK_ID' => array(
  66. 'data_type' => 'integer'
  67. ),*/
  68. 'TIMESTAMP_X' => array(
  69. 'data_type' => 'integer'
  70. ),
  71. 'DATE_UPDATED' => array(
  72. 'data_type' => 'datetime',
  73. 'expression' => array(
  74. $DB->datetimeToDateFunction('%s'), 'TIMESTAMP_X',
  75. )
  76. ),
  77. 'QUANTITY' => array(
  78. 'data_type' => 'float'
  79. ),
  80. 'MEASURE' => array(
  81. 'data_type' => 'integer'
  82. ),
  83. 'PURCHASING_PRICE' => array(
  84. 'data_type' => 'float'
  85. ),
  86. 'PURCHASING_CURRENCY' => array(
  87. 'data_type' => 'string'
  88. ),
  89. 'IBLOCK' => array(
  90. 'data_type' => 'Bitrix\Iblock\Element',
  91. 'reference' => array('=this.ID' => 'ref.ID')
  92. ),
  93. 'NAME' => array(
  94. 'data_type' => 'string',
  95. 'expression' => array(
  96. '%s', 'IBLOCK.NAME'
  97. )
  98. ),
  99. 'NAME_WITH_IDENT' => array(
  100. 'data_type' => 'string',
  101. 'expression' => array(
  102. $DB->concat('%s', '\' [\'', ___dbCastIntToChar('mysql', '%s'), '\']\''), 'NAME', 'ID'
  103. )
  104. ),
  105. 'ACTIVE' => array(
  106. 'data_type' => 'boolean',
  107. 'expression' => array(
  108. '%s', 'IBLOCK.ACTIVE'
  109. ),
  110. 'values' => array('N','Y')
  111. ),
  112. 'WEIGHT' => array(
  113. 'data_type' => 'float'
  114. ),
  115. 'WEIGHT_IN_SITE_UNITS' => array(
  116. 'data_type' => 'float',
  117. 'expression' => array(
  118. '%s / '.$DB->forSql($weight_koef), 'WEIGHT'
  119. )
  120. ),
  121. 'PRICE' => array(
  122. 'data_type' => 'float',
  123. 'expression' => array(
  124. '(SELECT b_catalog_price.PRICE FROM b_catalog_price
  125. LEFT JOIN b_catalog_group ON b_catalog_group.ID = b_catalog_price.CATALOG_GROUP_ID
  126. WHERE
  127. b_catalog_price.PRODUCT_ID = %s
  128. AND
  129. b_catalog_group.base = \'Y\'
  130. AND
  131. ( b_catalog_price.quantity_from <= 1 OR b_catalog_price.quantity_from IS NULL )
  132. AND
  133. ( b_catalog_price.quantity_to >= 1 OR b_catalog_price.quantity_to IS NULL)
  134. LIMIT 1)', 'ID'
  135. )
  136. ),
  137. 'CURRENCY' => array(
  138. 'data_type' => 'string',
  139. 'expression' => array(
  140. '(SELECT b_catalog_price.CURRENCY FROM b_catalog_price
  141. LEFT JOIN b_catalog_group ON b_catalog_group.ID = b_catalog_price.CATALOG_GROUP_ID
  142. WHERE
  143. b_catalog_price.PRODUCT_ID = %s
  144. AND
  145. b_catalog_group.base = \'Y\'
  146. AND
  147. ( b_catalog_price.quantity_from <= 1 OR b_catalog_price.quantity_from IS NULL )
  148. AND
  149. ( b_catalog_price.quantity_to >= 1 OR b_catalog_price.quantity_to IS NULL)
  150. LIMIT 1)', 'ID'
  151. )
  152. ),
  153. 'SUMMARY_PRICE' => array(
  154. 'data_type' => 'float',
  155. 'expression' => array(
  156. '%s * %s', 'QUANTITY', 'PRICE'
  157. ),
  158. ),
  159. 'CURRENT_CURRENCY_RATE' => array(
  160. 'data_type' => 'float',
  161. 'expression' => array(
  162. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE IS NOT NULL THEN b_catalog_currency_rate.RATE ELSE b_catalog_currency.AMOUNT END)
  163. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  164. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  165. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = %s
  166. ORDER BY DATE_RATE DESC', 1).')', 'ID', 'CURRENCY'
  167. )
  168. ),
  169. 'CURRENT_CURRENCY_RATE_CNT' => array(
  170. 'data_type' => 'float',
  171. 'expression' => array(
  172. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE_CNT IS NOT NULL THEN b_catalog_currency_rate.RATE_CNT ELSE b_catalog_currency.AMOUNT_CNT END)
  173. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  174. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  175. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = %s
  176. ORDER BY DATE_RATE DESC', 1).')', 'ID', 'CURRENCY'
  177. )
  178. ),
  179. 'CURRENT_SITE_CURRENCY_RATE' => array(
  180. 'data_type' => 'float',
  181. 'expression' => array(
  182. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE IS NOT NULL THEN b_catalog_currency_rate.RATE ELSE b_catalog_currency.AMOUNT END)
  183. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  184. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  185. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = \''.$DB->forSql($site_currency).'\'
  186. ORDER BY DATE_RATE DESC', 1).')', 'ID'
  187. )
  188. ),
  189. 'CURRENT_SITE_CURRENCY_RATE_CNT' => array(
  190. 'data_type' => 'float',
  191. 'expression' => array(
  192. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE_CNT IS NOT NULL THEN b_catalog_currency_rate.RATE_CNT ELSE b_catalog_currency.AMOUNT_CNT END)
  193. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  194. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  195. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = \''.$DB->forSql($site_currency).'\'
  196. ORDER BY DATE_RATE DESC', 1).')', 'ID'
  197. )
  198. ),
  199. 'PURCHASING_CURRENCY_RATE' => array(
  200. 'data_type' => 'float',
  201. 'expression' => array(
  202. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE IS NOT NULL THEN b_catalog_currency_rate.RATE ELSE b_catalog_currency.AMOUNT END)
  203. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  204. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  205. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = %s
  206. ORDER BY DATE_RATE DESC', 1).')', 'ID', 'PURCHASING_CURRENCY'
  207. )
  208. ),
  209. 'PURCHASING_CURRENCY_RATE_CNT' => array(
  210. 'data_type' => 'float',
  211. 'expression' => array(
  212. '('.$DB->topSql('SELECT (CASE WHEN b_catalog_currency_rate.RATE_CNT IS NOT NULL THEN b_catalog_currency_rate.RATE_CNT ELSE b_catalog_currency.AMOUNT_CNT END)
  213. FROM b_catalog_product INNER JOIN b_catalog_currency ON 1=1
  214. LEFT JOIN b_catalog_currency_rate ON (b_catalog_currency.CURRENCY = b_catalog_currency_rate.CURRENCY AND b_catalog_currency_rate.DATE_RATE <= '.$DB->datetimeToDateFunction('b_catalog_product.TIMESTAMP_X').')
  215. WHERE b_catalog_product.ID = %s AND b_catalog_currency.CURRENCY = %s
  216. ORDER BY DATE_RATE DESC', 1).')', 'ID', 'PURCHASING_CURRENCY'
  217. )
  218. ),
  219. 'PRICE_IN_SITE_CURRENCY' => array(
  220. 'data_type' => 'float',
  221. 'expression' => array(
  222. '%s * (%s * %s / %s / %s)',
  223. 'PRICE', 'CURRENT_CURRENCY_RATE', 'CURRENT_SITE_CURRENCY_RATE_CNT', 'CURRENT_SITE_CURRENCY_RATE', 'CURRENT_CURRENCY_RATE_CNT'
  224. )
  225. ),
  226. 'PURCHASING_PRICE_IN_SITE_CURRENCY' => array(
  227. 'data_type' => 'float',
  228. 'expression' => array(
  229. '%s * (%s * %s / %s / %s)',
  230. 'PURCHASING_PRICE', 'PURCHASING_CURRENCY_RATE', 'CURRENT_SITE_CURRENCY_RATE_CNT', 'CURRENT_SITE_CURRENCY_RATE', 'PURCHASING_CURRENCY_RATE_CNT'
  231. )
  232. ),
  233. 'SUMMARY_PRICE_IN_SITE_CURRENCY' => array(
  234. 'data_type' => 'float',
  235. 'expression' => array(
  236. '%s * (%s * %s / %s / %s)',
  237. 'SUMMARY_PRICE', 'CURRENT_CURRENCY_RATE', 'CURRENT_SITE_CURRENCY_RATE_CNT', 'CURRENT_SITE_CURRENCY_RATE', 'CURRENT_CURRENCY_RATE_CNT'
  238. )
  239. )
  240. );
  241. return $fieldsMap;
  242. }
  243. }