Bitrix-D7  20.5.0
tradebindingentity.php
См. документацию.
1 <?php
2 
3 namespace Bitrix\Sale;
4 
5 use Bitrix\Main;
7 
8 /**
9  * Class TradeBindingEntity
10  * @package Bitrix\Sale
11  */
13 {
14  private $tradePlatform = null;
15 
16  /**
17  * @return string
18  */
19  public static function getRegistryEntity()
20  {
22  }
23 
24  /**
25  * @return string
26  */
27  public static function getRegistryType()
28  {
30  }
31 
32  /**
33  * @return array
34  */
35  public static function getAvailableFields()
36  {
37  return [
38  'ORDER_ID', 'EXTERNAL_ORDER_ID',
39  'TRADING_PLATFORM_ID', 'PARAMS', 'XML_ID'
40  ];
41  }
42 
43  /**
44  * @return array
45  */
46  protected static function getMeaningfulFields()
47  {
48  return array();
49  }
50 
51  /**
52  * @return array
53  */
54  protected static function getFieldsMap()
55  {
57  }
58 
59  /**
60  * @param TradeBindingCollection $collection
61  * @param TradingPlatform\Platform|null $platform
62  * @return mixed
63  * @throws Main\ArgumentException
64  * @throws Main\SystemException
65  */
66  public static function create(TradeBindingCollection $collection, TradingPlatform\Platform $platform = null)
67  {
68  /** @var TradeBindingEntity $entity */
69  $entity = static::createEntityObject();
70 
71  $entity->setCollection($collection);
72 
73  if ($platform !== null)
74  {
75  $entity->setFieldNoDemand('TRADING_PLATFORM_ID', $platform->getId());
76  $entity->setFieldNoDemand('XML_ID', static::generateXmlId());
77  }
78 
79  return $entity;
80  }
81 
82  /**
83  * @return string
84  */
85  public static function generateXmlId()
86  {
87  return uniqid('bx_');
88  }
89 
90  /**
91  * @param array $fields
92  * @return mixed
93  * @throws Main\ArgumentException
94  * @throws Main\SystemException
95  */
96  private static function createEntityObject(array $fields = array())
97  {
98  $registry = Registry::getInstance(static::getRegistryType());
99  $entityClassName = $registry->get(Registry::ENTITY_TRADE_BINDING_ENTITY);
100 
101  return new $entityClassName($fields);
102  }
103 
104  /**
105  * @param $id
106  * @return array|false
107  * @throws Main\ArgumentException
108  * @throws Main\ArgumentNullException
109  * @throws Main\ObjectPropertyException
110  * @throws Main\SystemException
111  */
112  public static function loadForOrder($id)
113  {
114  if (intval($id) <= 0)
115  {
116  throw new Main\ArgumentNullException("id");
117  }
118 
119  $registry = Registry::getInstance(static::getRegistryType());
120 
121  /** @var TradeBindingCollection $tradeBindingCollection */
122  $tradeBindingCollection = $registry->get(Registry::ENTITY_TRADE_BINDING_COLLECTION);
123  $dbRes = $tradeBindingCollection::getList([
124  'filter' => ['ORDER_ID' => $id]
125  ]);
126 
127  $entityList = [];
128  while ($data = $dbRes->fetch())
129  {
130  $entityList[] = static::createEntityObject($data);
131  }
132 
133  return $entityList;
134  }
135 
136  /**
137  * @return Result
138  * @throws \Exception
139  */
140  public function save()
141  {
142  $result = new Result();
143 
144  if (!$this->isChanged())
145  {
146  return $result;
147  }
148 
149  $id = $this->getId();
150 
151  if ($id > 0)
152  {
153  $fields = $this->getFields()->getChangedValues();
154  $r = $this->updateInternal($id, $fields);
155  $result->setId($r->getId());
156  }
157  else
158  {
159  /** @var TradeBindingCollection $collection */
160  $collection = $this->getCollection();
161 
162  /** @var Order $order */
163  $order = $collection->getOrder();
164 
165  $this->setFieldNoDemand('ORDER_ID', $order->getId());
166 
167  if ((int)$this->getField('EXTERNAL_ORDER_ID') <= 0)
168  {
169  $this->setFieldNoDemand('EXTERNAL_ORDER_ID', $order->getId());
170  }
171 
172  $fields = $this->getFields()->getValues();
173  $r = $this->addInternal($fields);
174  if ($r->isSuccess())
175  {
176  $id = $r->getId();
177  $this->setFieldNoDemand('ID', $id);
178  }
179  }
180 
181  if (!$r->isSuccess())
182  {
183  $result->addErrors($r->getErrors());
184  return $result;
185  }
186 
187  $result->setId($id);
188 
189  return $result;
190  }
191 
192  /**
193  * @return TradingPlatform\Platform|null
194  * @throws Main\ArgumentException
195  * @throws Main\ArgumentNullException
196  * @throws Main\ObjectPropertyException
197  * @throws Main\SystemException
198  */
199  public function getTradePlatform()
200  {
201  if ($this->tradePlatform === null)
202  {
203  if ($this->getField('TRADING_PLATFORM_ID') > 0)
204  {
205  $dbRes = TradingPlatformTable::getList([
206  'select' => ['CODE'],
207  'filter' => [
208  '=ID' => $this->getField('TRADING_PLATFORM_ID')
209  ]
210  ]);
211 
212  if ($item = $dbRes->fetch())
213  {
214  $this->tradePlatform = TradingPlatform\Landing\Landing::getInstanceByCode($item['CODE']);
215  }
216  }
217  }
218 
219  return $this->tradePlatform;
220  }
221 
222  /**
223  * @param $primary
224  * @param array $data
225  * @return Main\Entity\UpdateResult
226  * @throws \Exception
227  */
228  protected function updateInternal($primary, array $data)
229  {
230  return TradingPlatform\OrderTable::update($primary, $data);
231  }
232 
233  /**
234  * @param array $data
235  * @return Main\Entity\AddResult
236  * @throws \Exception
237  */
238  protected function addInternal(array $data)
239  {
240  return TradingPlatform\OrderTable::add($data);
241  }
242 
243  /**
244  * @return null|string
245  * @internal
246  *
247  */
248  public static function getEntityEventName()
249  {
250  return 'SaleTradeBindingEntity';
251  }
252 
253 }
Exception is thrown when "empty" value is passed to a function that does not accept it as a valid arg...
static getMap()
Returns entity map definition.
updateInternal($primary, array $data)
static create(TradeBindingCollection $collection, TradingPlatform\Platform $platform=null)