• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/check.php
  • Класс: BitrixSaleCashboxCheck
  • Вызов: Check::extractDataFromEntitiesInternal
private function extractDataFromEntitiesInternal(array $entities)
{
	$result = array();

	$order = null;
	$discounts = null;
	$shopPrices = null;
	$totalSum = 0;
	$currency = null;

	foreach ($entities as $entity)
	{
		if ($order === null)
		{
			$order = CheckManager::getOrder($entity);
			$result['ORDER'] = $order;
		}

		if ($entity instanceof Payment)
		{
			$service = $entity->getPaySystem();
			$type = $service->getField('IS_CASH') === 'Y' ? static::PAYMENT_TYPE_CASH : static::PAYMENT_TYPE_CASHLESS;

			$result['PAYMENTS'][] = [
				'ENTITY' => $entity,
				'IS_CASH' => $service->getField('IS_CASH'),
				'TYPE' => $type,
				'SUM' => $entity->getSum(),
				'CURRENCY' => $entity->getField('CURRENCY'),
			];

			$currency = $entity->getField('CURRENCY');
			$totalSum += $entity->getSum();

			if ($this->isShipmentExists())
			{
				continue;
			}

			/** @var PayableBasketItem $payableItem */
			foreach ($entity->getPayableItemCollection()->getBasketItems() as $payableItem)
			{
				/** @var BasketItem $basketItem */
				$basketItem = $payableItem->getEntityObject();

				$item = $this->extractDataFromBasketItem($basketItem);

				$item['SUM'] = PriceMaths::roundPrecision($basketItem->getPriceWithVat() * $payableItem->getQuantity());
				$item['QUANTITY'] = (float)$payableItem->getQuantity();

				$result['PRODUCTS'][] = $item;
			}

			foreach ($entity->getPayableItemCollection()->getShipments() as $payableItem)
			{
				$item = $this->extractDataFromShipment($payableItem->getEntityObject());
				if ($item)
				{
					$item['QUANTITY'] = (float)$payableItem->getQuantity();

					$result['DELIVERY'][] = $item;
				}
			}
		}
		elseif ($entity instanceof Shipment)
		{
			$shipmentItemCollection = $entity->getShipmentItemCollection();
			$sellableItems = $shipmentItemCollection->getSellableItems();

			/** @var ShipmentItem $shipmentItem */
			foreach ($sellableItems as $shipmentItem)
			{
				$basketItem = $shipmentItem->getBasketItem();

				$item = $this->extractDataFromBasketItem($basketItem);

				if ($this->needPrintMarkingCode($basketItem))
				{
					$item['QUANTITY'] = 1;
					$item['SUM'] = $basketItem->getPriceWithVat();

					$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
					if ($shipmentItemStoreCollection)
					{
						foreach ($shipmentItemStoreCollection as $itemStore)
						{
							$item['NOMENCLATURE_CODE'] = $this->buildTag1162(
								$itemStore->getMarkingCode(),
								$basketItem->getMarkingCodeGroup()
							);
							$item['BARCODE'] = $itemStore->getBarcode();
							$item['MARKING_CODE'] = $itemStore->getMarkingCode();

							$result['PRODUCTS'][] = $item;
						}

						$diff = $shipmentItem->getQuantity() - $shipmentItemStoreCollection->count();
						if ($diff)
						{
							for ($i = 0; $i < $diff; $i++)
							{
								$item['NOMENCLATURE_CODE'] = '';
								$item['MARKING_CODE'] = '';

								$result['PRODUCTS'][] = $item;
							}
						}
					}
				}
				else
				{
					$item['SUM'] = PriceMaths::roundPrecision($basketItem->getPriceWithVat() * $shipmentItem->getQuantity());
					$item['QUANTITY'] = (float)$shipmentItem->getQuantity();

					$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
					if (isset($shipmentItemStoreCollection[0]))
					{
						$item['BARCODE'] = $shipmentItemStoreCollection[0]->getField('BARCODE');
					}

					$result['PRODUCTS'][] = $item;
				}
			}

			$item = $this->extractDataFromShipment($entity);
			if ($item)
			{
				$result['DELIVERY'][] = $item;
			}
		}
	}

	if ($order !== null)
	{
		$result['BUYER'] = array();

		$properties = $order->getPropertyCollection();
		$email = $properties->getUserEmail();
		if ($email && $email->getValue())
		{
			$result['BUYER']['EMAIL'] = $email->getValue();
		}

		$phone = $properties->getPhone();
		if ($phone && $phone->getValue())
		{
			$result['BUYER']['PHONE'] = $phone->getValue();
		}

		if (!$result['BUYER'])
		{
			$result['BUYER']['EMAIL'] = MainConfigOption::get("main", "email_from", "admin@".$_SERVER['SERVER_NAME']);
		}
	}

	$result['TOTAL_SUM'] = $totalSum;
	$result['CURRENCY'] = $currency;

	unset($shopPrices, $discounts);

	return $result;
}