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