Возвращаем информацию об удаляющихся при обмене с 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);
							}
						}
					}
				}
			}
		}
	}
?>