- Модуль: 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;
}