%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/handlers/paysystem/orderdocument/ |
Current File : //home/bitrix/www/bitrix/modules/sale/handlers/paysystem/orderdocument/handler.php |
<?php namespace Sale\Handlers\PaySystem; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Request; use Bitrix\Sale; use Bitrix\Main; use Bitrix\Sale\Payment; use Bitrix\Sale\PaySystem; use Bitrix\DocumentGenerator; use Bitrix\Crm\Integration; Loc::loadMessages(__FILE__); /** * Class OrderDocumentHandler * @package Sale\Handlers\PaySystem */ class OrderDocumentHandler extends PaySystem\BaseServiceHandler { /** * @return string */ protected static function getDataProviderClass() { return Integration\DocumentGenerator\DataProvider\Order::class; } /** * @param Payment $payment * @param Request|null $request * @throws Main\ArgumentException * @throws Main\ArgumentTypeException * @throws Main\ObjectPropertyException * @throws Main\SystemException */ public function preInitiatePay(Payment $payment, Request $request = null) { $this->getDocument($payment); } /** * @param Sale\Payment $payment * @param Request|null $request * @return PaySystem\ServiceResult * @throws Main\ArgumentTypeException * @throws Main\LoaderException */ public function initiatePay(Sale\Payment $payment, Request $request = null) { if (!Main\Loader::includeModule('documentgenerator') || !Main\Loader::includeModule('crm') ) { return new PaySystem\ServiceResult(); } $document = $this->getDocument($payment); if ($document === null) { return new PaySystem\ServiceResult(); } $documentInfo = $document->getFile()->getData(); $this->setExtraParams($documentInfo); return $this->showTemplate($payment, 'template'); } /** * @return array */ public function getCurrencyList() { return array('RUB'); } /** * @return bool */ public function isAffordPdf() { return true; } /** * @return array * @throws Main\ArgumentException * @throws Main\LoaderException * @throws Main\ObjectPropertyException * @throws Main\SystemException */ public static function getHandlerModeList() { $result = []; if (!Main\Loader::includeModule('documentgenerator') || !Main\Loader::includeModule('crm') ) { return $result; } $provider = static::getDataProviderClass(); $templateList = DocumentGenerator\Model\TemplateTable::getListByClassName($provider); foreach ($templateList as $item) { $result[$item['ID']] = htmlspecialcharsbx($item['NAME']); } return $result; } /** * @param Payment $payment * @return false|static * @throws Main\ArgumentException * @throws Main\ArgumentTypeException * @throws Main\ObjectPropertyException * @throws Main\SystemException */ protected function getDocument(Sale\Payment $payment) { $dbRes = DocumentGenerator\Model\DocumentTable::getList([ 'select' => ['ID', 'UPDATE_TIME'], 'filter' => [ '=PROVIDER' => static::getDataProviderClass(), '=VALUE' => $payment->getOrderId(), '=TEMPLATE_ID' => $this->service->getField('PS_MODE'), ], 'order' => ['ID' => 'DESC'], 'limit' => 1, ]); $data = $dbRes->fetch(); if ($data) { $document = DocumentGenerator\Document::loadById($data['ID']); /** @var Sale\PaymentCollection $collection */ $collection = $payment->getCollection(); $order = $collection->getOrder(); if ($data['UPDATE_TIME'] < $order->getField('DATE_UPDATE')) { $document->update([]); } } else { if (!$this->service->getField('PS_MODE')) { return null; } $template = DocumentGenerator\Template::loadById($this->service->getField('PS_MODE')); if (!$template || $template->isDeleted()) { return null; } $template->setSourceType(static::getDataProviderClass()); $document = DocumentGenerator\Document::createByTemplate($template, $payment->getOrderId()); $document->getFile(); } return $document; } }