• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/paymentitembasket.php
  • Класс: BitrixSaleControllerPaymentItemBasket
  • Вызов: PaymentItemBasket::getPrimaryAutoWiredParameter
public function getPrimaryAutoWiredParameter(): ExactParameter
{
	return new ExactParameter(
		PayableBasketItem::class,
		'paymentItem',
		function($className, $id) {

			$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);

			/** @var PayableItemCollection $payableItemCollection */
			$payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
			$pi = $payableItemCollection::getList([
				'select'=>['PAYMENT_ID'],
				'filter'=>[
					'ID'=>$id,
					'ENTITY_TYPE'=>PayableBasketItem::getEntityType()
				],
			]);

			if($piRow = $pi->fetch())
			{
				$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
				/** @var BitrixSalePayment $paymentClass */
				$paymentClass = $registry->getPaymentClassName();

				$r = $paymentClass::getList([
					'select'=>['ORDER_ID'],
					'filter'=>['ID'=>$piRow['PAYMENT_ID']]
				]);

				if($row = $r->fetch())
				{
					/** @var BitrixSaleOrder $orderClass */
					$orderClass = $registry->getOrderClassName();

					$order = $orderClass::load($row['ORDER_ID']);
					$payment = $order->getPaymentCollection()->getItemById($piRow['PAYMENT_ID']);
					$payableItemCollection = $payment->getPayableItemCollection();
					/** @var PayableItem $item */
					foreach ($payableItemCollection as $item)
					{
						if($item->getId() == $id)
						{
							return $item;
						}
					}
				}
				else
				{
					$this->addError(new Error('payment is not exists', 200640400001));
				}
			}

			$this->addError(new Error('payment item is not exists', 201240400001));
			return null;
		}
	);
}