• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/ordershipment.php
  • Класс: BitrixSaleHelpersAdminBlocksOrderShipment
  • Вызов: OrderShipment::getEditTemplate
static function getEditTemplate($data, $index, $formType, $post)
{
	global $USER, $APPLICATION;

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

	$index++;

	static $items = null;
	if (is_null($items))
		$items = self::getDeliveryServiceList();

	$data['DELIVERY_ID'] ??= 0;

	if (!isset($items[$data['DELIVERY_ID']]))
	{
		$delivery = self::getDeliveryServiceInfoById($data['DELIVERY_ID']);
		if ($delivery)
			$items[$delivery['ID']] = $delivery;
	}

	static $deliveries = null;
	if (is_null($deliveries))
		$deliveries = self::makeDeliveryServiceTree($items);

	$deliveryId = 0;
	$profileId = 0;

	if (isset($post['DELIVERY_ID']))
	{
		if (isset($post['PROFILE']))
			$data['DELIVERY_ID'] = $post['PROFILE'];
		else
			$data['DELIVERY_ID'] = $post['DELIVERY_ID'];
	}

	// default
	$data['ID'] ??= 0;
	$data['TRACKING_NUMBER'] ??= null;
	$data['BASE_PRICE_DELIVERY'] ??= null;
	$data['CALCULATED_PRICE'] ??= null;
	$data['CALCULATED_WEIGHT'] ??= null;
	$data['DEDUCTED'] ??= 'N';
	$data['ALLOW_DELIVERY'] ??= 'N';
	$data['DELIVERY_DOC_NUM'] ??= null;
	$data['DELIVERY_DOC_DATE'] ??= null;

	$profiles = array();
	if ($data['DELIVERY_ID'])
	{
		$deliveryId = $data['DELIVERY_ID'];
		$service = ServicesManager::getObjectById($deliveryId);
		if ($service && $service::isProfile())
		{
			$profileId = $deliveryId;
			$deliveryId = $service->getParentService()->getId();

			$profiles = self::getDeliveryServiceProfiles($deliveryId);
			if (!$profiles)
				unset($deliveries[$deliveryId]);
		}
		else if ($service && $service->canHasProfiles())
		{
			unset($deliveries[$deliveryId]);
		}
	}

	if (isset($post['ALLOW_DELIVERY']))
		$data['ALLOW_DELIVERY'] = $post['ALLOW_DELIVERY'];

	$allowedStatusesDelivery = DeliveryStatus::getStatusesUserCanDoOperations($USER->GetID(), array('delivery'));
	$isAllowDelivery = isset($data["STATUS_ID"]) && in_array($data["STATUS_ID"], $allowedStatusesDelivery);

	$class = ($data['ALLOW_DELIVERY'] == 'Y') ? '' : 'notdelivery';
	$class .= ($isAllowDelivery) ? '' : ' not_active';
	$status = ($data['ALLOW_DELIVERY'] == 'Y') ? 'YES' : 'NO';
	$triangle = ($class === '') ? '' : '';

	$allowDelivery = ''.Loc::getMessage('SALE_ORDER_SHIPMENT_ALLOW_DELIVERY_'.$status).''.$triangle.'';

	$allowedStatusesDeduction = DeliveryStatus::getStatusesUserCanDoOperations($USER->GetID(), array('deduction'));
	$isAllowDeduction = isset($data["STATUS_ID"]) && in_array($data["STATUS_ID"], $allowedStatusesDeduction);

	if (isset($post['DEDUCTED']) && $isAllowDeduction)
		$data['DEDUCTED'] = $post['DEDUCTED'];

	$class = ($data['DEDUCTED'] == 'Y') ? '' : 'notdeducted';
	$class .= ($isAllowDeduction) ? '' : ' not_active';
	$status = ($data['DEDUCTED'] == 'Y') ? 'YES' : 'NO';
	$triangle = ($class === '') ? '' : '';

	$deducted = ''.Loc::getMessage('SALE_ORDER_SHIPMENT_DEDUCTED_'.$status).''.$triangle.'';

	$lang = MainApplication::getInstance()->getContext()->getLanguage();
	$map = '';
	$extraServiceHTML = '';
	$extraServiceManager = new BitrixSaleDeliveryExtraServicesManager($data['DELIVERY_ID']);
	$extraServiceManager->setOperationCurrency($data['CURRENCY']);
	if (isset($post['EXTRA_SERVICES']))
	{
		$data['EXTRA_SERVICES'] = $post['EXTRA_SERVICES'];
	}

	if (isset($post['EXTRA_SERVICES']))
	{
		$data['DELIVERY_STORE_ID'] = $post['DELIVERY_STORE_ID'];
	}

	if (!empty($data['EXTRA_SERVICES']))
	{
		$extraServiceManager->setValues($data['EXTRA_SERVICES']);
	}

	$extraService = $extraServiceManager->getItems();
	if ($extraService)
		$extraServiceHTML = self::getExtraServiceEditControl($extraService, $index, false, self::$shipment);

	if ($data['DELIVERY_ID'] > 0)
		$map = self::getMap($data['DELIVERY_ID'], $index, $data['DELIVERY_STORE_ID']);

	$dataId = (int)($data['ID'] ?? 0);
	if ($dataId > 0)
	{
		$dateInsert = new Date($data['DATE_INSERT']);
		$title = Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_EDIT_SHIPMENT_TITLE', array("#ID#" => $dataId, '#DATE_INSERT#' => $dateInsert));
	}
	else
	{
		$title = Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_NEW_SHIPMENT_TITLE');
	}

	$customPriceDelivery = isset($post['CUSTOM_PRICE_DELIVERY']) ? htmlspecialcharsbx($post['CUSTOM_PRICE_DELIVERY']) : $data['CUSTOM_PRICE_DELIVERY'];
	$customWeightDelivery = isset($post['CUSTOM_WEIGHT_DELIVERY']) ? htmlspecialcharsbx($post['CUSTOM_WEIGHT_DELIVERY']) : $data['CUSTOM_WEIGHT_DELIVERY'];

	$basePriceDelivery = round(
		(float)($post['BASE_PRICE_DELIVERY'] ?? $data['BASE_PRICE_DELIVERY'] ?? 0.0),
		2
	);
	$priceDelivery = round(
		(float)($post['PRICE_DELIVERY'] ?? $data['PRICE_DELIVERY'] ?? 0.0),
		2
	);

	$weight = $post['WEIGHT'] ?? $data['WEIGHT'] ?? 0;
	$weight = roundEx(
		floatval(
			$weight/self::getWeightKoef($data['SITE_ID'])
		),
		SALE_WEIGHT_PRECISION
	);

	$weightMeasureUnits = self::getWeightUnit($data['SITE_ID']);

	$blockProfiles = '';
	if ($profileId > 0 && $profiles)
	{
		$profiles = self::checkProfilesRestriction($profiles, self::$shipment);

		$profilesTemplate = self::getProfileEditControl($profiles, $index, $profileId);
		$blockProfiles = '
			
				'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_SERVICE_PROFILE').':
				'.$profilesTemplate.'
			';
	}
	$id = (isset($post['ID'])) ? $post['SHIPMENT_ID'] : $data['ID'];

	$companies =  '';

	if (!empty($data['COMPANIES']))
	{
		if ($saleModulePermissions == "P")
		{
			$userCompanyId = null;

			$userCompanyList = CompanyManager::getUserCompanyList($USER->GetID());
			if (is_array($userCompanyList) && count($userCompanyList) == 1)
			{
				$userCompanyId = reset($userCompanyList);
				$companyName = $data['COMPANIES'][$userCompanyId]["NAME"]." [".$data['COMPANIES'][$userCompanyId]["ID"]."]";
				$companies = htmlspecialcharsbx($companyName);
			}
			else
			{
				foreach ($data['COMPANIES'] as $companyId => $companyData)
				{
					$foundCompany = false;

					if (!empty($userCompanyList) && is_array($userCompanyList))
					{
						foreach ($userCompanyList as $userCompanyId)
						{
							if ($userCompanyId == $companyId)
							{
								$foundCompany = true;
								break;
							}
						}
					}

					if (!$foundCompany)
					{
						unset($data['COMPANIES'][$companyId]);
					}
				}

				if (count($data['COMPANIES']) == 1)
				{
					$company = reset($data['COMPANIES']);
					$companies = htmlspecialcharsbx($company["NAME"]." [".$company["ID"]."]");
				}
			}
		}

		if (empty($companies))
		{
			$companies = OrderEdit::makeSelectHtmlWithRestricted(
				'SHIPMENT['.$index.'][COMPANY_ID]',
				$data['COMPANIES'],
				isset($post["COMPANY_ID"]) ? $post["COMPANY_ID"] : $data["COMPANY_ID"],
				true,
				array(
					"class" => "adm-bus-select",
					"id" => "SHIPMENT_COMPANY_ID_".$index
				)
			);
		}
	}
	else
	{
		if ($saleModulePermissions >= "W")
		{
			$companies = str_replace("#URL#", "/bitrix/admin/sale_company_edit.php?lang=".$lang, Loc::getMessage('SALE_ORDER_SHIPMENT_ADD_COMPANY'));
		}
	}

	if ($data['FFD_105_ENABLED'] === 'Y')
	{
		$checkLink = '';

		if (!empty($data['CHECK']))
		{
			$checkLink .= OrderShipment::buildCheckHtml($data['CHECK']);
		}
		$checkLink .= '';
		if ($data['HAS_ENABLED_CASHBOX'] === 'Y' && $data['CAN_PRINT_CHECK'] === 'Y')
		{
			$checkLink .= ''.Loc::getMessage('SALE_ORDER_SHIPMENT_CHECK_ADD').'';
		}
	}

	if (isset($items[$data['DELIVERY_ID']]['LOGOTIP']['MAIN']))
		$logo = $items[$data['DELIVERY_ID']]['LOGOTIP']['MAIN'];
	else
		$logo = '/bitrix/images/sale/logo-default-d.gif';

	$trackingNumber = htmlspecialcharsbx(isset($post['TRACKING_NUMBER']) ? $post['TRACKING_NUMBER'] : $data['TRACKING_NUMBER']);

	$result = '
	
'.$title.'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_SERVICE').'
'.$blockProfiles.'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_SERVICE').': '.self::getDeliverySelectHtml($deliveries, $deliveryId, $index).'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_BLOCK_PRICE').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_SUM_PRICE').': ' .CCurrencyLang::getPriceControl( ''.$basePriceDelivery.'', $data['CURRENCY'] ) . '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_SUM_DISCOUNT_PRICE').': ' .CCurrencyLang::getPriceControl( '', $data['CURRENCY'] ) .'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_BLOCK_WEIGHT').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_WEIGHT').': '.$weightMeasureUnits.' '.Loc::getMessage('SALE_ORDER_SHIPMENT_RECALCULATE_DELIVERY_PRICE').'
'; if ($companies) { $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_SHIPMENT').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_OFFICE').': '.$companies.'
'; } if ($data['FFD_105_ENABLED'] === 'Y' && $data['ID'] > 0) { $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_CHECK_LINK_TITLE').'
'.$checkLink.'
'; } $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_STATUS').'
'.((!empty($data['EMP_ALLOW_DELIVERY_ID'])) ? ' ' : '').' '.((!empty($data['EMP_DEDUCTED_ID'])) ? ' ' : '').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_ALLOW_DELIVERY').': '.$allowDelivery.'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_MODIFY_BY').': '.htmlspecialcharsbx($data['DATE_ALLOW_DELIVERY']).' '.htmlspecialcharsbx($data['EMP_ALLOW_DELIVERY_ID_LAST_NAME']).' '.htmlspecialcharsbx($data['EMP_ALLOW_DELIVERY_ID_NAME']).'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DEDUCTED').': '.$deducted.'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_MODIFY_BY').': '.htmlspecialcharsbx($data['DATE_DEDUCTED']).' '.htmlspecialcharsbx($data['EMP_DEDUCTED_ID_LAST_NAME']).' '.htmlspecialcharsbx($data['EMP_DEDUCTED_ID_NAME']).'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_DELIVERY_INFO').'
'.( $data['HAS_TRACKING'] && $trackingNumber <> '' && intval($data['ID'] > 0) ? ''.(!empty($data['TRACKING_URL']) ? '' : '') : '' ).'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_NUMBER').':
'.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_STATUS').': '. ''.(intval($data['TRACKING_STATUS']) >= 0 ? BitrixSaleDeliveryTrackingManager::getStatusName($data['TRACKING_STATUS']) : '-').''. '   ['.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_STATUS_REFRESH').']
'.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_DESCRIPTION').': '.($data['TRACKING_DESCRIPTION'] <> '' ? $data['TRACKING_DESCRIPTION'] : '-').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_LAST_CHANGE').': '.($data['TRACKING_LAST_CHANGE'] <> '' ? $data['TRACKING_LAST_CHANGE'] : '-').'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_TRACKING_URL').': '.$data['TRACKING_URL'].'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_DOC_NUM').':
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DELIVERY_DOC_DATE').':
'.$extraServiceHTML.'
'; if(!empty($data['DELIVERY_REQUEST_NAME']) || !empty($data['DELIVERY_REQUEST_ERROR_DESCRIPTION'])) { $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DEL_REQ_INFO').'
'; if(!empty($data['DELIVERY_REQUEST_NAME'])) { $result .=''; } if(!empty($data['DELIVERY_REQUEST_ERROR_DESCRIPTION'])) { $result .= ''; } $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DEL_REQ').': '.$data['DELIVERY_REQUEST_NAME'].'
'.Loc::getMessage('SALE_ORDER_SHIPMENT_DEL_REQ_ERROR').': '.$data['DELIVERY_REQUEST_ERROR_DESCRIPTION'].'
'; } if(is_array($data['DELIVERY_ADDITIONAL_INFO_EDIT']) && !empty($data['DELIVERY_ADDITIONAL_INFO_EDIT'])) { $result .= '
'.Loc::getMessage('SALE_ORDER_SHIPMENT_BLOCK_DELIVERY_ADDITIONAL').'
'; foreach($data['DELIVERY_ADDITIONAL_INFO_EDIT'] as $name => $params) { $result .=' '; } $result .= '
'.$params['LABEL'].': '.BitrixSaleInternalsInputManager::getEditHtml('SHIPMENT['.$index.'][ADDITIONAL]['.$name.']', $params).'
'; } $result .= '
'; $srcList = self::getImgDeliveryServiceList($items); $params = array( 'index' => $index, 'id' => (int)$data['ID'], 'isAjax' => false, 'canAllow' => $isAllowDelivery, 'canDeduct' => $isAllowDeduction, 'canChangeStatus' => false, 'src_list' => $srcList, 'active' => true, 'discounts' => $data["DISCOUNTS"] ?? [], 'discountsMode' => ($formType == "edit" ? "view" : "edit"), 'templateType' => 'edit', 'weightKoef' => self::getWeightKoef($data['SITE_ID']), 'weightUnit' => self::getWeightUnit($data['SITE_ID']) ); if ($customPriceDelivery == 'Y') $params['calculated_price'] = $data['CALCULATED_PRICE']; if ($customWeightDelivery == 'Y') $params['calculated_weight'] = $data['CALCULATED_WEIGHT']; $result .= self::initJsShipment($params); return $result; }