• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Timeline/Item/Activity/Delivery.php
  • Класс: Bitrix\Crm\Service\Timeline\Item\Activity\Delivery
  • Вызов: Delivery::getButtons
public function getButtons(): array
{
	$deliveryRequest = $this->getDeliveryRequest();
	$deliveryService = $this->getDeliveryService();
	$deliveryShipments = $this->getDeliveryShipments();

	if (!$deliveryRequest && $this->isScheduled())
	{
		$result['createDeliveryRequest'] =
			(new Button(
				Loc::getMessage('CRM_TIMELINE_ACTIVITY_DELIVERY_ORDER_BUTTON'),
			Button::TYPE_PRIMARY,
			))
				->setAction(
					(new RunAjaxAction('sale.deliveryrequest.create'))
						->addActionParamArray(
							'shipmentIds',
							array_column($deliveryShipments, 'ID')
						)
						->addActionParamArray(
							'additional',
							[
								'ACTIVITY_ID' => $this->getActivityId(),
							]
						)
						->setAnimation(Animation::showLoaderForBlock()->setForever())
				)
		;
	}
	elseif(
		isset($deliveryShipments[0]['ID'])
		&& !in_array(
			$this->getContext()->getEntityTypeId(),
			[
				\CCrmOwnerType::Order,
				\CCrmOwnerType::ShipmentDocument,
			],
			true
		)
	)
	{
		$shipmentId = (int)$deliveryShipments[0]['ID'];
		$shipment = Sale\Repository\ShipmentRepository::getInstance()->getById($shipmentId);

		if ($shipment)
		{
			$openDetailsButton = new Button(
				Loc::getMessage('CRM_TIMELINE_ACTIVITY_DELIVERY_OPEN'),
				$this->isScheduled() ? Button::TYPE_PRIMARY : Button::TYPE_SECONDARY
			);

			$result['openDetails'] = $openDetailsButton->setAction(
				(new JsEvent('SalescenterApp:Start'))
					->addActionParamString('mode', 'delivery')
					->addActionParamInt('orderId', $shipment->getOrder()->getId())
					->addActionParamInt('shipmentId', $shipmentId)
					->addActionParamInt('ownerTypeId', $this->getContext()->getEntityTypeId())
					->addActionParamInt('ownerId', $this->getContext()->getEntityId())
			);
		}
	}

	if (
		$deliveryService
		&& $deliveryService['IS_CANCELLABLE'] === true
		&& $deliveryRequest
		&& (int)$deliveryRequest['STATUS'] !== Sale\Delivery\Requests\Manager::STATUS_PROCESSED
	)
	{
		$cancelDeliveryRequestAction =
			(new CallRestBatch())
				->addActionParamArray(
					'cancel',
					[
						'method' => 'sale.deliveryrequest.execute',
						'params' => [
							'requestId' => $deliveryRequest['ID'],
							'actionType' => $deliveryService['CANCEL_ACTION_CODE'],
						]
					]
				)
				->addActionParamArray(
					'create_message',
					[
						'method' => 'crm.timeline.deliveryactivity.createcanceldeliveryrequestmessage',
						'params' => [
							'requestId' => $deliveryRequest['ID'],
							'message' => '$result[cancel][message]',
						],
					]
				)
				->addActionParamArray(
					'delete',
					[
						'method' => 'sale.deliveryrequest.delete',
						'params' => [
							'requestId' => $deliveryRequest['ID'],
						],
					]
				)
				->setAnimation(Animation::showLoaderForBlock())
		;

		$cancelDeliveryRequestButton = new Button(
			isset($deliveryService['CANCEL_ACTION_NAME'])
				? (string)$deliveryService['CANCEL_ACTION_NAME']
				: Loc::getMessage('CRM_TIMELINE_ACTIVITY_DELIVERY_CANCEL')
			,
			Button::TYPE_SECONDARY,
		);

		$result['cancelDeliveryRequest'] = $cancelDeliveryRequestButton->setAction($cancelDeliveryRequestAction);
	}

	return $result;
}