%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.217.80.88 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/handlers/paysystem/bill/ |
Upload File : |
<?php namespace Sale\Handlers\PaySystem; use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Request; use Bitrix\Main\Type; use Bitrix\Main\Type\Date; use Bitrix\Sale; use Bitrix\Sale\Payment; use Bitrix\Sale\PaySystem; use Bitrix\Currency; Loc::loadMessages(__FILE__); /** * Class BillHandler * @package Sale\Handlers\PaySystem */ class BillHandler extends PaySystem\BaseServiceHandler implements PaySystem\IPdf { /** * @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($order->getPrice()), '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, ['allowed_classes' => false]); 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() { $currencyList = []; if (Loader::includeModule('currency')) { $currencyIterator = Currency\CurrencyTable::getList([ 'select' => ['CURRENCY'], 'cache' => ['ttl' => 86400], ]); while ($currency = $currencyIterator->fetch()) { $currencyList[] = $currency['CURRENCY']; } } return $currencyList; } /** * @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; } /** * @param Payment $payment * @return mixed|string * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ArgumentNullException * @throws \Bitrix\Main\LoaderException * @throws \Bitrix\Main\NotImplementedException */ public function getContent(Payment $payment) { $origRequest = $_REQUEST; $_REQUEST['GET_CONTENT'] = 'Y'; $_REQUEST['pdf'] = 'Y'; $prevMode = $this->initiateMode; $this->setInitiateMode(self::STRING); $result = $this->initiatePay($payment, null); if ($prevMode !== self::STRING) { $this->setInitiateMode(self::STREAM); } foreach (['pdf', 'GET_CONTENT'] as $key) { if (array_key_exists($key, $origRequest)) { $_REQUEST[$key] = $origRequest[$key]; } else { unset($_REQUEST[$key]); } } return $result->getTemplate(); } /** * @param Payment $payment * @return array|bool|false|mixed|null * @throws \Bitrix\Main\ObjectException */ public function getFile(Payment $payment) { $order = $payment->getOrder(); $today = new Type\Date(); $fileName = 'invoice_'.$order->getField('ACCOUNT_NUMBER').'_'.str_replace(array('.', '\\', '/'), '-' ,$today->toString()).'.pdf'; $fileData = array( 'name' => $fileName, 'type' => 'application/pdf', 'content' => $this->getContent($payment), 'MODULE_ID' => 'sale' ); $fileId = \CFile::SaveFile($fileData, 'sale'); return \CFile::GetFileArray($fileId); } /** * @param Payment $payment * @return mixed */ public function isGenerated(Payment $payment) { return true; } }