• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/checkmanager.php
  • Класс: BitrixSaleCashboxCheckManager
  • Вызов: CheckManager::collateWithFFD105
static function collateWithFFD105($entity)
{
	$map = array();

	$order = self::getOrder($entity);
	if (!self::canPrintCheck($order))
	{
		return $map;
	}

	$entities = array();
	$relatedEntities = array();
	if ($entity instanceof SalePayment)
	{
		if ($entity->isInner() || !$entity->isPaid())
			return $map;

		$service = $entity->getPaySystem();
		$type = $service->getField('IS_CASH') === 'Y' ? Check::PAYMENT_TYPE_CASHLESS : Check::PAYMENT_TYPE_CASH;
		$entities[$type] = $entity;

		$fields = $order->getFields();
		$originalFields = $fields->getOriginalValues();
		if (!isset($originalFields['DEDUCTED']))
			$originalFields['DEDUCTED'] = $order->getField('DEDUCTED');

		$paymentCollection = $order->getPaymentCollection();
		if ($order->getField('DEDUCTED') === 'Y' && $originalFields['DEDUCTED'] === 'Y')
		{
			if ($paymentCollection->isExistsInnerPayment())
			{
				$relatedEntities[Check::PAYMENT_TYPE_ADVANCE][] = $paymentCollection->getInnerPayment();
			}

			$map[] = array("TYPE" => CreditPaymentCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
		}
		else
		{
			$option = MainConfigOption::get('sale', 'check_type_on_pay', 'sell');
			if ($option === 'prepayment')
			{
				$checkType = ($entity->getSum() == $entity->getOrder()->getPrice()) ? FullPrepaymentCheck::getType() : PrepaymentCheck::getType();

				$shipmentCollection = $order->getShipmentCollection()->getNotSystemItems();
				/** @var SaleShipment $shipment */
				foreach ($shipmentCollection as $shipment)
				{
					$relatedEntities[Check::SHIPMENT_TYPE_NONE][] = $shipment;
				}

				$map[] = array("TYPE" => $checkType, "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
			}
			elseif ($option === 'advance')
			{
				$map[] = array("TYPE" => AdvancePaymentCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
			}
			else
			{
				if ($paymentCollection->isExistsInnerPayment())
				{
					$map[] = array("TYPE" => AdvancePaymentCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
				}
				else
				{
					$shipmentCollection = $order->getShipmentCollection()->getNotSystemItems();
					/** @var SaleShipment $shipment */
					foreach ($shipmentCollection as $shipment)
					{
						$relatedEntities[Check::SHIPMENT_TYPE_NONE][] = $shipment;
					}

					$map[] = array("TYPE" => SellCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
				}
			}
		}
	}
	elseif ($entity instanceof SaleShipment)
	{
		if ($entity->getField('DEDUCTED') !== 'Y')
			return $map;

		$entities[] = $entity;
		if ($order->isPaid())
		{
			if (MainConfigOption::get('sale', 'check_type_on_pay', 'sell') === 'sell')
			{
				return $map;
			}

			$paymentCollection = $order->getPaymentCollection();
			foreach ($paymentCollection as $payment)
			{
				$relatedEntities[Check::PAYMENT_TYPE_ADVANCE][] = $payment;
			}

			$map[] = array("TYPE" => SellCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
		}
		else
		{
			$map[] = array("TYPE" => CreditCheck::getType(), "ENTITIES" => $entities, "RELATED_ENTITIES" => $relatedEntities);
		}
	}
	else
	{
		throw new MainNotSupportedException();
	}

	return $map;
}