run:R W Run
DIR
2026-04-08 19:27:36
R W Run
DIR
2026-04-08 19:27:45
R W Run
DIR
2026-04-08 19:27:44
R W Run
DIR
2026-04-08 19:27:36
R W Run
DIR
2026-04-08 19:27:43
R W Run
DIR
2026-04-08 19:27:41
R W Run
DIR
2026-04-08 19:27:37
R W Run
DIR
2026-04-08 19:27:33
R W Run
DIR
2026-04-08 19:33:14
R W Run
DIR
2026-04-08 19:33:24
R W Run
529 By
2026-04-08 19:25:48
R W Run
981 By
2026-04-08 19:25:46
R W Run
6.84 KB
2026-04-08 19:25:47
R W Run
5.5 KB
2026-04-08 19:25:49
R W Run
2.19 KB
2026-04-08 19:25:50
R W Run
24.95 KB
2026-04-08 19:25:47
R W Run
5.31 KB
2026-04-08 19:25:48
R W Run
8.09 KB
2026-04-08 19:25:49
R W Run
910 By
2026-04-08 19:25:49
R W Run
4.8 KB
2026-04-08 19:25:46
R W Run
766 By
2026-04-08 19:25:46
R W Run
2.79 KB
2026-04-08 19:25:49
R W Run
287 By
2026-04-08 19:25:44
R W Run
9.18 KB
2026-04-08 19:25:44
R W Run
2.88 KB
2026-04-08 19:25:49
R W Run
3.1 KB
2026-04-08 19:25:44
R W Run
3.31 KB
2026-04-08 19:25:46
R W Run
0 By
2026-04-08 19:25:49
R W Run
8.62 KB
2026-04-08 19:25:49
R W Run
8.42 KB
2026-04-08 19:25:48
R W Run
3.38 KB
2026-04-08 19:25:44
R W Run
6.75 KB
2026-04-08 19:25:48
R W Run
17.42 KB
2026-04-08 19:25:46
R W Run
4.45 KB
2026-04-08 19:25:50
R W Run
1.95 KB
2026-04-08 19:25:47
R W Run
466 By
2026-04-08 19:25:47
R W Run
3.27 KB
2026-04-08 19:25:47
R W Run
8.08 KB
2026-04-08 19:25:49
R W Run
1.6 KB
2026-04-08 19:25:44
R W Run
7.68 KB
2026-04-08 19:25:49
R W Run
2.4 KB
2026-04-08 19:25:45
R W Run
27.7 KB
2026-04-08 19:25:49
R W Run
3.14 KB
2026-04-08 19:25:46
R W Run
1.5 KB
2026-04-08 19:25:45
R W Run
2.65 KB
2026-04-08 19:25:46
R W Run
1.19 KB
2026-04-08 19:25:45
R W Run
15.73 KB
2026-04-08 19:25:48
R W Run
4.73 KB
2026-04-08 19:25:45
R W Run
7.89 KB
2026-04-08 19:25:49
R W Run
2.81 KB
2026-04-08 19:25:45
R W Run
2.17 KB
2026-04-08 19:25:46
R W Run
31 By
2026-04-08 19:25:49
R W Run
31 By
2026-04-08 19:25:47
R W Run
7.51 KB
2026-04-08 19:25:46
R W Run
1.37 KB
2026-04-08 19:25:45
R W Run
2.09 KB
2026-04-08 19:25:47
R W Run
1.87 KB
2026-04-08 19:25:48
R W Run
2.15 KB
2026-04-08 19:25:47
R W Run
560 By
2026-04-08 19:25:49
R W Run
11.22 KB
2026-04-08 19:25:48
R W Run
2.01 KB
2026-04-08 19:25:49
R W Run
42 By
2026-04-08 19:25:45
R W Run
2.54 KB
2026-04-08 19:25:48
R W Run
6.8 KB
2026-04-08 19:25:46
R W Run
2.16 KB
2026-04-08 19:25:48
R W Run
2.52 KB
2026-04-08 19:25:45
R W Run
2.22 KB
2026-04-08 19:25:48
R W Run
3.94 KB
2026-04-08 19:25:46
R W Run
400 By
2026-04-08 19:25:47
R W Run
6.11 KB
2026-04-08 19:25:48
R W Run
1.99 KB
2026-04-08 19:25:49
R W Run
3.71 KB
2026-04-08 19:25:46
R W Run
1.41 KB
2026-04-08 19:25:47
R W Run
779 By
2026-04-08 19:25:47
R W Run
774 By
2026-04-08 19:25:48
R W Run
484 By
2026-04-08 19:25:48
R W Run
0 By
2026-04-08 19:25:45
R W Run
4.11 KB
2026-04-08 19:25:48
R W Run
4.26 KB
2026-04-08 19:25:44
R W Run
1.12 KB
2026-04-08 19:25:48
R W Run
2.45 KB
2026-04-08 19:25:46
R W Run
843 By
2026-04-08 19:25:48
R W Run
321 By
2026-04-08 19:25:47
R W Run
430 By
2026-04-08 19:25:47
R W Run
1.07 KB
2026-04-08 19:25:48
R W Run
5.19 KB
2026-04-08 19:25:47
R W Run
284 By
2026-04-08 19:25:45
R W Run
4.44 KB
2026-04-08 19:25:46
R W Run
2.07 KB
2026-04-08 19:25:48
R W Run
2.29 KB
2026-04-08 19:25:46
R W Run
618 By
2026-04-08 19:25:49
R W Run
6.13 KB
2026-04-08 19:25:47
R W Run
7.42 KB
2026-04-08 19:25:48
R W Run
5.74 KB
2026-04-08 19:25:46
R W Run
1.66 KB
2026-04-08 19:25:47
R W Run
7.69 KB
2026-04-08 19:25:47
R W Run
1.94 KB
2026-04-08 19:25:45
R W Run
2.69 KB
2026-04-08 19:25:49
R W Run
3.75 KB
2026-04-08 19:25:47
R W Run
747 By
2026-04-08 19:25:45
R W Run
1.61 KB
2026-04-08 19:25:49
R W Run
1.2 KB
2026-04-08 19:25:44
R W Run
1.9 KB
2026-04-08 19:25:50
R W Run
1.14 KB
2026-04-08 19:25:48
R W Run
15.27 KB
2026-04-08 19:25:49
R W Run
9.62 KB
2026-04-08 19:25:46
R W Run
8.6 KB
2026-04-08 19:25:45
R W Run
9 By
2026-04-08 19:25:46
R W Run
error_log
📄invoicepdf.tpl
1<?php
2
3# Logo
4$logoFilename = 'placeholder.png';
5if (file_exists(ROOTDIR . '/assets/img/logo.png')) {
6 $logoFilename = 'logo.png';
7} elseif (file_exists(ROOTDIR . '/assets/img/logo.jpg')) {
8 $logoFilename = 'logo.jpg';
9}
10$pdf->Image(ROOTDIR . '/assets/img/' . $logoFilename, 15, 25, 75);
11
12# Invoice Status
13$pdf->SetXY(0, 0);
14$pdf->SetFont($pdfFont, 'B', 28);
15$pdf->SetTextColor(255);
16$pdf->SetLineWidth(0.75);
17$pdf->StartTransform();
18$pdf->Rotate(-35, 100, 225);
19if ($status == 'Draft') {
20 $pdf->SetFillColor(200);
21 $pdf->SetDrawColor(140);
22} elseif ($status == 'Paid') {
23 $pdf->SetFillColor(151, 223, 74);
24 $pdf->SetDrawColor(110, 192, 70);
25} elseif ($status == 'Cancelled') {
26 $pdf->SetFillColor(200);
27 $pdf->SetDrawColor(140);
28} elseif ($status == 'Refunded') {
29 $pdf->SetFillColor(131, 182, 218);
30 $pdf->SetDrawColor(91, 136, 182);
31} elseif ($status == 'Collections') {
32 $pdf->SetFillColor(3, 3, 2);
33 $pdf->SetDrawColor(127);
34} else {
35 $pdf->SetFillColor(223, 85, 74);
36 $pdf->SetDrawColor(171, 49, 43);
37}
38if ($status == 'Payment Pending'){
39$pdf->Cell(100, 18, strtoupper(Lang::trans('invoices' . str_replace(' ', '', $status))), 'TB', 0, 'C', '1');
40} else {
41$pdf->Cell(100, 18, strtoupper(Lang::trans('invoices' . strtolower($status))), 'TB', 0, 'C', '1');
42}
43$pdf->StopTransform();
44$pdf->SetTextColor(0);
45
46# Company Details
47$pdf->SetXY(15, 42);
48$pdf->SetFont($pdfFont, '', 13);
49foreach ($companyaddress as $addressLine) {
50 $pdf->Cell(180, 4, trim($addressLine), 0, 1, 'R');
51 $pdf->SetFont($pdfFont, '', 9);
52}
53if ($taxCode) {
54 $pdf->Cell(180, 4, $taxIdLabel . ': ' . trim($taxCode), 0, 1, 'R');
55}
56$pdf->Ln(5);
57
58# Header Bar
59
60/**
61 * Invoice header
62 *
63 * You can optionally define a header/footer in a way that is repeated across page breaks.
64 * For more information, see https://docs.whmcs.com/PDF_Invoice#Header.2FFooter
65 */
66
67$pdf->SetFont($pdfFont, 'B', 15);
68$pdf->SetFillColor(239);
69$pdf->Cell(0, 8, $pagetitle, 0, 1, 'L', '1');
70$pdf->SetFont($pdfFont, '', 10);
71$pdf->Cell(0, 6, Lang::trans('invoicesdatecreated') . ': ' . $datecreated, 0, 1, 'L', '1');
72$pdf->Cell(0, 6, Lang::trans('invoicesdatedue') . ': ' . $duedate, 0, 1, 'L', '1');
73$pdf->Ln(10);
74
75$startpage = $pdf->GetPage();
76
77# Clients Details
78$addressypos = $pdf->GetY();
79$pdf->SetFont($pdfFont, 'B', 10);
80$pdf->Cell(0, 4, Lang::trans('invoicesinvoicedto'), 0, 1);
81$pdf->SetFont($pdfFont, '', 9);
82if ($clientsdetails["companyname"]) {
83 $pdf->Cell(0, 4, $clientsdetails["companyname"], 0, 1, 'L');
84 $pdf->Cell(0, 4, Lang::trans('invoicesattn') . ': ' . $clientsdetails["firstname"] . ' ' . $clientsdetails["lastname"], 0, 1, 'L');
85} else {
86 $pdf->Cell(0, 4, $clientsdetails["firstname"] . " " . $clientsdetails["lastname"], 0, 1, 'L');
87}
88$pdf->Cell(0, 4, $clientsdetails["address1"], 0, 1, 'L');
89if ($clientsdetails["address2"]) {
90 $pdf->Cell(0, 4, $clientsdetails["address2"], 0, 1, 'L');
91}
92$pdf->Cell(0, 4, $clientsdetails["city"] . ", " . $clientsdetails["state"] . ", " . $clientsdetails["postcode"], 0, 1, 'L');
93$pdf->Cell(0, 4, $clientsdetails["country"], 0, 1, 'L');
94if (array_key_exists('tax_id', $clientsdetails) && $clientsdetails['tax_id']) {
95 $pdf->Cell(0, 4, $taxIdLabel . ': ' . $clientsdetails['tax_id'], 0, 1, 'L');
96}
97if ($customfields) {
98 $pdf->Ln();
99 foreach ($customfields as $customfield) {
100 $pdf->Cell(0, 4, $customfield['fieldname'] . ': ' . $customfield['value'], 0, 1, 'L');
101 }
102}
103$pdf->Ln(10);
104
105# Invoice Items
106$tblhtml = '<table width="100%" bgcolor="#ccc" cellspacing="1" cellpadding="2" border="0">
107 <tr height="30" bgcolor="#efefef" style="font-weight:bold;text-align:center;">
108 <td width="80%">' . Lang::trans('invoicesdescription') . '</td>
109 <td width="20%">' . Lang::trans('quotelinetotal') . '</td>
110 </tr>';
111foreach ($invoiceitems as $item) {
112 $tblhtml .= '
113 <tr bgcolor="#fff">
114 <td align="left">' . nl2br($item['description']) . '<br /></td>
115 <td align="center">' . $item['amount'] . '</td>
116 </tr>';
117}
118$tblhtml .= '
119 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
120 <td align="right">' . Lang::trans('invoicessubtotal') . '</td>
121 <td align="center">' . $subtotal . '</td>
122 </tr>';
123if ($taxname) {
124 $tblhtml .= '
125 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
126 <td align="right">' . $taxrate . '% ' . $taxname . '</td>
127 <td align="center">' . $tax . '</td>
128 </tr>';
129}
130if ($taxname2) {
131 $tblhtml .= '
132 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
133 <td align="right">' . $taxrate2 . '% ' . $taxname2 . '</td>
134 <td align="center">' . $tax2 . '</td>
135 </tr>';
136}
137$tblhtml .= '
138 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
139 <td align="right">' . Lang::trans('invoicescredit') . '</td>
140 <td align="center">' . $credit . '</td>
141 </tr>
142 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
143 <td align="right">' . Lang::trans('invoicestotal') . '</td>
144 <td align="center">' . $total . '</td>
145 </tr>
146</table>';
147
148$pdf->writeHTML($tblhtml, true, false, false, false, '');
149
150$pdf->Ln(5);
151
152# Transactions
153$pdf->SetFont($pdfFont, 'B', 12);
154$pdf->Cell(0, 4, Lang::trans('invoicestransactions'), 0, 1);
155
156$pdf->Ln(5);
157
158$pdf->SetFont($pdfFont, '', 9);
159
160$tblhtml = '<table width="100%" bgcolor="#ccc" cellspacing="1" cellpadding="2" border="0">
161 <tr height="30" bgcolor="#efefef" style="font-weight:bold;text-align:center;">
162 <td width="25%">' . Lang::trans('invoicestransdate') . '</td>
163 <td width="25%">' . Lang::trans('invoicestransgateway') . '</td>
164 <td width="30%">' . Lang::trans('invoicestransid') . '</td>
165 <td width="20%">' . Lang::trans('invoicestransamount') . '</td>
166 </tr>';
167
168if (!count($transactions)) {
169 $tblhtml .= '
170 <tr bgcolor="#fff">
171 <td colspan="4" align="center">' . Lang::trans('invoicestransnonefound') . '</td>
172 </tr>';
173} else {
174 foreach ($transactions AS $trans) {
175 $tblhtml .= '
176 <tr bgcolor="#fff">
177 <td align="center">' . $trans['date'] . '</td>
178 <td align="center">' . $trans['gateway'] . '</td>
179 <td align="center">' . $trans['transid'] . '</td>
180 <td align="center">' . $trans['amount'] . '</td>
181 </tr>';
182 }
183}
184$tblhtml .= '
185 <tr height="30" bgcolor="#efefef" style="font-weight:bold;">
186 <td colspan="3" align="right">' . Lang::trans('invoicesbalance') . '</td>
187 <td align="center">' . $balance . '</td>
188 </tr>
189</table>';
190
191$pdf->writeHTML($tblhtml, true, false, false, false, '');
192
193# Notes
194if ($notes) {
195 $pdf->Ln(5);
196 $pdf->SetFont($pdfFont, '', 8);
197 $pdf->MultiCell(170, 5, Lang::trans('invoicesnotes') . ': ' . $notes);
198}
199
200# Generation Date
201$pdf->SetFont($pdfFont, '', 8);
202$pdf->Ln(5);
203$pdf->Cell(180, 4, Lang::trans('invoicepdfgenerated') . ' ' . getTodaysDate(1), '', '', 'C');
204
205/**
206 * Invoice footer
207 */
208