Возвращаем информацию об удаляющихся при обмене с 1С оплате и доставке в админке Битрикса

, Михаил

Продолжение этой проблемы. Когда менеджер работает одновременно в админке и в 1С, и когда в 1С выключена загрузка отгрузок и оплат - Битрикс убирает из заказа эти данные. Возвращаем информацию в заказ, и список заказов.

<?php 

// local/php_interface/init.php
// Добавляем информацию внутри заказа
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'onSaleAdminOrderInfoBlockShow', ['DivasoftFixSyncOrderInfo', 'onSaleAdminOrderInfoBlockShow']);
// Заполняем колонки в списке заказов
\Bitrix\Main\EventManager::getInstance()->addEventHandler("main",  "OnAdminListDisplay", ['DivasoftFixSyncOrderInfo', 'onAdminListDisplay']);
\Bitrix\Main\EventManager::getInstance()->addEventHandler("main",  "OnAdminSubListDisplay", ['DivasoftFixSyncOrderInfo', 'onAdminListDisplay']);
class DivasoftFixSyncOrderInfo {
	static function getSystemDeliveryNameByOrderD7($order) {
		$shipmentCollection = $order->getShipmentCollection();
		$shipmenName = "Не выбрана";
		$systemShipmentItemCollection = $shipmentCollection->getSystemShipment()->getShipmentItemCollection();
		foreach ($shipmentCollection as $obShipment) {
			if ($obShipment->isSystem()) {
				$arShipment = $obShipment->getFields()->getValues();
				$shipmenName = $arShipment['DELIVERY_NAME'];
				}
			}
		return $shipmenName;
		}
	static function getSystemPaymentNameByOrderD7($order) {
		// getSystemPayment такого метода нет, запросим информацию по тому что есть
		$paySystemService = \Bitrix\Sale\PaySystem\Manager::getObjectById($order->getField('PAY_SYSTEM_ID'));
		$payName = $paySystemService->getField("NAME");
		return $payName;
		}
	function onSaleAdminOrderInfoBlockShow(\Bitrix\Main\Event $event) {
		$order = $event->getParameter("ORDER");
		$shipmenName = self::getSystemDeliveryNameByOrderD7($order);
		$payName = self::getSystemPaymentNameByOrderD7($order);
		return new \Bitrix\Main\EventResult(
		\Bitrix\Main\EventResult::SUCCESS, array(
		array('TITLE' => 'Доставка:', 'VALUE' => $shipmenName, 'ID' => 'dvs_system_shipment'),
		array('TITLE' => 'Оплата:', 'VALUE' => $payName, 'ID' => 'dvs_system_payment'),
		), 'sale'
		);
		}
	function onAdminListDisplay(&$list) {
		if ($list->table_id == "tbl_sale_order") {
			foreach ($list->aRows as &$row) {
				foreach ($row->aFields as $key => &$val) {
					$order = false;
					if ($key == "DELIVERY") {
						if (!$val['view']['value']) {
							if (!$order) {
								$order = \Bitrix\Sale\Order::load($row->arRes['ID']);
								}
							$val['view']['value'] = self::getSystemDeliveryNameByOrderD7($order);
							}
						}
					if ($key == "PAY_SYSTEM") {
						if (!$val['view']['value']) {
							if (!$order) {
								$order = \Bitrix\Sale\Order::load($row->arRes['ID']);
								}
							$val['view']['value'] = self::getSystemPaymentNameByOrderD7($order);
							}
						}
					}
				}
			}
		}
	}
?>