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