1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
template_pdf.php
См. документацию.
1<?
2if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
3 die();
4
6
7$billLang = 'fr';
8Loc::loadLanguageFile(__FILE__, $billLang);
9
11 die();
12
13if ($_REQUEST['BLANK'] == 'Y')
14 $blank = true;
16$pdf = new CSalePdf('P', 'pt', 'A4');
17
18if ($params['BILLFR_BACKGROUND'])
19{
20 $pdf->SetBackground(
21 $params['BILLFR_BACKGROUND'],
22 $params['BILLFR_BACKGROUND_STYLE']
23 );
24}
25
26$pageWidth = $pdf->GetPageWidth();
27$pageHeight = $pdf->GetPageHeight();
28
29$pdf->AddFont('Font', '', 'pt_sans-regular.ttf', true);
30$pdf->AddFont('Font', 'B', 'pt_sans-bold.ttf', true);
31
32$fontFamily = 'Font';
33$fontSize = 10.5;
34
36 'top' => intval($params['BILLFR_MARGIN_TOP'] ?: 15) * 72/25.4,
37 'right' => intval($params['BILLFR_MARGIN_RIGHT'] ?: 15) * 72/25.4,
38 'bottom' => intval($params['BILLFR_MARGIN_BOTTOM'] ?: 15) * 72/25.4,
39 'left' => intval($params['BILLFR_MARGIN_LEFT'] ?: 20) * 72/25.4
40);
41
42$width = $pageWidth - $margin['left'] - $margin['right'];
43
44$pdf->SetDisplayMode(100, 'continuous');
45$pdf->SetMargins($margin['left'], $margin['top'], $margin['right']);
46$pdf->SetAutoPageBreak(true, $margin['bottom']);
47
48$pdf->AddPage();
49
50
51$y0 = $pdf->GetY();
54
55if ($params['BILLFR_PATH_TO_LOGO'])
56{
57 list($imageHeight, $imageWidth) = $pdf->GetImageSize($params['BILLFR_PATH_TO_LOGO']);
58
59 $imgDpi = intval($params['BILLFR_LOGO_DPI']) ?: 96;
60 $imgZoom = 96 / $imgDpi;
61
62 $logoHeight = $imageHeight * $imgZoom + 5;
63 $logoWidth = $imageWidth * $imgZoom + 5;
64
65 if ($logoWidth >= $width)
66 {
67 $imgDpi = 96 * $imageWidth/($width*0.6 + 5);
68 $imgZoom = 96 / $imgDpi;
69
70 $logoHeight = $imageHeight * $imgZoom + 5;
71 $logoWidth = $imageWidth * $imgZoom + 5;
72 }
73
74 $pdf->Image($params['BILLFR_PATH_TO_LOGO'], $pdf->GetX(), $pdf->GetY(), -$imgDpi, -$imgDpi);
75}
76
77$pdf->SetFont($fontFamily, 'B', $fontSize);
78
79$text = CSalePdf::prepareToPdf($params["SELLER_COMPANY_NAME"]);
81while ($pdf->GetStringWidth($text))
82{
83 list($string, $text) = $pdf->splitString($text, $textWidth);
84 $pdf->SetX($pdf->GetX() + $logoWidth);
85 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
86 $pdf->Ln();
87}
88
89if ($params["SELLER_COMPANY_ADDRESS"])
90{
91 $sellerAddress = $params["SELLER_COMPANY_ADDRESS"];
92 if (is_string($sellerAddress))
93 {
94 $sellerAddress = explode("\n", str_replace(array("\r\n", "\n", "\r"), "\n", $sellerAddress));
95 if (count($sellerAddress) === 1)
96 $sellerAddress = $sellerAddress[0];
97 }
98 if (is_array($sellerAddress))
99 {
100 if (!empty($sellerAddress))
101 {
102 foreach ($sellerAddress as $item)
103 {
104 $text = $pdf->prepareToPdf($item);
106 while ($pdf->GetStringWidth($text))
107 {
108 list($string, $text) = $pdf->splitString($text, $textWidth);
109 $pdf->SetX($pdf->GetX() + $logoWidth);
110 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
111 $pdf->Ln();
112 }
113 }
114 unset($item);
115 }
116 }
117 else
118 {
119 $text = $pdf->prepareToPdf($sellerAddress);
121 while ($pdf->GetStringWidth($text))
122 {
123 list($string, $text) = $pdf->splitString($text, $textWidth);
124 $pdf->SetX($pdf->GetX() + $logoWidth);
125 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
126 $pdf->Ln();
127 }
128 }
129}
130
131if ($params["SELLER_COMPANY_PHONE"])
132{
133 $pdf->Ln();
134 $text = CSalePdf::prepareToPdf(sprintf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_PHONE', null, $billLang).".: %s", $params["SELLER_COMPANY_PHONE"]));
136 while ($pdf->GetStringWidth($text))
137 {
138 list($string, $text) = $pdf->splitString($text, $textWidth);
139 $pdf->SetX($pdf->GetX() + $logoWidth);
140 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
141 $pdf->Ln();
142 }
143}
144
145$pdf->Ln();
146$pdf->SetY(max($y0 + $logoHeight, $pdf->GetY()));
147$pdf->Ln();
148
149if ($params['BILLFR_HEADER'])
150{
151 $pdf->SetFont($fontFamily, 'B', $fontSize * 2);
152 $pdf->Cell(0, 15, CSalePdf::prepareToPdf($params['BILLFR_HEADER']), 0, 0, 'C');
153 $pdf->Ln();
154 $pdf->Ln();
155 $pdf->Ln();
156}
157$pdf->SetFont($fontFamily, 'B', $fontSize);
158
159if ($params["BUYER_PERSON_COMPANY_NAME"])
160{
161 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_FOR', null, $billLang)));
162}
163
164$pdf->SetFont($fontFamily, '', $fontSize);
165
167$invoiceNoWidth = $pdf->GetStringWidth($invoiceNo);
168
171
173 ConvertDateTime($params["DATE_PAY_BEFORE"], FORMAT_DATE)
174 ?: $params["DATE_PAY_BEFORE"]
175);
177
179
180if ($params['BILLFR_PAYER_SHOW'] === 'Y')
181{
182 $pdf->Cell(0, 15, $invoiceNo, 0, 0, 'R');
183
184 $pdf->SetFont($fontFamily, 'B', $fontSize);
185
186 $title = CSalePdf::prepareToPdf($params['BILLFR_HEADER'].' '.Loc::getMessage('SALE_HPS_BILLFR_NUMBER', null, $billLang).': ');
187 $titleWidth = $pdf->GetStringWidth($title);
188 $pdf->SetX($pdf->GetX() - $invoiceInfoWidth - $titleWidth - 6);
189 $pdf->Write(15, $title, 0, 0, 'R');
190}
191$pdf->Ln();
192
193$pdf->SetFont($fontFamily, '', $fontSize);
194
195if ($params["BUYER_PERSON_COMPANY_NAME"])
196{
197 $pdf->Write(15, CSalePdf::prepareToPdf($params["BUYER_PERSON_COMPANY_NAME"]));
198}
199
200if ($params['BILLFR_PAYER_SHOW'] === 'Y')
201{
202 $pdf->Cell(0, 15, $invoiceDate, 0, 0, 'R');
203
204 $pdf->SetFont($fontFamily, 'B', $fontSize);
205
206 $title = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_DATE_INSERT', null, $billLang).': ');
207 $titleWidth = $pdf->GetStringWidth($title);
208 $pdf->SetX($pdf->GetX() - $invoiceInfoWidth - $titleWidth - 6);
209 $pdf->Write(15, $title, 0, 0, 'R');
210}
211$pdf->Ln();
212
213$pdf->SetFont($fontFamily, '', $fontSize);
214
215if ($params["BUYER_PERSON_COMPANY_NAME"])
216{
217 if ($params["BUYER_PERSON_COMPANY_ADDRESS"])
218 {
219 $buyerAddress = $params["BUYER_PERSON_COMPANY_ADDRESS"];
220 if (is_string($buyerAddress))
221 {
222 $buyerAddress = explode("\n", str_replace(array("\r\n", "\n", "\r"), "\n", $buyerAddress));
223 if (count($buyerAddress) === 1)
224 $buyerAddress = $buyerAddress[0];
225 }
226 if($buyerAddress)
227 {
228 if (is_array($buyerAddress))
229 {
230 if (!empty($buyerAddress))
231 {
232 foreach ($buyerAddress as $item)
233 {
234 $pdf->Write(15, CSalePdf::prepareToPdf($item));
235 $pdf->Ln();
236 }
237 unset($item);
238 }
239 }
240 else
241 {
242 $pdf->Write(15, CSalePdf::prepareToPdf($buyerAddress));
243 $pdf->Ln();
244 }
245 }
246 }
247}
248
249if ($params["DATE_PAY_BEFORE"])
250{
251 $pdf->Cell(0, 15, $invoiceDueDate, 0, 0, 'R');
252
253 $pdf->SetFont($fontFamily, 'B', $fontSize);
254
255 $title = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_DATE_PAY_BEFORE', null, $billLang).': ');
256 $titleWidth = $pdf->GetStringWidth($title);
257 $pdf->SetX($pdf->GetX() - $invoiceInfoWidth - $titleWidth - 6);
258 $pdf->Write(15, $title, 0, 0, 'R');
259}
260
261$pdf->Ln();
262$pdf->Ln();
263$pdf->Ln();
264
265
266$pdf->SetFont($fontFamily, '', $fontSize);
267
268$columnList = array('NUMBER', 'NAME', 'QUANTITY', 'MEASURE', 'PRICE', 'VAT_RATE', 'SUM');
270foreach ($columnList as $column)
271{
272 if ($params['BILLFR_COLUMN_'.$column.'_SHOW'] == 'Y')
273 {
274 $arCols[$column] = array(
275 'NAME' => CSalePdf::prepareToPdf($params['BILLFR_COLUMN_'.$column.'_TITLE']),
276 'SORT' => $params['BILLFR_COLUMN_'.$column.'_SORT']
277 );
278 }
279}
280if ($params['USER_COLUMNS'])
281{
282 $columnList = array_merge($columnList, array_keys($params['USER_COLUMNS']));
283 foreach ($params['USER_COLUMNS'] as $id => $val)
284 {
285 $arCols[$id] = array(
286 'NAME' => CSalePdf::prepareToPdf($val['NAME']),
287 'SORT' => $val['SORT']
288 );
289 }
290}
291
292uasort($arCols, function ($a, $b) {return ($a['SORT'] < $b['SORT']) ? -1 : 1;});
293
294$arColumnKeys = array_keys($arCols);
296
297if ($params['BASKET_ITEMS'])
298{
299 $arCells = array();
300 $arProps = array();
301
302 $n = 0;
303 $sum = 0.00;
304 $vat = 0;
305 $vats = array();
306
307 foreach ($params['BASKET_ITEMS'] as $basketItem)
308 {
309 // @TODO: replace with real vatless price
310 if ($basketItem['IS_VAT_IN_PRICE'])
311 $vatLessPrice = roundEx($basketItem['PRICE'] / (1 + $basketItem['VAT_RATE']), SALE_VALUE_PRECISION);
312 else
313 $vatLessPrice = $basketItem['PRICE'];
314
315 $productName = $basketItem["NAME"];
316 if ($productName == "OrderDelivery")
317 $productName = Loc::getMessage('SALE_HPS_BILLFR_DELIVERY', null, $billLang);
318 else if ($productName == "OrderDiscount")
319 $productName = Loc::getMessage('SALE_HPS_BILLFR_DISCOUNT', null, $billLang);
320
321 $arCells[++$n] = array();
322 foreach ($arCols as $columnId => $col)
323 {
324 $data = null;
325
326 switch ($columnId)
327 {
328 case 'NUMBER':
330 $arCols[$columnId]['IS_DIGIT'] = true;
331 break;
332 case 'NAME':
333 $data = CSalePdf::prepareToPdf($productName);
334 break;
335 case 'QUANTITY':
336 $data = CSalePdf::prepareToPdf(roundEx($basketItem['QUANTITY'], SALE_VALUE_PRECISION));
337 $arCols[$columnId]['IS_DIGIT'] = true;
338 break;
339 case 'MEASURE':
340 $data = CSalePdf::prepareToPdf($basketItem["MEASURE_NAME"] ? $basketItem["MEASURE_NAME"] : Loc::getMessage('SALE_HPS_BILLFR_MEASURE', null, $billLang));
341 $arCols[$columnId]['IS_DIGIT'] = true;
342 break;
343 case 'PRICE':
344 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($vatLessPrice, $basketItem['CURRENCY'], false));
345 $arCols[$columnId]['IS_DIGIT'] = true;
346 break;
347 case 'VAT_RATE':
348 $data = CSalePdf::prepareToPdf(roundEx($basketItem['VAT_RATE']*100, SALE_VALUE_PRECISION)."%");
349 break;
350 case 'SUM':
351 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($vatLessPrice * $basketItem['QUANTITY'], $basketItem['CURRENCY'], false));
352 $arCols[$columnId]['IS_DIGIT'] = true;
353 break;
354 default :
355 if (preg_match('/[^0-9 ,\.]/', $basketItem[$columnId]) === 0)
356 {
357 if (!array_key_exists('IS_DIGIT', $arCols[$columnId]))
358 $arCols[$columnId]['IS_DIGIT'] = true;
359 }
360 else
361 {
362 $arCols[$columnId]['IS_DIGIT'] = false;
363 }
364 $data = ($basketItem[$columnId]) ? CSalePdf::prepareToPdf($basketItem[$columnId]) : '';
365 }
366 if ($data !== null)
367 $arCells[$n][$columnId] = $data;
368 }
369
370 if ($basketItem['PROPS'])
371 {
372 $arProps[$n] = array();
373
374 foreach ($basketItem['PROPS'] as $basketPropertyItem)
375 {
376 if ($basketPropertyItem['CODE'] == 'CATALOG.XML_ID' || $basketPropertyItem['CODE'] == 'PRODUCT.XML_ID')
377 continue;
378 $arProps[$n][] = CSalePdf::prepareToPdf(sprintf("%s: %s", $basketPropertyItem["NAME"], $basketPropertyItem["VALUE"]));
379 }
380 }
381
382 $sum += doubleval($vatLessPrice * $basketItem['QUANTITY']);
383 $vat = max($vat, $basketItem['VAT_RATE']);
384 if ($basketItem['VAT_RATE'] > 0)
385 {
386 if (!isset($vats[$basketItem['VAT_RATE']]))
387 $vats[$basketItem['VAT_RATE']] = 0;
388
389 if ($basketItem['IS_VAT_IN_PRICE'])
390 $vats[$basketItem['VAT_RATE']] += ($basketItem['PRICE'] - $vatLessPrice) * $basketItem['QUANTITY'];
391 else
392 $vats[$basketItem['VAT_RATE']] += ($basketItem['PRICE']*(1 + $basketItem['VAT_RATE']) - $vatLessPrice) * $basketItem['QUANTITY'];
393 }
394 }
395
396 if ($vat <= 0)
397 {
398 unset($arCols['VAT_RATE']);
400 $arColumnKeys = array_keys($arCols);
401 foreach ($arCells as $i => $cell)
402 unset($arCells[$i]['VAT_RATE']);
403 }
404
405 if ($params['DELIVERY_PRICE'] > 0)
406 {
407 $sDeliveryItem = Loc::getMessage('SALE_HPS_BILLFR_DELIVERY', null, $billLang);
408 if ($params['DELIVERY_NAME'])
409 $sDeliveryItem .= sprintf(" (%s)", $params['DELIVERY_NAME']);
410
411 $arCells[++$n] = array();
412 foreach ($arCols as $columnId => $col)
413 {
414 $data = null;
415
416 switch ($columnId)
417 {
418 case 'NUMBER':
420 break;
421 case 'NAME':
422 $data = CSalePdf::prepareToPdf($sDeliveryItem);
423 break;
424 case 'QUANTITY':
426 break;
427 case 'MEASURE':
429 break;
430 case 'PRICE':
431 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($params['DELIVERY_PRICE'] / (1 + $vat), $params['CURRENCY'], false));
432 break;
433 case 'VAT_RATE':
435 break;
436 case 'SUM':
437 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($params['DELIVERY_PRICE'] / (1 + $vat), $params['CURRENCY'], false));
438 break;
439 default:
441 }
442 if ($data !== null)
443 $arCells[$n][$columnId] = $data;
444 }
445
446 $sum += roundEx(
447 $params['DELIVERY_PRICE'] / (1 + $vat),
449 );
450
451 if ($vat > 0)
452 $vats[$vat] += roundEx(
453 $params['DELIVERY_PRICE'] * $vat / (1 + $vat),
455 );
456 }
457
458 $items = $n;
459 if ($params['BILLFR_TOTAL_SHOW'] == 'Y')
460 {
461 $eps = 0.0001;
462 if ($params['SUM'] - $sum > $eps)
463 {
464 $arCells[++$n] = array();
465 for ($i = 0; $i < $columnCount; $i++)
466 $arCells[$n][$arColumnKeys[$i]] = null;
467
468 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_SUB_TOTAL', null, $billLang).":");
470 }
471
472
473 if (!empty($vats))
474 {
475 // @TODO: remove on real vatless price implemented
476 $delta = intval(roundEx(
477 $params['SUM'] - $sum - array_sum($vats),
479 ) * pow(10, SALE_VALUE_PRECISION));
480
481 if ($delta)
482 {
483 $vatRates = array_keys($vats);
484 rsort($vatRates);
485
486 $ful = intval($delta / count($vatRates));
487 $ost = $delta % count($vatRates);
488
489 foreach ($vatRates as $vatRate)
490 {
491 $vats[$vatRate] += ($ful + $ost) / pow(10, SALE_VALUE_PRECISION);
492
493 if ($ost > 0)
494 $ost--;
495 }
496 }
497
498 foreach ($vats as $vatRate => $vatSum)
499 {
500 $arCells[++$n] = array();
501 for ($i = 0; $i < $columnCount; $i++)
502 $arCells[$n][$arColumnKeys[$i]] = null;
503
505 Loc::getMessage('SALE_HPS_BILLFR_TAX', null, $billLang)." (%s%%):",
506 roundEx($vatRate * 100, SALE_VALUE_PRECISION)
507 ));
509 $vatSum,
510 $params['CURRENCY'],
511 false
512 ));
513 }
514 }
515 else
516 {
517 if ($params['TAXES'])
518 {
519 foreach ($params['TAXES'] as $tax)
520 {
521 $arCells[++$n] = array();
522 for ($i = 0; $i < $columnCount; $i++)
523 $arCells[$n][$arColumnKeys[$i]] = null;
524
526 "%s%s%s:",
527 ($tax["IS_IN_PRICE"] == "Y") ? Loc::getMessage('SALE_HPS_BILLFR_TAX_IN', null, $billLang) : "",
528 $tax["TAX_NAME"],
529 sprintf(' (%s%%)', roundEx($tax["VALUE"], SALE_VALUE_PRECISION))
530 ));
531 $arCells[$n][$arColumnKeys[$columnCount-1]] = CSalePdf::prepareToPdf(SaleFormatCurrency($tax["VALUE_MONEY"], $params["CURRENCY"], false));
532 }
533 }
534 }
535
536 if ($params['SUM_PAID'])
537 {
538 $arCells[++$n] = array();
539 for ($i = 0; $i < $columnCount; $i++)
540 $arCells[$n][$arColumnKeys[$i]] = null;
541
542 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_SUM_PAID', null, $billLang).":");
544 }
545
546 if ($params['DISCOUNT_PRICE'])
547 {
548 $arCells[++$n] = array();
549 for ($i = 0; $i < $columnCount; $i++)
550 $arCells[$n][$arColumnKeys[$i]] = null;
551
552 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_DISCOUNT', null, $billLang).":");
553 $arCells[$n][$arColumnKeys[$columnCount-1]] = CSalePdf::prepareToPdf(SaleFormatCurrency($params['DISCOUNT_PRICE'], $params['CURRENCY'], false));
554 }
555
556 $arCells[++$n] = array();
557 for ($i = 0; $i < $columnCount; $i++)
558 $arCells[$n][$arColumnKeys[$i]] = null;
559
560 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_TOTAL', null, $billLang).":");
562 }
563
564 $rowsInfo = $pdf->calculateRowsWidth($arCols, $arCells, $items, $width);
565 $arRowsWidth = $rowsInfo['ROWS_WIDTH'];
566 $arRowsContentWidth = $rowsInfo['ROWS_CONTENT_WIDTH'];
567}
568$pdf->Ln();
569
570$x0 = $pdf->GetX();
571$y0 = $pdf->GetY();
572
573$k = 0;
575{
576 $newLine = false;
577 foreach ($arCols as $columnId => $column)
578 {
579 list($string, $arCols[$columnId]['NAME']) = $pdf->splitString($column['NAME'], $arRowsWidth[$columnId]);
580 if ($vat > 0 || $columnId !== 'VAT_RATE')
581 $pdf->Cell($arRowsWidth[$columnId], 20, $string, 0, 0, $k ? 'L' : 'C');
582
583 if ($arCols[$columnId]['NAME'])
584 {
585 $k++;
586 $newLine = true;
587 }
588
589 $i = array_search($columnId, $arColumnKeys);
590 ${"x".($i+1)} = $pdf->GetX();
591 }
592
593 $pdf->Ln();
594}
595while($newLine);
596
597$y5 = $pdf->GetY();
598
599$pdf->Line($x0, $y0, ${"x".$columnCount}, $y0);
600for ($i = 0; $i <= $columnCount; $i++)
601{
602 if ($vat > 0 || $arColumnKeys[$i] != 'VAT_RATE')
603 $pdf->Line(${"x$i"}, $y0, ${"x$i"}, $y5);
604}
605$pdf->Line($x0, $y5, ${'x'.$columnCount}, $y5);
606
608for ($n = 1; $n <= $rowsCnt; $n++)
609{
610 $arRowsWidth_tmp = $arRowsWidth;
611 $arRowsContentWidth_tmp = $arRowsContentWidth;
612 $accumulated = 0;
613 $accumulatedContent = 0;
614 foreach ($arCols as $columnId => $column)
615 {
616 if (is_null($arCells[$n][$columnId]))
617 {
618 $accumulated += $arRowsWidth_tmp[$columnId];
619 $arRowsWidth_tmp[$columnId] = null;
620 $accumulatedContent += $arRowsContentWidth_tmp[$columnId];
621 $arRowsContentWidth_tmp[$columnId] = null;
622 }
623 else
624 {
625 $arRowsWidth_tmp[$columnId] += $accumulated;
626 $arRowsContentWidth_tmp[$columnId] += $accumulatedContent;
627 $accumulated = 0;
628 $accumulatedContent = 0;
629 }
630 }
631
632 $x0 = $pdf->GetX();
633 $y0 = $pdf->GetY();
634
635 $pdf->SetFont($fontFamily, '', $fontSize);
636
637 $l = 0;
638 do
639 {
640 $newLine = false;
641 foreach ($arCols as $columnId => $column)
642 {
643 $string = '';
644 if (!is_null($arCells[$n][$columnId]))
645 list($string, $arCells[$n][$columnId]) = $pdf->splitString($arCells[$n][$columnId], $arRowsContentWidth_tmp[$columnId]);
646
647 $rowWidth = $arRowsWidth_tmp[$columnId];
648
649 if (in_array($columnId, array('QUANTITY', 'MEASURE', 'PRICE', 'SUM')))
650 {
651 if (!is_null($arCells[$n][$columnId]))
652 {
653 $pdf->Cell($rowWidth, 15, $string, 0, 0, 'R');
654 }
655 }
656 elseif ($columnId == 'NUMBER')
657 {
658 if (!is_null($arCells[$n][$columnId]))
659 $pdf->Cell($rowWidth, 15, ($l == 0) ? $string : '', 0, 0, 'C');
660 }
661 elseif ($columnId == 'NAME')
662 {
663 if (!is_null($arCells[$n][$columnId]))
664 $pdf->Cell($rowWidth, 15, $string, 0, 0, ($n > $items) ? 'R' : '');
665 }
666 elseif ($columnId == 'VAT_RATE')
667 {
668 if (!is_null($arCells[$n][$columnId]))
669 $pdf->Cell($rowWidth, 15, $string, 0, 0, 'R');
670 }
671 else
672 {
673 if (!is_null($arCells[$n][$columnId]))
674 {
675 $pdf->Cell($rowWidth, 15, $string, 0, 0, ($n > $items) ? 'R' : 'L');
676 }
677 }
678
679 if ($l == 0)
680 {
681 $pos = array_search($columnId, $arColumnKeys);
682 ${'x'.($pos+1)} = $pdf->GetX();
683 }
684
685 if ($arCells[$n][$columnId])
686 $newLine = true;
687 }
688
689 $pdf->Ln();
690 $l++;
691 }
692 while($newLine);
693
694 if ($params['BILLFR_COLUMN_NAME_SHOW'] == 'Y')
695 {
696 if (isset($arProps[$n]) && is_array($arProps[$n]))
697 {
698 $pdf->SetFont($fontFamily, '', $fontSize-2);
699 foreach ($arProps[$n] as $property)
700 {
701 $i = 0;
702 $line = 0;
703 foreach ($arCols as $columnId => $col)
704 {
705 $i++;
706 if ($i == $columnCount)
707 $line = 1;
708 if ($columnId == 'NAME')
709 $pdf->Cell($arRowsWidth_tmp[$columnId], 12, $property, 0, $line);
710 else
711 $pdf->Cell($arRowsWidth_tmp[$columnId], 12, '', 0, $line);
712 }
713 }
714 }
715 }
716
717 $y5 = $pdf->GetY();
718
719 if ($y0 > $y5)
720 $y0 = $margin['top'];
721 for ($i = ($n > $items) ? $columnCount - 1 : 0; $i <= $columnCount; $i++)
722 {
723 if ($vat > 0 || $arColumnKeys[$i] != 'VAT_RATE')
724 $pdf->Line(${"x$i"}, $y0, ${"x$i"}, $y5);
725 }
726
727 $pdf->Line(($n <= $items) ? $x0 : ${'x'.($columnCount-1)}, $y5, ${'x'.$columnCount}, $y5);
728}
729$pdf->Ln();
730$pdf->Ln();
731$pdf->Ln();
732$pdf->Ln();
733
734
735$pdf->SetFont($fontFamily, 'B', $fontSize);
736
737if ($params["BILLFR_COMMENT1"] || $params["BILLFR_COMMENT2"])
738{
739 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_COMMENT', null, $billLang)));
740 $pdf->Ln();
741
742 $pdf->SetFont($fontFamily, '', $fontSize);
743
744 if ($params["BILLFR_COMMENT1"])
745 {
746 $pdf->Write(15, HTMLToTxt(preg_replace(
747 array('#</div>\s*<div[^>]*>#i', '#</?div>#i'), array('<br>', '<br>'),
748 CSalePdf::prepareToPdf($params["BILLFR_COMMENT1"])
749 ), '', array(), 0));
750 $pdf->Ln();
751 $pdf->Ln();
752 }
753
754 if ($params["BILLFR_COMMENT2"])
755 {
756 $pdf->Write(15, HTMLToTxt(preg_replace(
757 array('#</div>\s*<div[^>]*>#i', '#</?div>#i'), array('<br>', '<br>'),
758 CSalePdf::prepareToPdf($params["BILLFR_COMMENT2"])
759 ), '', array(), 0));
760 $pdf->Ln();
761 $pdf->Ln();
762 }
763}
764
765$pdf->Ln();
766$pdf->Ln();
767$pdf->Ln();
768
769if ($params['BILLFR_PATH_TO_STAMP'])
770{
771 $filePath = $pdf->GetImagePath($params['BILLFR_PATH_TO_STAMP']);
772 if ($filePath != '' && !$blank && \Bitrix\Main\IO\File::isFileExists($filePath))
773 {
774 list($stampHeight, $stampWidth) = $pdf->GetImageSize($params['BILLFR_PATH_TO_STAMP']);
775 if ($stampHeight && $stampWidth)
776 {
777 if ($stampHeight > 120 || $stampWidth > 120)
778 {
779 $ratio = 120 / max($stampHeight, $stampWidth);
780 $stampHeight = $ratio * $stampHeight;
781 $stampWidth = $ratio * $stampWidth;
782 }
783 $pdf->Image(
784 $params['BILLFR_PATH_TO_STAMP'],
785 $margin['left'] + $width / 2 + 45, $pdf->GetY(),
786 $stampWidth, $stampHeight
787 );
788 }
789 }
790}
791
792$y0 = $pdf->GetY();
793
794$bankAccNo = $params["SELLER_COMPANY_BANK_ACCOUNT"];
795$bankRouteNo = $params["SELLER_COMPANY_BANK_ACCOUNT_CORR"];
796$bankSwift = $params["SELLER_COMPANY_BANK_SWIFT"];
797
799{
800 $pdf->SetFont($fontFamily, 'B', $fontSize);
801
802 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_BANK_DETAIL', null, $billLang)));
803 $pdf->Ln();
804
805 $pdf->SetFont($fontFamily, '', $fontSize);
806
807 $bankDetails = '';
808
809 if ($params["SELLER_COMPANY_NAME"])
810 {
811 $bankDetails .= CSalePdf::prepareToPdf(sprintf(
812 Loc::getMessage('SALE_HPS_BILLFR_COMPANY_NAME', null, $billLang).": %s\n",
813 $params["SELLER_COMPANY_NAME"]
814 ));
815 }
816
817 $bankDetails .= CSalePdf::prepareToPdf(sprintf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_BANK', null, $billLang)." ".Loc::getMessage('SALE_HPS_BILLFR_NUMBER', null, $billLang).": %s\n", $bankAccNo));
818
819 $bank = $params["SELLER_COMPANY_BANK_NAME"];
820 $bankAddr = $params["SELLER_COMPANY_BANK_ADDR"];
821 $bankPhone = $params["SELLER_COMPANY_BANK_PHONE"];
822
823 if ($bank || $bankAddr || $bankPhone)
824 {
825 $bankDetails .= CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_BANK_2', null, $billLang).": ");
826 if ($bank)
827 $bankDetails .= CSalePdf::prepareToPdf($bank);
828 $bankDetails .= CSalePdf::prepareToPdf("\n");
829
830 if ($bankAddr)
831 $bankDetails .= CSalePdf::prepareToPdf(sprintf("%s\n", $bankAddr));
832
833 if ($bankPhone)
834 {
835 $bankDetails .= CSalePdf::prepareToPdf(sprintf("%s\n", $bankPhone));
836 }
837 }
838
839 $bankDetails .= CSalePdf::prepareToPdf(sprintf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_BANK_ROUTE_NO', null, $billLang).": %s\n", $bankRouteNo));
840 $bankDetails .= CSalePdf::prepareToPdf(sprintf(Loc::getMessage('SALE_HPS_BILLFR_COMPANY_BANK_SWIFT', null, $billLang).": %s\n", $bankSwift));
841
842 $pdf->MultiCell($width/2, 15, $bankDetails, 0, 'L');
843}
844
845$pdf->SetY($y0 + 15);
846if ($params["SELLER_COMPANY_DIRECTOR_POSITION"])
847{
848 if ($params["SELLER_COMPANY_DIRECTOR_NAME"] || $params["SELLER_COMPANY_DIR_SIGN"])
849 {
850 $isDirSign = false;
851 if (!$blank && $params['SELLER_COMPANY_DIR_SIGN'])
852 {
853 list($signHeight, $signWidth) = $pdf->GetImageSize($params['SELLER_COMPANY_DIR_SIGN']);
854
855 if ($signHeight && $signWidth)
856 {
857 $ratio = min(37.5/$signHeight, 150/$signWidth);
858 $signHeight = $ratio * $signHeight;
859 $signWidth = $ratio * $signWidth;
860
861 $isDirSign = true;
862 }
863 }
864
865 if ($params["SELLER_COMPANY_DIRECTOR_NAME"])
866 {
867 $pdf->SetX($pdf->GetX() + $width/2 + 15);
868 $pdf->Write(15, CSalePdf::prepareToPdf($params["SELLER_COMPANY_DIRECTOR_NAME"]));
869 $pdf->Ln();
870 $pdf->Ln();
871 }
872
873 $pdf->SetX($pdf->GetX() + $width/2 + 15);
874 $pdf->Write(15, CSalePdf::prepareToPdf($params["SELLER_COMPANY_DIRECTOR_POSITION"]));
875
876 $pdf->Cell(0, 15, '', 'B');
877
878 if ($isDirSign)
879 {
880 $pdf->Image(
881 $params['SELLER_COMPANY_DIR_SIGN'],
882 $pdf->GetX() - 150, $pdf->GetY() - $signHeight + 15,
883 $signWidth, $signHeight
884 );
885 }
886
887 $pdf->Ln();
888 $pdf->Ln();
889 }
890}
891
892if ($params["SELLER_COMPANY_ACCOUNTANT_POSITION"])
893{
894 if ($params["SELLER_COMPANY_ACCOUNTANT_NAME"] || $params["SELLER_COMPANY_ACC_SIGN"])
895 {
896 $isAccSign = false;
897 if (!$blank && $params['SELLER_COMPANY_ACC_SIGN'])
898 {
899 list($signHeight, $signWidth) = $pdf->GetImageSize($params['SELLER_COMPANY_ACC_SIGN']);
900
901 if ($signHeight && $signWidth)
902 {
903 $ratio = min(37.5/$signHeight, 150/$signWidth);
904 $signHeight = $ratio * $signHeight;
905 $signWidth = $ratio * $signWidth;
906
907 $isAccSign = true;
908 }
909 }
910
911 if ($params["SELLER_COMPANY_ACCOUNTANT_NAME"])
912 {
913 $pdf->SetX($pdf->GetX() + $width/2 + 15);
914 $pdf->Write(15, CSalePdf::prepareToPdf($params["SELLER_COMPANY_ACCOUNTANT_NAME"]));
915 $pdf->Ln();
916 $pdf->Ln();
917 }
918
919 $pdf->SetX($pdf->GetX() + $width/2 + 15);
920 $pdf->Write(15, CSalePdf::prepareToPdf($params["SELLER_COMPANY_ACCOUNTANT_POSITION"]));
921
922 $pdf->Cell(0, 15, '', 'B');
923
924 if ($isAccSign)
925 {
926 $pdf->Image(
927 $params['SELLER_COMPANY_ACC_SIGN'],
928 $pdf->GetX() - 150, $pdf->GetY() - $signHeight + 15,
929 $signWidth, $signHeight
930 );
931 }
932
933 $pdf->Ln();
934 }
935}
936
937
938$dest = 'I';
939if ($_REQUEST['GET_CONTENT'] == 'Y')
940 $dest = 'S';
941else if ($_REQUEST['DOWNLOAD'] == 'Y')
942 $dest = 'D';
943
944$fileName = sprintf(
945 'Invoice # %s (Issue Date %s).pdf',
946 str_replace(
947 array(
948 chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10), chr(11),
949 chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20), chr(21), chr(22),
950 chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30), chr(31),
951 '"', '*', '/', ':', '<', '>', '?', '\\', '|'
952 ),
953 '_',
954 strval($params["ACCOUNT_NUMBER"])
955 ),
956 ConvertDateTime($params["DATE_BILL"], 'YYYY-MM-DD')
957);
958
959$trFileName = CUtil::translit($fileName, 'fr', array('max_len' => 1024, 'safe_chars' => '.', 'replace_space' => '-'));
960
961return $pdf->Output($trFileName, $dest, $fileName);
962?>
$sum
Определения checkout.php:6
Определения pdf.php:312
static isPdfAvailable()
Определения pdf.php:316
static prepareToPdf($string)
Определения pdf.php:324
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
const FORMAT_DATE
Определения include.php:63
$l
Определения options.php:783
ConvertDateTime($datetime, $to_format=false, $from_site=false, $bSearchInSitesOnly=false)
Определения tools.php:724
roundEx($value, $prec=0)
Определения tools.php:4635
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
Определения tools.php:2587
$delta
Определения prolog_main_admin.php:363
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$fileName
Определения quickway.php:305
die
Определения quickway.php:367
$invoiceDueDate
Определения template_pdf.php:172
$invoiceDate
Определения template_pdf.php:169
$invoiceDateWidth
Определения template_pdf.php:170
$invoiceInfoWidth
Определения template_pdf.php:178
$invoiceNo
Определения template_pdf.php:166
$invoiceDueDateWidth
Определения template_pdf.php:176
$text
Определения template_pdf.php:79
$textWidth
Определения template_pdf.php:80
$invoiceNoWidth
Определения template_pdf.php:167
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$pageWidth
Определения html.php:24
if( $arBasket=$dbBasket->Fetch()) if($vat > 0) $rowsCnt
Определения html.php:430
$width
Определения html.php:68
$bankSwift
Определения html.php:594
if(!empty($sellerData)) $bankAccNo
Определения html.php:591
$bank
Определения html.php:595
if(CSalePaySystemAction::GetParamValue('BACKGROUND', false)) $margin
Определения html.php:61
$pageHeight
Определения html.php:25
$logoWidth
Определения pdf.php:49
$y5
Определения pdf.php:464
$logoHeight
Определения pdf.php:48
if(!empty($sellerData)) $dest
Определения pdf.php:818
$fontSize
Определения pdf.php:30
$pdf
Определения pdf.php:13
$fontFamily
Определения pdf.php:29
$x0
Определения pdf.php:452
$y0
Определения pdf.php:47
$arColumnKeys
Определения template.php:310
$columnList
Определения template.php:276
$vat
Определения template.php:273
$columnCount
Определения template.php:311
$arCols
Определения template.php:277
$bankRouteNo
Определения template.php:566
$billLang
Определения template.php:7
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$arCells
Определения template.php:223
$items
Определения template.php:224
else $a
Определения template.php:137
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
Определения include.php:142
const SALE_VALUE_PRECISION
Определения include.php:46
$titleWidth
Определения pdf.php:124
$title
Определения pdf.php:123
$val
Определения options.php:1793
$isAccSign
Определения pdf.php:601
$trFileName
Определения template_pdf.php:929
$k
Определения template_pdf.php:567
$n
Определения update_log.php:107
$arRowsContentWidth
Определения template_pdf.php:447
$arRowsWidth
Определения template_pdf.php:446
$blank
Определения template_pdf.php:11
$vatRates
Определения yandex_detail.php:156