53 return OrderTable::getEntity();
61 return BasketCompatibility::class;
73 $this->query =
new OrderQuery(static::getEntity());
98 $this->basket = $basketCompatibility;
107 $adminSection = (defined(
'ADMIN_SECTION') &&
ADMIN_SECTION ===
true);
109 $orderCompatibility =
new static();
115 $orderClassName = $registry->getOrderClassName();
135 if (isset(
$fields[
'PERSON_TYPE_ID']) && intval(
$fields[
'PERSON_TYPE_ID']) > 0)
140 $orderFields = static::replaceFields(
$fields, static::getOrderReplaceFields());
142 $orderFields = $orderCompatibility->parseRawFields(static::ENTITY_ORDER, $orderFields);
144 $orderFields = static::clearFields($orderFields);
145 foreach (static::getFieldsFromOtherEntities() as $wrongField)
147 if (array_key_exists($wrongField,
$fields))
148 unset($orderFields[$wrongField]);
151 $orderFields = static::convertDateFields($orderFields, static::getOrderDateFields());
153 unset($orderFields[
'MARKED']);
154 unset($orderFields[
'CANCELED']);
156 if (array_key_exists(
'PRICE', $orderFields))
158 $orderCompatibility->externalPrice = $orderFields[
'PRICE'];
165 unset($orderFields[
'PRICE']);
168 unset($orderFields[
'PRICE_DELIVERY']);
169 unset($orderFields[
'DISCOUNT_VALUE']);
170 unset($orderFields[
'TAX_VALUE']);
171 $order->setField(
'DATE_UPDATE',
new Main\Type\DateTime());
176 unset($orderFields[
'SUM_PAID']);
178 $order->setField(
'DATE_INSERT',
new Main\Type\DateTime());
179 $order->setField(
'DATE_UPDATE',
new Main\Type\DateTime());
182 unset($orderFields[
'TAX_PRICE']);
184 if (array_key_exists(
'STATUS_ID', $orderFields) &&
$order->getId() > 0)
186 $order->setField(
'STATUS_ID', $orderFields[
'STATUS_ID']);
187 unset($orderFields[
'STATUS_ID']);
190 if (isset($orderFields[
'USE_VAT']) && $orderFields[
'USE_VAT'] ===
true)
192 $orderFields[
'USE_VAT'] =
'Y';
195 $order->setFieldsNoDemand($orderFields);
197 $orderCompatibility->order =
$order;
199 $orderCompatibility->requestFields =
$fields;
203 return $orderCompatibility;
220 if (isset(
$fields[
'CANCELED']))
226 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_CANCEL_NO_PERMISSION'),
'SALE_COMPATIBLE_ORDER_CANCEL_NO_PERMISSION') );
232 if (!$r->isSuccess())
234 $result->addErrors($r->getErrors());
238 if (array_key_exists(
"REASON_CANCELED",
$fields))
241 $r =
$order->setField(
'REASON_CANCELED',
$fields[
'REASON_CANCELED']);
242 if (!$r->isSuccess())
244 $result->addErrors($r->getErrors());
260 if (!empty(
$fields[
'REASON_MARKED']))
262 $reasonMarked = trim(
$fields[
'REASON_MARKED']);
265 $r =
new Sale\Result();
266 $r->addError(
new Sale\ResultWarning($reasonMarked,
'SALE_ORDER_MARKER_ERROR'));
268 $registry = Sale\Registry::getInstance(static::getRegistryType());
271 $entityMarkerClassName = $registry->getEntityMarkerClassName();
279 if (!$r->isSuccess())
281 $result->addErrors($r->getErrors());
291 '=ACCOUNT_NUMBER' =>
$fields[
'ACCOUNT_NUMBER'],
294 'select' =>
array(
'ID')
297 $registry = Sale\Registry::getInstance(static::getRegistryType());
300 $orderClassName = $registry->getOrderClassName();
303 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_ACCOUNT_NUMBER_ALREADY_EXISTS'),
'SALE_COMPATIBLE_ORDER_ACCOUNT_NUMBER_ALREADY_EXISTS'));
328 public function fillShipmentCollectionFromRequest(Sale\ShipmentCollection $shipmentCollection,
array $fields)
333 if (!
$order = $shipmentCollection->getOrder())
335 throw new Main\ObjectNotFoundException(
'Entity "Order" not found');
340 $deliveryCode = trim((
string)(
$fields[
'DELIVERY_ID'] ??
''));
341 if ($deliveryCode ===
'')
343 $deliveryCode =
null;
346 if ($deliveryCode !==
null)
348 $deliveryId = \CSaleDelivery::getIdByCode($deliveryCode);
355 if (
count($shipmentCollection) == 2 && $shipmentCollection->isExistsSystemShipment())
358 foreach($shipmentCollection as $shipment)
360 if ($shipment->isSystem())
363 if ($deliveryId > 0 && $deliveryId != $shipment->getDeliveryId())
366 $r = $shipment->setField(
'DELIVERY_ID', $deliveryId);
370 $deliveryService = Sale\Delivery\Services\Manager::getObjectById($deliveryId);
371 if ($deliveryService)
373 $fields[
'DELIVERY_NAME'] = $deliveryService->isProfile()
374 ? $deliveryService->getNameWithParent()
375 : $deliveryService->getName();
379 $fields[
'DELIVERY_NAME'] =
'Not found [' . $deliveryId .
']';
384 $result->addErrors($r->getErrors());
387 elseif (intval($deliveryId) == 0 && array_key_exists(
'DELIVERY_ID',
$fields) || (intval($deliveryId) !== intval($deliveryCode)))
392 if (array_key_exists(
'PRICE_DELIVERY',
$fields) && (
float)
$fields[
'PRICE_DELIVERY'] != $shipment->getField(
'PRICE_DELIVERY'))
394 $fields[
'BASE_PRICE_DELIVERY'] = (float)
$fields[
'PRICE_DELIVERY'];
395 $fields[
'CUSTOM_PRICE_DELIVERY'] =
"Y";
397 unset(
$fields[
'PRICE_DELIVERY']);
400 $shipmentFields = static::convertDateFields(
$fields, static::getEntityDateFields($shipment));
402 unset($shipmentFields[
'ALLOW_DELIVERY']);
403 unset($shipmentFields[
'DEDUCTED']);
405 if (isset(
$fields[
'CURRENCY']))
407 if (
$fields[
'CURRENCY'] != $shipmentFields[
'CURRENCY'])
409 $shipmentFields[
'CURRENCY'] =
$fields[
'CURRENCY'];
414 $r = $shipment->setFields(static::clearFields($shipmentFields, static::getShipmentAvailableFields()));
417 static::fillOrderFieldsFromEntity(
$order, $shipment,
$fields, static::getShipmentFieldsToConvert());
421 $result->addErrors($r->getErrors());
424 if ($shipment !==
null)
436 if (intval($deliveryId) == 0)
438 $deliveryId = \Bitrix\Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId();
441 if (intval($deliveryId) > 0)
444 if ($shipment = static::createShipmentFromRequest($shipmentCollection, $deliveryId,
$fields))
446 if (isset(
$fields[
'TRACKING_NUMBER']) && strval(
$fields[
'TRACKING_NUMBER']) !=
'')
448 $shipment->setField(
'TRACKING_NUMBER',
$fields[
'TRACKING_NUMBER']);
451 if (isset(
$fields[
'DELIVERY_EXTRA_SERVICES']) && is_array(
$fields[
'DELIVERY_EXTRA_SERVICES']))
453 $shipment->setExtraServices(
$fields[
'DELIVERY_EXTRA_SERVICES']);
456 if (isset(
$fields[
'STORE_ID']) && intval(
$fields[
'STORE_ID']) > 0)
458 $shipment->setStoreId(
$fields[
'STORE_ID']);
461 if ($shipment !==
null)
466 static::fillOrderFieldsFromEntity(
$order, $shipment,
$fields, static::getShipmentFieldsToConvert());
474 $basketCompatibilityClassName = static::getBasketCompatibilityClassName();
477 $r = $basketCompatibilityClassName::syncShipmentCollectionAndBasket($shipmentCollection,
$basket);
478 if (!$r->isSuccess())
480 $result->addErrors($r->getErrors());
487 $r = static::syncShipmentCollectionFromRequest($shipmentCollection,
$fields);
488 if (!$r->isSuccess())
490 $result->addErrors($r->getErrors());
496 foreach ($shipmentCollection as $shipment)
498 if ($shipment->isSystem())
502 if (!$shipmentItemCollection = $shipment->getShipmentItemCollection())
504 throw new Main\ObjectNotFoundException(
'Entity "ShipmentItemCollection" not found');
507 if (!empty(
$fields[
'BARCODE_LIST']) && is_array(
$fields[
'BARCODE_LIST']))
510 $r = static::fillShipmentItemCollectionFromRequest($shipmentItemCollection,
$fields[
'BARCODE_LIST'],
$basket);
511 if (!$r->isSuccess())
513 $result->addErrors($r->getErrors());
531 $dateFields = static::getEntityDateFields(
$entity);
532 foreach ($allowFields as $checkField)
534 $checkOrderField =
$order->getField($checkField);
538 if (array_key_exists($checkField, $dateFields))
541 $checkOrderField = static::convertDateFieldToOldFormat(
$order->getField($checkField));
546 $setValue =
$entity->getField($checkField);
549 $setValue = static::convertDateField($checkField,
$requestFields[$checkField], static::getEntityDateFields(
$entity));
552 if (in_array($checkField, static::getAvailableFields()))
554 $order->setFieldNoDemand($checkField, $setValue);
575 $shipment = $shipmentCollection->createItem(
$service);
578 $serviceName =
$service->getNameWithParent();
581 $shipment->setField(
'DELIVERY_NAME', $serviceName);
591 $basePriceDelivery = $priceDelivery + floatval(
$requestFields[
'PRICE_DELIVERY_DIFF']);
594 $shipment->setFieldNoDemand(
'BASE_PRICE_DELIVERY', $basePriceDelivery);
595 $shipment->setFieldNoDemand(
'CURRENCY',
$requestFields[
'CURRENCY']);
597 $shipment->setFieldNoDemand(
'PRICE_DELIVERY', $priceDelivery);
600 $shipment->setFieldNoDemand(
'PRICE_DELIVERY',
$requestFields[
'PRICE_DELIVERY']);
604 $shipment->setFieldNoDemand(
'PRICE_DELIVERY', floatval(
$requestFields[
'PRICE_DELIVERY']));
605 $shipment->setFieldNoDemand(
'BASE_PRICE_DELIVERY', floatval(
$requestFields[
'PRICE_DELIVERY']));
606 $shipment->setFieldNoDemand(
'CURRENCY',
$requestFields[
'CURRENCY']);
607 $shipment->setFieldNoDemand(
'CUSTOM_PRICE_DELIVERY',
"Y");
629 $countShipments =
count($shipmentCollection);
630 $baseShipment =
null;
632 if ($countShipments <= 2 && $shipmentCollection->isExistsSystemShipment())
635 foreach ($shipmentCollection as $shipment)
637 if ($shipment->isSystem())
640 $baseShipment = $shipment;
649 if (!
$order = $shipmentCollection->getOrder())
651 throw new Main\ObjectNotFoundException(
'Entity "Order" not found');
655 if ($baseShipment ===
null)
660 if (isset(
$fields[
'ALLOW_DELIVERY']) && strval(
$fields[
'ALLOW_DELIVERY']) !=
'')
662 if ($baseShipment->getField(
'ALLOW_DELIVERY') !=
$fields[
'ALLOW_DELIVERY'])
664 if (
$fields[
'ALLOW_DELIVERY'] ==
"Y")
667 $r = $baseShipment->allowDelivery();
672 $r = $baseShipment->disallowDelivery();
677 $order->setFieldNoDemand(
'ALLOW_DELIVERY',
$fields[
'ALLOW_DELIVERY']);
681 $result->addErrors($r->getErrors());
687 if (isset(
$fields[
'DEDUCTED']) && strval(
$fields[
'DEDUCTED']) !=
'')
689 if ($baseShipment->getField(
'DEDUCTED') !=
$fields[
'DEDUCTED'])
691 if (
$fields[
'DEDUCTED'] ==
"Y")
694 $r = $baseShipment->tryShip();
699 $r = $baseShipment->tryUnship();
708 $result->addErrors($r->getErrors());
724 public function fillPaymentCollectionFromRequest(
array $fields)
729 throw new Main\ObjectNotFoundException(
'Entity "Order" not found');
735 throw new Main\ObjectNotFoundException(
'Entity "PaymentCollection" not found');
747 $isPayFromUserBudget =
null;
748 $backToUserBudget =
null;
750 if (array_key_exists(
'ONLY_FULL_PAY_FROM_ACCOUNT',
$fields))
752 $isPayFromUserBudget =
$fields[
'ONLY_FULL_PAY_FROM_ACCOUNT'];
755 if ($isPayFromUserBudget ===
null && array_key_exists(
'PAY_CURRENT_ACCOUNT',
$fields) &&
$fields[
'PAY_CURRENT_ACCOUNT'] !==
null)
757 $isPayFromUserBudget = (
$fields[
'PAY_CURRENT_ACCOUNT'] !=
"Y");
760 if (array_key_exists(
'PAY_FROM_ACCOUNT_BACK',
$fields))
762 $backToUserBudget = (
$fields[
'PAY_FROM_ACCOUNT_BACK'] ==
"Y");
766 $paySystemName =
null;
772 $paymentInner =
null;
773 $paymentOuter =
null;
778 if ((($countPayments == 0 &&
$order->getId() == 0)
785 if ($countPayments <= 1)
790 if (!isset(
$fields[
"PAY_SYSTEM_ID"]))
791 $fields[
"PAY_SYSTEM_ID"] = static::getDefaultPaySystemId(
$order->getPersonTypeId());
795 if (
$service = Sale\PaySystem\Manager::getObjectById(
$fields[
"PAY_SYSTEM_ID"]))
799 $paymentOuter->setField(
'DATE_BILL',
new Main\Type\DateTime());
800 $paymentOuter->setField(
'SUM', $needSum);
801 $paymentOuter->setField(
'PAY_SYSTEM_NAME',
$service->getField(
'NAME'));
802 $order->setFieldNoDemand(
'PAY_SYSTEM_ID',
$fields[
"PAY_SYSTEM_ID"]);
808 $paymentOuter =
null;
819 if (isset(
$fields[
"PAY_SYSTEM_ID"])
820 && $paymentOuter !==
null
821 && ($paymentOuter->getPaymentSystemId() != (
int)
$fields[
"PAY_SYSTEM_ID"])
825 if (
$service = Sale\PaySystem\Manager::getObjectById(
$fields[
"PAY_SYSTEM_ID"]))
828 $paymentOuter->setField(
'PAY_SYSTEM_NAME',
$service->getField(
'NAME'));
829 $paymentOuter->setField(
'PAY_SYSTEM_ID', intval(
$fields[
"PAY_SYSTEM_ID"]));
830 $order->setFieldNoDemand(
'PAY_SYSTEM_ID', intval(
$fields[
"PAY_SYSTEM_ID"]));
841 if ($countPayments > 0)
846 if ($paidFlag ===
null &&
$payment->isPaid() && $needSum == 0)
858 if ($paidFlag ===
null)
864 if ($paidFlag !=
$fields[
'PAYED'])
871 if ($isPayFromUserBudget !==
null)
873 if (static::canPayWithUserBudget($needSum,
$userId,
$currency, $isPayFromUserBudget))
875 $userBudget = Sale\Internals\UserBudgetPool::getUserBudget(
$userId,
$currency);
877 if ($userBudget >= $needSum)
885 $r = static::payFromBudget(
$order, $pay, $isPayFromUserBudget);
893 $r = $paymentOuter->setField(
'SUM', $needSum);
896 if (!$r->isSuccess())
898 $result->addErrors($r->getErrors());
903 $result->addErrors($r->getErrors());
914 if ($backToUserBudget &&
$payment->isInner())
941 if ($isPayFromUserBudget !==
null)
943 if (static::canPayWithUserBudget($needSum,
$userId,
$currency, $isPayFromUserBudget))
945 $userBudget = Sale\Internals\UserBudgetPool::getUserBudget(
$userId,
$currency);
947 $setSum = $userBudget;
950 $r = static::payFromBudget(
$order,
false);
957 $result->addErrors($r->getErrors());
970 if ($paymentItem->isInner())
972 $paymentInner = $paymentItem;
973 if (
$payment ===
null && $paymentItem->isPaid())
980 $paymentOuter = $paymentItem;
981 if (
$payment ===
null && $paymentItem->isPaid())
990 if ($paymentOuter !==
null)
1001 $paymentFields = static::convertDateFields(
$fields, static::getPaymentDateFields());
1004 if (!empty($paymentFields[
'PAY_SYSTEM_ID']) && $paymentFields[
'PAY_SYSTEM_ID'] !=
$payment->getPaymentSystemId())
1008 unset($paymentFields[
'PAY_SYSTEM_ID']);
1012 $paySystemId = (int)$paymentFields[
'PAY_SYSTEM_ID'];
1015 if ($paysystem = Sale\PaySystem\Manager::getObjectById($paySystemId))
1017 $paymentFields[
'PAY_SYSTEM_NAME'] = $paysystem->getField(
'NAME');
1023 $paymentFields = static::replaceFields($paymentFields, static::getPaymentReplaceFields());
1024 $paymentFields = static::clearFields($paymentFields, static::getPaymentAvailableFields());
1027 $r =
$payment->setFields($paymentFields);
1028 if ($r->isSuccess())
1035 $result->addErrors($r->getErrors());
1039 if (
$result->isSuccess() && intval($paySystemId) > 0)
1041 $order->setFieldNoDemand(
'PAY_SYSTEM_ID', $paySystemId);
1046 $paymentOuter =
null;
1058 if ($paymentOuter && !$paymentOuter->isPaid())
1060 if (
$order->getPrice() != $calcSum)
1062 $paymentOuter->setField(
'SUM', $paymentOuter->getSum() + (
$order->getPrice() - $calcSum));
1069 $fieldsFromOrder =
array(
1070 'PS_STATUS',
'PS_STATUS_CODE',
'PS_STATUS_DESCRIPTION',
1071 'PS_STATUS_MESSAGE',
'PS_SUM',
'PS_CURRENCY',
'PS_RESPONSE_DATE',
1072 'PAY_VOUCHER_NUM',
'PAY_VOUCHER_DATE',
'DATE_PAY_BEFORE',
1073 'DATE_BILL',
'PAY_SYSTEM_NAME',
'PAY_SYSTEM_ID',
1074 'DATE_PAYED',
'EMP_PAYED_ID',
'CURRENCY'
1077 foreach ($fieldsFromOrder as $fieldName)
1079 if (isset(
$fields[$fieldName]))
1084 case 'DATE_PAY_BEFORE':
1085 case 'PS_RESPONSE_DATE':
1086 if (!isset(
$fields[$fieldName]) || strval(
$fields[$fieldName]) ==
'')
1090 case 'PAY_VOUCHER_DATE':
1091 if (!isset(
$fields[$fieldName]) || strval(
$fields[$fieldName]) ==
'')
1096 if (!isset(
$fields[$fieldName]) || strval(
$fields[$fieldName]) ==
'')
1098 $fieldName =
'DATE_PAID';
1101 case 'EMP_PAYED_ID':
1102 $fieldName =
'EMP_PAID_ID';
1109 $paymentOuter->setFieldNoDemand($fieldName, $value);
1110 if ($fieldName ===
'PAY_SYSTEM_ID')
1112 $order->setFieldNoDemand(
'PAY_SYSTEM_ID', $value);
1115 if ($paysystem = Sale\PaySystem\Manager::getObjectById($value))
1116 $paymentOuter->setFieldNoDemand(
'PAY_SYSTEM_NAME', $paysystem->getField(
'NAME'));
1119 if ($fieldName ==
"DATE_PAID")
1120 $fieldName =
'DATE_PAYED';
1124 $order->setFieldNoDemand($fieldName, $value);
1133 if (isset(
$fields[
'PAY_SYSTEM_PRICE']))
1134 $paymentOuter->setField(
'PRICE_COD',
$fields[
'PAY_SYSTEM_PRICE']);
1143 if (array_key_exists(
'SUM_PAID',
$fields))
1155 $oldSumPaid =
$order->getSumPaid();
1157 $deltaSumPaid = floatval(
$fields[
'SUM_PAID']) - $oldSumPaid;
1159 if ($deltaSumPaid > 0)
1161 $paidPayment =
false;
1171 $paidPayment =
true;
1174 if (!$r->isSuccess())
1176 $result->addErrors($r->getErrors());
1185 $paymentSystemId =
null;
1192 $paymentSystemId = $firstPayment->getPaymentSystemId();
1193 if ($paymentSystemId > 0)
1195 $service = Sale\PaySystem\Manager::getObjectById($paymentSystemId);
1202 $paymentSystemId = static::getDefaultPaySystemId(
$order->getPersonTypeId());
1203 $service = Sale\PaySystem\Manager::getObjectById($paymentSystemId);
1211 $payment->setField(
'DATE_BILL',
new Main\Type\DateTime());
1212 $payment->setField(
'SUM', $deltaSumPaid);
1214 $order->setFieldNoDemand(
'PAY_SYSTEM_ID', $paymentSystemId);
1218 if (!$r->isSuccess())
1220 $result->addErrors($r->getErrors());
1231 private static function getDefaultPaySystemId($personTypeId)
1233 $personTypeId = intval($personTypeId);
1235 static $defaultPaySystemId =
array();
1236 if (isset($defaultPaySystemId[$personTypeId]))
1237 return $defaultPaySystemId[$personTypeId];
1239 $defaultPaySystemId[$personTypeId] = intval(Main\Config\Option::get(
'sale',
'1C_IMPORT_DEFAULT_PS', 0));
1240 if (isset($defaultPaySystemId[$personTypeId]) && ($defaultPaySystemId[$personTypeId] > 0))
1241 return $defaultPaySystemId[$personTypeId];
1243 if ($personTypeId > 0)
1245 $dbPaySystem = Sale\PaySystem\Manager::getList(
1247 'select' =>
array(
"ID"),
1250 '=PERSON_TYPE_ID' => $personTypeId,
1251 '=ENTITY_REGISTRY_TYPE' => static::getRegistryType()
1253 'order' =>
array(
'SORT'),
1257 if ($paySystem = $dbPaySystem->fetch())
1258 $defaultPaySystemId[$personTypeId] = intval($paySystem[
'ID']);
1260 if (isset($defaultPaySystemId[$personTypeId]) && ($defaultPaySystemId[$personTypeId] > 0))
1261 return $defaultPaySystemId[$personTypeId];
1264 $dbPaySystem = Sale\PaySystem\Manager::getList(
1266 'select' =>
array(
"ID"),
1269 '=ENTITY_REGISTRY_TYPE' => static::getRegistryType()
1271 'order' =>
array(
'SORT'),
1275 if ($paySystem = $dbPaySystem->fetch())
1276 $defaultPaySystemId[$personTypeId] = intval($paySystem[
'ID']);
1278 return $defaultPaySystemId[$personTypeId];
1288 public function fillTaxFromRequest(Sale\Tax $tax,
array $fields)
1290 if (!empty(
$fields[
'COUNT_DELIVERY_TAX']))
1292 $tax->setDeliveryCalculate((
$fields[
'COUNT_DELIVERY_TAX'] ==
"Y"));
1295 if (!empty(
$fields[
'TAX_LIST']) && is_array(
$fields[
'TAX_LIST']))
1297 $tax->initTaxList(
$fields[
'TAX_LIST']);
1299 elseif (!empty($tax->getTaxList()))
1305 if ($tax =
$order->getTax())
1307 $tax->resetTaxList();
1312 if (array_key_exists(
'TAX_VALUE',
$fields))
1315 $order->setFieldNoDemand(
'TAX_VALUE', floatval(
$fields[
'TAX_VALUE']));
1318 return new Sale\Result();
1330 public static function shipment($id, $value,
array $storeData =
array() )
1336 $registry = Sale\Registry::getInstance(static::getRegistryType());
1339 $orderClassName = $registry->getOrderClassName();
1340 if (
$order = $orderClassName::load($id))
1345 throw new Main\ObjectNotFoundException(
'Entity "Basket" not found');
1349 if(!$shipmentCollection =
$order->getShipmentCollection())
1351 throw new Main\ObjectNotFoundException(
'Entity "ShipmentCollection" not found');
1355 foreach ($shipmentCollection as $shipment)
1357 if ($shipment->isSystem())
1361 if (!$shipmentItemCollection = $shipment->getShipmentItemCollection())
1363 throw new Main\ObjectNotFoundException(
'Entity "ShipmentItemCollection" not found');
1367 $r = static::fillShipmentItemCollectionFromRequest($shipmentItemCollection, $storeData,
$basket);
1368 if (!$r->isSuccess())
1370 $result->addErrors($r->getErrors());
1375 $r = $shipment->setField(
'DEDUCTED', $value ===
true ?
'Y' :
'N');
1376 if (!$r->isSuccess())
1378 $result->addErrors($r->getErrors());
1387 if (!$r->isSuccess())
1389 $result->addErrors($r->getErrors());
1405 public static function fillShipmentItemCollectionFromRequest(Sale\ShipmentItemCollection $shipmentItemCollection,
array $storeData, Sale\Basket
$basket =
null)
1414 if (!$shipment = $shipmentItemCollection->getShipment())
1416 throw new Main\ObjectNotFoundException(
'Entity "Shipment" not found');
1421 if(!$shipmentCollection = $shipment->getCollection())
1423 throw new Main\ObjectNotFoundException(
'Entity "ShipmentCollection" not found');
1427 if (!
$order = $shipmentCollection->getOrder())
1429 throw new Main\ObjectNotFoundException(
'Entity "Order" not found');
1435 throw new Main\ObjectNotFoundException(
'Entity "Basket" not found');
1440 foreach ($shipmentItemCollection as $shipmentItem)
1443 if (($basketItem = $shipmentItem->getBasketItem()) && $basketItem->getId() == 0)
1448 $shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
1450 !$shipmentItemStoreCollection
1451 && $basketItem->isReservableItem()
1454 throw new Main\ObjectNotFoundException(
'Entity "ShipmentItemStoreCollection" not found');
1457 $barcodeList =
array();
1459 foreach ($shipmentItemStoreCollection as $shipmentItemStore)
1461 $storeId = $shipmentItemStore->getField(
'STORE_ID');
1462 $basketId = $shipmentItemStore->getField(
'BASKET_ID');
1464 'ID' => $shipmentItemStore->getId(),
1465 'QUANTITY' => $shipmentItemStore->getQuantity(),
1466 'BARCODE' => $shipmentItemStore->getBarcode(),
1470 $baseBarcode =
null;
1472 foreach($storeData as $basketId => $barcodeDataList)
1474 if ((intval($basketId) != $basketId)
1475 || ($basketItem->getId() != $basketId))
1478 foreach ($barcodeDataList as $barcodeData)
1482 if (!$basketItem =
$basket->getItemById($basketId))
1484 throw new Main\ObjectNotFoundException(
'Entity "BasketItem" not found');
1488 $saveBarcodeList =
array();
1490 if ($basketItem->isBarcodeMulti() && is_array($barcodeData[
'BARCODE']))
1492 $barcodeQuantity = $barcodeData[
'QUANTITY'] /
count($barcodeData[
'BARCODE']);
1494 foreach ($barcodeData[
'BARCODE'] as $barcodeId => $barcodeValue)
1496 $barcodeFields =
array(
1497 'QUANTITY' => $barcodeQuantity,
1498 'BARCODE' => $barcodeValue,
1501 if (intval($barcodeId) > 0)
1503 $barcodeFields[
'ID'] = intval($barcodeId);
1506 $saveBarcodeList[] = $barcodeFields;
1511 if (strval($barcodeData[
'BARCODE']) !=
'')
1513 $baseBarcode = trim($barcodeData[
'BARCODE']);
1515 elseif (!empty($baseBarcode))
1517 $barcodeData[
'BARCODE'] = $baseBarcode;
1520 $barcodeFields =
array(
1521 'QUANTITY' => $barcodeData[
'QUANTITY'],
1522 'BARCODE' => $barcodeData[
'BARCODE'],
1525 if (!empty($barcodeList[$basketId]) && !empty($barcodeList[$basketId][$barcodeData[
'STORE_ID']]))
1528 foreach ($barcodeList[$basketId][$barcodeData[
'STORE_ID']] as $existBarcodeData)
1530 if ($existBarcodeData[
'BARCODE'] == $barcodeData[
'BARCODE'] && !empty($existBarcodeData[
'ID']))
1532 if ($shipmentItemStoreCollection->getItemById($existBarcodeData[
'ID']))
1534 $barcodeFields[
'ID'] = $existBarcodeData[
'ID'];
1540 $saveBarcodeList =
array(
1545 foreach ($saveBarcodeList as $saveBarcodeData)
1547 $barcodeFields =
array(
1548 'QUANTITY' => $saveBarcodeData[
'QUANTITY'],
1549 'BARCODE' => $saveBarcodeData[
'BARCODE'],
1553 $shipmentItemStore = $shipmentItemStoreCollection->getItemByBarcode($saveBarcodeData[
'BARCODE']);
1555 if (!$shipmentItemStore)
1557 $barcodeFields[
'STORE_ID'] = intval($barcodeData[
'STORE_ID']);
1558 $shipmentItemStore = $shipmentItemStoreCollection->createItem($basketItem);
1562 $r = $shipmentItemStore->setFields($barcodeFields);
1563 if (!$r->isSuccess())
1565 $result->addErrors($r->getErrors());
1583 public static function allowDelivery($id, $value)
1587 $registry = Sale\Registry::getInstance(static::getRegistryType());
1590 $orderClassName = $registry->getOrderClassName();
1591 if (
$order = $orderClassName::load($id))
1594 if(!$shipmentCollection =
$order->getShipmentCollection())
1596 throw new Main\ObjectNotFoundException(
'Entity "ShipmentCollection" not found');
1600 foreach ($shipmentCollection as $shipment)
1602 if ($shipment->isSystem())
1606 $r = $shipment->setField(
'ALLOW_DELIVERY', $value ===
true ?
'Y' :
'N');
1607 if (!$r->isSuccess())
1609 $result->addErrors($r->getErrors());
1618 if (!$r->isSuccess())
1620 $result->addErrors($r->getErrors());
1633 return static::modifyOrder(static::ORDER_COMPAT_ACTION_ADD,
$fields);
1643 public static function update($id,
array $fields, $dateUpdate =
false)
1659 $fields[
'DATE_UPDATE'] =
null;
1663 return static::modifyOrder(static::ORDER_COMPAT_ACTION_UPDATE,
$fields);
1681 $adminSection = (defined(
'ADMIN_SECTION') &&
ADMIN_SECTION ===
true);
1684 $orderCompatibility = static::create(
$fields);
1687 $order = $orderCompatibility->getOrder();
1690 $propCollection =
$order->getPropertyCollection();
1692 if (!empty(
$fields[
'ORDER_PROP']) && is_array(
$fields[
'ORDER_PROP']))
1697 if (!isset(
$fields[
'PROPERTIES']) || !is_array(
$fields[
'PROPERTIES']))
1718 $r = $propCollection->setValuesFromPost(
$fields, $_FILES);
1719 if (!$r->isSuccess())
1721 $result->addErrors($r->getErrors());
1726 $oldPrice =
$order->getPrice();
1739 if (!empty(
$fields[
'BASKET_ITEMS']) && is_array(
$fields[
'BASKET_ITEMS']))
1741 foreach (
$fields[
'BASKET_ITEMS'] as $basketItemData)
1743 if (!empty($basketItemData[
'FUSER_ID']) && intval($basketItemData[
'FUSER_ID']) > 0)
1745 $fUserId = intval($basketItemData[
'FUSER_ID']);
1752 if (intval($fUserId) <= 0 && !$adminSection)
1754 $fUserId = static::getDefaultFuserId();
1760 $fUserIdByUserId = Sale\Fuser::getIdByUserId(
$userId);
1761 if (intval($fUserId) > 0 && intval($fUserIdByUserId) > 0
1762 && intval($fUserId) != intval($fUserIdByUserId))
1765 \CSaleBasket::TransferBasket($fUserId, $fUserIdByUserId);
1768 $fUserId = $fUserIdByUserId;
1771 if (intval($fUserId) <= 0)
1773 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND'),
"SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND"));
1778 $registry = Sale\Registry::getInstance(static::getRegistryType());
1780 $basketClassName = $registry->getBasketClassName();
1785 $allBasket = $basketClassName::loadItemsForFUser($fUserId,
$siteId);
1789 $basket = $allBasket->getOrderableItems();
1797 $basket->setFUserId($fUserId);
1801 $isStartField =
$order->isStartField(
true);
1807 $basketCompatibilityClassName = static::getBasketCompatibilityClassName();
1808 $basketCompatibility = $basketCompatibilityClassName::create($orderCompatibility);
1812 if (!$r->isSuccess())
1814 $result->addErrors($r->getErrors());
1820 $order->setMathActionOnly(
true);
1822 $order->setMathActionOnly(
false);
1825 if ($orderCompatibility->isExistPrice() && $oldPrice ==
$order->getPrice())
1827 $order->setFieldNoDemand(
'PRICE', $orderCompatibility->externalPrice);
1833 $r = $orderCompatibility->fillTaxFromRequest(
$order->getTax(),
$fields);
1834 if (!$r->isSuccess())
1836 $result->addErrors($r->getErrors());
1841 $r = $orderCompatibility->fillShipmentCollectionFromRequest(
$order->getShipmentCollection(),
$fields);
1842 if (!$r->isSuccess())
1844 $result->addErrors($r->getErrors());
1850 $hasMeaningfulFields =
$order->hasMeaningfulField();
1853 $r =
$order->doFinalAction($hasMeaningfulFields);
1854 if (!$r->isSuccess())
1856 $result->addErrors($r->getErrors());
1861 $order->setMathActionOnly(
false);
1864 $r = $orderCompatibility->fillPaymentCollectionFromRequest(
$fields);
1865 if (!$r->isSuccess())
1867 $result->addErrors($r->getErrors());
1873 if (!$r->isSuccess())
1875 $result->addErrors($r->getErrors());
1880 catch(Sale\UserMessageException $e)
1882 $result->addError(
new Sale\ResultError($e->getMessage(), $e->getCode()));
1886 static::transformationLocation(
$order);
1890 if ($r->isSuccess())
1892 if ($orderData = $r->getData())
1899 $r = $orderCompatibility->saveRawFields(
$order, static::ENTITY_ORDER);
1902 if (!$r->isSuccess())
1904 $result->addErrors($r->getErrors());
1908 $oldFields = static::convertDateFieldsToOldFormat(
$order->getFieldValues());
1909 $oldFields = $oldFields + $orderCompatibility->rawFields;
1923 $r = $orderCompatibility->saveRawFields(
$payment, static::ENTITY_PAYMENT);
1924 if (!$r->isSuccess())
1926 $result->addErrors($r->getErrors());
1932 'OLD_FIELDS' => $oldFields
1946 public static function reserve(
$orderId, $value)
1950 $registry = Sale\Registry::getInstance(static::getRegistryType());
1953 $orderClassName = $registry->getOrderClassName();
1956 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_NOT_FOUND') );
1961 if (!$shipmentCollection =
$order->getShipmentCollection())
1963 throw new Main\ObjectNotFoundException(
'Entity "ShipmentCollection" not found');
1967 foreach ($shipmentCollection as $shipment)
1969 if ($shipment->isSystem())
1975 $r = $shipment->tryReserve();
1976 if (!$r->isSuccess())
1978 $registry = Sale\Registry::getInstance(static::getRegistryType());
1981 $entityMarkerClassName = $registry->getEntityMarkerClassName();
1982 $entityMarkerClassName::addMarker(
$order, $shipment, $r);
1983 if (!$shipment->isSystem())
1985 $shipment->setField(
'MARKED',
'Y');
1988 $result->addErrors($r->getErrors());
1993 if (!$shipment->isShipped())
1996 $r = $shipment->tryUnreserve();
1997 if (!$r->isSuccess())
1999 $registry = Sale\Registry::getInstance(static::getRegistryType());
2002 $entityMarkerClassName = $registry->getEntityMarkerClassName();
2003 $entityMarkerClassName::addMarker(
$order, $shipment, $r);
2004 if (!$shipment->isSystem())
2006 $shipment->setField(
'MARKED',
'Y');
2008 $result->addErrors($r->getErrors());
2016 if (!$r->isSuccess())
2018 $result->addErrors($r->getErrors());
2033 public static function pay(
$orderId,
array $values, $withdraw =
false, $pay =
false)
2038 if (isset($values[
'PAYED']) && strval($values[
'PAYED']) !=
'')
2040 $values[
'PAID'] = $values[
'PAYED'];
2045 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND') );
2049 $registry = Sale\Registry::getInstance(static::getRegistryType());
2051 $orderClassName = $registry->getOrderClassName();
2054 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_NOT_FOUND') );
2058 if (
$order->isCanceled())
2061 $r =
$order->setField(
'CANCELED',
'N');
2062 if (!$r->isSuccess())
2064 $result->addErrors($r->getErrors());
2072 throw new Main\ObjectNotFoundException(
'Entity "PaymentCollection" not found');
2075 $paidFormUserBudget =
false;
2080 $r = static::payFromBudget(
$order, $pay);
2081 if (!$r->isSuccess())
2083 $result->addErrors($r->getErrors());
2087 $payBudgetData = $r->getData();
2088 if (array_key_exists(
'PAID_FROM_BUDGET', $payBudgetData))
2090 $paidFormUserBudget = $payBudgetData[
'PAID_FROM_BUDGET'];
2097 if (!$paidFormUserBudget)
2104 if (isset($values[
'=DATE_PAYED']))
2106 $values[
'DATE_PAID'] = $values[
'=DATE_PAYED'];
2107 unset($values[
'=DATE_PAYED']);
2110 $values = static::convertDateFields($values, static::getPaymentDateFields());
2111 $fields = static::clearFields($values,
$payment->getAvailableFields());
2115 if ($values[
'PAID'] ==
"N" && !
$payment->isPaid())
2118 if ($withdraw && $values[
'PAID'] ==
"N" &&
$payment->isInner())
2122 if (!$r->isSuccess())
2124 $result->addErrors($r->getErrors());
2131 $r =
$payment->setPaid($values[
'PAID']);
2132 if (!$r->isSuccess())
2134 $result->addErrors($r->getErrors());
2140 if (!$r->isSuccess())
2142 $result->addErrors($r->getErrors());
2154 if (!$r->isSuccess())
2156 $result->addErrors($r->getErrors());
2168 if (!$r->isSuccess())
2170 $result->addErrors($r->getErrors());
2186 public static function payFromBudget(Sale\
Order $order, $pay, $paidFormUserBudget =
null)
2191 $paymentInner =
null;
2194 $paymentOuter =
null;
2199 throw new Main\ObjectNotFoundException(
'Entity "PaymentCollection" not found');
2220 if (!$pay || ($pay && $paidFormUserBudget ===
false))
2231 throw new Main\ObjectNotFoundException(
'Entity inner "Payment" not found');
2234 $userBudget = Sale\Internals\UserBudgetPool::getUserBudget(
$order->getUserId(),
$order->getCurrency());
2236 $setSum = $userBudget;
2237 if ($userBudget >= $needSum)
2242 if ($paymentInner->getId() == 0)
2244 $paymentInnerFields =
array(
2246 'CURRENCY' =>
$order->getCurrency(),
2247 'DATE_BILL' =>
new Main\Type\DateTime(),
2250 $r = $paymentInner->setFields($paymentInnerFields);
2251 if (!$r->isSuccess())
2253 $result->addErrors($r->getErrors());
2258 if ($paymentInner->getSum() < $needSum)
2260 $paymentInner->setField(
'SUM', $needSum - $paymentInner->getSum());
2264 if ($pay && $paidFormUserBudget ===
false)
2266 $paymentOuter->setField(
'SUM', $needSum - $setSum);
2282 $paySystemId = static::getDefaultPaySystemId(
$order->getPersonTypeId());
2285 if ($paySystem = Sale\PaySystem\Manager::getObjectById($paySystemId))
2287 $registry = Sale\Registry::getInstance(static::getRegistryType());
2289 $paymentClassName = $registry->getPaymentClassName();
2292 $payment->setField(
'SUM', $needSum);
2293 $payment->setField(
'DATE_BILL',
new Main\Type\DateTime());
2299 if ($paidFormUserBudget ===
false)
2301 $operationPayment = $paymentOuter;
2304 $service = Sale\PaySystem\Manager::getObjectById($operationPayment->getPaymentSystemId());
2307 $r =
$service->creditNoDemand($operationPayment);
2308 if (!$r->isSuccess())
2309 $result->addErrors($r->getErrors());
2313 $result->addError(
new Main\Entity\EntityError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_PAYSYSTEM_NOT_FOUND')));
2327 if ($r->isSuccess())
2332 if ($paidFormUserBudget ===
false)
2334 $operationPayment = $paymentOuter;
2337 $resultPayment = $paymentOuter->setPaid(
'Y');
2338 if (!$resultPayment->isSuccess())
2340 $result->addErrors($resultPayment->getErrors());
2344 $service = Sale\PaySystem\Manager::getObjectById($operationPayment->getPaymentSystemId());
2347 $r =
$service->creditNoDemand($operationPayment);
2348 if (!$r->isSuccess())
2349 $result->addErrors($r->getErrors());
2353 $result->addError(
new Main\Entity\EntityError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_PAYSYSTEM_NOT_FOUND')));
2361 $result->addErrors($r->getErrors());
2365 if (!$r->isSuccess())
2367 $result->addErrors($r->getErrors());
2372 $result->setData(
array(
'PAID_FROM_BUDGET' => $paidFormUserBudget));
2392 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND') );
2396 $registry = Sale\Registry::getInstance(static::getRegistryType());
2398 $orderClassName = $registry->getOrderClassName();
2401 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_NOT_FOUND') );
2407 if (
$order->isCanceled())
2409 $r =
$order->setField(
'CANCELED',
'N');
2410 if (!$r->isSuccess())
2412 return $result->addErrors($r->getErrors());
2416 if (!$r->isSuccess())
2418 return $result->addErrors($r->getErrors());
2425 if (
$order->isCanceled())
2438 $shipmentCollection =
$order->getShipmentCollection();
2440 foreach ($shipmentCollection as $shipment)
2442 if ($shipment->isSystem())
2445 if ($shipment->isShipped())
2446 $shipment->setField(
'DEDUCTED',
'N');
2448 if ($shipment->isAllowDelivery())
2449 $shipment->disallowDelivery();
2452 $r =
$order->setField(
'CANCELED',
'Y');
2453 if (!$r->isSuccess())
2455 return $result->addErrors($r->getErrors());
2461 if (!$r->isSuccess())
2463 return $result->addErrors($r->getErrors());
2476 public static function delete($id)
2480 if (intval($id) <= 0)
2482 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND'),
'SALE_COMPATIBLE_ORDER_ID_NOT_FOUND') );
2486 $registry = Sale\Registry::getInstance(static::getRegistryType());
2488 $orderClassName = $registry->getOrderClassName();
2489 if (!
$order = $orderClassName::load($id))
2491 $result->addError(
new Sale\ResultError(Main\Localization\Loc::getMessage(
'SALE_ORDER_ENTITY_NOT_FOUND'),
'SALE_ORDER_ENTITY_NOT_FOUND'));
2505 foreach (
$order->getShipmentCollection() as $shipment)
2507 if ($shipment->isShipped())
2509 $shipment->setField(
'DEDUCTED',
'N');
2514 if (!$r->isSuccess())
2516 $result->addErrors($r->getErrors());
2522 $r = $orderClassName::delete($id);
2524 catch (\Exception $exception)
2526 $r = $orderClassName::deleteNoDemand($id);
2529 if (!$r->isSuccess())
2531 $result->addErrors($r->getErrors());
2547 if ($fullPay ===
false && $budget > 0)
2550 if ($fullPay ===
true && $budget >= $needSum)
2569 $systemShipment = $shipmentCollection->getSystemShipment();
2571 if ($systemShipment->getDeliveryId() > 0)
2574 $shipment = static::getShipmentByDeliveryId($shipmentCollection, $systemShipment->getDeliveryId());
2581 $shipment = $shipmentCollection->createItem(
$service);
2582 $shipment->setField(
'DELIVERY_NAME',
$service->getName());
2598 public static function getShipmentByDeliveryId(Sale\ShipmentCollection $shipmentCollection, $deliveryId)
2601 foreach($shipmentCollection as $shipment)
2603 if ($shipment->isSystem())
2606 if ($shipment->getDeliveryId() == $deliveryId)
2618 protected static function transformationLocation(Sale\
Order $order)
2621 if ($propertyCollection =
$order->getPropertyCollection())
2624 foreach ($propertyCollection as $valueItem)
2626 if ($valueItem->getValue() !=
'')
2628 $setValue = $valueItem->getValue();
2630 $prop = $valueItem->getPropertyObject();
2631 if ($prop->getType() ==
'LOCATION')
2633 $setValue = \CSaleLocation::tryTranslateIDToCode($setValue);
2636 $valueItem->setField(
'VALUE', $setValue);
2650 public static function getById($id)
2652 $compatibility =
new static();
2656 $registry = Sale\Registry::getInstance(static::getRegistryType());
2658 $orderClassName = $registry->getOrderClassName();
2660 if (
$order = $orderClassName::load($id))
2667 $select = array_merge(
$select, array_keys(static::getAliasPaymentFields()));
2672 if ($shipmentCollection =
$order->getShipmentCollection())
2674 if (
count($shipmentCollection) == 1
2675 || (
count($shipmentCollection) == 2 && $shipmentCollection->isExistsSystemShipment()))
2677 $select = array_merge(
$select, array_keys(static::getAliasShipmentFields()));
2682 return static::setGetListParameters($compatibility,
array(),
array(
"ID" => $id),
null,
array(),
$select);
2692 'NAME_SEARCH' =>
array(
2693 'NAME' =>
'USER.NAME',
2694 'LAST_NAME' =>
'USER.LAST_NAME',
2695 'SECOND_NAME' =>
'USER.SECOND_NAME',
2696 'EMAIL' =>
'USER.EMAIL',
2697 'LOGIN' =>
'USER.LOGIN',
2698 'NAME_SEARCH' =>
'USER.ID',
2700 'USER_ID' =>
'USER.ID',
2701 'USER_LOGIN' =>
'USER.LOGIN',
2702 'USER_NAME' =>
'USER.NAME',
2703 'USER_LAST_NAME' =>
'USER.LAST_NAME',
2704 'USER_EMAIL' =>
'USER.EMAIL',
2705 'RESPONSIBLE_ID' =>
'RESPONSIBLE.ID',
2706 'RESPONSIBLE_LOGIN' =>
'RESPONSIBLE.LOGIN',
2707 'RESPONSIBLE_NAME' =>
'RESPONSIBLE.NAME',
2708 'RESPONSIBLE_LAST_NAME' =>
'RESPONSIBLE.LAST_NAME',
2709 'RESPONSIBLE_SECOND_NAME' =>
'RESPONSIBLE.SECOND_NAME',
2710 'RESPONSIBLE_EMAIL' =>
'RESPONSIBLE.EMAIL',
2711 'RESPONSIBLE_WORK_POSITION' =>
'RESPONSIBLE.WORK_POSITION',
2712 'RESPONSIBLE_PERSONAL_PHOTO' =>
'RESPONSIBLE.PERSONAL_PHOTO',
2714 'PROPERTY_ID' =>
'PROPERTY.ID',
2715 'PROPERTY_ORDER_PROPS_ID' =>
'PROPERTY.ORDER_PROPS_ID',
2716 'PROPERTY_NAME' =>
'PROPERTY.NAME',
2717 'PROPERTY_VALUE' =>
'PROPERTY.VALUE',
2718 'PROPERTY_CODE' =>
'PROPERTY.CODE',
2719 'PROPERTY_VAL_BY_CODE' =>
'PROPERTY.VALUE',
2725 static::getAliasPaymentFields(),
2726 static::getAliasShipmentFields(),
2727 static::getAliasBasketFields()
2737 'PAY_SYSTEM_ID' =>
'PAYMENT.PAY_SYSTEM_ID',
2738 'PAYED' =>
'PAYMENT.PAID',
2740 'DATE_PAYED' =>
'PAYMENT.DATE_PAID',
2741 'EMP_PAYED_ID' =>
'PAYMENT.EMP_PAID_ID',
2743 'PS_STATUS' =>
'PAYMENT.PS_STATUS',
2744 'PS_STATUS_CODE' =>
'PAYMENT.PS_STATUS_CODE',
2745 'PS_STATUS_DESCRIPTION' =>
'PAYMENT.PS_STATUS_DESCRIPTION',
2746 'PS_STATUS_MESSAGE' =>
'PAYMENT.PS_STATUS_MESSAGE',
2747 'PS_SUM' =>
'PAYMENT.PS_SUM',
2748 'PS_CURRENCY' =>
'PAYMENT.PS_CURRENCY',
2749 'PS_RESPONSE_DATE' =>
'PAYMENT.PS_RESPONSE_DATE',
2759 'DELIVERY_ID' =>
'SHIPMENT.DELIVERY.CODE',
2761 'PRICE_DELIVERY' =>
'SHIPMENT.PRICE_DELIVERY',
2762 'ALLOW_DELIVERY' =>
'SHIPMENT.ALLOW_DELIVERY',
2763 'DATE_ALLOW_DELIVERY' =>
'SHIPMENT.DATE_ALLOW_DELIVERY',
2764 'EMP_ALLOW_DELIVERY_ID' =>
'SHIPMENT.EMP_ALLOW_DELIVERY_ID',
2766 'DATE_DEDUCTED' =>
'SHIPMENT.DATE_DEDUCTED',
2767 'EMP_DEDUCTED_ID' =>
'SHIPMENT.EMP_DEDUCTED_ID',
2768 'REASON_UNDO_DEDUCTED' =>
'SHIPMENT.REASON_UNDO_DEDUCTED',
2770 'TRACKING_NUMBER' =>
'SHIPMENT.TRACKING_NUMBER',
2771 'DELIVERY_DOC_NUM' =>
'SHIPMENT.DELIVERY_DOC_NUM',
2772 'DELIVERY_DOC_DATE' =>
'SHIPMENT.DELIVERY_DOC_DATE',
2782 'BASKET_ID' =>
'BASKET.ID',
2783 'BASKET_PRODUCT_ID' =>
'BASKET.PRODUCT_ID',
2784 'BASKET_PRODUCT_XML_ID' =>
'BASKET.PRODUCT_XML_ID',
2785 'BASKET_MODULE' =>
'BASKET.MODULE',
2786 'BASKET_NAME' =>
'BASKET.NAME',
2787 'BASKET_QUANTITY' =>
'BASKET.QUANTITY',
2788 'BASKET_PRICE' =>
'BASKET.PRICE',
2789 'BASKET_CURRENCY' =>
'BASKET.CURRENCY',
2790 'BASKET_VAT_RATE' =>
'BASKET.VAT_RATE',
2791 'BASKET_RECOMMENDATION' =>
'BASKET.RECOMMENDATION',
2792 'BASKET_DISCOUNT_PRICE' =>
'BASKET.DISCOUNT_PRICE',
2793 'BASKET_DISCOUNT_NAME' =>
'BASKET.DISCOUNT_NAME',
2794 'BASKET_DISCOUNT_VALUE' =>
'BASKET.DISCOUNT_VALUE',
2803 $fields = array_keys(static::getEntity()->getScalarFields());
2806 'DATE_INSERT_FORMAT',
2807 'DATE_UPDATE_SHORT',
2808 'DATE_STATUS_SHORT',
2809 'DATE_CANCELED_SHORT',
2810 'BY_RECOMMENDATION',
2814 'DATE_INSERT_FORMAT',
2817 "RESPONSIBLE_LOGIN",
2819 "RESPONSIBLE_LAST_NAME",
2820 "RESPONSIBLE_SECOND_NAME",
2821 "RESPONSIBLE_EMAIL",
2822 "RESPONSIBLE_WORK_POSITION",
2823 "RESPONSIBLE_PERSONAL_PHOTO",
2824 "RESPONSIBLE_GROUP_ID",
2832 "DATE_ALLOW_DELIVERY",
2833 "EMP_ALLOW_DELIVERY_ID",
2835 "DELIVERY_DOC_DATE",
2842 "DATE_INSERT_FORMAT",
2865 $orderClassName = $registry->getOrderClassName();
2867 return array_merge($orderClassName::getAvailableFields(),
2868 array(
'PRICE_DELIVERY',
"PAY_VOUCHER_DATE",
"PAY_VOUCHER_NUM",
"DATE_ALLOW_DELIVERY",
"DATE_PAYED")
2909 protected static function getPaymentAvailableFields()
2913 $paymentClassName = $registry->getPaymentClassName();
2915 return static::clearAvailableFields($paymentClassName::getAvailableFields(), static::getPaymentClearFields());
2921 protected static function getShipmentAvailableFields()
2925 $shipmentClassName = $registry->getShipmentClassName();
2927 return static::clearAvailableFields($shipmentClassName::getAvailableFields(), static::getShipmentClearFields());
2933 return array_merge(parent::getWhiteListFields(), array_keys(static::getAliasFields()));
2946 if (!empty($clearFields))
2950 if (!in_array($field, $clearFields))
2966 static::getShipmentFieldsToConvert(),
2967 static::getPaymentFieldsToConvert()
2978 'DATE_INSERT' =>
'datetime',
2979 'DATE_UPDATE' =>
'datetime',
2980 'DATE_PAYED' =>
'datetime',
2981 'DATE_STATUS' =>
'datetime',
2982 'DATE_LOCK' =>
'datetime',
2983 'DATE_PAY_BEFORE' =>
'date',
2984 'DATE_BILL' =>
'date',
2985 'DATE_MARKED' =>
'datetime',
2986 'DATE_CANCELED' =>
'datetime',
2997 'DATE_ALLOW_DELIVERY',
2998 'EMP_ALLOW_DELIVERY_ID',
3001 'DELIVERY_DOC_DATE',
3007 'REASON_UNDO_DEDUCTED',
3036 'DATE_ALLOW_DELIVERY' =>
'datetime',
3037 'DELIVERY_DOC_DATE' =>
'date',
3038 'DATE_DEDUCTED' =>
'datetime',
3039 'DATE_MARKED' =>
'datetime',
3040 'DATE_RESPONSIBLE_ID' =>
'date',
3041 'DATE_INSERT' =>
'datetime',
3042 'TRACKING_LAST_CHECK' =>
'datetime',
3043 'TRACKING_LAST_CHANGE' =>
'datetime',
3049 'DATE_PAYED' =>
'datetime',
3050 'DATE_PAID' =>
'datetime',
3051 'PAY_VOUCHER_DATE' =>
'date',
3052 'PS_RESPONSE_DATE' =>
'datetime',
3063 'DATE_PAYED' =>
'datetime',
3064 'DATE_PAID' =>
'datetime',
3065 'PAY_VOUCHER_DATE' =>
'date',
3066 'PS_RESPONSE_DATE' =>
'datetime',
3078 'DATE_PAYED' =>
'DATE_PAID',
3079 'EMP_PAYED_ID' =>
'EMP_PAID_ID',
3106 $resetPrice =
false;
3107 $resetPriceDelivery =
false;
3112 if ($order->getId() == 0)
3115 $resetPriceDelivery =
true;
3120 if (!isset($basketData[
'ID']) || intval($basketData[
'ID']) <= 0)
3124 if (!$basketItem =
$basket->getItemById($basketData[
'ID']))
3127 if ($resetPriceDelivery ===
false)
3129 if (
$order->getId() == 0 || isset($basketData[
'PRICE'])
3130 && floatval($basketData[
'PRICE']) != $basketItem->getPrice())
3149 if ($resetPriceDelivery && $resetPrice)
3168 "SITE_ID" =>
$order->getSiteId(),
3169 "LID" =>
$order->getSiteId(),
3170 "PERSON_TYPE_ID" =>
$order->getPersonTypeId(),
3171 "PRICE" =>
$order->getPrice(),
3172 "CURRENCY" =>
$order->getCurrency(),
3173 "USER_ID" =>
$order->getUserId(),
3174 "PAY_SYSTEM_ID" => (
int)
$order->getField(
'PAY_SYSTEM_ID'),
3175 "PRICE_DELIVERY" =>
$order->getDeliveryPrice(),
3176 "DELIVERY_ID" => (
int)
$order->getField(
'DELIVERY_ID'),
3177 "DISCOUNT_VALUE" =>
$order->getDiscountPrice(),
3178 "TAX_VALUE" =>
$order->getTaxValue(),
3179 "TRACKING_NUMBER" =>
$order->getField(
'TRACKING_NUMBER'),
3180 "PAYED" =>
$order->getField(
'PAYED'),
3181 "CANCELED" =>
$order->getField(
'CANCELED'),
3182 "STATUS_ID" =>
$order->getField(
'STATUS_ID'),
3183 "RESERVED" =>
$order->getField(
'RESERVED'),
3186 $orderFields = static::convertOrderToArray(
$order);
3187 if (is_array($orderFields))
3189 $orderFields =
$fields + $orderFields;
3190 $orderFields = static::convertDateFieldsToOldFormat($orderFields);
3195 'ORDER_FIELDS' => $orderFields,
3206 public static function convertOrderToArray(
Sale\Order
$order)
3214 'ORDER_WEIGHT' => 0,
3215 'BASKET_ITEMS' => [],
3217 'DISCOUNT_LIST' => [],
3219 'VAT_RATE' =>
$order->getVatRate(),
3220 'VAT_SUM' =>
$order->getVatSum(),
3228 foreach (
$basket as $basketItem)
3231 $basketCompatibilityClassName = static::getBasketCompatibilityClassName();
3233 $fields[
'BASKET_ITEMS'][] = $basketCompatibilityClassName::convertBasketItemToArray($basketItem);
3240 if ($propertyCollection =
$order->getPropertyCollection())
3243 foreach ($propertyCollection as $property)
3246 $fields[
'ORDER_PROP'][$property->getPropertyId()] = $property->getValue();
3251 if ($propProfileName = $propertyCollection->getProfileName())
3252 $fields[
'PROFILE_NAME'] = $propProfileName->getValue();
3254 if ($propPayerName = $propertyCollection->getPayerName())
3255 $fields[
'PAYER_NAME'] = $propPayerName->getValue();
3257 if ($propUserEmail = $propertyCollection->getUserEmail())
3258 $fields[
'USER_EMAIL'] = $propUserEmail->getValue();
3260 if ($propDeliveryLocationZip = $propertyCollection->getDeliveryLocationZip())
3261 $fields[
'DELIVERY_LOCATION_ZIP'] = $propDeliveryLocationZip->getValue();
3263 if ($propDeliveryLocation = $propertyCollection->getDeliveryLocation())
3264 $fields[
'DELIVERY_LOCATION'] = $propDeliveryLocation->getValue();
3266 if ($propTaxLocation = $propertyCollection->getTaxLocation())
3267 $fields[
'TAX_LOCATION'] = $propTaxLocation->getValue();
3272 if ($tax =
$order->getTax())
3274 $fields[
'TAX_LIST'] = $tax->getTaxList();
3282 return ($this->externalPrice !==
null);
3295 static $propIndex = 0;
3298 if (mb_strpos(
$key,
"PROPERTY_ID_") === 0)
3307 $propIDTmp = intval(mb_substr(
$key, mb_strlen(
"PROPERTY_ID_")));
3309 $this->query->addFilter(
'='.$propRuntimeName.
'.ORDER_PROPS_ID', $propIDTmp);
3310 if(isset($locationPropInfo[
'ID'][$propIDTmp]))
3312 $this->
addQueryAlias(
'PROPERTY_ID_'.$propIDTmp,
'LOCATION.ID');
3316 $this->
addQueryAlias(
'PROPERTY_ID_'.$propIDTmp, $propRuntimeName.
'.ID');
3319 $output =
'PROPERTY_ID_'.$propIDTmp;
3322 elseif (mb_strpos(
$key,
"PROPERTY_ORDER_PROPS_ID_") === 0)
3331 $propIDTmp = intval(mb_substr(
$key, mb_strlen(
"PROPERTY_ORDER_PROPS_ID_")));
3333 $this->query->addFilter(
'='.$propRuntimeName.
'.ORDER_PROPS_ID', $propIDTmp);
3334 if(isset($locationPropInfo[
'ID'][$propIDTmp]))
3336 $this->
addQueryAlias(
'PROPERTY_ORDER_PROPS_ID_'.$propIDTmp,
'LOCATION.ID');
3340 $this->
addQueryAlias(
'PROPERTY_ORDER_PROPS_ID_'.$propIDTmp, $propRuntimeName.
'.ORDER_PROPS_ID');
3343 $output =
'PROPERTY_ORDER_PROPS_ID_'.$propIDTmp;
3345 elseif (mb_strpos(
$key,
"PROPERTY_NAME_") === 0)
3354 $propIDTmp = intval(mb_substr(
$key, mb_strlen(
"PROPERTY_NAME_")));
3356 $this->
addQueryAlias(
'PROPERTY_NAME_'.$propIDTmp, $propRuntimeName.
'.NAME');
3357 $this->query->addFilter(
'='.$propRuntimeName.
'.ORDER_PROPS_ID', $propIDTmp);
3359 $output =
'PROPERTY_NAME_'.$propIDTmp;
3361 elseif (mb_strpos(
$key,
"PROPERTY_VALUE_") === 0)
3370 $propIDTmp = intval(mb_substr(
$key, mb_strlen(
"PROPERTY_VALUE_")));
3372 if(isset($locationPropInfo[
'ID'][$propIDTmp]))
3374 $this->
addQueryAlias(
'PROPERTY_ID_'.$propIDTmp,
'LOCATION.ID');
3378 $this->
addQueryAlias(
'PROPERTY_ID_'.$propIDTmp, $propRuntimeName.
'.VALUE');
3381 $output =
'PROPERTY_ID_'.$propIDTmp;
3383 elseif (mb_strpos(
$key,
"PROPERTY_CODE_") === 0)
3392 $propIDTmp = intval(mb_substr(
$key, mb_strlen(
"PROPERTY_CODE_")));
3393 $this->
addQueryAlias(
'PROPERTY_CODE_'.$propIDTmp, $propRuntimeName.
'.CODE');
3394 $this->query->addFilter(
'='.$propRuntimeName.
'.ORDER_PROPS_ID', $propIDTmp);
3396 $output =
'PROPERTY_CODE_'.$propIDTmp;
3398 elseif (mb_strpos(
$key,
"PROPERTY_VAL_BY_CODE_") === 0)
3407 $propIDTmp = preg_replace(
"/[^a-zA-Z0-9_-]/is",
"", trim(mb_substr(
$key, mb_strlen(
"PROPERTY_VAL_BY_CODE_"))));
3409 $this->
addQueryAlias(
'PROPERTY_VAL_BY_CODE_'.$propIDTmp, $propRuntimeName.
'.VALUE');
3410 if(isset($locationPropInfo[
'CODE'][$propIDTmp]))
3412 $this->
addQueryAlias(
'PROPERTY_VAL_BY_CODE_'.$propIDTmp,
'LOCATION.ID');
3416 $this->
addQueryAlias(
'PROPERTY_VAL_BY_CODE_'.$propIDTmp, $propRuntimeName.
'.VALUE');
3419 $this->query->addFilter(
'='.$propRuntimeName.
'.CODE', $propIDTmp);
3421 $output =
'PROPERTY_VAL_BY_CODE_'.$propIDTmp;
3428 if(isset($locationPropInfo[
'ID'][$propIDTmp]))
3430 $this->query->registerRuntimeField(
3433 'data_type' =>
'\Bitrix\Sale\Location\LocationTable',
3434 'reference' =>
array(
3435 '=this.PROPERTY.VALUE' =>
'ref.CODE'
3437 'join_type' =>
'inner'
3454 $this->query->registerRuntimeField(
3457 'data_type' =>
'\Bitrix\Sale\Internals\OrderPropsValueTable',
3458 'reference' =>
array(
3459 'ref.ORDER_ID' =>
'this.ID',
3461 'join_type' =>
'inner'
3465 $this->runtimeFields[] =
'PROPERTY_'.$index;
3466 $this->propertyRuntimeList[$index] =
'PROPERTY_'.$index;
3472 return (!empty($this->propertyRuntimeList[$index]) ? $this->propertyRuntimeList[$index] :
null);
3487 if (
$key ==
"BASKET_DISCOUNT_COUPON")
3489 if (!in_array(
'COUPONS', $this->runtimeFields))
3491 $this->query->registerRuntimeField(
3494 'data_type' =>
'\Bitrix\Sale\Internals\OrderCouponsTable',
3495 'reference' =>
array(
3496 '=ref.ORDER_ID' =>
'this.ID'
3500 $this->runtimeFields[] =
"COUPONS";
3503 $this->
addQueryAlias(
'BASKET_DISCOUNT_COUPON',
'COUPONS.COUPON');
3504 $output =
'BASKET_DISCOUNT_COUPON';
3509 if (!in_array(
'DISCOUNT_ORDER_RULES', $this->runtimeFields))
3511 $this->query->registerRuntimeField(
3512 'DISCOUNT_ORDER_RULES',
3514 'data_type' =>
'\Bitrix\Sale\Internals\OrderRulesTable',
3515 'reference' =>
array(
3516 '=ref.ORDER_ID' =>
'this.ID',
3520 $this->runtimeFields[] =
"DISCOUNT_ORDER_RULES";
3523 if (!in_array(
'DISCOUNT', $this->runtimeFields))
3525 $this->query->registerRuntimeField(
3528 'data_type' =>
'\Bitrix\Sale\Internals\OrderDiscountTable',
3529 'reference' =>
array(
3530 '=ref.ID' =>
'this.DISCOUNT_ORDER_RULES.ORDER_DISCOUNT_ID'
3535 $this->runtimeFields[] =
"DISCOUNT";
3538 $this->
addQueryAlias(
'BASKET_DISCOUNT_NAME',
'DISCOUNT.NAME');
3539 $output =
'BASKET_DISCOUNT_NAME';