1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
handler.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\PaySystem;
4
5use Bitrix\Main\Localization\Loc;
6use Bitrix\Main\Request;
7use Bitrix\Sale;
8use Bitrix\Main;
9use Bitrix\Sale\Payment;
10use Bitrix\Sale\PaySystem;
11use Bitrix\DocumentGenerator;
12use Bitrix\Crm\Integration;
13
14Loc::loadMessages(__FILE__);
15
20class OrderDocumentHandler
23{
27 protected static function getDataProviderClass()
28 {
29 return Integration\DocumentGenerator\DataProvider\Order::class;
30 }
31
39 public function initiatePay(Sale\Payment $payment, Request $request = null)
40 {
41 $result = new PaySystem\ServiceResult();
42 if (!Main\Loader::includeModule('documentgenerator')
43 ||
44 !Main\Loader::includeModule('crm')
45 )
46 {
47 return $result;
48 }
49
50 if ($request === null)
51 {
52 $request = Main\Context::getCurrent()->getRequest();
53 }
54
55 $document = $this->getDocument($payment);
56 if ($document === null)
57 {
58 return new PaySystem\ServiceResult();
59 }
60
61 $documentInfo = $document->getFile()->getData();
62 $result->setData($documentInfo);
63
64 $params = array_merge($documentInfo, DocumentGenerator\Model\ExternalLinkTable::getPublicUrlsByDocumentId($document->ID));
65 if(!empty($params['hash']))
66 {
67 $params['isPublicMode'] = true;
68 }
69 if ($this->service->getField('NEW_WINDOW') === 'Y')
70 {
71 $params['IFRAME'] = 'Y';
72 $params['PRINT'] = 'Y';
73 }
74
75 $params['PAYMENT_ID'] = $payment->getId();
76 $params['PAYSYSTEM_ID'] = $this->service->getField('ID');
77
78 $this->setExtraParams($params);
79
80 $showTemplateResult = $this->showTemplate($payment, $this->getTemplate($request));
81 if ($showTemplateResult->isSuccess())
82 {
83 $result->setTemplate($showTemplateResult->getTemplate());
84 }
85 else
86 {
87 $result->addErrors($showTemplateResult->getErrors());
88 }
89
90 return $result;
91 }
92
93 private function getTemplate(Request $request)
94 {
95 return $request->get('template') ?? 'template';
96 }
97
101 public function getCurrencyList()
102 {
103 return [];
104 }
105
113 public static function getHandlerModeList()
114 {
115 $result = [];
116
117 if (!Main\Loader::includeModule('documentgenerator')
118 ||
119 !Main\Loader::includeModule('crm')
120 )
121 {
122 return $result;
123 }
124
125 $provider = static::getDataProviderClass();
126 $templateList = DocumentGenerator\Model\TemplateTable::getListByClassName($provider);
127
128 foreach ($templateList as $item)
129 {
130 $result[$item['ID']] = htmlspecialcharsbx($item['NAME']);
131 }
132
133 return $result;
134 }
135
145 public function registerCallbackOnGenerate(Payment $payment, $params)
146 {
147 $document = $this->getDocument($payment);
148 if ($document === null)
149 {
150 return new PaySystem\ServiceResult();
151 }
152
153 $callback = [
154 'DOCUMENT_ID' => $document->ID,
155 'MODULE_ID' => $params['MODULE_ID'],
156 'CALLBACK_CLASS' => $params['CALLBACK_CLASS'],
157 'CALLBACK_METHOD' => $params['CALLBACK_METHOD'],
158 ];
159
160 Sale\DocumentGenerator\CallbackRegistry::add($callback);
161
162 return new PaySystem\ServiceResult();
163 }
164
172 protected function getDocument(Sale\Payment $payment)
173 {
174 $dbRes = DocumentGenerator\Model\DocumentTable::getList([
175 'select' => ['ID', 'UPDATE_TIME'],
176 'filter' => [
177 '=PROVIDER' => static::getDataProviderClass(),
178 '=VALUE' => $payment->getOrderId(),
179 '=TEMPLATE_ID' => $this->service->getField('PS_MODE'),
180 ],
181 'order' => ['ID' => 'DESC'],
182 'limit' => 1,
183 ]);
184
185 $data = $dbRes->fetch();
186 if ($data)
187 {
188 $document = DocumentGenerator\Document::loadById($data['ID']);
189
191 $collection = $payment->getCollection();
192
193 $order = $collection->getOrder();
194 if ($data['UPDATE_TIME'] < $order->getField('DATE_UPDATE'))
195 {
196 $document->update([]);
197 }
198 }
199 else
200 {
201 if (!$this->service->getField('PS_MODE'))
202 {
203 return null;
204 }
205
206 $template = DocumentGenerator\Template::loadById($this->service->getField('PS_MODE'));
207 if (!$template || $template->isDeleted())
208 {
209 return null;
210 }
211 $template->setSourceType(static::getDataProviderClass());
212
213 $document = DocumentGenerator\Document::createByTemplate($template, $payment->getOrderId());
214 $document->setValues(['DocumentTitle' => $this->getFileName($payment)]);
215 $document->getFile();
216 }
217
218 $document->enablePublicUrl();
219
220 return $document;
221 }
222
228 protected function getFileName(Payment $payment)
229 {
230 $today = new Main\Type\Date();
231 return 'invoice_'.$this->getInvoiceNumber($payment).'_'.str_replace(['.', '\\', '/'], '-' ,$today->toString());
232 }
233
238 protected function getInvoiceNumber(Payment $payment)
239 {
240 return $payment->getField('ACCOUNT_NUMBER');
241 }
242
252 public function getContent(Payment $payment)
253 {
254 global $APPLICATION;
255
256 $file = $this->getFile($payment);
257 if ($file)
258 {
259 return $APPLICATION->GetFileContent($file['src']);
260 }
261
262 return null;
263 }
264
274 public function getFile(Payment $payment)
275 {
276 if (!Main\Loader::includeModule('documentgenerator'))
277 {
278 return null;
279 }
280
281 $document = $this->getDocument($payment);
282 if ($document === null)
283 {
284 return null;
285 }
286
287 $documentInfo = $document->getFile()->getData();
288 if (isset($documentInfo['pdfUrl']))
289 {
290 $fileId = DocumentGenerator\Model\FileTable::getBFileId($document->PDF_ID);
291 if ($fileId !== false)
292 {
293 $fileArray = \CFile::GetFileArray($fileId);
294 if ($fileArray)
295 {
296 return $fileArray;
297 }
298 }
299 }
300
301 return null;
302 }
303
312 public function isGenerated(Payment $payment)
313 {
314 if (!Main\Loader::includeModule('documentgenerator'))
315 {
316 return false;
317 }
318
319 $document = $this->getDocument($payment);
320 if ($document === null)
321 {
322 return false;
323 }
324
325 $documentInfo = $document->getFile()->getData();
326 return isset($documentInfo['pdfUrl']);
327 }
328}
if(!Loader::includeModule('messageservice')) $provider
Определения callback_ednaruimhpx.php:21
global $APPLICATION
Определения include.php:80
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
showTemplate(Payment $payment=null, $template='')
Определения baseservicehandler.php:59
$data['IS_AVAILABLE']
Определения .description.php:13
$template
Определения file_edit.php:49
$result
Определения get_property_values.php:14
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
$payment
Определения payment.php:14
$order
Определения payment.php:8
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$dbRes
Определения yandex_detail.php:168