42 $entityType = static::getEntityType(
$entity);
43 if ($entityType ===
null)
63 $fields[
'ENTITY_TYPE'] = $entityType;
65 foreach (
$result->getWarnings() as $resultWarning)
67 $code = $resultWarning->getCode();
68 $message = $resultWarning->getMessage();
71 if (
$entity instanceof \IEntityMarker)
78 $fields[
'TYPE'] = $isAutoFix ? static::ENTITY_MARKED_TYPE_AUTO : static::ENTITY_MARKED_TYPE_MANUAL;
79 $fields[
'SUCCESS'] = static::ENTITY_SUCCESS_CODE_FAIL;
82 $resultWarnings =
$result->getWarnings();
83 $lastWarning = end($resultWarnings);
84 $order->setField(
'REASON_MARKED', $lastWarning->getMessage());
91 $entity->setField(
'MARKED',
'Y');
106 $entityType = static::getEntityType(
$entity);
107 if ($entityType !==
null)
109 $r = static::updateItem($id, $values,
$order, $entityType);
110 if (!$r->isSuccess())
112 $result->addErrors($r->getErrors());
128 $orderCode =
$order->getInternalId();
130 if (!empty(static::$pool[$orderCode]) && !empty(static::$pool[$orderCode][$entityType]) && is_array(static::$pool[$orderCode][$entityType]))
132 foreach (static::$pool[$orderCode][$entityType] as $index =>
$fields)
136 foreach (static::getFieldsDuplicateCheck() as $checkField)
138 if (!empty(
$fields[$checkField]) && !empty($values[$checkField]) &&
$fields[$checkField] == $values[$checkField])
150 if (!empty($values[
'SUCCESS']))
152 static::$pool[$orderCode][$entityType][$index][
'SUCCESS'] = $values[
'SUCCESS'];
159 static::$pool[$orderCode][$entityType][] = $values;
173 $orderCode =
$order->getInternalId();
176 if (!empty(static::$pool[$orderCode]) && !empty(static::$pool[$orderCode][$entityType]) && is_array(static::$pool[$orderCode][$entityType]))
178 foreach (static::$pool[$orderCode][$entityType] as $index =>
$fields)
181 if ((isset(
$fields[
'ID']) && $id > 0 && intval(
$fields[
'ID']) == $id))
188 foreach (static::getFieldsDuplicateCheck() as $checkField)
190 if (!empty(
$fields[$checkField]) && !empty($values[$checkField]) &&
$fields[$checkField] == $values[$checkField])
203 static::$pool[$orderCode][$entityType][$index] = array_merge(
$fields, $values);
211 if (empty($values[
'ORDER']))
213 $values[
'ORDER'] =
$order;
218 $values[
'ORDER_ID'] =
$order->getId();
221 static::$pool[$orderCode][$entityType][] = $values;
234 if (empty(static::$pool[$orderCode]))
241 $entityType = static::getEntityType(
$entity);
242 if ($entityType !==
null && array_key_exists($entityType, static::$pool[$orderCode]))
244 return static::$pool[$orderCode][$entityType];
249 return static::$pool[$orderCode];
261 static::ENTITY_TYPE_ORDER =>
'\Bitrix\Sale\OrderBase',
262 static::ENTITY_TYPE_BASKET_ITEM =>
'\Bitrix\Sale\BasketItemBase',
263 static::ENTITY_TYPE_SHIPMENT =>
'\Bitrix\Sale\Shipment',
264 static::ENTITY_TYPE_PAYMENT =>
'\Bitrix\Sale\Payment',
265 static::ENTITY_TYPE_PROPERTY_VALUE =>
'\Bitrix\Sale\PropertyValue',
276 $typeList = static::getEntityTypeList();
278 foreach ($typeList as
$type => $entityClass)
280 if (
$entity instanceof $entityClass)
303 $oldMarkerDataList =
array();
307 $newOrderList =
array();
311 $orderCode =
$order->getInternalId();
314 foreach (static::$pool as $orderIndex => $entityList)
316 foreach ($entityList as $entityType => $fieldsList)
318 foreach ($fieldsList as $fieldIndex => $values)
320 if ($values[
'ORDER'] instanceof Order)
322 if (empty($values[
'ORDER_ID']) && $values[
'ORDER']->getId() > 0)
324 $values[
'ORDER_ID'] = $values[
'ORDER']->getId();
325 $newOrderList[] = $values[
'ORDER_ID'];
328 if (
$order instanceof Order && $values[
'ORDER']->getInternalId() !=
$order->getInternalId())
334 if (!empty($values[
'ENTITY']) && $values[
'ENTITY'] instanceof
Internals\
Entity)
336 if (empty($values[
'ENTITY_TYPE']))
338 $entityType = static::getEntityType($values[
'ENTITY']);
340 if (strval($entityType) !=
'')
342 $values[
'ENTITY_TYPE'] = $entityType;
346 if (!isset($values[
'ENTITY_ID']) || intval($values[
'ENTITY_ID']) <= 0)
348 $values[
'ENTITY_ID'] = $values[
'ENTITY']->getId();
354 if (empty($values[
'ID']))
356 if (intval($values[
'ENTITY_ID']) <= 0)
361 if (empty($values[
'ENTITY_TYPE']))
367 'ENTITY_TYPE' => $values[
'ENTITY_TYPE'],
368 'ENTITY_ID' => intval($values[
'ENTITY_ID']),
369 'TYPE' => $values[
'TYPE'] ??
'',
370 'CODE' => $values[
'CODE'] ??
'',
371 'MESSAGE' => $values[
'MESSAGE'] ??
'',
372 'COMMENT' => $values[
'COMMENT'] ??
'',
375 if (is_object(
$USER) &&
$USER->IsAuthorized())
381 if (intval($values[
'ORDER_ID']) >= 0)
383 $fields[
'ORDER_ID'] = intval($values[
'ORDER_ID']);
386 if (empty(
$fields[
'ENTITY_ID']) && intval($values[
'ENTITY_ID']) >= 0)
388 $fields[
'ENTITY_ID'] = intval($values[
'ENTITY_ID']);
391 if (empty(
$fields[
'ENTITY_TYPE']) && !empty($values[
'ENTITY_TYPE']))
393 $fields[
'ENTITY_TYPE'] = $values[
'ENTITY_TYPE'];
396 if (!empty($values[
'ID']))
401 if (!empty($values[
'SUCCESS']))
403 $fields[
'SUCCESS'] = $values[
'SUCCESS'];
406 if (!empty($values[
'DATE_CREATE']) && $values[
'DATE_CREATE'] instanceof
Main\
Type\
Date)
408 $fields[
'DATE_CREATE'] = $values[
'DATE_CREATE'];
411 if (!empty($values[
'DATE_UPDATE']) && $values[
'DATE_UPDATE'] instanceof
Main\
Type\
Date)
413 $fields[
'DATE_UPDATE'] = $values[
'DATE_UPDATE'];
416 if ($values[
'ORDER'] instanceof Order)
418 unset(static::$pool[$values[
'ORDER']->getInternalId()][$entityType][$fieldIndex]);
424 $markerOrderId =
null;
426 if (!empty($values[
'ORDER_ID']))
428 $markerOrderId = $values[
'ORDER_ID'];
431 $saveList[$markerOrderId][] =
$fields;
436 if (!empty($saveList) && is_array($saveList))
440 'ID',
'ORDER_ID',
'ENTITY_TYPE',
'ENTITY_ID',
'CODE',
'SUCCESS',
'MESSAGE'
443 '!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
445 'order' =>
array(
'ID' =>
'ASC')
448 foreach ($saveList as $fieldsList)
451 foreach ($fieldsList as
$fields)
453 if (!empty(
$fields[
'ORDER_ID']) && in_array(
$fields[
'ORDER_ID'], $newOrderList))
458 if (!empty(
$fields[
'ORDER_ID']) && (empty(
$filter[
'filter'][
'=ORDER_ID']) || !in_array(
$fields[
'ORDER_ID'],
$filter[
'filter'][
'=ORDER_ID'])))
463 if (!empty(
$fields[
'ENTITY_TYPE'])
464 && (empty(
$filter[
'filter'][
'=ENTITY_TYPE'])
465 || (is_array(
$filter[
'filter'][
'=ENTITY_TYPE']) && !in_array(
$fields[
'ENTITY_TYPE'],
$filter[
'filter'][
'=ENTITY_TYPE']))))
473 if (!empty(
$filter[
'filter'][
'=ENTITY_TYPE']))
478 if (isset($saveList[
$data[
'ORDER_ID']]) && is_array($saveList[
$data[
'ORDER_ID']]))
480 foreach($saveList[
$data[
'ORDER_ID']] as
$key => $values)
482 if (!empty($values[
'ID']) &&
$data[
'ID'] == $values[
'ID'])
486 $values = array_merge(
$data, $values);
487 $saveList[
$data[
'ORDER_ID']][
$key] = $values;
494 foreach (static::getFieldsDuplicateCheck() as $checkField)
496 if (!empty(
$data[$checkField]) && !empty($values[$checkField]) &&
$data[$checkField] == $values[$checkField])
509 foreach($saveList[
$data[
'ORDER_ID']] as $doubleKey => $doubleValues)
511 if ($doubleKey ==
$key)
514 if (!empty($doubleValues[
'ID']) &&
$data[
'ID'] == $doubleValues[
'ID'])
516 if (empty($values[
'SUCCESS']))
518 unset($doubleValues[
'SUCCESS']);
521 $values = array_merge($doubleValues, $values);
522 unset($saveList[
$data[
'ORDER_ID']][$doubleKey]);
530 if (!empty($values[
'SUCCESS']) &&
$data[
'SUCCESS'] != $values[
'SUCCESS'])
532 $fields[
'SUCCESS'] = $values[
'SUCCESS'];
542 foreach ($saveList as
$orderId => $fieldsList)
544 foreach ($fieldsList as
$fields)
548 $elementId = intval(
$fields[
'ID']);
554 if (!empty($oldMarkerDataList) && !empty($oldMarkerDataList[$elementId]))
556 foreach(
$fields as $fieldName => $fieldValue)
558 if (array_key_exists($fieldName, $oldMarkerDataList[$elementId])
559 && $oldMarkerDataList[$elementId][$fieldName] == $fieldValue)
569 if (empty(
$fields[
'DATE_UPDATE']))
574 if (!empty(
$fields[
'SUCCESS']) &&
$fields[
'SUCCESS'] == static::ENTITY_SUCCESS_CODE_DONE
575 && !empty($oldMarkerDataList) && !empty($oldMarkerDataList[$elementId]))
578 $oldMarkerDataList[$elementId][
'ENTITY_TYPE'],
579 $oldMarkerDataList[$elementId][
'ORDER_ID'],
581 $oldMarkerDataList[$elementId][
'ENTITY_ID'],
584 "ENTITY_ID" => $oldMarkerDataList[$elementId][
'ENTITY_ID'],
585 "MESSAGE" => $oldMarkerDataList[$elementId][
'MESSAGE'],
586 "ENTITY_TYPE" => $oldMarkerDataList[$elementId][
'ENTITY_TYPE'],
591 $r = static::delete($elementId);
592 if (!$r->isSuccess())
594 $result->addErrors($r->getErrors());
600 $r = static::updateInternal($elementId,
$fields);
601 if (!$r->isSuccess())
603 $result->addErrors($r->getErrors());
608 if (empty(
$fields[
'DATE_CREATE']))
613 $r = static::addInternal(
$fields);
614 if (!$r->isSuccess())
616 $result->addErrors($r->getErrors());
623 static::resetMarkers($orderCode);
631 if (intval($orderCode) > 0)
633 unset(static::$pool[$orderCode]);
637 static::$pool =
array();
663 '=ORDER_ID' =>
$order->getId(),
664 '=TYPE' => static::ENTITY_MARKED_TYPE_AUTO,
666 'select' =>
array(
'ID',
'ENTITY_TYPE',
'ENTITY_ID',
'CODE',
'SUCCESS'),
667 'order' =>
array(
'ID' =>
'DESC')
670 if (intval($markerId) > 0)
672 $filter[
'filter'][
'=ID'] = intval($markerId);
676 $filter[
'filter'][
'!=SUCCESS'] = static::ENTITY_SUCCESS_CODE_DONE;
680 while($markerData =
$res->fetch())
682 if ($markerData[
'SUCCESS'] == static::ENTITY_SUCCESS_CODE_DONE)
684 $resultList[
'LIST'][$markerData[
'ID']] = static::ENTITY_SUCCESS_CODE_DONE;
688 if (!
$entity = static::getEntity(
$order, $markerData[
'ENTITY_TYPE'], $markerData[
'ENTITY_ID']))
699 $r =
$entity->tryFixError($markerData[
'CODE']);
700 if ($r->isSuccess() && !$r->hasWarnings())
702 $markerData[
'SUCCESS'] = static::ENTITY_SUCCESS_CODE_DONE;
706 $markerData[
'SUCCESS'] = static::ENTITY_SUCCESS_CODE_FAIL;
707 if (!isset($resultList[
'ERRORS'][$markerData[
'ID']]))
709 $resultList[
'ERRORS'][$markerData[
'ID']] =
array();
711 $resultList[
'ERRORS'][$markerData[
'ID']] = array_merge($resultList[
'ERRORS'][$markerData[
'ID']], $r->getWarningMessages());
712 if (!$r->isSuccess())
714 $result->addErrors($r->getErrors());
718 static::updateMarker($markerData[
'ID'], $markerData,
$order,
$entity);
719 $resultList[
'LIST'][$markerData[
'ID']] = ($markerData[
'SUCCESS'] == static::ENTITY_SUCCESS_CODE_DONE);
723 if (!empty($resultList) && is_array($resultList))
737 public static function tryFixErrors()
739 static $orderList =
array();
740 $orderSaveList =
array();
745 $orderClass = $registry->getOrderClassName();
750 '=TYPE' => static::ENTITY_MARKED_TYPE_AUTO,
751 '!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
753 'select' =>
array(
'ID',
'ENTITY_TYPE',
'ENTITY_ID',
'CODE',
'ORDER_ID'),
754 'order' =>
array(
'ORDER_ID' =>
'ASC',
'ID' =>
'DESC')
758 if (array_key_exists(
$data[
'ORDER_ID'], $orderList))
773 if ($lastOrderId !==
null && $lastOrderId !==
$order->getId())
775 if (isset($orderSaveList[$lastOrderId]))
777 $r = $orderSaveList[$lastOrderId]->save();
778 unset($orderSaveList[$lastOrderId]);
782 if (!(
$entity instanceof \IEntityMarker))
790 $data[
'SUCCESS'] = static::ENTITY_SUCCESS_CODE_DONE;
792 if (!array_key_exists(
$data[
'ORDER_ID'], $orderSaveList))
799 $data[
'SUCCESS'] = static::ENTITY_SUCCESS_CODE_FAIL;
804 $lastOrderId =
$order->getId();
807 if (!empty($orderSaveList))
809 foreach ($orderSaveList as
$order)
815 foreach ($orderList as
$order)
817 static::saveMarkers(
$order);
825 $entityDat = static::getList(
$filter)->fetch();
844 static $entityList =
array();
848 if (!empty($entityList[
$hash]))
850 return $entityList[
$hash];
854 $entityCollection =
null;
856 if ($entityType == static::ENTITY_TYPE_ORDER)
864 elseif($entityType == static::ENTITY_TYPE_SHIPMENT)
867 $entityCollection =
$order->getShipmentCollection();
869 elseif($entityType == static::ENTITY_TYPE_PAYMENT)
872 $entityCollection =
$order->getPaymentCollection();
874 elseif($entityType == static::ENTITY_TYPE_BASKET_ITEM)
877 $entityCollection =
$order->getBasket();
880 if (
$entity ===
null && !$entityCollection)
908 return Internals\EntityMarkerTable::getList($parameters);
918 public static function delete($id)
920 if (intval($id) <= 0)
925 return Internals\EntityMarkerTable::delete($id);
930 return Internals\EntityMarkerTable::add(
$data);
935 return Internals\EntityMarkerTable::update($primary,
$data);
949 $orderCode =
$order->getInternalId();
951 if (!empty(static::$pool[$orderCode]))
953 foreach (static::$pool[$orderCode] as $poolEntityType => $fieldsList)
955 foreach ($fieldsList as $fieldIndex => $values)
957 if ($values[
'ORDER'] instanceof Order)
959 if (
$order instanceof Order && $values[
'ORDER']->getInternalId() !=
$order->getInternalId())
965 if (!empty($values[
'SUCCESS'])
966 && (isset($values[
'ENTITY_ID']) && intval($values[
'ENTITY_ID']) == intval(
$entityId))
967 && (isset($values[
'ENTITY_TYPE']) && $values[
'ENTITY_TYPE'] == $entityType)
968 && (isset($values[
'CODE']) && $values[
'CODE'] ==
$code)
971 if ((!empty($values[
'ID']) && $values[
'ID'] == $id) || !isset($values[
'ID']))
973 return $values[
'SUCCESS'];
985 $orderCode =
$order->getInternalId();
986 if (!empty(static::$pool[$orderCode]))
988 foreach (static::$pool[$orderCode] as $poolEntityType => $fieldsList)
990 foreach ($fieldsList as $fieldIndex => $values)
992 if ($values[
'ORDER'] instanceof Order)
994 if (
$order instanceof Order && $values[
'ORDER']->getInternalId() !=
$order->getInternalId())
1000 if(empty($values[
'SUCCESS']) || ($values[
'SUCCESS'] != static::ENTITY_SUCCESS_CODE_DONE))
1011 private static function getFieldsDuplicateCheck()
1027 if(intval($id) <= 0)
1034 'select' =>
array(
'ID')
1038 static::delete(
$data[
'ID']);
1052 if ($entityType = static::getEntityType(
$entity))
1056 '=ENTITY_ID' =>
$entity->getId(),
1057 '=ENTITY_TYPE' => $entityType
1059 'select' =>
array(
'ID')
1063 static::delete(
$data[
'ID']);
1071 'filter' => $values,
1072 'select' =>
array(
'ID')
1076 static::delete(
$data[
'ID']);
1090 public static function refreshMarkers(Order
$order)
1092 if (
$order->getId() == 0)
1101 '=ORDER_ID' =>
$order->getId(),
1102 '!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
1104 'select' => [
'ID',
'ENTITY_TYPE',
'ENTITY_ID',
'CODE',
'SUCCESS'],
1105 'order' => [
'ID' =>
'DESC']
1109 while($markerData =
$res->fetch())
1111 if (!empty($markList[$markerData[
'ENTITY_TYPE']])
1112 && !empty($markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']])
1113 && $markerData[
'CODE'] == $markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']]
1119 if ($markerData[
'SUCCESS'] != static::ENTITY_SUCCESS_CODE_DONE)
1121 $markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']][] = $markerData[
'CODE'];
1124 $poolItemSuccess = static::getPoolItemSuccess(
1127 $markerData[
'ENTITY_TYPE'],
1128 $markerData[
'ENTITY_ID'],
1132 if ($poolItemSuccess && $poolItemSuccess == static::ENTITY_SUCCESS_CODE_DONE)
1134 foreach ($markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']] as $markerIndex => $markerCode)
1136 if ($markerData[
'CODE'] == $markerCode)
1138 unset($markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']][$markerIndex]);
1142 if (empty($markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']]))
1144 unset($markList[$markerData[
'ENTITY_TYPE']][$markerData[
'ENTITY_ID']]);
1148 if (empty($markList[$markerData[
'ENTITY_TYPE']]))
1150 unset($markList[$markerData[
'ENTITY_TYPE']]);
1154 if (!empty($markList))
1156 foreach ($markList as $markEntityType => $markEntityList)
1158 foreach ($markEntityList as $markEntityId => $markEntityCodeList)
1160 if (empty($markEntityCodeList))
1162 if ((
$entity = static::getEntity(
$order, $markEntityType, $markEntityId)) && (
$entity instanceof \IEntityMarker))
1166 $markedField =
$entity->getMarkField();
1167 $entity->setField($markedField,
'N');
1175 if (empty($markList) && !static::hasErrors(
$order))
1177 $shipmentCollection =
$order->getShipmentCollection();
1178 if ($shipmentCollection->isMarked())
1181 foreach ($shipmentCollection as $shipment)
1183 if ($shipment->isMarked())
1185 $shipment->setField(
'MARKED',
'N');
1203 $order->setField(
'MARKED',
'N');
static loadMessages($file)
const SALE_ORDER_HISTORY_ACTION_LOG_LEVEL_1
static addAction($entityName, $orderId, $type, $id=null, $entity=null, array $fields=array(), $level=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)