62 if($shipment->isShipped())
63 $shipment->setField(
'DEDUCTED',
'N');
65 return $shipment->delete();
88 $order->setField(
'MARKED',
'Y');
89 $oldReasonMarked =
$order->getField(
'REASON_MARKED');
90 $newReasonMarked = ($oldReasonMarked ==
'' ?
'':$oldReasonMarked.$this->delimiter_reason).
GetMessage(
"CC_BSC1_ERROR_EXCHANGE_1C_ORDER_DEDUCTED").$this->marked_code;
91 $order->setField(
'REASON_MARKED', $newReasonMarked);
95 $manyReason =
array();
96 if(mb_strpos(
$order->getField(
'REASON_MARKED'), $this->marked_code) !==
false)
98 $arReason = explode($this->delimiter_reason,
$order->getField(
'REASON_MARKED'));
100 if(
count($arReason) > 1)
102 foreach($arReason as $reason)
104 if(mb_strpos($reason, $this->marked_code) ===
false)
105 $manyReason[] = $reason;
107 if(
count($manyReason)>0)
108 $order->setField(
'REASON_MARKED', implode($this->delimiter_reason, $manyReason));
112 $order->setField(
'MARKED',
'N');
113 $order->setField(
'REASON_MARKED',
'');
120 $order->getField(
'MARKED') ==
'Y'
121 && mb_strpos(
$order->getField(
'REASON_MARKED'), $this->marked_code) !==
false
126 public function createPaymentCompatible1C(\
Bitrix\Sale\Order
$order, $arDocument)
128 if( !
$order->isCanceled())
131 ( $needAmount =
$order->getPrice() -
$order->getSumPaid())
142 $date =
new Bitrix\Main\Type\Date(CDatabase::FormatDate(str_replace(
"T",
" ", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG)));
143 $payment->setField(
"PAY_VOUCHER_DATE", $date);
144 $payment->setField(
"SUM", $needAmount);
148 $payment->setField(
"EXTERNAL_PAYMENT",
"F");
152 public function beforePaidCompatible1C(\Bitrix\Sale\
Order $order)
154 if( !
$order->isCanceled())
156 $paymentCompatible1CId = $this->getPaymentCompatible1CByOrder(
$order);
160 if(
is_set($paymentCompatible1CId))
179 public function afterPaidCompatible1C(\Bitrix\Sale\
Order $order)
181 if( !
$order->isCanceled())
183 $paymentCompatible1CId = $this->getPaymentCompatible1CByOrder(
$order);
186 if(
is_set($paymentCompatible1CId))
194 ($needAmount =
$order->getPrice() -
$order->getSumPaid())
205 $payment->setField(
'SUM', $needAmount);
217 public function getPaymentCompatible1CByOrder(\Bitrix\Sale\
Order $order)
219 $paymentCompatible1CId =
null;
225 if(
$payment->getField(
'EXTERNAL_PAYMENT') ==
'F')
226 $paymentCompatible1CId =
$payment->getId();
229 return $paymentCompatible1CId;
234 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")] <>
'')
236 $paymentCompatible1CId = $this->getPaymentCompatible1CByOrder(
$order);
238 if(!
is_set($paymentCompatible1CId))
240 $this->createPaymentCompatible1C(
$order, $arDocument);
244 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_DATE")] <>
'')
252 public function updateEntityCompatible1C(\
Bitrix\Sale\Order
$order, $arDocument)
254 if($arDocument[
"VERSION_1C"] !=
$order->getField(
'VERSION_1C') || (
$order->getField(
'VERSION_1C') ==
'' || $arDocument[
"VERSION_1C"] ==
''))
256 if ( $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")] <>
'')
259 ( $paymentCompatible1CId = $this->getPaymentCompatible1CByOrder(
$order))
260 && $paymentCompatible1CId > 0
263 $this->beforePaidCompatible1C(
$order);
264 $this->afterPaidCompatible1C(
$order);
268 $this->createPaymentCompatible1C(
$order, $arDocument);
273 $paymentCompatible1CId = $this->getPaymentCompatible1CByOrder(
$order);
275 is_set($paymentCompatible1CId)
276 && $paymentCompatible1CId > 0
292 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_DATE")] <>
'')
318 return $_SERVER[
"DOCUMENT_ROOT"].
"/".COption::GetOptionString(
"main",
"upload_dir",
"upload").
"/1c_exchange/";
328 if(!static::DEBUG_MODE || !mb_strlen(
$message))
339 return '['.date(
'H:i:s').
']';
344 $parameters =
$event->getParameters();
346 $order = $parameters[
'ENTITY'];
351 new Bitrix\Sale\ResultError(
Bitrix\
Main\
Localization\Loc::getMessage(
'SALE_EVENT_COMPATIBILITY_ORDER_SAVE_WRONG_ORDER'),
'SALE_EVENT_COMPATIBILITY_ORDER_SAVE_WRONG_ORDER'),
356 foreach(
$order->getShipmentCollection() as $shipment)
358 if (!$shipment->isSystem() && $shipment->getId() ==
null)
375 $changedKey =
$payment->getFields()->getChangedKeys();
376 $originalValues =
$payment->getFields()->getOriginalValues();
377 if(is_array($changedKey) &&
count($changedKey)>0)
379 foreach($changedKey as
$key)
388 return new Bitrix\Main\EventResult( Bitrix\Main\EventResult::SUCCESS,
null,
'sale');
391 public static function onBeforeSaveOrderWithoutShipmentsPayments(Bitrix\Main\Event
$event)
393 $parameters =
$event->getParameters();
396 $order = $parameters[
'ENTITY'];
399 return new Bitrix\Main\EventResult(
400 Bitrix\Main\EventResult::ERROR,
401 new Bitrix\Sale\ResultError(Bitrix\Main\Localization\Loc::getMessage(
'SALE_EVENT_COMPATIBILITY_ORDER_SAVE_WRONG_ORDER'),
'SALE_EVENT_COMPATIBILITY_ORDER_SAVE_WRONG_ORDER'),
406 $serviceId = \Bitrix\Main\Config\Option::get(
'sale',
'1C_IMPORT_DEFAULT_SHIPMENT_SERVICE', 0);
407 if(intval($serviceId)<=0)
409 $serviceId = Bitrix\Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId();
412 \CSaleDelivery::createNoDeliveryServiceAgent();
413 $serviceId = Bitrix\Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId();
418 foreach(
$order->getShipmentCollection() as $shipment)
420 if (!$shipment->isSystem() && $shipment->getId() ==
null)
424 if ($shipment->isSystem())
425 $shipment->setFieldNoDemand(
'DELIVERY_ID', $serviceId);
435 return new Bitrix\Main\EventResult( Bitrix\Main\EventResult::SUCCESS,
null,
'sale');
455 if((
$code ==
'' ||
$result[
'ID'] ===
false) && $xmlId1CDocument <>
'')
461 'select' =>
array(
'ID',
'ID_1C',
'ORDER_ID'),
462 'filter' =>
array(
'ID_1C' => $xmlId1CDocument)
465 $result[
'ID'] = $shimpentCode1C[
'ID'];
466 $result[
'ORDER_ID'] = $shimpentCode1C[
'ORDER_ID'];
471 'select' =>
array(
'ID',
'ID_1C',
'ORDER_ID'),
472 'filter' =>
array(
'ID_1C' => $xmlId1CDocument),
473 'order' =>
array(
'ID' =>
'DESC')
476 $result[
'ID'] = $paymentCode1C[
'ID'];
477 $result[
'ORDER_ID'] = $paymentCode1C[
'ORDER_ID'];
482 'select' =>
array(
'ID',
'ID_1C'),
483 'filter' =>
array(
'ID_1C' => $xmlId1CDocument),
484 'order' =>
array(
'ID' =>
'DESC')
487 $result[
'ID'] = $OrderCode1C[
'ID'];
499 if(is_numeric($orderCode))
504 'select' =>
array(
'ID'),
505 'filter' =>
array(
'ID_1C' => $orderCode),
506 'order' =>
array(
'ID' =>
'DESC')
511 'select' =>
array(
'ID'),
512 'filter' =>
array(
'ACCOUNT_NUMBER' => $orderCode),
513 'order' =>
array(
'ID' =>
'DESC')
517 if ($accountNumberPrefix !=
"")
519 if(mb_strpos($orderCode, $accountNumberPrefix) === 0)
521 $orderCode = mb_substr($orderCode, mb_strlen($accountNumberPrefix));
524 return $orderByID[
'ID'];
530 return $orderByAccountNumber[
'ID'];
533 return $orderBy1CID[
'ID'];
536 return $orderByID[
'ID'];
541 'select' =>
array(
'ID'),
542 'filter' =>
array(
'ID_1C' => $orderCode),
543 'order' =>
array(
'ID' =>
'DESC')
548 'select' =>
array(
'ID'),
549 'filter' =>
array(
'ACCOUNT_NUMBER' => $orderCode),
550 'order' =>
array(
'ID' =>
'DESC')
554 if ($accountNumberPrefix !=
"")
556 if(mb_strpos($orderCode, $accountNumberPrefix) === 0)
558 $orderCode = mb_substr($orderCode, mb_strlen($accountNumberPrefix));
562 'select' =>
array(
'ID'),
563 'filter' =>
array(
'ACCOUNT_NUMBER' => $orderCode),
564 'order' =>
array(
'ID' =>
'DESC')
568 return $orderByAccountNumber[
'ID'];
572 return $orderByID[
'ID'];
577 return $orderByAccountNumber[
'ID'];
580 return $orderBy1CID[
'ID'];
587 $documentBasketItems =
array();
588 $documentShipmentItems =
array();
589 if(!empty($newBasketItems[
"items"]))
591 $arDocumentUpdate =
array();
592 foreach ($newBasketItems[
"items"] as
$k=>$documentItems)
594 foreach ($documentItems as $itemID => $arItem)
596 if($arItem[
"TYPE"] ==
GetMessage(
"CC_BSC1_ITEM"))
598 $documentBasketItems[][$itemID] = $arItem;
599 $arDocumentUpdate[][$itemID] = $arDocument[
'items'][
$k][$itemID];
603 $documentShipmentItems = $arItem;
606 $documentShipmentItems[
'DELIVERY_PRICE'] = $arItem[
'PRICE'];
610 if(
count($arDocumentUpdate)>0)
611 $arDocument[
'items'] = $arDocumentUpdate;
613 if(is_array($documentBasketItems) &&
count($documentBasketItems)>0)
614 $this->addProduct($arDocument, $documentBasketItems, $documentShipmentItems, $shipment);
617 function updateOrderWithoutShipmentsPayments(
array $arOrder)
622 $key =
$eventManager->addEventHandler(
'sale',
'OnSaleOrderBeforeSaved', Array($this,
"onBeforeUpdateOrderWithoutShipmentsPayments"));
624 $dbOrder =
CSaleOrder::GetList(
array(),
array(
"ID" => $arOrder[
"ID"]),
false,
false,
array(
"ID",
"LID",
"PERSON_TYPE_ID",
"PAYED",
"DATE_PAYED",
"CANCELED",
"DATE_CANCELED",
"REASON_CANCELED",
"STATUS_ID",
"DATE_STATUS",
"PAY_VOUCHER_NUM",
"PAY_VOUCHER_DATE",
"PRICE_DELIVERY",
"ALLOW_DELIVERY",
"DATE_ALLOW_DELIVERY",
"PRICE",
"CURRENCY",
"DISCOUNT_VALUE",
"USER_ID",
"PAY_SYSTEM_ID",
"DELIVERY_ID",
"DATE_INSERT",
"DATE_INSERT_FORMAT",
"DATE_UPDATE",
"USER_DESCRIPTION",
"ADDITIONAL_INFO",
"COMMENTS",
"TAX_VALUE",
"DELIVERY_DOC_NUM",
"DELIVERY_DOC_DATE",
"STORE_ID",
"ACCOUNT_NUMBER",
"VERSION",
"VERSION_1C",
"ID_1C"));
625 if($orderInfo = $dbOrder->Fetch())
627 if($arOrder[
"VERSION_1C"] != $orderInfo[
"VERSION_1C"] || ($orderInfo[
"VERSION_1C"] ==
'' || $arOrder[
"VERSION_1C"] ==
''))
629 $this->
logMessage(
"Order.VERSION_1C: ".$orderInfo[
"VERSION_1C"]);
630 $this->
logMessage(
"Document.VERSION_1C: ".$arOrder[
"VERSION_1C"]);
631 $this->
logMessage(
"Order.ID_1C: ".$orderInfo[
"ID_1C"]);
632 $this->
logMessage(
"Order.PAYED: ".$orderInfo[
"PAYED"]);
633 $this->
logMessage(
"Order.STATUS_ID: ".$orderInfo[
"STATUS_ID"]);
635 $arOrderFields =
array();
638 if($arOrder[
"XML_1C_DOCUMENT_ID"] != $orderInfo[
"ID_1C"])
639 $arOrderFields[
"ID_1C"] = $arOrder[
"XML_1C_DOCUMENT_ID"];
644 $orderClass = $registry->getOrderClassName();
649 ($orderInfo[
"PAYED"] !=
"Y" ||
is_set($this->getPaymentCompatible1CByOrder(
$order)))
651 && $orderInfo[
"STATUS_ID"] !=
"F")
658 array(
"ID",
"TAX_NAME",
"VALUE",
"VALUE_MONEY",
"CODE",
"IS_IN_PRICE")
664 if(intval($arOrderTax[
"VALUE_MONEY"]) != intval($arOrder[
"TAX"][
"VALUE_MONEY"]) || intval($arOrderTax[
"VALUE"]) != intval($arOrder[
"TAX"][
"VALUE"]) || ($arOrderTax[
"IS_IN_PRICE"] != $arOrder[
"TAX"][
"IS_IN_PRICE"]))
666 if(intval($arOrder[
"TAX"][
"VALUE"])>0)
669 "TAX_NAME" => $arOrder[
"TAX"][
"NAME"],
671 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
673 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
674 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
676 "APPLY_ORDER" =>
"100"
679 $arOrderFields[
"TAX_VALUE"] = $arOrder[
"TAX"][
"VALUE_MONEY"];
684 $arOrderFields[
"TAX_VALUE"] = 0;
691 if(intval($arOrder[
"TAX"][
"VALUE"])>0)
694 "TAX_NAME" => $arOrder[
"TAX"][
"NAME"],
696 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
698 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
699 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
701 "APPLY_ORDER" =>
'100',
704 $arOrderFields[
"TAX_VALUE"] = $arOrder[
"TAX"][
"VALUE_MONEY"];
708 $arShoppingCart =
array();
709 $bNeedUpdate =
false;
711 $this->
logMessage(
"Document.items: ".print_r($arOrder[
"items"],
true));
713 $basket =
$order->getBasket();
715 foreach($basket as $basketItem)
720 $foundedBasketItem =
false;
721 foreach($arOrder[
"items"] as
$k=>
$items)
723 if($this->existsBasketItem($basketItem,
$items))
725 $foundedBasketItem =
true;
727 if($basketItem->getField(
"QUANTITY") !=
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"QUANTITY"])
728 $arFields[
"QUANTITY"] =
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"QUANTITY"];
729 if($basketItem->getField(
"PRICE") !=
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"PRICE"])
730 $arFields[
"PRICE"] =
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"PRICE"];
731 if($basketItem->getField(
"VAT_RATE") !=
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"VAT_RATE"])
732 $arFields[
"VAT_RATE"] =
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"VAT_RATE"];
734 $arFields[
"DISCOUNT_PRICE"] =
$items[$basketItem->getField(
"PRODUCT_XML_ID")][
"DISCOUNT_PRICE"];
738 $arFields[
"ID"] = $basketItem->getField(
"ID");
739 if(DoubleVal(
$arFields[
"QUANTITY"]) <= 0)
740 $arFields[
"QUANTITY"] = $basketItem->getField(
"QUANTITY");
746 $arShoppingCart[] =
array(
747 "ID"=> $basketItem->getField(
"ID"),
748 "QUANTITY"=> $basketItem->getField(
"QUANTITY"),
749 "CANCEL_CALLBACK_FUNC"=> $basketItem->getField(
"CANCEL_CALLBACK_FUNC"),
750 "MODULE"=> $basketItem->getField(
"MODULE"),
751 "PRODUCT_ID"=> $basketItem->getField(
"PRODUCT_ID"),
752 "PRODUCT_PROVIDER_CLASS"=> $basketItem->getField(
"PRODUCT_PROVIDER_CLASS"),
753 "RESERVED"=> $basketItem->getField(
"RESERVED"),
754 "RESERVE_QUANTITY"=> $basketItem->getField(
"RESERVE_QUANTITY"),
755 "TYPE"=> $basketItem->getField(
"TYPE"),
756 "SET_PARENT_ID"=> $basketItem->getField(
"SET_PARENT_ID"),
757 "PRICE"=> $basketItem->getField(
"PRICE"),
758 "VAT_RATE"=> $basketItem->getField(
"VAT_RATE"),
759 "DISCOUNT_PRICE"=> $basketItem->getField(
"DISCOUNT_PRICE"),
760 "PRODUCT_XML_ID"=> $basketItem->getField(
"PRODUCT_XML_ID"),
761 "PROPS"=> $this->getBasketProperty(
$items[$basketItem->getField(
"PRODUCT_XML_ID")])
765 $arOrder[
"items"][
$k][$basketItem->getField(
"PRODUCT_XML_ID")][
"CHECKED"] =
"Y";
769 if(!$foundedBasketItem)
771 if($arOrder[
"CANCELED"] !=
"true" && $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] !=
"true" && $orderInfo[
"CANCELED"] ==
"N")
778 if(!empty($arOrder[
"items"]))
780 foreach ($arOrder[
"items"] as
$k=>
$items)
782 foreach (
$items as $itemID => $item)
784 if ($item[
"CHECKED"] !=
"Y")
786 if ($item[
"TYPE"] ==
GetMessage(
"CC_BSC1_ITEM"))
791 $arShoppingCart[] = $arBasketFields;
797 if (intval($item[
"PRICE"]) != intval($orderInfo[
"PRICE_DELIVERY"]))
798 $arOrderFields[
"PRICE_DELIVERY"] = $item[
"PRICE"];
805 $this->
logMessage(
"Order.NewItems: ".print_r($arShoppingCart,
true));
807 $isUsed = \Bitrix\Sale\Compatible\DiscountCompatibility::isUsed();
808 \Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();
813 if(!CSaleBasket::DoSaveOrderBasket(
$orderId, $orderInfo[
"LID"], $orderInfo[
"USER_ID"], $arShoppingCart, $arErrors))
817 $this->strErrorDocument .=
"\n ".GetMessage(
"CC_BSC1_ORDER_ERROR_3", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).$e->GetString();
821 $this->
logMessage(
"Document.AMOUNT: ".$arOrder[
"AMOUNT"]);
822 $this->
logMessage(
"Order.AMOUNT: ".$orderInfo[
"PRICE"]);
823 $this->
logMessage(
"Order.AMOUNT: ".$orderInfo[
"DISCOUNT_VALUE"]);
824 $this->
logMessage(
"Document.COMMENT: ".$arOrder[
"COMMENT"]);
825 $this->
logMessage(
"Order.COMMENTS: ".$orderInfo[
"COMMENTS"]);
827 if($this->strErrorDocument ==
'')
831 if(DoubleVal($orderInfo[
"DISCOUNT_VALUE"]) > 0)
832 $arOrderFields[
"DISCOUNT_VALUE"] = 0;
833 if($arOrder[
"COMMENT"] <>
'' && $arOrder[
"COMMENT"] != $orderInfo[
"COMMENTS"])
834 $arOrderFields[
"COMMENTS"] = $arOrder[
"COMMENT"];
835 $arOrderFields[
"UPDATED_1C"] =
"Y";
836 if(!empty($arOrderFields))
842 \Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();
847 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).GetMessage(
"CC_BSC1_FINAL_NOT_EDIT", Array(
"#ID#" =>
$orderId));
851 $this->
logMessage(
"Document.CANCELED: ".$arOrder[
"CANCELED"]);
853 $this->
logMessage(
"Order.CANCELED: ".$orderInfo[
"CANCELED"]);
855 $arAditFields = Array();
856 if($arOrder[
"CANCELED"] ==
"true" || $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] ==
"true")
858 if($orderInfo[
"CANCELED"] ==
"N")
861 $arAditFields[
"UPDATED_1C"] =
"Y";
866 if($arOrder[
"CANCELED"] !=
"true" && $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] !=
"true")
868 if($orderInfo[
"CANCELED"] ==
"Y")
871 $arAditFields[
"UPDATED_1C"] =
"Y";
877 if(\Bitrix\Main\Config\Option::get(
"sale",
"1C_CHANGE_STATUS_FROM_1C",
"") && $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_STATUS_ID")] <>
'')
879 if($orderInfo[
"STATUS_ID"] != $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_STATUS_ID")])
885 if(
count($arAditFields)>0)
889 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).GetMessage(
"CC_BSC1_ORDER_NOT_FOUND", Array(
"#ID#" => $arOrder[
"ID"]));
891 removeEventHandler(
'sale',
'OnSaleOrderBeforeSaved',
$key);
896 $documentBasketItems =
array();
897 $this->arPersonTypesIDs =
array();
898 $this->arExportInfo =
array();
900 $this->
logMessage(
"Document.items: ".print_r($arDocument[
"items"],
true));
902 if(!empty($arDocument[
"items"]) && $arDocument[
'AMOUNT'] <>
'')
910 $this->
logMessage(
"personType: ".$arDocument[
"PERSON_TYPE_ID"]);
911 $this->
logMessage(
"personTypesIDs: ".print_r($this->arPersonTypesIDs,
true));
912 $this->
logMessage(
"exportInfo: ".print_r($this->arExportInfo,
true));
914 if(intval($arDocument[
"PERSON_TYPE_ID"]) <= 0)
918 if(intval($arDocument[
"PERSON_TYPE_ID"]) > 0)
922 if(intval($arDocument[
"USER_ID"]) > 0)
926 $arAditFields[
"DATE_INSERT"] = CDatabase::FormatDate($arDocument[
"DATE"].
" ".$arDocument[
"TIME"],
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG));
928 foreach($arDocument[
"items"] as
$k=>
$items)
930 foreach(
$items as $productID=>$item)
932 if($item[
'TYPE'] <>
GetMessage(
"CC_BSC1_SERVICE"))
941 $orderFields = $this->
getOrderProperty($arAgent, $orderFields, $arDocument);
943 $this->
logMessage(
"BASKET_ITEMS: ".print_r($orderFields[
"BASKET_ITEMS"],
true));
945 $arOrder = $this->
saveOrder($arDocument, $orderFields, $arAditFields);
950 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).GetMessage(
"CC_BSC1_ORDER_USER_PROBLEM", Array(
"#ID#" => $arDocument[
"ID_1C"]));
951 if(!empty($arErrors))
953 foreach($arErrors as $v)
955 $this->strErrorDocument .=
"\n".$v[
"TEXT"];
962 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).GetMessage(
"CC_BSC1_ORDER_PERSON_TYPE_PROBLEM", Array(
"#ID#" => $arDocument[
"ID_1C"]));
967 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_BASKET_ITEMS_PROBLEM");
972 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_BASKET_ITEMS_AMOUNT_NULL_PROBLEM");
981 $this->
logMessage(
"Document.Date: ".$arDocument[
"DATE"]);
982 $this->
logMessage(
"Document.PAY_VOUCHER_NUM: ".$arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")]);
986 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED")] ==
"true")
988 if($arDocument[
"CANCELED"] !==
"true" && $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] !==
"true")
994 if (!$r->isSuccess())
995 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID'])).
" ".array_shift($r->getErrors())->getMessage();
1005 function Ship(\
Bitrix\Sale\Shipment $shipment, $arDocument)
1008 $order = $shipment->getCollection()->getOrder();
1010 if(mb_strlen($arDocument[
"DATE"]) > 1)
1012 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_DEDUCTED")] ==
"true" && !$shipment->isShipped())
1014 $shipment->setField(
'ALLOW_DELIVERY',
'Y');
1015 $shipment->setField(
'DEDUCTED',
'Y');
1018 $date =
new Bitrix\Main\Type\Date(CDatabase::FormatDate(str_replace(
"T",
" ", $arDocument[
"DATE"]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG)));
1019 $shipment->setField(
"DELIVERY_DOC_DATE", $date);
1021 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")] <>
'')
1022 $shipment->setField(
"DELIVERY_DOC_NUM", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")]);
1024 if (isset($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]) && strval($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]) !=
'')
1025 $shipment->setField(
'TRACKING_NUMBER', $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]);
1028 function saveOrder($arDocument, $orderFields, $arAditFields)
1030 $arOrder = $arDocument;
1031 unset($arOrder[
'ID']);
1033 if($arOrder[
"ID"] = CSaleOrder::DoSaveOrder($orderFields, $arAditFields, 0, $arErrors))
1036 if(intval($arOrder[
"USER_PROFILE_ID"]) > 0)
1038 if($arOrder[
"USER_PROFILE_VERSION"] != $arOrder[
"AGENT"][
"VERSION"])
1039 CSaleOrderUserProps::Update($arOrder[
"USER_PROFILE_ID"],
array(
"VERSION_1C" => $arOrder[
"AGENT"][
"VERSION"],
"NAME" => $arOrder[
"AGENT"][
"AGENT_NAME"],
"USER_ID" => $arOrder[
"USER_ID"]));
1041 while($arUPV = $dbUPV->Fetch())
1043 $arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arUPV[
"ORDER_PROPS_ID"]] =
array(
"ID" => $arUPV[
"ID"],
"VALUE" => $arUPV[
"VALUE"]);
1047 if(intval($arOrder[
"USER_PROFILE_ID"]) <= 0 || (intval($arOrder[
"USER_PROFILE_ID"]) > 0 && $arOrder[
"USER_PROFILE_VERSION"] != $arOrder[
"AGENT"][
"VERSION"]))
1050 array(
"SORT" =>
"ASC"),
1052 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
1055 "USER_PROPS" =>
"Y",
1059 array(
"ID",
"TYPE",
"NAME",
"CODE",
"USER_PROPS",
"SORT",
"MULTIPLE")
1061 while ($arOrderProperties = $dbOrderProperties->Fetch())
1063 $curVal = $orderFields[
"ORDER_PROP"][$arOrderProperties[
"ID"]];
1067 if (intval($arOrder[
"USER_PROFILE_ID"]) <= 0)
1070 "NAME" => $arOrder[
"AGENT"][
"AGENT_NAME"],
1071 "USER_ID" => $arOrder[
"USER_ID"],
1072 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
1073 "XML_ID" => $arOrder[
"AGENT"][
"ID"],
1074 "VERSION_1C" => $arOrder[
"AGENT"][
"VERSION"],
1078 if(intval($arOrder[
"USER_PROFILE_ID"]) > 0)
1081 "USER_PROPS_ID" => $arOrder[
"USER_PROFILE_ID"],
1082 "ORDER_PROPS_ID" => $arOrderProperties[
"ID"],
1083 "NAME" => $arOrderProperties[
"NAME"],
1086 if(empty($arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]]))
1090 elseif($arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]][
"VALUE"] != $curVal)
1101 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ADD_PROBLEM", Array(
"#ID#" => $arDocument[
"XML_1C_DOCUMENT_ID"]));
1102 if(is_array($arErrors))
1103 $this->strErrorDocument .=
"\n".implode(
', ',$arErrors);
1109 function addProduct($arDocument, $documentBasketItems, $documentShipmentItems, \
Bitrix\Sale\Shipment $shipment)
1111 $this->
logMessage(
"addProduct.documentBasketItems: ".print_r($documentBasketItems,
true));
1112 $this->
logMessage(
"addProduct.shipment: ".$shipment->getId());
1113 $this->
logMessage(
"addProduct.documentShipmentItems: ".print_r($documentShipmentItems,
true));
1116 $order = $shipment->getCollection()->getOrder();
1118 foreach($documentBasketItems as $item)
1120 foreach($item as $itemID=>$arItem)
1123 $item =
$order->getBasket()->createItem($arBasketFields[
"MODULE"], $arBasketFields[
"PRODUCT_ID"]);
1126 if ($propertyCollection = $item->getPropertyCollection())
1129 if(is_array($property) &&
count($property)>0)
1130 $propertyCollection->setProperty($property);
1133 unset($arBasketFields[
"ORDER_ID"]);
1134 unset($arBasketFields[
"MODULE"]);
1135 unset($arBasketFields[
"PRODUCT_ID"]);
1136 unset($arBasketFields[
"LID"]);
1137 unset($arBasketFields[
"PROPS"]);
1139 $item->setFields($arBasketFields);
1150 $this->
logMessage(
"ORDER_ID: ".$arDocument[
'ORDER_ID']);
1151 $this->
logMessage(
"Payment.VERSION_1C: ".$payment->getField(
'VERSION_1C'));
1152 $this->
logMessage(
"Document.VERSION_1C: ".$arDocument[
"VERSION_1C"]);
1154 if($arDocument[
"VERSION_1C"] !=
$payment->getField(
'VERSION_1C') || (
$payment->getField(
'VERSION_1C') ==
'' || $arDocument[
"VERSION_1C"] ==
''))
1156 $this->
logMessage(
"Payment.isPaid: ".($payment->isPaid()?
'Y':
'N'));
1160 $this->
logMessage(
"Payment.SUM: ".$payment->getField(
'SUM'));
1161 $this->
logMessage(
"Document.AMOUNT: ".$arDocument[
"AMOUNT"]);
1162 $this->
logMessage(
"Payment.isPaid: ".$payment->getField(
'COMMENT'));
1163 $this->
logMessage(
"Document.isPaid: ".$arDocument[
"COMMENT"]);
1165 if ($arDocument[
"AMOUNT"] !=
$payment->getField(
'SUM'))
1167 $payment->setField(
"SUM", $arDocument[
"AMOUNT"]);
1168 if ($arDocument[
"COMMENT"] <>
'' && $arDocument[
"COMMENT"] !=
$payment->getField(
'COMMENT'))
1169 $payment->setField(
"COMMENTS", $arDocument[
"COMMENT"]);
1172 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")] <>
'')
1174 $date =
new Bitrix\Main\Type\Date(CDatabase::FormatDate(str_replace(
"T",
" ", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG)));
1175 $payment->setField(
"PAY_VOUCHER_DATE", $date);
1178 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")] <>
'')
1179 $payment->setField(
"PAY_VOUCHER_NUM", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")]);
1182 $this->
logMessage(
"Document.CANCELED: ".$arDocument[
"CANCELED"]);
1185 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] ==
"true")
1190 $payment->setField(
"COMMENTS",$arDocument[
"COMMENT"]);
1195 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_RETURN")] ==
"true")
1197 $payment->setField(
"IS_RETURN",
'Y');
1198 $payment->setField(
"PAY_RETURN_COMMENT", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_RETURN_REASON")]);
1202 function addPaymentFromDocumentByOrder(
array $arDocument, \
Bitrix\Sale\Order
$order)
1205 $this->
logMessage(
"ORDER_ID: ".$arDocument[
'ORDER_ID']);
1207 $this->
logMessage(
"Document.VERSION_1C: ".$arDocument[
"VERSION_1C"]);
1208 $this->
logMessage(
"Document.AMOUNT: ".$arDocument[
"AMOUNT"]);
1209 $this->
logMessage(
"Document.COMMENT: ".$arDocument[
"COMMENT"]);
1211 $this->
logMessage(
"Document.PAYED_DATE: ".$arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]);
1212 $this->
logMessage(
"Document.PAYED_NUM: ".$arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")]);
1214 $paymentServiceId = intval(\
Bitrix\
Main\
Config\Option::get(
'sale', self::getOptionNameByType(), 0));
1215 if($paymentServiceId<=0)
1218 if ($paySystem = \
Bitrix\Sale\
PaySystem\Manager::getObjectById($paymentServiceId))
1224 $payment->setField(
"SUM", $arDocument[
"AMOUNT"]);
1227 $payment->setField(
"COMMENTS", $arDocument[
"COMMENT"]);
1229 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED")] ==
"true")
1233 $payment->setField(
'PAID',
'Y');
1235 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")] <>
'')
1237 $date =
new Bitrix\Main\Type\Date(CDatabase::FormatDate(str_replace(
"T",
" ", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG)));
1238 $payment->setField(
"PAY_VOUCHER_DATE", $date);
1241 if ($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")] <>
'')
1242 $payment->setField(
"PAY_VOUCHER_NUM", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")]);
1249 $this->strErrorDocument .=
"\n ".GetMessage(
"CC_BSC1_PAYMENT_ERROR_7", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID())).GetMessage(
"CC_BSC1_ORDER_NOT_FOUND");
1259 $key =
$eventManager->addEventHandler(
'sale',
'OnSaleOrderBeforeSaved', Array($this,
"onBeforeSaveOrderWithoutShipmentsPayments"));
1261 $addOrderField[
'EXTERNAL_ORDER'] =
'Y';
1264 removeEventHandler(
'sale',
'OnSaleOrderBeforeSaved',
$key);
1273 if(intval($serviceId)<=0)
1284 $shipmentCollection =
$order->getShipmentCollection();
1286 $shipment = $shipmentCollection->createItem(
$service);
1288 $shipment->setField(
'DELIVERY_NAME',
$service ?
$service->getName() :
'Not Found');
1298 $basket = $shipment->getCollection()->getOrder()->getBasket();
1300 foreach ($basket as $basketItem)
1302 foreach ($arDocument[
'items'] as
$k=>$item)
1305 $this->existsBasketItem($basketItem, $item) &&
1306 $item[$basketItem->getField(
'PRODUCT_XML_ID')][
'PRICE'] == $basketItem->getField(
'PRICE')
1312 $shipmentItemCollection = $shipment->getShipmentItemCollection();
1313 $shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode());
1314 if ($shipmentItem ===
null)
1315 $shipmentItemQuantity = 0;
1317 $shipmentItemQuantity = $shipmentItem->getQuantity();
1320 $externalQuantity = intval($item[$basketItem->getField(
'PRODUCT_XML_ID')][
'QUANTITY']);
1322 if($externalQuantity < $shipmentItemQuantity)
1324 $needQuantity = $shipmentItemQuantity-$externalQuantity;
1328 elseif($externalQuantity > $shipmentItemQuantity)
1332 if($externalQuantity <= $availableQuantityByProducts)
1334 $needQuantity = $externalQuantity-$shipmentItemQuantity;
1345 $this->strErrorDocument .=
"\n ".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_8", Array(
'#ID#'=>$shipment->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID()));
1349 $arDocument[
'items'][
$k][$basketItem->getField(
'PRODUCT_XML_ID')][
"CHECKED"] =
"Y";
1353 $this->existsBasketItem($basketItem, $item) &&
1354 $item[$basketItem->getField(
'PRODUCT_XML_ID')][
'PRICE'] <> $basketItem->getField(
'PRICE')
1358 'PRODUCT_XML_ID'=>$basketItem->getField(
'PRODUCT_XML_ID'),
1359 'PRICE_ORIG'=>$basketItem->getField(
'PRICE'),
1360 'PRICE_NEW'=>$item[$basketItem->getField(
'PRODUCT_XML_ID')][
'PRICE_ONE'],
1361 'BASKET_ID'=>$basketItem->getId(),
1362 'SHIPMENT_ID'=>$shipment->getId(),
1368 if(!empty($arDocument[
"items"]))
1370 $newBasketItems =
array();
1371 foreach ($arDocument[
"items"] as
$k=>$item)
1373 foreach ($item as $itemID => $arItem)
1375 if ($arItem[
"CHECKED"] !=
"Y")
1379 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_9", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID()));
1383 $newBasketItems[
'items'][
$k][$itemID] = $arItem;
1390 if(is_array($newBasketItems) &&
count($newBasketItems)>0)
1392 $newBasketItems[
'ORDER_ID'] = $arDocument[
'ORDER_ID'];
1399 if(!$shipment->isShipped())
1401 foreach ($arDocument[
'items'] as $item)
1403 foreach ($item as $arItem)
1405 if($arItem[
"TYPE"] ==
GetMessage(
"CC_BSC1_SERVICE"))
1407 if (intval($arItem[
"PRICE"]) != intval($shipment->getField(
'PRICE_DELIVERY')))
1409 $shipment->setBasePriceDelivery($arItem[
"PRICE"],
true);
1416 if ($arDocument[
"COMMENT"] <>
'' && $arDocument[
"COMMENT"] != $shipment->getField(
'COMMENT'))
1417 $shipment->setField(
"COMMENTS", $arDocument[
"COMMENT"]);
1420 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")] <>
'')
1421 $shipment->setField(
"DELIVERY_DOC_NUM", $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")]);
1423 if (isset($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]) && strval($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]) !=
'')
1424 $shipment->setField(
'TRACKING_NUMBER', $arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_TRACKING_NUMBER")]);
1426 if($arDocument[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] ==
"true")
1428 if($shipment->isShipped())
1430 $shipment->setField(
'DEDUCTED',
'N');
1435 function deleteShipmentItemsByDocument($arDocument, \
Bitrix\Sale\Shipment $shipment)
1440 $basket = $shipment->getCollection()->getOrder()->getBasket();
1441 foreach($basket as $basketItem)
1443 foreach($arDocument[
'items'] as $item)
1445 if(!$this->existsBasketItem($basketItem, $item))
1447 $shipmentItems = $shipment->getShipmentItemCollection()->getItemByBasketCode($basketItem->getId());
1448 if (!is_null($shipmentItems))
1450 $shipmentItems->delete();
1451 $this->
logMessage(
"BasketItem: " .
"[" . $shipmentItems->getId() .
"]" . $shipmentItems->getField(
'NAME'));
1463 if(empty($availableQuantityByProducts[
'SYSTEM'][$basketItem->getField(
'PRODUCT_XML_ID')]))
1465 $systemShipmentQuantity = 0;
1469 $systemShipmentQuantity = intval($availableQuantityByProducts[
'SYSTEM'][$basketItem->getField(
'PRODUCT_XML_ID')]);
1472 $needQuantity = $externalQuantity-$shipmentItemFields[
'QUANTITY'];
1474 if($systemShipmentQuantity >= $needQuantity)
1480 $needQuantityWithoutSystem = $needQuantity-$systemShipmentQuantity;
1487 $order = $basketItem->getCollection()->getOrder();
1489 foreach(
$order->getShipmentCollection() as $shipmentAny)
1491 if($shipmentAny->isSystem())
1493 if($shipmentAny->getId() == $shipment->getId())
1498 $shipmentItemAny = $shipmentAny->getShipmentItemCollection()->getItemByBasketCode($basketItem->getBasketCode());
1499 if($shipmentItemAny ===
null)
1502 if($needQuantityWithoutSystem < $shipmentItemAny->getQuantity())
1506 $needQuantityWithoutSystem = 0;
1508 elseif($needQuantityWithoutSystem >= $shipmentItemAny->getQuantity())
1510 $shipmentItemAnyQuantity = $shipmentItemAny->getQuantity();
1513 $needQuantityWithoutSystem = $needQuantityWithoutSystem - $shipmentItemAnyQuantity;
1516 if($needQuantityWithoutSystem == 0)
1526 $this->
logMessage(
"updateShipmentItemQuantity.systemShipmentQuantity: ".$systemShipmentQuantity);
1528 if($systemShipmentQuantity >= $needQuantity)
1535 $needQuantityWithoutSystem = $needQuantity-$systemShipmentQuantity;
1536 $this->
logMessage(
"updateShipmentItemQuantity.needQuantityWithoutSystem: ".$needQuantityWithoutSystem);
1543 $this->
logMessage(
"setShipmentItemQuantity.needQuantity: ".print_r($needQuantity,
true));
1545 $shipmentItemCollection = $shipment->getShipmentItemCollection();
1546 $shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode());
1547 if ($shipmentItem ===
null)
1548 $shipmentItem = $shipmentItemCollection->createItem($basketItem);
1550 if($needQuantity[0]==
'plus')
1552 $r=$shipmentItem->setQuantity($shipmentItem->getQuantity()+ $needQuantity[1]);
1554 elseif($needQuantity[0]==
'minus')
1556 if($shipmentItem->getField(
'QUANTITY')==$needQuantity[1])
1557 $r=$shipmentItem->delete();
1559 $r=$shipmentItem->setQuantity($shipmentItem->getQuantity()+($needQuantity[1] * -1));
1561 if(!$r->isSuccess())
1563 $error = array_shift($r->getErrors());
1564 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_10", Array(
'#ID#'=>$shipment->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID())).$error->getMessage();
1571 $needQuantity =
array(
'plus',$Quantity);
1579 $needQuantity = $externalQuantity - $availableQuantityByProducts;
1580 $this->
logMessage(
"updateBasketNeedExternalQuantity.needQuantity: ".$needQuantity);
1581 $this->
logMessage(
"updateBasketNeedExternalQuantity.basketId: ".$basketItem->getId());
1584 $fields[
"QUANTITY"] = $basketItem->getField(
'QUANTITY')+$needQuantity;
1585 $basketItem->setFields(
$fields);
1588 $this->
logMessage(
"updateBasketNeedExternalQuantity.availableQuantityByProducts: ".$availableQuantityByProducts);
1589 $this->
logMessage(
"updateBasketNeedExternalQuantity.externalQuantity: ".$externalQuantity);
1591 if($externalQuantity <= $availableQuantityByProducts)
1596 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_11", Array(
'#ID#'=>$shipment->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID()));
1604 case 'pay_system_c_operation':
1605 case 'pay_system_b_operation':
1606 case 'pay_system_a_operation':
1609 case 'shipment_operation':
1612 case 'order_operation':
1624 self::$operationType =
'pay_system_c_operation';
1627 self::$operationType =
'pay_system_b_operation';
1630 self::$operationType =
'pay_system_a_operation';
1633 self::$operationType =
'shipment_operation';
1636 self::$operationType =
'order_operation';
1646 $this->xmlid1C = $xmlid;
1650 $this->orderIdOrig =
$code;
1666 if ($basketItem->getCollection()->getOrder()->getField(
"STATUS_ID") ==
"F")
1672 if ($shipment->isShipped())
1684 static $innerPsId =
null;
1696 if($innerPsId == $id)
1703 'select' =>
array(
'ID'),
1704 'filter' =>
array(
'!ACTION_FILE' =>
'inner',
'ACTIVE'=>
'Y'),
1705 'order' =>
array(
'ID'=>
'ASC')
1720 static $psOnStatusPaymentOrder =
null;
1721 static $innerPsId =
null;
1723 if (!
is_set($psOnStatusPaymentOrder))
1729 if($psOnStatusPaymentOrder > 0)
1733 if($innerPsId == $psOnStatusPaymentOrder)
1744 if ($this->
getVersion1C() != $shipment->getField(
'VERSION_1C') || ($shipment->getField(
'VERSION_1C') ==
'' || $this->getVersion1C() ==
''))
1751 if($this->crmCompatibleMode)
1753 $_SESSION[
'versionSchema'] = self::DEFUALT_VERSION;
1760 if(empty($this->arPersonTypesIDs))
1763 while($arPT = $dbPT->Fetch())
1765 $this->arPersonTypesIDs[] = $arPT[
"ID"];
1771 if(empty($this->arExportInfo))
1774 while($arExport = $dbExport->Fetch())
1776 $this->arExportInfo[$arExport[
"PERSON_TYPE_ID"]] = unserialize($arExport[
"VARS"], [
'allowed_classes' =>
false]);
1782 foreach($this->arExportInfo as $pt => $value)
1785 (($value[
"IS_FIZ"] ==
"Y" && $arOrder[
"AGENT"][
"TYPE"] ==
"FIZ")
1786 || ($value[
"IS_FIZ"] ==
"N" && $arOrder[
"AGENT"][
"TYPE"] !=
"FIZ"))
1788 $arOrder[
"PERSON_TYPE_ID"] = $pt;
1794 $arAgent = $this->arExportInfo[$arOrder[
"PERSON_TYPE_ID"]];
1795 foreach($arAgent as
$k => $v)
1799 (empty($v[
"VALUE"]) || $v[
"TYPE"] !=
"PROPERTY") &&
1800 (empty($arOrder[
"USER_PROPS"])
1801 || (is_array($v) && is_string($v[
"VALUE"]) && empty($arOrder[
"USER_PROPS"][$v[
"VALUE"]]))
1805 unset($arAgent[
$k]);
1813 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
1817 "PRICE" => $arOrder[
"AMOUNT"],
1819 "USER_ID" => $arOrder[
"USER_ID"],
1820 "TAX_VALUE" => doubleval($arOrder[
"TAX"][
"VALUE_MONEY"]),
1821 "COMMENTS" => $arOrder[
"COMMENT"],
1822 "BASKET_ITEMS" =>
array(),
1823 "TAX_LIST" =>
array(),
1824 "ORDER_PROP" =>
array(),
1829 $orderFields =
array();
1830 if(!empty($arOrder[
"TAX"]))
1832 $orderFields[] =
array(
1833 "NAME" => $arOrder[
"TAX"][
"NAME"],
1834 "IS_PERCENT" =>
"Y",
1835 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
1836 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
1837 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
1839 "APPLY_ORDER" =>
'100',
1842 return $orderFields;
1847 if(is_array($item[
'ATTRIBUTES']))
1849 foreach($item[
'ATTRIBUTES'] as $id=>$value)
1859 foreach($arAgent as
$k => $v)
1861 if(!empty($arOrder[
"ORDER_PROPS"][
$k]))
1863 $orderFields[
"ORDER_PROP"][$v[
"VALUE"]] = $arOrder[
"ORDER_PROPS"][
$k];
1865 if(empty($orderFields[
"ORDER_PROP"][$v[
"VALUE"]]) && !empty($arOrder[
"USER_PROPS"][$v[
"VALUE"]]))
1867 $orderFields[
"ORDER_PROP"][$v[
"VALUE"]] = $arOrder[
"USER_PROPS"][$v[
"VALUE"]];
1870 return $orderFields;
1875 switch(self::$operationType)
1877 case 'pay_system_b_operation':
1880 case 'pay_system_c_operation':
1883 case 'pay_system_a_operation':
1891 return doubleval(str_replace(
" ",
"", str_replace(
",",
".", (!empty($_SESSION[
'versionSchema']) ? $_SESSION[
'versionSchema'] : self::DEFUALT_VERSION))));
1896 $this->needModifyItem[
$type][]=$id;
1900 if(!in_array($id, $this->modifyItem[
$type]))
1901 $this->modifyItem[
$type][]=$id;
1906 if (!empty($this->needModifyItem[
'CHANGE_PRODUCTS']) &&
count($this->needModifyItem[
'CHANGE_PRODUCTS']) > 0)
1908 foreach ($this->needModifyItem[
'CHANGE_PRODUCTS'] as $products)
1910 if ($products[
'PRODUCT_XML_ID'] == $itemID)
1913 if(!empty($priceNew))
1915 if($products[
'PRICE_NEW'] == $priceNew)
1927 $systemQuantity = 0;
1928 $systemShipment = $shipment->getCollection()->getSystemShipment();
1929 $systemShipmentItem = $systemShipment->getShipmentItemCollection();
1930 if (!is_null($systemShipmentItem))
1932 $sipmentItem = $systemShipmentItem->getItemByBasketCode($basketItem->getBasketCode());
1933 if($sipmentItem !==
null)
1934 $systemQuantity = $sipmentItem->getQuantity();
1936 return $systemQuantity;
1941 $order = $basketItem->getCollection()->getOrder();
1942 foreach(
$order->getShipmentCollection() as $shipment)
1946 $sipmentItem = $shipment->getShipmentItemCollection()->getItemByBasketCode($basketItem->getBasketCode());
1947 if($sipmentItem !==
null)
1948 $quantity +=$sipmentItem->getQuantity();
1956 if(!empty($arOrder[
"AGENT"]) && $arOrder[
"AGENT"][
"ID"] <>
'')
1958 $arOrder[
"PERSON_TYPE_ID"] = 0;
1959 $arOrder[
"USER_ID"] = 0;
1960 $arErrors =
array();
1962 if ($arUProp = $dbUProp->Fetch()) {
1963 $arOrder[
"USER_ID"] = $arUProp[
"USER_ID"];
1964 $arOrder[
"PERSON_TYPE_ID"] = $arUProp[
"PERSON_TYPE_ID"];
1965 $arOrder[
"USER_PROFILE_ID"] = $arUProp[
"ID"];
1966 $arOrder[
"USER_PROFILE_VERSION"] = $arUProp[
"VERSION_1C"];
1969 while ($arUPropValue = $dbUPropValue->Fetch()) {
1970 $arOrder[
"USER_PROPS"][$arUPropValue[
"ORDER_PROPS_ID"]] = $arUPropValue[
"VALUE"];
1973 if ($arOrder[
"AGENT"][
"ID"] <>
'') {
1974 $arAI = explode(
"#", $arOrder[
"AGENT"][
"ID"]);
1975 if (intval($arAI[0]) > 0) {
1976 $dbUser = CUser::GetByID($arAI[0]);
1977 if ($arU = $dbUser->Fetch()) {
1978 if (
htmlspecialcharsback(mb_substr(
htmlspecialcharsbx($arU[
"ID"].
"#".$arU[
"LOGIN"].
"#".$arU[
"LAST_NAME"].
" ".$arU[
"NAME"].
" ".$arU[
"SECOND_NAME"]), 0, 80)) == $arOrder[
"AGENT"][
"ID"]) {
1979 $arOrder[
"USER_ID"] = $arU[
"ID"];
1985 if (intval($arOrder[
"USER_ID"]) <= 0) {
1988 "NAME" => $arOrder[
"AGENT"][
"ITEM_NAME"],
1989 "EMAIL" => $arOrder[
"AGENT"][
"CONTACT"][
"MAIL_NEW"],
1992 if ($arUser[
"NAME"] ==
'')
1993 $arUser[
"NAME"] = $arOrder[
"AGENT"][
"CONTACT"][
"CONTACT_PERSON"];
1995 $emServer =
$_SERVER[
"SERVER_NAME"];
1996 if(mb_strpos(
$_SERVER[
"SERVER_NAME"],
".") ===
false)
1999 if ($arUser[
"EMAIL"] ==
'')
2000 $arUser[
"EMAIL"] =
"buyer" . time() .
GetRandomCode(2) .
"@" . $emServer;
2004 $obUser =
new CUser;
2005 $userFields[] =
array();
2007 if($arOrder[
"AGENT"][
"CONTACT"][
"PHONE"] <>
'')
2008 $userFields[
"WORK_PHONE"] = $arOrder[
"AGENT"][
"CONTACT"][
"PHONE"];
2010 if(
count($userFields)>0)
2012 if(!$obUser->Update($arOrder[
"USER_ID"], $userFields,
true))
2013 $this->strErrorDocument .=
"\n".$obUser->LAST_ERROR;
2026 if(preg_match(
"#".
GetMessage(
"SALE_EXPORT_FORM_CRD").
"=(.);{0,1}#",
$val, $match))
2028 $this->sdp = $match[1];
2035 function existsBasketItem(\
Bitrix\Sale\BasketItem $basketItem,
array $item =
array())
2037 if(!empty($item[$basketItem->getField(
"PRODUCT_XML_ID")]))
2039 $propertyItem = $this->
getBasketProperty($item[$basketItem->getField(
"PRODUCT_XML_ID")]);
2041 $propertyBasketItem =
array();
2043 if($basketPropertyCollection = $basketItem->getPropertyCollection())
2044 $propertyBasketItem = $basketPropertyCollection->getPropertyValues();
2046 if(!empty($propertyItem) && is_array($propertyItem))
2048 if($basketPropertyCollection->isPropertyAlreadyExists($propertyItem))
2062 $positionLast = $fileStream->getPosition();
2064 if(isset($positionLast[1]))
2065 $endPosition = $positionLast[1];
2068 $proccessXmlEntry = $localSession->get(
'proccess_xml_entry');
2069 if (is_array($proccessXmlEntry))
2071 $position = $proccessXmlEntry;
2073 if(isset($position[1]))
2074 $startPosition = $position[1];
2078 foreach(explode(
"/", $positionLast[2]) as $pathPart)
2080 @list($elementPosition, $elementName) = explode(
"@", $pathPart, 2);
2081 $positionStack[] = $elementPosition;
2083 $startPosition = array_pop($positionStack);
2086 $localSession->set(
'proccess_xml_entry', $fileStream->getPosition());
2088 if (($endPosition - $startPosition) <= 0)
2093 $xmlChunk = $fileStream->readFilePart($startPosition, $endPosition);
2095 return \Bitrix\Main\Text\Encoding::convertEncoding($xmlChunk, $positionLast[0],
LANG_CHARSET,
$error);
2103 protected function nodeHandlerPartialVersion($arDocument)
2109 if(Sale\Configuration::useStoreControl() || \
Bitrix\
Main\
Config\Option::get(
'catalog',
'enable_reservation',
'N')==
'Y')
2110 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_USE_STORE_SALE_1");
2113 if(\
Bitrix\
Main\
Config\Option::get(
"main",
"~sale_converted_15",
'N') <>
'Y')
2114 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_CONVERT_SALE");
2117 if(\
Bitrix\
Main\
Config\Option::get(
"sale",
"allow_deduction_on_delivery",
"N") ==
'Y')
2118 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SALE_ALLOW_DEDUCTION_ON_DELIVERY_ERROR");
2121 if(!self::getDefaultPaySystem())
2122 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PS_ON_STATUS_PAYMENT_ORDER_ERROR");
2125 $this->
logMessage(
"OperationType: ".$arDocument[
'OPERATION_TYPE']);
2130 $orderClass = $registry->getOrderClassName();
2132 switch($arDocument[
'OPERATION_TYPE'])
2134 case 'order_operation':
2137 if($arDocument[
"XML_1C_DOCUMENT_ID"] <>
'')
2142 $this->
logMessage(
"Document.XML_1C_DOCUMENT_ID: ".$arDocument[
'XML_1C_DOCUMENT_ID']);
2143 $this->
logMessage(
"Document.VERSION_1C: ".$arDocument[
'VERSION_1C']);
2145 if(intval($arDocument[
"ID"])>0)
2150 $this->updateOrderWithoutShipmentsPayments($arDocument);
2151 if($this->strErrorDocument ==
'')
2153 $order = $orderClass::load($arDocument[
"ID"]);
2155 $this->updateEntityCompatible1C(
$order, $arDocument);
2157 $order->setField(
'UPDATED_1C',
'Y');
2161 if (!$r->isSuccess())
2162 $this->strErrorDocument .= array_shift($r->getErrors())->getMessage();
2165 elseif(\Bitrix\Main\Config\Option::get(
"sale",
"1C_IMPORT_NEW_ORDERS",
"Y") ==
"Y")
2171 if(intval($arOrder[
'ID'])>0)
2173 $order = $orderClass::load($arOrder[
"ID"]);
2174 if($this->strErrorDocument ==
'')
2178 $order->setField(
'EXTERNAL_ORDER',
'Y');
2179 $order->setField(
'UPDATED_1C',
'Y');
2183 if($arDocument[
"DATE"] <>
'')
2184 $order->setField(
'DATE_INSERT',
new Bitrix\Main\Type\DateTime(CDatabase::FormatDate($arDocument[
"DATE"].
" ".$arDocument[
"TIME"],
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG))));
2186 if(!$r->isSuccess())
2187 $this->strErrorDocument .= array_shift($r->getErrors())->getMessage();
2191 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_2", Array(
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2196 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_1");
2199 case 'pay_system_b_operation':
2200 case 'pay_system_c_operation':
2201 case 'pay_system_a_operation':
2204 if(isset($arDocument[
'PAYMENT_ORDER_ID']) && $arDocument[
'ORDER_ID'] ==
'')
2205 $arDocument[
'ORDER_ID'] = $arDocument[
'PAYMENT_ORDER_ID'];
2207 if($arDocument[
"XML_1C_DOCUMENT_ID"] <>
'')
2212 $this->
logMessage(
"Document.XML_1C_DOCUMENT_ID: ".$arDocument[
'XML_1C_DOCUMENT_ID']);
2213 $this->
logMessage(
"Document.VERSION_1C: ".$arDocument[
'VERSION_1C']);
2215 if($arDocument[
'ORDER_ID'] !==
false)
2217 if(
$order = $orderClass::load($arDocument[
'ORDER_ID']))
2219 if (!
$order->isCanceled())
2221 if (
$order->getField(
"STATUS_ID") !=
"F")
2223 if($arDocument[
'CANCELED'] ==
"true")
2230 if(!$deletePayment->isSuccess())
2231 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID'])).array_shift($deletePayment->getErrors())->getMessage();
2234 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_9", Array(
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2238 if($arDocument[
"ID"] <>
'')
2244 $this->beforePaidCompatible1C(
$order);
2248 if($this->strErrorDocument ==
'')
2252 $this->afterPaidCompatible1C(
$order);
2254 if($this->strErrorDocument ==
'')
2256 $payment->setField(
'UPDATED_1C',
'Y');
2263 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_3", Array(
"#ID#" => $arDocument[
"ID"],
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2265 elseif (\Bitrix\Main\Config\Option::get(
"sale",
"1C_IMPORT_NEW_PAYMENT",
"Y") ==
'Y')
2267 $this->beforePaidCompatible1C(
$order);
2269 $payment = $this->addPaymentFromDocumentByOrder($arDocument,
$order);
2270 if($this->strErrorDocument ==
'' && !is_null(
$payment))
2274 $this->afterPaidCompatible1C(
$order);
2276 if($this->strErrorDocument ==
'')
2278 $payment->setField(
'EXTERNAL_PAYMENT',
'Y');
2287 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_10", Array(
'#ORDER_ID#'=>
$order->getId(),
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2291 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_11", Array(
'#ORDER_ID#'=>
$order->getId(),
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2296 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_8",
array(
'#ORDER_ID#'=>
$order->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID()));
2299 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_5",
array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID()));
2302 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_PAYMENT_ERROR_6");
2304 if($this->strErrorDocument ==
'')
2306 $order->setField(
'UPDATED_1C',
'Y');
2309 if(!$r->isSuccess())
2310 $this->strErrorDocument .= array_shift($r->getErrors())->getMessage();
2314 case 'shipment_operation':
2316 if(isset($arDocument[
'SHIPMENT_ORDER_ID']) && $arDocument[
'ORDER_ID'] ==
'')
2317 $arDocument[
'ORDER_ID'] = $arDocument[
'SHIPMENT_ORDER_ID'];
2319 if($arDocument[
"XML_1C_DOCUMENT_ID"] <>
'')
2325 $this->
logMessage(
"Document.XML_1C_DOCUMENT_ID: ".$arDocument[
'XML_1C_DOCUMENT_ID']);
2326 $this->
logMessage(
"Document.VERSION_1C: ".$arDocument[
'VERSION_1C']);
2327 $this->
logMessage(
"Document.ORDER_ID_ORIG: ".$arDocument[
'ORDER_ID_ORIG']);
2329 if($arDocument[
'ORDER_ID'] !==
false)
2332 if(
$order = $orderClass::load($arDocument[
'ORDER_ID']))
2334 if (
$order->getField(
"STATUS_ID") !=
"F")
2336 if($arDocument[
"CANCELED"] ==
"true")
2338 if ($arDocument[
"ID"] <>
'' && ($shipment =
$order->getShipmentCollection()->getItemById($arDocument[
'ID'])))
2341 if(!$deleteShipment->isSuccess())
2342 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_ORDER_ERROR_4", Array(
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID'])).array_shift($deleteShipment->getErrors())->getMessage();
2345 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_16", Array(
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2349 if($arDocument[
"ID"] <>
'')
2351 if ($shipment =
$order->getShipmentCollection()->getItemById($arDocument[
'ID']))
2354 if (!$shipment->isSystem())
2356 if (!$shipment->isShipped())
2358 $this->deleteShipmentItemsByDocument($arDocument, $shipment);
2362 if($this->strErrorDocument ==
'')
2364 $this->Ship($shipment, $arDocument);
2368 if($this->strErrorDocument ==
'')
2370 $shipment->setField(
'UPDATED_1C',
'Y');
2371 $shipment->setField(
'VERSION_1C', $this->
getVersion1C());
2377 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_2", Array(
"#ID#" => $arDocument[
"ID"],
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2380 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_14", Array(
"#ID#" => $arDocument[
"ID"],
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2383 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_3", Array(
"#ID#" => $arDocument[
"ID"],
'#ORDER_ID#'=>$arDocument[
'ORDER_ID'],
'#XML_1C_DOCUMENT_ID#'=>$arDocument[
'XML_1C_DOCUMENT_ID']));
2385 elseif(\Bitrix\Main\Config\Option::get(
"sale",
"1C_IMPORT_NEW_SHIPMENT",
'Y')==
'Y')
2389 if($this->strErrorDocument ==
'')
2391 $this->Ship($shipment, $arDocument);
2395 if($this->strErrorDocument ==
'')
2397 $shipment->setField(
'VERSION_1C',$this->
getVersion1C());
2399 $shipment->setField(
'EXTERNAL_DELIVERY',
'Y');
2400 $shipment->setField(
'UPDATED_1C',
'Y');
2407 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_18", Array(
'#ORDER_ID#'=>
$order->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID()));
2410 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_15",
array(
'#ORDER_ID#'=>
$order->getId(),
'#XML_1C_DOCUMENT_ID#'=>$this->getXMLDocumentID()));
2412 elseif(\Bitrix\Main\Config\Option::get(
"sale",
"1C_IMPORT_NEW_ORDER_NEW_SHIPMENT",
"Y") ==
'Y')
2414 if($arDocument[
"CANCELED"] !=
"true")
2418 if($arOrder[
'ID']>0)
2420 $order = $orderClass::load($arOrder[
'ID']);
2423 if($this->strErrorDocument ==
'')
2425 $this->Ship($shipment, $arDocument);
2427 if($this->strErrorDocument ==
'')
2429 $shipment->setField(
'VERSION_1C', $this->
getVersion1C());
2431 $shipment->setField(
'EXTERNAL_DELIVERY',
'Y');
2432 $shipment->setField(
'UPDATED_1C',
'Y');
2436 $order->setField(
'EXTERNAL_ORDER',
'Y');
2442 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_7", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID()));
2445 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_17", Array(
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID()));
2448 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_5", Array(
"#ID#" => $arDocument[
"ID"],
'#XML_1C_DOCUMENT_ID#'=>$this->
getXMLDocumentID()));
2451 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_SHIPMENT_ERROR_6", Array(
"#ID#" => $arDocument[
"ID"]));
2453 if($this->strErrorDocument ==
'')
2457 if($this->arParams[
"FINAL_STATUS_ON_DELIVERY"] <>
'' &&
2458 $order->getField(
"STATUS_ID") !=
"F" &&
2459 $order->getField(
"STATUS_ID") != $this->arParams[
"FINAL_STATUS_ON_DELIVERY"]
2462 $order->setField(
"STATUS_ID", $this->arParams[
"FINAL_STATUS_ON_DELIVERY"]);
2466 $order->setField(
'UPDATED_1C',
'Y');
2469 if (!$r->isSuccess())
2470 $this->strErrorDocument .= array_shift($r->getErrorMessages());
2481 \Bitrix\Main\Config\Option::set(
'sale',
'onec_exchange_type',
'partial');
2482 \Bitrix\Main\Config\Option::set(
'sale',
'onec_exchange_last_time', time());
2492 if(!empty($value[
GetMessage(
"CC_BSC1_DOCUMENT")]))
2494 $value = $value[
GetMessage(
"CC_BSC1_DOCUMENT")];
2498 if(!empty($arDocument))
2501 $this->
logMessage(
"VersionSchema: ".self::getVersionSchema());
2503 if (self::getVersionSchema() >= self::PARTIAL_VERSION)
2505 $this->strErrorDocument .=
"\n".GetMessage(
"CC_BSC1_CRM_SCHEME_NOT_SUPPORTED");
2509 self::oldSaveOrder($arDocument, [
'CRM'=>
'Y']);
2526 if(!empty($value[
GetMessage(
"CC_BSC1_DOCUMENT")]))
2528 $value = $value[
GetMessage(
"CC_BSC1_DOCUMENT")];
2532 if(!empty($arDocument))
2535 $this->
logMessage(
"VersionSchema: ".self::getVersionSchema());
2537 if (self::getVersionSchema() >= self::PARTIAL_VERSION)
2539 $this->nodeHandlerPartialVersion($arDocument);
2543 self::oldSaveOrder($arDocument);
2561 $r =
new Sale\Result();
2576 if(!is_array($documentData) ||
count($documentData)<=0)
2577 $r->addError(
new \Bitrix\Main\
Error(
GetMessage(
"CC_BSC1_DOCUMENT_XML_EMPTY")));
2582 $r = $importer::checkSettings();
2585 if($xmlStream <>
'')
2592 if(!$r->isSuccess())
2594 foreach($r->getErrorMessages() as $errorMessages)
2596 if($errorMessages <>
'')
2597 $this->strError .=
"\n".$errorMessages;
2601 if($r->hasWarnings())
2603 if(
count($r->getWarningMessages())>0)
2605 foreach($r->getWarningMessages() as $warningMessages)
2607 if($warningMessages <>
'')
2608 $this->strError .=
"\n".$warningMessages;
2613 \Bitrix\Main\Config\Option::set(
'sale',
'onec_exchange_type',
'container');
2614 \Bitrix\Main\Config\Option::set(
'sale',
'onec_exchange_last_time', time());
2620 elseif(\Bitrix\Main\Config\Option::get(
"sale",
"1C_IMPORT_NEW_ORDERS",
"Y") ==
"Y")
2628 if(!empty($arAgentInfo[
"AGENT"]))
2631 $arErrors =
array();
2633 if($arUProp = $dbUProp->Fetch())
2635 if($arUProp[
"VERSION_1C"] != $arAgentInfo[
"AGENT"][
"VERSION"])
2638 $arAgentInfo[
"PROFILE_ID"] = $arUProp[
"ID"];
2639 $arAgentInfo[
"PERSON_TYPE_ID"] = $arUProp[
"PERSON_TYPE_ID"];
2640 $arAgentInfo[
"USER_ID"] = $arUProp[
"USER_ID"];
2645 $user = Sale\Exchange\Entity\UserProfileImportLoader::getUserByCode($arAgentInfo[
"AGENT"][
"ID"]);
2648 $arAgentInfo[
"USER_ID"] =
$user[
'ID'];
2653 "NAME" => $arAgentInfo[
"AGENT"][
"ITEM_NAME"],
2654 "EMAIL" => $arAgentInfo[
"AGENT"][
"CONTACT"][
"MAIL_NEW"],
2657 if($arUser[
"NAME"] ==
'')
2658 $arUser[
"NAME"] = $arAgentInfo[
"AGENT"][
"CONTACT"][
"CONTACT_PERSON"];
2660 $emServer =
$_SERVER[
"SERVER_NAME"];
2661 if(mb_strpos(
$_SERVER[
"SERVER_NAME"],
".") ===
false)
2663 if($arUser[
"EMAIL"] ==
'')
2664 $arUser[
"EMAIL"] =
"buyer".time().GetRandomCode(2).
"@".$emServer;
2666 $arAgentInfo[
"USER_ID"] =
CSaleUser::DoAutoRegisterUser($arUser[
"EMAIL"], $arUser[
"NAME"], $this->arParams[
"SITE_NEW_ORDERS"], $arErrors,
array(
"XML_ID"=>$arAgentInfo[
"AGENT"][
"ID"],
"EXTERNAL_AUTH_ID"=>Sale\Exchange\Entity\UserImportBase::EXTERNAL_AUTH_ID));
2669 if(intval($arAgentInfo[
"USER_ID"]) > 0)
2673 $obUser =
new CUser;
2674 $userFields[] =
array();
2676 if($arAgentInfo[
"AGENT"][
"CONTACT"][
"PHONE"] <>
'')
2677 $userFields[
"WORK_PHONE"] = $arAgentInfo[
"AGENT"][
"CONTACT"][
"PHONE"];
2679 if(
count($userFields)>0)
2681 if(!$obUser->Update($arAgentInfo[
"USER_ID"], $userFields,
true))
2682 $this->strError .=
"\n".$obUser->LAST_ERROR;
2687 $this->strError .=
"\n".GetMessage(
"CC_BSC1_AGENT_USER_PROBLEM", Array(
"#ID#" => $arAgentInfo[
"AGENT"][
"ID"]));
2688 if(!empty($arErrors))
2690 foreach($arErrors as $v)
2692 $this->strError .=
"\n".$v[
"TEXT"];
2703 while($arPT = $dbPT->Fetch())
2712 while($arExport = $dbExport->Fetch())
2714 $arExportInfo[$arExport[
"PERSON_TYPE_ID"]] = unserialize($arExport[
"VARS"], [
'allowed_classes' =>
false]);
2718 if(intval($arAgentInfo[
"PERSON_TYPE_ID"]) <= 0)
2722 if(($value[
"IS_FIZ"] ==
"Y" && $arAgentInfo[
"AGENT"][
"TYPE"] ==
"FIZ")
2723 || ($value[
"IS_FIZ"] ==
"N" && $arAgentInfo[
"AGENT"][
"TYPE"] !=
"FIZ")
2725 $arAgentInfo[
"PERSON_TYPE_ID"] = $pt;
2729 if(intval($arAgentInfo[
"PERSON_TYPE_ID"]) > 0)
2731 $arAgentInfo[
"ORDER_PROPS_VALUE"] =
array();
2732 $arAgentInfo[
"PROFILE_PROPS_VALUE"] =
array();
2736 foreach($arAgent as
$k => $v)
2738 if($v[
"VALUE"] ==
'' || $v[
"TYPE"] !=
"PROPERTY")
2739 unset($arAgent[
$k]);
2742 foreach($arAgent as
$k => $v)
2744 if(!empty($arAgentInfo[
"ORDER_PROPS"][
$k]))
2745 $arAgentInfo[
"ORDER_PROPS_VALUE"][$v[
"VALUE"]] = $arAgentInfo[
"ORDER_PROPS"][
$k];
2748 if (intval($arAgentInfo[
"PROFILE_ID"]) > 0)
2750 CSaleOrderUserProps::Update($arUProp[
"ID"],
array(
"VERSION_1C" => $arAgentInfo[
"AGENT"][
"VERSION"],
"NAME" => $arAgentInfo[
"AGENT"][
"AGENT_NAME"],
"USER_ID" => $arAgentInfo[
"USER_ID"]));
2752 while($arUPV = $dbUPV->Fetch())
2754 $arAgentInfo[
"PROFILE_PROPS_VALUE"][$arUPV[
"ORDER_PROPS_ID"]] =
array(
"ID" => $arUPV[
"ID"],
"VALUE" => $arUPV[
"VALUE"]);
2758 if(empty($arOrderProps[$arAgentInfo[
"PERSON_TYPE_ID"]]))
2761 array(
"SORT" =>
"ASC"),
2763 "PERSON_TYPE_ID" => $arAgentInfo[
"PERSON_TYPE_ID"],
2766 "USER_PROPS" =>
"Y",
2770 array(
"ID",
"TYPE",
"NAME",
"CODE",
"USER_PROPS",
"SORT",
"MULTIPLE")
2772 while ($arOrderProperties = $dbOrderProperties->Fetch())
2774 $arOrderProps[$arAgentInfo[
"PERSON_TYPE_ID"]][] = $arOrderProperties;
2778 foreach($arOrderProps[$arAgentInfo[
"PERSON_TYPE_ID"]] as $arOrderProperties)
2780 $curVal = $arAgentInfo[
"ORDER_PROPS_VALUE"][$arOrderProperties[
"ID"]];
2784 if (intval($arAgentInfo[
"PROFILE_ID"]) <= 0)
2787 "NAME" => $arAgentInfo[
"AGENT"][
"AGENT_NAME"],
2788 "USER_ID" => $arAgentInfo[
"USER_ID"],
2789 "PERSON_TYPE_ID" => $arAgentInfo[
"PERSON_TYPE_ID"],
2790 "XML_ID" => $arAgentInfo[
"AGENT"][
"ID"],
2791 "VERSION_1C" => $arAgentInfo[
"AGENT"][
"VERSION"],
2795 if(intval($arAgentInfo[
"PROFILE_ID"]) > 0)
2798 "USER_PROPS_ID" => $arAgentInfo[
"PROFILE_ID"],
2799 "ORDER_PROPS_ID" => $arOrderProperties[
"ID"],
2800 "NAME" => $arOrderProperties[
"NAME"],
2803 if(empty($arAgentInfo[
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]]))
2807 elseif($arAgentInfo[
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]][
"VALUE"] != $curVal)
2817 $this->strError .=
"\n".GetMessage(
"CC_BSC1_AGENT_PERSON_TYPE_PROBLEM", Array(
"#ID#" => $arAgentInfo[
"AGENT"][
"ID"]));
2823 $this->strError .=
"\n".GetMessage(
"CC_BSC1_AGENT_NO_AGENT_ID");
2830 static $search =
false;
2831 static $replace =
false;
2834 if($this->sdp <>
'')
2836 $search =
array(
"\xc2\xa0",
"\xa0",
" ", $this->sdp,
",");
2837 $replace =
array(
"",
"",
"",
".",
".");
2841 $search =
array(
"\xc2\xa0",
"\xa0",
" ",
",");
2842 $replace =
array(
"",
"",
"",
".");
2846 $res1 = str_replace($search, $replace,
$str);
2847 $res2 = doubleval($res1);
2854 static $search =
false;
2855 static $replace =
false;
2858 if($this->sdp <>
'')
2860 $search =
array(
"\xa0",
" ", $this->sdp,
",");
2861 $replace =
array(
"",
"",
".",
".");
2865 $search =
array(
"\xa0",
" ",
",");
2866 $replace =
array(
"",
"",
".");
2870 $res1 = str_replace($search, $replace,
$str);
2871 $res2 = intval($res1);
2881 $arOrder[
"ORDER_ID"] =
false;
2883 $arOrder[
"OPERATION"] = $value[
"#"][
GetMessage(
"CC_BSC1_OPERATION")][0][
"#"];
2887 $arOrder[
"OPERATION_TYPE"] = self::$operationType ;
2892 $this->documentType,
2900 $arOrder[
"ID"] = $value[
"#"][
GetMessage(
"CC_BSC1_NUMBER")][0][
"#"];
2901 $arOrder[
"XML_1C_DOCUMENT_ID"] = $value[
"#"][
GetMessage(
"CC_BSC1_ID")][0][
"#"];
2903 switch ($this->documentType)
2907 $paymentResult = $this->
getDocumentId(
'Payment', $arOrder[
"ID"], $arOrder[
"XML_1C_DOCUMENT_ID"]);
2909 if(isset($paymentResult[
'ID']))
2910 $arOrder[
'ID'] = $paymentResult[
'ID'];
2911 if(isset($paymentResult[
'ORDER_ID']))
2912 $arOrder[
'PAYMENT_ORDER_ID'] = $paymentResult[
'ORDER_ID'];
2914 $arOrder[
"ORDER_ID_ORIG"] = $value[
"#"][
GetMessage(
"CC_BSC1_NUMBER_BASE")][0][
"#"];
2915 $arOrder[
"ORDER_ID"] = $value[
"#"][
GetMessage(
"CC_BSC1_NUMBER_BASE")][0][
"#"];
2922 $shipmentResult = $this->
getDocumentId(
'Shipment', $arOrder[
"ID"], $arOrder[
"XML_1C_DOCUMENT_ID"]);
2924 if(isset($shipmentResult[
'ID']))
2925 $arOrder[
'ID'] = $shipmentResult[
'ID'];
2926 if(isset($shipmentResult[
'ORDER_ID']))
2927 $arOrder[
'SHIPMENT_ORDER_ID'] = $shipmentResult[
'ORDER_ID'];
2929 $arOrder[
"ORDER_ID_ORIG"] = $value[
"#"][
GetMessage(
"CC_BSC1_NUMBER_BASE")][0][
"#"];
2930 $arOrder[
"ORDER_ID"] = $value[
"#"][
GetMessage(
"CC_BSC1_NUMBER_BASE")][0][
"#"];
2937 $orderResult = $this->
getDocumentId(
'Order', $arOrder[
"ID"], $arOrder[
"XML_1C_DOCUMENT_ID"]);
2938 if(isset($orderResult[
'ID']))
2939 $arOrder[
'ID'] = $orderResult[
'ID'];
2946 $arOrder[
"AMOUNT"] = $value[
"#"][
GetMessage(
"CC_BSC1_SUMM")][0][
"#"];
2947 $arOrder[
"AMOUNT"] = $this->
ToFloat($arOrder[
"AMOUNT"]);
2949 $arOrder[
"COMMENT"] = $value[
"#"][
GetMessage(
"CC_BSC1_COMMENT")][0][
"#"];
2951 $arOrder[
"CANCELED"] = $value[
"#"][
GetMessage(
"CC_BSC1_CANCELED")][0][
"#"];
2952 $arOrder[
"VERSION_1C"] = $value[
"#"][
GetMessage(
"CC_BSC1_VERSION_1C")][0][
"#"];
2953 $arOrder[
"ID_1C"] = $value[
"#"][
GetMessage(
"CC_BSC1_ID_1C")][0][
"#"];
2954 $arOrder[
"DATE"] = $value[
"#"][
GetMessage(
"CC_BSC1_1C_DATE")][0][
"#"];
2956 $arOrder[
"OPERATION"] = $value[
"#"][
GetMessage(
"CC_BSC1_OPERATION")][0][
"#"];
2957 $arOrder[
"TRAITS"] =
array();
2959 switch ($this->documentType)
2970 if (is_array($value[
"#"][
GetMessage(
"CC_BSC1_REK_VALUES")][0][
"#"][
GetMessage(
"CC_BSC1_REK_VALUE")]) && !empty($value[
"#"][
GetMessage(
"CC_BSC1_REK_VALUES")][0][
"#"][
GetMessage(
"CC_BSC1_REK_VALUE")])) {
2978 $arOrder[
"items"] =
array();
2979 $basketItems =
array();
2980 if (is_array($value[
"#"][
GetMessage(
"CC_BSC1_ITEMS")][0][
"#"]) && is_array($value[
"#"][
GetMessage(
"CC_BSC1_ITEMS")][0][
"#"][
GetMessage(
"CC_BSC1_ITEM")])) {
2988 $discountPrice =
"";
2991 if (DoubleVal($priceone) <= 0)
2995 if (doubleval($quantity) > 0) {
3001 if ($priceone != $price)
3002 $discountPrice = DoubleVal($priceone - $price);
3008 $basketItems = Array(
3011 "PRICE_ONE" => $priceone,
3012 "QUANTITY" => $quantity,
3013 "DISCOUNT_PRICE" => $discountPrice,
3018 $basketItems[
"MEASURE_CODE"] =
$val[
GetMessage(
"CC_BSC1_ITEM_UNIT")][0][
"#"][
GetMessage(
"CC_BSC1_ITEM_UNIT_CODE")][0][
"#"];
3019 $basketItems[
"MEASURE_NAME"] =
$val[
GetMessage(
"CC_BSC1_ITEM_UNIT")][0][
"#"][
GetMessage(
"CC_BSC1_ITEM_UNIT_NAME")][0][
"#"];
3026 $basketItems[
"TYPE"] = $val1[
"#"][
GetMessage(
"CC_BSC1_VALUE")][0][
"#"];
3030 $markerPosition = mb_strpos($val1[
"#"][
GetMessage(
"CC_BSC1_NAME")][0][
"#"],
GetMessage(
"CC_BSC1_PROP_BASKET").
"#");
3031 $idBasketProperty = mb_substr($val1[
"#"][
GetMessage(
"CC_BSC1_NAME")][0][
"#"], $markerPosition + mb_strlen(
GetMessage(
"CC_BSC1_PROP_BASKET").
"#"));
3032 $basketItems[
"ATTRIBUTES"][$idBasketProperty] = $val1[
"#"][
GetMessage(
"CC_BSC1_VALUE")][0][
"#"];
3040 $basketItems[
"VAT_RATE"] = $taxValueTmp / 100;
3042 if ($taxValueTmp > $taxValue)
3045 $taxValue = $taxValueTmp;
3050 if (self::getVersionSchema() >= self::PARTIAL_VERSION)
3051 $arOrder[
"items"][][$productID] = $basketItems;
3053 $arOrder[
"items"][$productID] = $basketItems;
3058 if(intval($taxValue)>0)
3061 $arOrder[
"TAX"] = Array(
3063 "VALUE" =>$taxValue,
3064 "IS_IN_PRICE" => ($value[
"#"][
GetMessage(
"CC_BSC1_TAXES")][0][
"#"][
GetMessage(
"CC_BSC1_TAX")][0][
"#"][
GetMessage(
"CC_BSC1_IN_PRICE")][0][
"#"]==
"true"?
"Y":
"N"),
3065 "VALUE_MONEY" => $price,
3072 $arOrder[
"DATE"] = $value[
"#"][
GetMessage(
"CC_BSC1_1C_DATE")][0][
"#"];
3073 $arOrder[
"TIME"] = $value[
"#"][
GetMessage(
"CC_BSC1_1C_TIME")][0][
"#"];
3075 if(!empty($value[
"#"][
GetMessage(
"SALE_EXPORT_CONTRAGENTS")][0][
"#"]))
3078 $arOrder[
"AGENT"] = $arAgentInfo[
"AGENT"];
3080 $arOrder[
"ORDER_PROPS"] = $arAgentInfo[
"ORDER_PROPS"];
3082 if($arOrder[
"TRAITS"][
GetMessage(
"SALE_EXPORT_DELIVERY_ADDRESS")] <>
'')
3084 if(!empty($arOrder[
"AGENT"][
"REGISTRATION_ADDRESS"]))
3085 $arOrder[
"AGENT"][
"REGISTRATION_ADDRESS"][
"PRESENTATION"] = $arOrder[
"TRAITS"][
GetMessage(
"SALE_EXPORT_DELIVERY_ADDRESS")];
3086 if(!empty($arOrder[
"AGENT"][
"ADDRESS"]))
3087 $arOrder[
"AGENT"][
"ADDRESS"][
"PRESENTATION"] = $arOrder[
"TRAITS"][
GetMessage(
"SALE_EXPORT_DELIVERY_ADDRESS")];
3102 $schema =
array(
"ID",
"VERSION",
"ITEM_NAME",
"OFICIAL_NAME",
"FULL_NAME",
"INN",
"KPP",
"OKPO_CODE",
"EGRPO",
"OKVED",
"OKDP",
"OKOPF",
"OKFC",
"OKPO",
3103 "REGISTRATION_ADDRESS" =>
array(
"PRESENTATION",
"POST_CODE",
"COUNTRY",
"REGION",
"STATE",
"SMALL_CITY",
"CITY",
"STREET",
"HOUSE",
"BUILDING",
"FLAT"),
3104 "UR_ADDRESS" =>
array(
"PRESENTATION",
"POST_CODE",
"COUNTRY",
"REGION",
"STATE",
"SMALL_CITY",
"CITY",
"STREET",
"HOUSE",
"BUILDING",
"FLAT"),
3105 "ADDRESS" =>
array(
"PRESENTATION",
"POST_CODE",
"COUNTRY",
"REGION",
"STATE",
"SMALL_CITY",
"CITY",
"STREET",
"HOUSE",
"BUILDING",
"FLAT"),
3106 "CONTACTS" =>
array(
"CONTACT" =>
array(
"WORK_PHONE_NEW",
"MAIL_NEW")),
3107 "REPRESENTATIVES" =>
array(
"REPRESENTATIVE" =>
array(
"CONTACT_PERSON")),
3111 foreach($schema as
$k => $v)
3118 foreach($v as $kk => $vv)
3122 if(isset($adr[
GetMessage(
"SALE_EXPORT_".$kk)]) && !empty($adr[
GetMessage(
"SALE_EXPORT_".$kk)][0][
"#"]) > 0)
3124 foreach($vv as $vvv)
3141 if(isset($adr[
GetMessage(
"SALE_EXPORT_".$vv)]) && $adr[
GetMessage(
"SALE_EXPORT_".$vv)][0][
"#"] <>
'')
3147 if(!empty($adr[
GetMessage(
"SALE_EXPORT_ADDRESS_FIELD")]))
3170 $result[
"AGENT"][
"CONTACT"][
"EMAIL"] =
$result[
"AGENT"][
"CONTACT"][
"MAIL_NEW"];
3171 $result[
"AGENT"][
"CONTACT"][
"PHONE"] =
$result[
"AGENT"][
"CONTACT"][
"WORK_PHONE_NEW"];
3178 if(!is_array($v) && !empty($v))
3184 $result[
"ORDER_PROPS"][
"EMAIL"] = $v[
"MAIL_NEW"];
3185 $result[
"ORDER_PROPS"][
"PHONE"] = $v[
"WORK_PHONE_NEW"];
3189 $result[
"ORDER_PROPS"][
"CONTACT_PERSON"] = $v[
"CONTACT_PERSON"];
3191 elseif(
$k ==
"REGISTRATION_ADDRESS" ||
$k ==
"UR_ADDRESS")
3193 $result[
"ORDER_PROPS"][
"ADDRESS_FULL"] = $v[
"PRESENTATION"];
3194 $result[
"ORDER_PROPS"][
"INDEX"] = $v[
"POST_CODE"];
3195 foreach($v as $k1 => $v1)
3197 if($v1 <>
'' && empty(
$result[
"ORDER_PROPS"][$k1]))
3198 $result[
"ORDER_PROPS"][$k1] = $v1;
3203 $result[
"ORDER_PROPS"][
"F_ADDRESS_FULL"] = $v[
"PRESENTATION"];
3204 $result[
"ORDER_PROPS"][
"F_INDEX"] = $v[
"POST_CODE"];
3205 foreach($v as $k1 => $v1)
3207 if($v1 <>
'' && empty(
$result[
"ORDER_PROPS"][
"F_".$k1]))
3208 $result[
"ORDER_PROPS"][
"F_".$k1] = $v1;
3214 if(
$result[
"AGENT"][
"OFICIAL_NAME"] <>
'' &&
$result[
"AGENT"][
"INN"] <>
'')
3215 $result[
"AGENT"][
"TYPE"] =
"UR";
3217 $result[
"AGENT"][
"TYPE"] =
"IP";
3219 $result[
"AGENT"][
"TYPE"] =
"FIZ";
3228 $products =
array();
3229 $productType =
array();
3230 $arIBlockElement =
array();
3232 if(CModule::IncludeModule(
"iblock"))
3234 $dbIBlockElement = CIBlockElement::GetList(
array(),
array(
"XML_ID" => $itemID,
"ACTIVE" =>
"Y",
"CHECK_PERMISSIONS" =>
"Y"),
false,
false,
array(
"ID",
"IBLOCK_ID",
"XML_ID",
"NAME",
"DETAIL_PAGE_URL"));
3235 while($arElement = $dbIBlockElement->Fetch())
3237 $products[] = $arElement;
3240 if(
count($products)>1)
3242 foreach($products as $product)
3245 $productType[
$ar[
'TYPE']] = $product;
3248 if(array_key_exists(3, $productType) && array_key_exists(4, $productType))
3250 $arIBlockElement = $productType[4];
3255 $arIBlockElement = $products[0];
3258 if($arIBlockElement)
3260 if(empty($this->arIBInfo[$arIBlockElement[
"IBLOCK_ID"]]))
3264 array(
"ID" => $arIBlockElement[
"IBLOCK_ID"])
3268 $this->arIBInfo[$arIBlockElement[
"IBLOCK_ID"]] =
$arIBlock;
3273 "NAME" =>
"Catalog XML_ID",
3274 "CODE" =>
"CATALOG.XML_ID",
3275 "VALUE" => $this->arIBInfo[$arIBlockElement[
"IBLOCK_ID"]][
"XML_ID"]
3279 "NAME" =>
"Product XML_ID",
3280 "CODE" =>
"PRODUCT.XML_ID",
3281 "VALUE" => $arIBlockElement[
"XML_ID"]
3287 "PRODUCT_ID" => $arIBlockElement[
"ID"],
3288 "PRICE" => $arItem[
"PRICE"],
3289 "CURRENCY" => $orderInfo[
"CURRENCY"],
3290 "WEIGHT" => $arProduct[
"WEIGHT"],
3291 "QUANTITY" => $arItem[
"QUANTITY"],
3292 "LID" => $orderInfo[
"LID"],
3295 "NAME" => $arIBlockElement[
"NAME"],
3296 "MODULE" =>
"catalog",
3297 "NOTES" => $arProduct[
"CATALOG_GROUP_NAME"],
3298 "PRODUCT_PROVIDER_CLASS" =>
"CCatalogProductProvider",
3299 "DETAIL_PAGE_URL" => $arIBlockElement[
"DETAIL_PAGE_URL"],
3300 "CATALOG_XML_ID" => $this->arIBInfo[$arIBlockElement[
"IBLOCK_ID"]][
"XML_ID"],
3301 "PRODUCT_XML_ID" => $arIBlockElement[
"XML_ID"],
3302 "IGNORE_CALLBACK_FUNC" =>
"Y",
3303 "VAT_RATE" => $arItem[
"VAT_RATE"],
3304 "CUSTOM_PRICE"=>
"Y",
3313 "PRICE" => $arItem[
"PRICE"],
3314 "CURRENCY" => $orderInfo[
"CURRENCY"],
3315 "QUANTITY" => $arItem[
"QUANTITY"],
3316 "LID" => $orderInfo[
"LID"],
3319 "NAME" => $arItem[
"NAME"],
3320 "MODULE" =>
"1c_exchange",
3321 "PRODUCT_PROVIDER_CLASS" =>
false,
3322 "CATALOG_XML_ID" =>
"1c_exchange",
3323 "PRODUCT_XML_ID" => $itemID,
3324 "IGNORE_CALLBACK_FUNC" =>
"Y",
3325 "VAT_RATE" => $arItem[
"VAT_RATE"],
3326 "DISCOUNT_PRICE" => $arItem[
"DISCOUNT_PRICE"],
3327 "CUSTOM_PRICE" =>
"Y",
3329 if($this->bNewVersion)
3331 $arFields[
"MEASURE_CODE"] = $arItem[
"MEASURE_CODE"];
3332 $arFields[
"MEASURE_NAME"] = $arItem[
"MEASURE_NAME"];
3336 $arFields[
"PRODUCT_ID"] = $ri->rand(1000000, 9999999);
3339 $arFields[
"LID"] = $orderInfo[
"SITE_ID"];
3345 foreach($arDocument[
"items"] as
$items)
3347 foreach (
$items as $itemID => $arItem)
3349 if($arItem[
"TYPE"] ==
GetMessage(
"CC_BSC1_ITEM"))
3371 $parentEntity = $isInvoice ? \Bitrix\Crm\Invoice\Compatible\Helper::class: CSaleOrder::class;
3373 $basketEntity = $isInvoice ? \Bitrix\Crm\Invoice\Compatible\BasketHelper::class: CSaleBasket::class;
3375 $changeEntity = $isInvoice ? \Bitrix\Crm\Invoice\Internals\InvoiceChangeTable::class: \Bitrix\Sale\Internals\OrderChangeTable::class;
3377 $taxEntity = $isInvoice ? CCrmInvoiceTax::class: CSaleOrderTax::class;
3379 if ($arOrder[
"ID"] ==
'' && $arOrder[
"ID_1C"] <>
'')
3381 $dbOrder = $parentEntity::GetList(
array(
"ID" =>
"DESC"),
array(
"ID_1C" => $arOrder[
"ID_1C"]),
false,
false,
array(
"ID",
"ID_1C"));
3382 if ($orderInfo = $dbOrder->Fetch()) {
3383 $arOrder[
"ID"] = $orderInfo[
"ID"];
3386 if($arOrder[
"ID"] <>
'')
3388 $dbOrder = $parentEntity::GetList(
array(),
array(
"ID" => $arOrder[
"ID"]),
false,
false,
array(
"ID",
"LID",
"PERSON_TYPE_ID",
"PAYED",
"DATE_PAYED",
"CANCELED",
"DATE_CANCELED",
"REASON_CANCELED",
"STATUS_ID",
"DATE_STATUS",
"PAY_VOUCHER_NUM",
"PAY_VOUCHER_DATE",
"PRICE_DELIVERY",
"ALLOW_DELIVERY",
"DATE_ALLOW_DELIVERY",
"PRICE",
"CURRENCY",
"DISCOUNT_VALUE",
"USER_ID",
"PAY_SYSTEM_ID",
"DELIVERY_ID",
"DATE_INSERT",
"DATE_INSERT_FORMAT",
"DATE_UPDATE",
"USER_DESCRIPTION",
"ADDITIONAL_INFO",
"COMMENTS",
"TAX_VALUE",
"DELIVERY_DOC_NUM",
"DELIVERY_DOC_DATE",
"STORE_ID",
"ACCOUNT_NUMBER",
"VERSION",
"VERSION_1C",
"ID_1C"));
3389 if($orderInfo = $dbOrder->Fetch())
3391 if($arOrder[
"VERSION_1C"] != $orderInfo[
"VERSION_1C"] || ($orderInfo[
"VERSION_1C"] ==
'' || $arOrder[
"VERSION_1C"] ==
''))
3393 $arOrderFields =
array();
3398 if ($invoice = \Bitrix\Crm\Invoice\Invoice::load(
$orderId))
3400 $basket = $invoice->getBasket();
3404 $changeEntity::Add([
'ORDER_ID'=>
$orderId,
'TYPE'=>
'ORDER_1C_IMPORT',
'USER_ID'=>
$userId]);
3405 if($arOrder[
"ID_1C"] != $orderInfo[
"ID_1C"])
3406 $arOrderFields[
"ID_1C"] = $arOrder[
"ID_1C"];
3408 $arOrderFields[
"VERSION_1C"] = $arOrder[
"VERSION_1C"];
3410 if($orderInfo[
"PAYED"] !=
"Y" && $orderInfo[
"ALLOW_DELIVERY"] !=
"Y" && $orderInfo[
"STATUS_ID"] !=
"F")
3417 array(
"ID",
"TAX_NAME",
"VALUE",
"VALUE_MONEY",
"CODE",
"IS_IN_PRICE")
3423 if(intval($arOrderTax[
"VALUE_MONEY"]) != intval($arOrder[
"TAX"][
"VALUE_MONEY"]) || intval($arOrderTax[
"VALUE"]) != intval($arOrder[
"TAX"][
"VALUE"]) || ($arOrderTax[
"IS_IN_PRICE"] != $arOrder[
"TAX"][
"IS_IN_PRICE"]))
3425 if(intval($arOrder[
"TAX"][
"VALUE"])>0)
3428 "TAX_NAME" => $arOrder[
"TAX"][
"NAME"],
3430 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
3431 "IS_PERCENT" =>
"Y",
3432 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
3433 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
3435 "APPLY_ORDER" =>
"100"
3437 $taxEntity::Update($arOrderTax[
"ID"],
$arFields);
3438 $arOrderFields[
"TAX_VALUE"] = $arOrder[
"TAX"][
"VALUE_MONEY"];
3442 $taxEntity::Delete($arOrderTax[
"ID"]);
3443 $arOrderFields[
"TAX_VALUE"] = 0;
3450 if(intval($arOrder[
"TAX"][
"VALUE"])>0)
3453 "TAX_NAME" => $arOrder[
"TAX"][
"NAME"],
3455 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
3456 "IS_PERCENT" =>
"Y",
3457 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
3458 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
3460 "APPLY_ORDER" =>
'100',
3463 $arOrderFields[
"TAX_VALUE"] = $arOrder[
"TAX"][
"VALUE_MONEY"];
3467 $arShoppingCart =
array();
3468 $bNeedUpdate =
false;
3470 array(
"NAME" =>
"ASC"),
3477 "CANCEL_CALLBACK_FUNC",
3480 "PRODUCT_PROVIDER_CLASS",
3495 if(!empty($arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]]))
3497 if($arBasket[
"QUANTITY"] != $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"QUANTITY"])
3498 $arFields[
"QUANTITY"] = $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"QUANTITY"];
3499 if($arBasket[
"PRICE"] != $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"PRICE"])
3500 $arFields[
"PRICE"] = $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"PRICE"];
3501 if($arBasket[
"VAT_RATE"] != $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"VAT_RATE"])
3502 $arFields[
"VAT_RATE"] = $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"VAT_RATE"];
3503 if($arBasket[
"DISCOUNT_PRICE"] != $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"DISCOUNT_PRICE"])
3504 $arFields[
"DISCOUNT_PRICE"] = $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"DISCOUNT_PRICE"];
3508 $bNeedUpdate =
true;
3513 $basketItem = $basket->getItemById($arBasket[
'ID']);
3515 $basketItem->setField(
'QUANTITY',
$arFields[
'QUANTITY']);
3517 $basketItem->setPrice(
$arFields[
'PRICE']);
3519 $basketItem->setField(
'VAT_RATE',
$arFields[
'VAT_RATE']);
3521 $basketItem->setField(
'DISCOUNT_PRICE',
$arFields[
'DISCOUNT_PRICE']);
3526 if(DoubleVal(
$arFields[
"QUANTITY"]) <= 0)
3527 $arFields[
"QUANTITY"] = $arBasket[
"QUANTITY"];
3534 $arShoppingCart[] = $arBasket;
3538 $arOrder[
"items"][$arBasket[
"PRODUCT_XML_ID"]][
"CHECKED"] =
"Y";
3542 if($arOrder[
'CANCELED'] !=
"true" && $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCELED")] !=
"true" && $orderInfo[
"CANCELED"] ==
"N")
3546 $basket->getItemById($arBasket[
"ID"])
3551 $bNeedUpdate =
true;
3558 if(!empty($arOrder[
"items"]))
3561 foreach ($arOrder[
"items"] as $itemID => $arItem)
3563 if ($arItem[
"CHECKED"] !=
"Y")
3565 if ($arItem[
"TYPE"] ==
GetMessage(
"CC_BSC1_ITEM"))
3568 if($orderInfo[
'CURRENCY'] == $currencyTo)
3570 $bNeedUpdate =
true;
3576 $basketItem = $basket->createItem($arBasketFields[
'MODULE'], $arBasketFields[
'PRODUCT_ID']);
3577 $basketItem->setPrice($arBasketFields[
'PRICE'],
true);
3578 unset($arBasketFields[
'MODULE'], $arBasketFields[
'PRODUCT_ID'], $arBasketFields[
'PRICE'], $arBasketFields[
'ORDER_ID']);
3580 $basketItem->setFields($arBasketFields);
3584 $arShoppingCart[] = $arBasketFields;
3590 $this->strError .=
"\r\n ".GetMessage(
"CC_BSC1_ORDER_ERROR_5", Array(
'#XML_1C_DOCUMENT_ID#'=>$arOrder[
'ID'],
'#CURRENCY_FROM#'=>$orderInfo[
'CURRENCY'],
'#CURRENCY_TO#'=>$currencyTo));
3595 $priceDelivery = $arItem[
"PRICE"];
3600 if ($priceDelivery != intval($orderInfo[
"PRICE_DELIVERY"]))
3602 if($arItem[
"TYPE"] ==
GetMessage(
"CC_BSC1_SERVICE"))
3603 $arOrderFields[
"PRICE_DELIVERY"] = $priceDelivery;
3608 if ($priceDelivery != intval($orderInfo[
"PRICE_DELIVERY"]))
3609 $arOrderFields[
"PRICE_DELIVERY"] = $priceDelivery;
3616 $isUsed = \Bitrix\Sale\Compatible\DiscountCompatibility::isUsed();
3617 \Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();
3627 $arErrors =
array();
3628 if(!$basketEntity::DoSaveOrderBasket(
$orderId, $orderInfo[
"LID"], $orderInfo[
"USER_ID"], $arShoppingCart, $arErrors))
3632 $this->strError .=
"\r\n ".GetMessage(
"CC_BSC1_ORDER_ERROR_3", Array(
'#XML_1C_DOCUMENT_ID#'=>$arOrder[
"ID"])).$e->GetString();
3637 if(DoubleVal($orderInfo[
"DISCOUNT_VALUE"]) > 0)
3638 $arOrderFields[
"DISCOUNT_VALUE"] = 0;
3639 if($arOrder[
"COMMENT"] <>
'' && $arOrder[
"COMMENT"] != $orderInfo[
"COMMENTS"])
3640 $arOrderFields[
"COMMENTS"] = $arOrder[
"COMMENT"];
3641 $arOrderFields[
"UPDATED_1C"] =
"Y";
3643 if(!empty($arOrderFields))
3644 $parentEntity::Update(
$orderId, $arOrderFields);
3645 if($isUsed ===
true)
3647 \Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();
3652 $this->strError .=
"\n".GetMessage(
"CC_BSC1_FINAL_NOT_EDIT", Array(
"#ID#" =>
$orderId));
3656 $arAditFields = Array();
3657 if($arOrder[
'CANCELED'] ==
"true" || $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCELED")] ==
"true" || $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCEL")] ==
"true")
3659 if($orderInfo[
"CANCELED"] ==
"N")
3661 $parentEntity::CancelOrder($orderInfo[
"ID"],
"Y", $arOrder[
"COMMENT"]);
3662 $arAditFields[
"UPDATED_1C"] =
"Y";
3667 if($arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_CANCELED")] !=
"true")
3669 if($orderInfo[
"CANCELED"] ==
"Y")
3671 $parentEntity::CancelOrder($orderInfo[
"ID"],
"N", $arOrder[
"COMMENT"]);
3672 $arAditFields[
"UPDATED_1C"] =
"Y";
3676 if(mb_strlen($arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]) > 1)
3678 if($orderInfo[
"PAYED"]==
"N")
3679 $parentEntity::PayOrder($orderInfo[
"ID"],
"Y");
3680 $arAditFields[
"PAY_VOUCHER_DATE"] =
CDatabase::FormatDate(str_replace(
"T",
" ", $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_DATE")]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG));
3681 if($arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")] <>
'')
3682 $arAditFields[
"PAY_VOUCHER_NUM"] = $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_PAYED_NUM")];
3683 $arAditFields[
"UPDATED_1C"] =
"Y";
3686 if(mb_strlen($arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_DATE")]) > 1)
3690 if($orderInfo[
"ALLOW_DELIVERY"]==
"N")
3691 CSaleOrder::DeliverOrder($orderInfo[
"ID"],
"Y");
3694 $arAditFields[
"DATE_ALLOW_DELIVERY"] =
CDatabase::FormatDate(str_replace(
"T",
" ", $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_DATE")]),
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG));
3695 $arAditFields[
"DELIVERY_DOC_DATE"] = $arAditFields[
"DATE_ALLOW_DELIVERY"];
3697 if($this->arParams[
"FINAL_STATUS_ON_DELIVERY"] <>
'' && $orderInfo[
"STATUS_ID"] !=
"F" && $orderInfo[
"STATUS_ID"] != $this->arParams[
"FINAL_STATUS_ON_DELIVERY"])
3698 static::setStatus($orderInfo[
"ID"], $this->arParams[
"FINAL_STATUS_ON_DELIVERY"], $isInvoice);
3699 if($arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")] <>
'')
3700 $arAditFields[
"DELIVERY_DOC_NUM"] = $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_DELIVERY_NUM")];
3701 $arAditFields[
"UPDATED_1C"] =
"Y";
3706 if($this->arParams[
"CHANGE_STATUS_FROM_1C"] && $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_STATUS_ID")] <>
'')
3708 if($orderInfo[
"STATUS_ID"] != $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_STATUS_ID")])
3710 static::setStatus($orderInfo[
"ID"], $arOrder[
"TRAITS"][
GetMessage(
"CC_BSC1_1C_STATUS_ID")], $isInvoice);
3711 $arAditFields[
"UPDATED_1C"] =
"Y";
3715 if(
count($arAditFields)>0)
3716 $parentEntity::Update($orderInfo[
"ID"], $arAditFields);
3719 $this->strError .=
"\n".GetMessage(
"CC_BSC1_ORDER_NOT_FOUND", Array(
"#ID#" => $arOrder[
"ID"]));
3721 elseif($this->arParams[
"IMPORT_NEW_ORDERS"] ==
"Y")
3723 if(!empty($arOrder[
"AGENT"]) && $arOrder[
"AGENT"][
"ID"] <>
'')
3725 $arOrder[
"PERSON_TYPE_ID"] = 0;
3726 $arOrder[
"USER_ID"] = 0;
3727 $arErrors =
array();
3729 if($arUProp = $dbUProp->Fetch())
3731 $arOrder[
"USER_ID"] = $arUProp[
"USER_ID"];
3732 $arOrder[
"PERSON_TYPE_ID"] = $arUProp[
"PERSON_TYPE_ID"];
3733 $arOrder[
"USER_PROFILE_ID"] = $arUProp[
"ID"];
3734 $arOrder[
"USER_PROFILE_VERSION"] = $arUProp[
"VERSION_1C"];
3737 while($arUPropValue = $dbUPropValue->Fetch())
3739 $arOrder[
"USER_PROPS"][$arUPropValue[
"ORDER_PROPS_ID"]] = $arUPropValue[
"VALUE"];
3744 if($arOrder[
"AGENT"][
"ID"] <>
'')
3746 $arAI = explode(
"#", $arOrder[
"AGENT"][
"ID"]);
3747 if(intval($arAI[0]) > 0)
3750 if($arU = $dbUser->Fetch())
3754 $arOrder[
"USER_ID"] = $arU[
"ID"];
3760 if(intval($arOrder[
"USER_ID"]) <= 0)
3764 "NAME" => $arOrder[
"AGENT"][
"ITEM_NAME"],
3765 "EMAIL" => $arOrder[
"AGENT"][
"CONTACT"][
"MAIL_NEW"],
3768 if ($arUser[
"NAME"] ==
'')
3769 $arUser[
"NAME"] = $arOrder[
"AGENT"][
"CONTACT"][
"CONTACT_PERSON"];
3771 $emServer =
$_SERVER[
"SERVER_NAME"];
3772 if(mb_strpos(
$_SERVER[
"SERVER_NAME"],
".") ===
false)
3775 if ($arUser[
"EMAIL"] ==
'')
3776 $arUser[
"EMAIL"] =
"buyer".time().GetRandomCode(2).
"@".$emServer;
3778 $arOrder[
"USER_ID"] =
CSaleUser::DoAutoRegisterUser($arUser[
"EMAIL"], $arUser[
"NAME"], $this->arParams[
"SITE_NEW_ORDERS"], $arErrors,
array(
"XML_ID"=>$arOrder[
"AGENT"][
"ID"],
"EXTERNAL_AUTH_ID"=>Sale\Exchange\Entity\UserImportBase::EXTERNAL_AUTH_ID));
3780 $obUser =
new CUser;
3781 $userFields[] =
array();
3783 if($arOrder[
"AGENT"][
"CONTACT"][
"PHONE"] <>
'')
3784 $userFields[
"WORK_PHONE"] = $arOrder[
"AGENT"][
"CONTACT"][
"PHONE"];
3786 if(
count($userFields)>0)
3788 if(!$obUser->Update($arOrder[
"USER_ID"], $userFields,
true))
3789 $this->strError .=
"\n".$obUser->LAST_ERROR;
3797 while($arPT = $dbPT->Fetch())
3806 while($arExport = $dbExport->Fetch())
3808 $arExportInfo[$arExport[
"PERSON_TYPE_ID"]] = unserialize($arExport[
"VARS"], [
'allowed_classes' =>
false]);
3812 if(intval($arOrder[
"PERSON_TYPE_ID"]) <= 0)
3817 (($value[
"IS_FIZ"] ==
"Y" && $arOrder[
"AGENT"][
"TYPE"] ==
"FIZ")
3818 || ($value[
"IS_FIZ"] ==
"N" && $arOrder[
"AGENT"][
"TYPE"] !=
"FIZ"))
3820 $arOrder[
"PERSON_TYPE_ID"] = $pt;
3824 if(intval($arOrder[
"PERSON_TYPE_ID"]) > 0)
3827 foreach($arAgent as
$k => $v)
3833 (empty($v[
"VALUE"]) || $v[
"TYPE"] !==
"PROPERTY")
3835 empty($arOrder[
"USER_PROPS"])
3836 || (is_array($v) && is_string($v[
"VALUE"]) && empty($arOrder[
"USER_PROPS"][$v[
"VALUE"]]))
3841 unset($arAgent[
$k]);
3845 if(intval($arOrder[
"USER_ID"]) > 0)
3847 $orderFields =
array(
3848 "SITE_ID" => $this->arParams[
"SITE_NEW_ORDERS"],
3849 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
3853 "PRICE" => $arOrder[
"AMOUNT"],
3855 "USER_ID" => $arOrder[
"USER_ID"],
3856 "TAX_VALUE" => doubleval($arOrder[
"TAX"][
"VALUE_MONEY"]),
3857 "COMMENTS" => $arOrder[
"COMMENT"],
3858 "BASKET_ITEMS" =>
array(),
3859 "TAX_LIST" =>
array(),
3860 "ORDER_PROP" =>
array(),
3862 $arAditFields =
array(
3863 "EXTERNAL_ORDER" =>
"Y",
3864 "ID_1C" => $arOrder[
"ID_1C"],
3865 "VERSION_1C" => $arOrder[
"VERSION_1C"],
3866 "UPDATED_1C" =>
"Y",
3867 "DATE_INSERT" => CDatabase::FormatDate($arOrder[
"DATE"].
" ".$arOrder[
"TIME"],
"YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat(
"FULL", LANG)),
3870 foreach($arOrder[
"items"] as $productID =>
$val)
3875 if(!empty($arOrder[
"TAX"]))
3877 $orderFields[
"TAX_LIST"][] =
array(
3878 "NAME" => $arOrder[
"TAX"][
"NAME"],
3879 "IS_PERCENT" =>
"Y",
3880 "VALUE" => $arOrder[
"TAX"][
"VALUE"],
3881 "VALUE_MONEY" => $arOrder[
"TAX"][
"VALUE_MONEY"],
3882 "IS_IN_PRICE" => $arOrder[
"TAX"][
"IS_IN_PRICE"],
3884 "APPLY_ORDER" =>
'100',
3888 foreach($arAgent as
$k => $v)
3890 if(!empty($arOrder[
"ORDER_PROPS"][
$k]))
3892 $orderFields[
"ORDER_PROP"][$v[
"VALUE"]] = $arOrder[
"ORDER_PROPS"][
$k];
3894 if(empty($orderFields[
"ORDER_PROP"][$v[
"VALUE"]]) && !empty($arOrder[
"USER_PROPS"][$v[
"VALUE"]]))
3896 $orderFields[
"ORDER_PROP"][$v[
"VALUE"]] = $arOrder[
"USER_PROPS"][$v[
"VALUE"]];
3900 $importSettings = Sale\Exchange\OneC\ImportSettings::getCurrent();
3901 $deliverySystemId = $importSettings->shipmentServiceFor(Sale\Exchange\EntityType::SHIPMENT);
3902 $orderFields[
'DELIVERY_ID'] = ($deliverySystemId? $deliverySystemId :
null);
3904 if($arOrder[
"ID"] = $parentEntity::DoSaveOrder($orderFields, $arAditFields, 0, $arErrors))
3906 $arAditFields =
array(
"UPDATED_1C" =>
"Y");
3907 $parentEntity::Update($arOrder[
"ID"], $arAditFields);
3910 if(intval($arOrder[
"USER_PROFILE_ID"]) > 0)
3912 if($arOrder[
"USER_PROFILE_VERSION"] != $arOrder[
"AGENT"][
"VERSION"])
3913 CSaleOrderUserProps::Update($arOrder[
"USER_PROFILE_ID"],
array(
"VERSION_1C" => $arOrder[
"AGENT"][
"VERSION"],
"NAME" => $arOrder[
"AGENT"][
"AGENT_NAME"],
"USER_ID" => $arOrder[
"USER_ID"]));
3915 while($arUPV = $dbUPV->Fetch())
3917 $arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arUPV[
"ORDER_PROPS_ID"]] =
array(
"ID" => $arUPV[
"ID"],
"VALUE" => $arUPV[
"VALUE"]);
3921 if(intval($arOrder[
"USER_PROFILE_ID"]) <= 0 || (intval($arOrder[
"USER_PROFILE_ID"]) > 0 && $arOrder[
"USER_PROFILE_VERSION"] != $arOrder[
"AGENT"][
"VERSION"]))
3924 array(
"SORT" =>
"ASC"),
3926 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
3929 "USER_PROPS" =>
"Y",
3933 array(
"ID",
"TYPE",
"NAME",
"CODE",
"USER_PROPS",
"SORT",
"MULTIPLE")
3935 while ($arOrderProperties = $dbOrderProperties->Fetch())
3937 $curVal = $orderFields[
"ORDER_PROP"][$arOrderProperties[
"ID"]];
3941 if (intval($arOrder[
"USER_PROFILE_ID"]) <= 0)
3944 "NAME" => $arOrder[
"AGENT"][
"AGENT_NAME"],
3945 "USER_ID" => $arOrder[
"USER_ID"],
3946 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
3947 "XML_ID" => $arOrder[
"AGENT"][
"ID"],
3948 "VERSION_1C" => $arOrder[
"AGENT"][
"VERSION"],
3952 if(intval($arOrder[
"USER_PROFILE_ID"]) > 0)
3955 "USER_PROPS_ID" => $arOrder[
"USER_PROFILE_ID"],
3956 "ORDER_PROPS_ID" => $arOrderProperties[
"ID"],
3957 "NAME" => $arOrderProperties[
"NAME"],
3960 if(empty($arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]]))
3964 elseif($arOrder[
"AGENT"][
"PROFILE_PROPS_VALUE"][$arOrderProperties[
"ID"]][
"VALUE"] != $curVal)
3975 $this->strError .=
"\n".GetMessage(
"CC_BSC1_ORDER_ADD_PROBLEM", Array(
"#ID#" => $arOrder[
"ID_1C"]));
3976 if(is_array($arErrors))
3977 $this->strError .=
"\n".implode(
', ',$arErrors);
3982 $this->strError .=
"\n".GetMessage(
"CC_BSC1_ORDER_USER_PROBLEM", Array(
"#ID#" => $arOrder[
"ID_1C"]));
3983 if(!empty($arErrors))
3985 foreach($arErrors as $v)
3987 $this->strError .=
"\n".$v[
"TEXT"];
3994 $this->strError .=
"\n".GetMessage(
"CC_BSC1_ORDER_PERSON_TYPE_PROBLEM", Array(
"#ID#" => $arOrder[
"ID_1C"]));
3999 $this->strError .=
"\n".GetMessage(
"CC_BSC1_ORDER_NO_AGENT_ID", Array(
"#ID#" => $arOrder[
"ID_1C"]));
4004 static public function setStatus($id, $statusId, $isInvoice)
4008 $invoice = new \CCrmInvoice(
false);
4009 $invoice->SetStatus($id, $statusId);
4014 $order->StatusOrder($id, $statusId);