Bitrix-D7  20.5.0
sale/lib/internals/basket.php
См. документацию.
1 <?php
2 /**
3  * Bitrix Framework
4  * @package bitrix
5  * @subpackage sale
6  * @copyright 2001-2012 Bitrix
7  */
8 namespace Bitrix\Sale\Internals;
9 
10 use Bitrix\Main;
12 
13 Loc::loadMessages(__FILE__);
14 
15 class BasketTable extends Main\Entity\DataManager
16 {
17 
18  /**
19  * @param $id
20  * @return Main\Entity\DeleteResult
21  * @throws Main\ArgumentException
22  */
23  public static function deleteBundle($id)
24  {
25  $id = intval($id);
26  if ($id <= 0)
27  throw new Main\ArgumentNullException("id");
28 
29  $itemsFromDbList = BasketTable::getList(
30  array(
31  "filter" => array(
32  'SET_PARENT_ID' => $id,
33  ),
34  "select" => array("ID")
35  )
36  );
37  while ($itemsFromDbItem = $itemsFromDbList->fetch())
38  BasketTable::deleteWithItems($itemsFromDbItem['ID']);
39 
40  return BasketTable::deleteWithItems($id);
41  }
42 
43  /**
44  * @param $id
45  * @return Main\Entity\DeleteResult
46  * @throws Main\ArgumentException
47  * @throws Main\ArgumentNullException
48  */
49  public static function deleteWithItems($id)
50  {
51  $id = intval($id);
52  if ($id <= 0)
53  throw new Main\ArgumentNullException("id");
54 
55  $itemsList = BasketPropertyTable::getList(
56  array(
57  "select" => array("ID"),
58  "filter" => array("BASKET_ID" => $id),
59  )
60  );
61  while ($item = $itemsList->fetch())
62  BasketPropertyTable::delete($item["ID"]);
63 
64  return BasketTable::delete($id);
65  }
66 
67  /**
68  * @return string
69  */
70  public static function getTableName()
71  {
72  return 'b_sale_basket';
73  }
74 
75  /**
76  * @return array
77  */
78  public static function getMap()
79  {
80  global $DB;
81 
82  $connection = Main\Application::getConnection();
83  $helper = $connection->getSqlHelper();
84 
85  return array(
86  'ID' => array(
87  'data_type' => 'integer',
88  'primary' => true,
89  'autocomplete' => true,
90  ),
91  'LID' => array(
92  'data_type' => 'string',
93  'required' => true,
94  'validation' => array(__CLASS__, 'validateLid'),
95  ),
96  'FUSER_ID' => array(
97  'data_type' => 'integer',
98  'required' => true,
99  ),
100 
101  new Main\Entity\ReferenceField(
102  'FUSER',
103  'Bitrix\Sale\Internals\Fuser',
104  array('=this.FUSER_ID' => 'ref.ID'),
105  array('join_type' => 'INNER')
106  ),
107 
108  new Main\Entity\ReferenceField(
109  'USER',
110  'Bitrix\Main\User',
111  array('=ref.ID' => 'this.FUSER.USER_ID')
112  ),
113 
114  'ORDER_ID' => array(
115  'data_type' => 'integer'
116  ),
117 
118  new Main\Entity\ReferenceField(
119  'ORDER',
120  'Bitrix\Sale\Internals\Order',
121  array('=this.ORDER_ID' => 'ref.ID')
122  ),
123 
124  'PRODUCT_ID' => array(
125  'data_type' => 'integer',
126  'required' => true,
127  ),
128  'PRODUCT' => array(
129  'data_type' => 'Product',
130  'reference' => array(
131  '=this.PRODUCT_ID' => 'ref.ID'
132  )
133  ),
134  'PRODUCT_PRICE_ID' => array(
135  'data_type' => 'integer'
136  ),
137  'PRICE_TYPE_ID' => array(
138  'data_type' => 'integer'
139  ),
140  'NAME' => array(
141  'data_type' => 'string'
142  ),
143 
144  new Main\Entity\ExpressionField(
145  'NAME_WITH_IDENT',
146  $helper->getConcatFunction("%s", "' ['", "%s", "']'"),
147  array('NAME', 'PRODUCT_ID')
148  ),
149 
150  new Main\Entity\FloatField(
151  'PRICE'
152  ),
153 
154  'CURRENCY' => array(
155  'data_type' => 'string',
156  'required' => true,
157  'validation' => array(__CLASS__, 'validateCurrency'),
158  ),
159 
160  new Main\Entity\FloatField(
161  'BASE_PRICE'
162  ),
163 
164  'VAT_INCLUDED' => array(
165  'data_type' => 'boolean',
166  'values' => array('Y','N')
167  ),
168 
169  'DATE_INSERT' => array(
170  'data_type' => 'datetime'
171  ),
172  new Main\Entity\ExpressionField(
173  'DATE_INS',
174  $DB->datetimeToDateFunction('%s'),
175  array('DATE_INSERT'),
176  array('data_type' => 'datetime')
177  ),
178 
179  'DATE_UPDATE' => array(
180  'data_type' => 'datetime'
181  ),
182  new Main\Entity\ExpressionField(
183  'DATE_UPD',
184  $DB->datetimeToDateFunction('%s'),
185  array('DATE_UPDATE'),
186  array('data_type' => 'datetime')
187  ),
188 
189  'DATE_REFRESH' => array(
190  'data_type' => 'datetime'
191  ),
192  new Main\Entity\ExpressionField(
193  'DATE_REF',
194  $DB->datetimeToDateFunction('%s'),
195  array('DATE_REFRESH'),
196  array('data_type' => 'datetime')
197  ),
198 
199  new Main\Entity\FloatField(
200  'WEIGHT'
201  ),
202 
203  new Main\Entity\FloatField(
204  'QUANTITY',
205  array(
206  'required' => true
207  )
208  ),
209 
210  'DELAY' => array(
211  'data_type' => 'boolean',
212  'values' => array('N','Y')
213  ),
214 
215  'SUMMARY_PRICE' => array(
216  'data_type' => 'float',
217  'expression' => array(
218  '(%s * %s)', 'QUANTITY', 'PRICE'
219  )
220  ),
221 
222  'CAN_BUY' => array(
223  'data_type' => 'boolean',
224  'values' => array('N','Y')
225  ),
226 
227  'MARKING_CODE_GROUP' => array(
228  'data_type' => 'string',
229  ),
230 
231  'MODULE' => array(
232  'data_type' => 'string'
233  ),
234 
235  'PRODUCT_PROVIDER_CLASS' => array(
236  'data_type' => 'string'
237  ),
238 
239  'NOTES' => array(
240  'data_type' => 'string'
241  ),
242 
243  'DETAIL_PAGE_URL' => array(
244  'data_type' => 'string'
245  ),
246 
247  new Main\Entity\FloatField(
248  'DISCOUNT_PRICE',
249  array(
250  'default_value' => '0.00'
251  )
252  ),
253 
254  'CATALOG_XML_ID' => array(
255  'data_type' => 'string'
256  ),
257 
258  'PRODUCT_XML_ID' => array(
259  'data_type' => 'string'
260  ),
261 
262  'DISCOUNT_NAME' => array(
263  'data_type' => 'string',
264  'validation' => array(__CLASS__, 'validateDiscountName'),
265  ),
266 
267  'DISCOUNT_VALUE' => array(
268  'data_type' => 'string',
269  'validation' => array(__CLASS__, 'validateDiscountValue'),
270  ),
271 
272  'DISCOUNT_COUPON' => array(
273  'data_type' => 'string',
274  'validation' => array(__CLASS__, 'validateDiscountCoupon'),
275  ),
276 
277  new Main\Entity\FloatField(
278  'VAT_RATE'
279  ),
280 
281  new Main\Entity\ExpressionField(
282  'VAT_RATE_PRC',
283  '100 * %s',
284  array('VAT_RATE')
285  ),
286 
287  'SUBSCRIBE' => array(
288  'data_type' => 'boolean',
289  'values' => array('N','Y')
290  ),
291  'N_SUBSCRIBE' => array(
292  'data_type' => 'integer',
293  'expression' => array(
294  'CASE WHEN %s = \'Y\' THEN 1 ELSE 0 END', 'SUBSCRIBE'
295  )
296  ),
297 
298  'RESERVED' => array(
299  'data_type' => 'boolean',
300  'values' => array('N', 'Y'),
301  ),
302 
303  new Main\Entity\FloatField(
304  'RESERVE_QUANTITY'
305  ),
306 
307  'BARCODE_MULTI' => array(
308  'data_type' => 'boolean',
309  'values' => array('N','Y')
310  ),
311 
312  'CUSTOM_PRICE' => array(
313  'data_type' => 'boolean',
314  'values' => array('N','Y')
315  ),
316 
317  'DIMENSIONS' => array(
318  'serialized' => true,
319  'data_type' => 'string'
320  ),
321 
322  new Main\Entity\IntegerField(
323  'TYPE'
324  ),
325  new Main\Entity\IntegerField(
326  'SET_PARENT_ID'
327  ),
328  new Main\Entity\IntegerField(
329  'MEASURE_CODE'
330  ),
331 
332  'MEASURE_NAME' => array(
333  'data_type' => 'string'
334  ),
335 
336  'CALLBACK_FUNC' => array(
337  'data_type' => 'string'
338  ),
339 
340  'ORDER_CALLBACK_FUNC' => array(
341  'data_type' => 'string'
342  ),
343 
344  'CANCEL_CALLBACK_FUNC' => array(
345  'data_type' => 'string'
346  ),
347 
348  'PAY_CALLBACK_FUNC' => array(
349  'data_type' => 'string'
350  ),
351 
352  'RECOMMENDATION' => array(
353  'data_type' => 'string'
354  ),
355 
356 
357  'ALL_PRICE' => array(
358  'data_type' => 'float',
359  'expression' => array(
360  '(%s + %s)', 'PRICE', 'DISCOUNT_PRICE'
361  )
362  ),
363 
364  'SUMMARY_PURCHASING_PRICE' => array(
365  'data_type' => 'float',
366  'expression' => array(
367  '(%s) * %s', 'PRODUCT.PURCHASING_PRICE_IN_SITE_CURRENCY', 'QUANTITY'
368  )
369  ),
370  'GROSS_PROFIT' => array(
371  'data_type' => 'float',
372  'expression' => array(
373  '(%s) - (%s)', 'SUMMARY_PRICE', 'SUMMARY_PURCHASING_PRICE'
374  )
375  ),
376  'PROFITABILITY' => array(
377  'data_type' => 'float',
378  'expression' => array(
379  'CASE WHEN %s is NULL OR %s=0 THEN NULL ELSE (%s) * 100 / (%s) END',
380  'SUMMARY_PURCHASING_PRICE', 'SUMMARY_PURCHASING_PRICE', 'GROSS_PROFIT', 'SUMMARY_PURCHASING_PRICE'
381  )
382  ),
383 
384  'SHIPMENT_ITEM' => array(
385  'data_type' => 'ShipmentItem',
386  'reference' => array(
387  '=ref.BASKET_ID' => 'this.ID',
388  )
389  ),
390  'SHIPMENT' => array(
391  'data_type' => 'Shipment',
392  'reference' => array(
393  '=ref.ID' => 'this.SHIPMENT_ITEM.ORDER_DELIVERY_ID',
394  )
395  ),
396 
397  'PAYMENT' => array(
398  'data_type' => 'Payment',
399  'reference' => array(
400  '=ref.ORDER_ID' => 'this.ORDER_ID',
401  )
402  ),
403 
404  new Main\Entity\IntegerField(
405  'SORT',
406  array(
407  'default' => '100'
408  )
409  ),
410 
411  'XML_ID' => array(
412  'data_type' => 'string'
413  ),
414  );
415  }
416 
417  /**
418  * Returns validators for CURRENCY field.
419  *
420  * @return array
421  */
422  public static function validateCurrency()
423  {
424  return array(
425  new Main\Entity\Validator\Length(null, 3),
426  );
427  }
428 
429  /**
430  * Returns validators for LID field.
431  *
432  * @return array
433  */
434  public static function validateLid()
435  {
436  return array(
437  new Main\Entity\Validator\Length(null, 2),
438  );
439  }
440 
441  /**
442  * Returns validators for DISCOUNT_NAME field.
443  *
444  * @return array
445  */
446  public static function validateDiscountName()
447  {
448  return array(
449  new Main\Entity\Validator\Length(null, 255),
450  );
451  }
452 
453  /**
454  * Returns validators for DISCOUNT_VALUE field.
455  *
456  * @return array
457  */
458  public static function validateDiscountValue()
459  {
460  return array(
461  new Main\Entity\Validator\Length(null, 32),
462  );
463  }
464 
465  /**
466  * Returns validators for DISCOUNT_COUPON field.
467  *
468  * @return array
469  */
470  public static function validateDiscountCoupon()
471  {
472  return array(
473  new Main\Entity\Validator\Length(null, 32),
474  );
475  }
476 
477 
478 }
static getConnection($name="")
Static method returns database connection for the specified name.
Exception is thrown when "empty" value is passed to a function that does not accept it as a valid arg...
static loadMessages($file)
Loads language messages for specified file in a lazy way.
Definition: loc.php:67
static validateCurrency()
Returns validators for CURRENCY field.
static validateLid()
Returns validators for LID field.
static validateDiscountCoupon()
Returns validators for DISCOUNT_COUPON field.
static validateDiscountValue()
Returns validators for DISCOUNT_VALUE field.
static validateDiscountName()
Returns validators for DISCOUNT_NAME field.