• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/ordershipment.php
  • Класс: BitrixSaleHelpersAdminBlocksOrderShipment
  • Вызов: OrderShipment::prepareData
static function prepareData($error = false, $needRecalculate = true)
{
	global $USER, $APPLICATION;
	static $users = array();
	static $userCompanyList = array();

	$result = array();
	if ($error)
	{
		$fields = self::$defaultFields;
	}
	else
	{
		$fields = self::$shipment->getFieldValues();
		$fields['DELIVERY_STORE_ID'] = self::$shipment->getStoreId();
		$fields["EXTRA_SERVICES"] = self::$shipment->getExtraServices();
		$fields["STORE"] = self::$shipment->getStoreId();
	}

	/** @var BitrixSaleOrder $order */
	$order = self::$shipment->getCollection()->getOrder();

	$saleModulePermissions = $APPLICATION->GetGroupRight("sale");

	if($saleModulePermissions == "P")
	{
		if (empty($userCompanyList))
		{
			$userCompanyList = CompanyManager::getUserCompanyList($USER->GetID());
		}

		$isUserResponsible = false;
		if ($order->getField('RESPONSIBLE_ID') == $USER->GetID()
			|| ($fields['RESPONSIBLE_ID'] == $USER->GetID()))
		{
			$isUserResponsible = true;
		}

		$isAllowCompany = in_array(self::$shipment->getField('COMPANY_ID'), $userCompanyList) || in_array($order->getField('COMPANY_ID'), $userCompanyList);

		$fields['IS_USER_RESPONSIBLE'] = $isUserResponsible;
		$fields['IS_ALLOW_COMPANY'] = $isAllowCompany;

		if (!$isUserResponsible && !$isAllowCompany)
		{
			foreach ($fields as $fieldName => $fieldValue)
			{
				if (in_array($fieldName, static::getDisallowFields()))
				{
					unset($fields[$fieldName]);
				}
			}
		}
	}

	if (!empty($fields['DELIVERY_DOC_DATE']))
	{
		$date = new Date($fields['DELIVERY_DOC_DATE']);
		$fields['DELIVERY_DOC_DATE'] = $date->toString();
	}

	$empDeductedId = (int)($fields['EMP_DEDUCTED_ID'] ?? 0);
	if ($empDeductedId > 0)
	{
		if (!array_key_exists($empDeductedId, $users))
			$users[$empDeductedId] = $USER->GetByID($empDeductedId)->Fetch();
		$fields['EMP_DEDUCTED_ID_NAME'] = $users[$empDeductedId]['NAME'];
		$fields['EMP_DEDUCTED_ID_LAST_NAME'] = $users[$empDeductedId]['LAST_NAME'];
	}

	$empAllowDeliveryId = (int)($fields['EMP_ALLOW_DELIVERY_ID'] ?? 0);
	if ($empAllowDeliveryId > 0)
	{
		if (!array_key_exists($empAllowDeliveryId, $users))
			$users[$empAllowDeliveryId] = $USER->GetByID($empAllowDeliveryId)->Fetch();
		$fields['EMP_ALLOW_DELIVERY_ID_NAME'] = $users[$empAllowDeliveryId]['NAME'];
		$fields['EMP_ALLOW_DELIVERY_ID_LAST_NAME'] = $users[$empAllowDeliveryId]['LAST_NAME'];
	}

	$empCanceledId = (int)($fields['EMP_CANCELED_ID'] ?? 0);
	if ($empCanceledId > 0)
	{
		if (!array_key_exists($empCanceledId, $users))
			$users[$empCanceledId] = $USER->GetByID($empCanceledId)->Fetch();
		$fields['EMP_CANCELLED_ID_NAME'] = $users[$empCanceledId]['NAME'];
		$fields['EMP_CANCELLED_ID_LAST_NAME'] = $users[$empCanceledId]['LAST_NAME'];
	}

	$empMarkedId = (int)($fields['EMP_MARKED_ID'] ?? 0);
	if ($empMarkedId > 0)
	{
		if (!array_key_exists($empMarkedId, $users))
			$users[$empMarkedId] = $USER->GetByID($empMarkedId)->Fetch();
		$fields['EMP_MARKED_ID_NAME'] = $users[$empMarkedId]['NAME'];
		$fields['EMP_MARKED_ID_LAST_NAME'] = $users[$empMarkedId]['LAST_NAME'];
	}
	$fields['CURRENCY'] = $order->getCurrency();

	if ($needRecalculate)
	{
		$calcResult = self::calculateDeliveryPrice(self::$shipment);
		if ($calcResult->isSuccess())
			$fields['CALCULATED_PRICE'] = $calcResult->getPrice();
	}

	$fields['CALCULATED_WEIGHT'] = self::$shipment->getShipmentItemCollection()->getWeight() / self::getWeightKoef($order->getSiteId());

	if (
		isset($fields['CUSTOM_PRICE_DELIVERY'])
		&& $fields['CUSTOM_PRICE_DELIVERY'] === 'Y'
		&& $fields['ID'] <= 0
	)
	{
		$fields['BASE_PRICE_DELIVERY'] = self::$shipment->getField('BASE_PRICE_DELIVERY');
	}

	$discounts = OrderEdit::getDiscountsApplyResult($order, $needRecalculate);

	if ($order instanceof BitrixSaleArchiveOrder)
	{
		$shipmentIds = $discounts['SHIPMENTS_ID'];
	}
	else
	{
		$shipmentIds = $order->getDiscount()->getShipmentsIds();
	}

	foreach ($shipmentIds as $shipmentId)
	{
		if ($shipmentId == self::$shipment->getId())
			$fields['DISCOUNTS'] = $discounts;
	}

	/** @var BitrixSaleDeliveryServicesBase $delivery */
	$delivery = self::$shipment->getDelivery();

	if(!is_null($delivery))
	{
		$fields['HAS_TRACKING'] = $delivery->getTrackingClass() <> '' ? true : false;

		if($fields['HAS_TRACKING'] && intval($fields['DELIVERY_ID']) > 0)
		{
			$trackingManager = BitrixSaleDeliveryTrackingManager::getInstance();
			$fields['TRACKING_URL'] = $trackingManager->getTrackingUrl($fields['DELIVERY_ID'], $fields['TRACKING_NUMBER']);
		}

		$fields['DELIVERY_ADDITIONAL_INFO_EDIT'] = $delivery->getAdditionalInfoShipmentEdit(self::$shipment);
		$fields['DELIVERY_ADDITIONAL_INFO_VIEW'] = $delivery->getAdditionalInfoShipmentView(self::$shipment);
	}

	$res = RequestsShipmentTable::getList(array(
		'filter' => array('=SHIPMENT_ID' => self::$shipment->getId()),
		'select' => array(
			'*',
			'REQUEST_DATE' => 'REQUEST.DATE'
		)
	));

	if($request = $res->fetch())
	{
		if(intval($request['REQUEST_ID']) > 0)
		{
			$fields['DELIVERY_REQUEST_NAME'] = Loc::getMessage(
				'SALE_ORDER_SHIPMENT_DEL_REQ_NAME',
				array(
					'#REQUEST_ID#' => $request['REQUEST_ID'],
					'#REQUEST_DATE#' => $request['REQUEST_DATE']->format(BitrixMainTypeDate::getFormat())
			));
			$fields['DELIVERY_REQUEST_LINK'] = '/bitrix/admin/sale_delivery_request_view.php?lang='.LANGUAGE_ID.'&ID='.intval($request['REQUEST_ID']);
		}

		$sanitizer = new CBXSanitizer;
		$sanitizer->SetLevel(CBXSanitizer::SECURE_LEVEL_MIDDLE);

		if($request['ERROR_DESCRIPTION'] <> '')
			$fields['DELIVERY_REQUEST_ERROR_DESCRIPTION'] = $sanitizer->SanitizeHtml($request['ERROR_DESCRIPTION']);
	}

	$fields['FFD_105_ENABLED'] = CashboxManager::isSupportedFFD105() ? 'Y' : 'N';
	if ($fields['FFD_105_ENABLED'] === 'Y')
	{
		$fields['CHECK'] = CashboxCheckManager::getCheckInfo(self::$shipment);
	}

	$dbRes = CashboxTable::getList(array('filter' => array('=ACTIVE' => 'Y', '=ENABLED' => 'Y')));
	$fields['HAS_ENABLED_CASHBOX'] = ($dbRes->fetch()) ? 'Y' : 'N';

	$fields['CAN_PRINT_CHECK'] = 'Y';
	if (SaleCashboxManager::isEnabledPaySystemPrint())
	{
		$fields['CAN_PRINT_CHECK'] = 'N';
	}

	$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
	/** @var SaleOrder $orderClass */
	$orderClass = $registry->getOrderClassName();

	$fields['ORDER_LOCKED'] = $orderClass::isLocked($fields['ORDER_ID'] ?? 0);
	$fields['SITE_ID'] = $order->getSiteId();
	$fields['CUSTOM_WEIGHT_DELIVERY'] = self::$shipment->isMarkedFieldCustom('WEIGHT') ? 'Y' : 'N';

	return $fields;
}