%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/handlers/paysystem/bill/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/handlers/paysystem/bill/handler.php |
<?php
namespace Sale\Handlers\PaySystem;
use Bitrix\Main\ArgumentTypeException;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Request;
use Bitrix\Main\Type\Date;
use Bitrix\Main\Web;
use Bitrix\Sale;
use Bitrix\Sale\PaySystem;
use Bitrix\DocumentGenerator;
use Bitrix\Crm\Integration;
Loc::loadMessages(__FILE__);
/**
* Class BillHandler
* @package Sale\Handlers\PaySystem
*/
class BillHandler extends PaySystem\BaseServiceHandler
{
/**
* @param Sale\Payment $payment
* @param Request|null $request
* @return PaySystem\ServiceResult
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ArgumentNullException
* @throws \Bitrix\Main\LoaderException
* @throws \Bitrix\Main\NotImplementedException
*/
public function initiatePay(Sale\Payment $payment, Request $request = null)
{
$template = 'template';
if (array_key_exists('pdf', $_REQUEST))
$template .= '_pdf';
$extraParams = $this->getPreparedParams($payment, $request);
$this->setExtraParams($extraParams);
return $this->showTemplate($payment, $template);
}
/**
* @param Sale\Payment|null $payment
* @param string $template
* @return PaySystem\ServiceResult
*/
public function showTemplate(Sale\Payment $payment = null, $template = '')
{
\CCurrencyLang::disableUseHideZero();
return parent::showTemplate($payment, $template);
}
/**
* @param Sale\Payment $payment
* @param Request|null $request
* @return array
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ArgumentNullException
* @throws \Bitrix\Main\LoaderException
* @throws \Bitrix\Main\NotImplementedException
*/
protected function getPreparedParams(Sale\Payment $payment, Request $request = null)
{
/** @var \Bitrix\Sale\PaymentCollection $paymentCollection */
$paymentCollection = $payment->getCollection();
/** @var \Bitrix\Sale\Order $order */
$order = $paymentCollection->getOrder();
$extraParams = array(
'ACCOUNT_NUMBER' => (IsModuleInstalled('intranet')) ? $order->getField('ACCOUNT_NUMBER') : $payment->getField('ACCOUNT_NUMBER'),
'CURRENCY' => $payment->getField('CURRENCY'),
'DATE_BILL' => $payment->getField('DATE_BILL'),
'SUM' => Sale\PriceMaths::roundPrecision($payment->getSum()),
'SUM_PAID' => Sale\PriceMaths::roundPrecision($paymentCollection->getPaidSum()),
'DISCOUNT_PRICE' => Sale\PriceMaths::roundPrecision($order->getDiscountPrice())
);
$taxes = $order->getTax();
$extraParams['TAXES'] = $taxes->getTaxList();
/** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $order->getShipmentCollection();
/** @var \Bitrix\Sale\Shipment $shipment */
foreach ($shipmentCollection as $shipment)
{
if (!$shipment->isSystem())
{
$extraParams['DELIVERY_NAME'] = $shipment->getDeliveryName();
$extraParams['DELIVERY_PRICE'] = $shipment->getPrice();
$extraParams['DELIVERY_VAT_RATE'] = $shipment->getVatRate();
break;
}
}
$basket = $order->getBasket();
$extraParams['BASKET_ITEMS'] = array();
$userColumns = $this->getBusinessValue($payment, 'USER_COLUMNS');
$ids = array();
if ($userColumns !== null)
{
$extraParams['USER_COLUMNS'] = array();
$userColumns = unserialize($userColumns);
if ($userColumns)
{
foreach ($userColumns as $id => $columns)
{
$extraParams['USER_COLUMNS']['PROPERTY_'.$id] = array(
'NAME' => $columns['NAME'],
'SORT' => $columns['SORT']
);
$ids[] = $id;
}
}
}
$productProps = [];
/** @var \Bitrix\Sale\BasketItem $basketItem */
foreach ($basket->getBasketItems() as $basketItem)
{
$productProps[$basketItem->getProductId()] = array();
$item = array(
'NAME' => $basketItem->getField("NAME"),
'IS_VAT_IN_PRICE' => $basketItem->isVatInPrice(),
'PRODUCT_ID' => $basketItem->getProductId(),
'PRICE' => $basketItem->getPrice(),
'VAT_RATE' => $basketItem->getVatRate(),
'QUANTITY' => $basketItem->getQuantity(),
'MEASURE_NAME' => $basketItem->getField("MEASURE_NAME"),
'CURRENCY' => $basketItem->getCurrency(),
);
$item['PROPS'] = array();
foreach ($basketItem->getPropertyCollection() as $basketPropertyItem)
{
$item['PROPS'][] = array(
'CODE' => $basketPropertyItem->getField('CODE'),
'NAME' => $basketPropertyItem->getField('NAME'),
'VALUE' => $basketPropertyItem->getField('VALUE')
);
}
$extraParams['BASKET_ITEMS'][$basketItem->getId()] = $item;
}
if ($ids && Loader::includeModule('crm') && Loader::includeModule('iblock'))
{
$productIdsByCatalogMap = [];
$dbRes = \CCrmProduct::GetList([], ['ID' => array_keys($productProps)], ['ID', 'CATALOG_ID']);
while ($data = $dbRes->Fetch())
{
$catalogId = isset($data['CATALOG_ID']) ? intval($data['CATALOG_ID']) : \CCrmCatalog::EnsureDefaultExists();
if (!isset($productIdsByCatalogMap[$catalogId]))
{
$productIdsByCatalogMap[$catalogId] = [];
}
$productIdsByCatalogMap[$catalogId][] = $data['ID'];
}
if ($productIdsByCatalogMap)
{
foreach ($productIdsByCatalogMap as $catalogId => $ids)
{
\CIBlockElement::GetPropertyValuesArray($productProps, $catalogId, array('ID' => $ids));
}
}
foreach ($extraParams['BASKET_ITEMS'] as $i => $row)
{
foreach ($productProps[$row['PRODUCT_ID']] as $property)
{
$extraParams['BASKET_ITEMS'][$i]['PROPERTY_'.$property['ID']] = $property['VALUE'];
}
}
}
return $extraParams;
}
/**
* @return array
*/
public function getCurrencyList()
{
return array('RUB');
}
/**
* @return bool
*/
public function isAffordPdf()
{
return true;
}
/**
* @return array
* @throws \Bitrix\Main\LoaderException
* @throws \Bitrix\Main\ObjectException
*/
public function getDemoParams()
{
$data = array(
'ACCOUNT_NUMBER' => 'A1',
'PAYMENT_DATE_INSERT' => new Date(),
'DATE_INSERT' => new Date(),
'CURRENCY' => 'RUB',
'SUM' => 5900,
'SUM_PAID' => 0,
'TAXES' => array(
array(
'TAX_NAME' => Loc::getMessage('SALE_HPS_BILL_TAX'),
'IS_IN_PRICE' => 'Y',
'CODE' => 'VAT',
'VALUE_MONEY' => 900,
'VALUE' => 18.00,
'IS_PERCENT' => 'Y'
)
),
'BASKET_ITEMS' => array(
array(
'NAME' => Loc::getMessage('SALE_HPS_BILL_BASKET_ITEM_NAME'),
'IS_VAT_IN_PRICE' => false,
'PRICE' => 5000,
'VAT_RATE' => 0.18,
'QUANTITY' => 1,
'MEASURE_NAME' => Loc::getMessage('SALE_HPS_BILL_BASKET_ITEM_MEASURE'),
'CURRENCY' => 'RUB'
)
),
'SELLER_COMPANY_BANK_CITY' => Loc::getMessage('SALE_HPS_BILL_BANK_CITY'),
'SELLER_COMPANY_ADDRESS' => Loc::getMessage('SALE_HPS_BILL_BANK_ADDRESS'),
'SELLER_COMPANY_PHONE' => '+76589321451',
'SELLER_COMPANY_BANK_NAME' => Loc::getMessage('SALE_HPS_BILL_BANK_NAME'),
'SELLER_COMPANY_BANK_ACCOUNT' => '0000 0000 0000 0000 0000',
'SELLER_COMPANY_INN' => '000011112222',
'SELLER_COMPANY_KPP' => '123456789',
'SELLER_COMPANY_NAME' => Loc::getMessage('SALE_HPS_BILL_COMPANY_NAME'),
'SELLER_COMPANY_BANK_BIC' => '0123456',
'SELLER_COMPANY_BANK_ACCOUNT_CORR' => '1111 1111 1111 1111',
'BUYER_PERSON_COMPANY_NAME' => Loc::getMessage('SALE_HPS_BILL_BUYER_COMPANY_NAME'),
'BUYER_PERSON_COMPANY_INN' => '0123456789',
'BUYER_PERSON_COMPANY_PHONE' => '79091234523',
'BUYER_PERSON_COMPANY_FAX' => '88002000600',
'BUYER_PERSON_COMPANY_ADDRESS' => Loc::getMessage('SALE_HPS_BILL_BUYER_COMPANY_ADDRESS'),
'BUYER_PERSON_COMPANY_NAME_CONTACT' => Loc::getMessage('SALE_HPS_BILL_BUYER_NAME_CONTACT'),
'SELLER_COMPANY_DIRECTOR_POSITION' => Loc::getMessage('SALE_HPS_BILL_DIRECTOR_POSITION'),
'SELLER_COMPANY_DIRECTOR_NAME' => Loc::getMessage('SALE_HPS_BILL_DIRECTOR_NAME'),
'SELLER_COMPANY_ACCOUNTANT_POSITION' => Loc::getMessage('SALE_HPS_BILL_ACCOUNTANT_POSITION'),
'SELLER_COMPANY_ACCOUNTANT_NAME' => Loc::getMessage('SALE_HPS_BILL_ACCOUNTANT_NAME'),
'SELLER_COMPANY_EMAIL' => 'my@company.com',
);
if (Loader::includeModule('crm') && Loader::includeModule('iblock'))
{
$arFilter = array(
'IBLOCK_ID' => intval(\CCrmCatalog::EnsureDefaultExists()),
'CHECK_PERMISSIONS' => 'N',
'!PROPERTY_TYPE' => 'G'
);
$dbRes = \CIBlockProperty::GetList(array(), $arFilter);
while ($arRow = $dbRes->Fetch())
$data['BASKET_ITEMS'][0]['PROPERTY_'.$arRow['ID']] = 'test';
}
return $data;
}
}