PluginProbe
Easy Invoice – Invoice Generator, PDF Quotes & Payments / 2.4.1
Easy Invoice – Invoice Generator, PDF Quotes & Payments v2.4.1
2.4.0 2.4.1 2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.2.0 2.1.21 2.1.20 2.1.19 2.1.18 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.2 All 57 releases
easy-invoice / templates / invoice-templates / professional.php

professional.php in Easy Invoice – Invoice Generator, PDF Quotes & Payments 2.4.1, at templates/invoice-templates/professional.php

625 lines 21.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Professional Template - Sophisticated Design
4 * Professional, sophisticated, and business-focused invoice template
5 */
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit;
9 }
10 if (!$formatter && $invoice) {
11 $formatter = new \EasyInvoice\Helpers\InvoiceFormatter($invoice);
12 }
13
14 $text_settings = \EasyInvoice\Helpers\TemplateTextHelper::forDocument(\EasyInvoice\Helpers\TemplateTextHelper::getInvoiceTextSettings(), $invoice);
15 $ei_is_credit_note = \EasyInvoice\Helpers\TemplateTextHelper::isCreditNote($invoice);
16 $company_info = \EasyInvoice\Helpers\TemplateTextHelper::getCompanyInfo();
17 ?>
18 <style>
19 /* Professional Template - Sophisticated Design */
20 :root {
21 --primary-color: #1e40af;
22 --primary-light: #3b82f6;
23 --primary-dark: #1e3a8a;
24 --secondary-color: #64748b;
25 --accent-color: #f59e0b;
26 --success-color: #10b981;
27 --warning-color: #f59e0b;
28 --error-color: #ef4444;
29 --text-primary: #0f172a;
30 --text-secondary: #475569;
31 --text-muted: #64748b;
32 --border-color: #cbd5e1;
33 --border-light: #e2e8f0;
34 --background-primary: #ffffff;
35 --background-secondary: #f1f5f9;
36 --background-accent: #f8fafc;
37
38 --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
39 --font-family-heading: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
40
41 --font-size-xs: 0.75rem;
42 --font-size-sm: 0.875rem;
43 --font-size-base: 1rem;
44 --font-size-lg: 1.125rem;
45 --font-size-xl: 1.25rem;
46 --font-size-2xl: 1.5rem;
47 --font-size-3xl: 1.875rem;
48 --font-size-4xl: 2.25rem;
49
50 --spacing-1: 0.25rem;
51 --spacing-2: 0.5rem;
52 --spacing-3: 0.75rem;
53 --spacing-4: 1rem;
54 --spacing-5: 1.25rem;
55 --spacing-6: 1.5rem;
56 --spacing-8: 2rem;
57 --spacing-10: 2.5rem;
58 --spacing-12: 3rem;
59 --spacing-16: 4rem;
60 --spacing-20: 5rem;
61
62 --radius-sm: 0.25rem;
63 --radius-md: 0.375rem;
64 --radius-lg: 0.5rem;
65 --radius-xl: 0.75rem;
66 --radius-2xl: 1rem;
67
68 --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
69 --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
70 --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
71 --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
72 --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
73 }
74
75 .template-professional {
76 font-family: var(--font-family);
77 background: var(--background-primary);
78 color: var(--text-primary);
79 max-width: 1000px;
80 margin: 0 auto;
81 padding: var(--spacing-8);
82 box-shadow: var(--shadow-2xl);
83 border-radius: var(--radius-2xl);
84 line-height: 1.6;
85 position: relative;
86 overflow: hidden;
87 }
88
89 .template-professional::before {
90 content: '';
91 position: absolute;
92 top: 0;
93 left: 0;
94 right: 0;
95 height: 8px;
96 background: var(--primary-color);
97 }
98
99 /* Header Section */
100 .template-professional .invoice-header {
101 display: grid;
102 grid-template-columns: 1fr auto;
103 gap: var(--spacing-8);
104 margin-bottom: var(--spacing-12);
105 padding-bottom: var(--spacing-8);
106 border-bottom: 2px solid var(--border-light);
107 position: relative;
108 }
109
110 .template-professional .invoice-header::after {
111 content: '';
112 position: absolute;
113 bottom: -2px;
114 left: 0;
115 width: 120px;
116 height: 2px;
117 background: var(--primary-color);
118 border-radius: var(--radius-sm);
119 }
120
121 .template-professional .company-info {
122 display: flex;
123 flex-direction: column;
124 gap: var(--spacing-4);
125 }
126
127 .template-professional .company-logo {
128 margin-bottom: 0;
129 }
130
131 .template-professional .logo-image {
132 max-height: 60px;
133 max-width: 200px;
134 object-fit: contain;
135 filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
136 }
137
138 .template-professional .company-name {
139 font-family: var(--font-family-heading);
140 font-size: var(--font-size-2xl);
141 font-weight: 700;
142 color: var(--text-primary);
143 margin-bottom: var(--spacing-3);
144 line-height: 1.2;
145 }
146
147 .template-professional .company-details {
148 color: var(--text-secondary);
149 font-size: var(--font-size-sm);
150 line-height: 1.5;
151 }
152
153 .template-professional .invoice-meta {
154 display: flex;
155 flex-direction: column;
156 gap: var(--spacing-4);
157 background: var(--background-secondary);
158 padding: var(--spacing-6);
159 border-radius: var(--radius-lg);
160 border: 1px solid var(--border-color);
161 min-width: 300px;
162 }
163
164 .template-professional .invoice-title {
165 font-family: var(--font-family-heading);
166 font-size: var(--font-size-2xl);
167 font-weight: 700;
168 color: var(--primary-color);
169 margin-bottom: var(--spacing-4);
170 text-align: center;
171 text-transform: uppercase;
172 letter-spacing: -0.025em;
173 }
174
175 .template-professional .meta-item {
176 display: flex;
177 justify-content: space-between;
178 align-items: center;
179 padding: var(--spacing-3) 0;
180 border-bottom: 1px solid var(--border-light);
181 }
182
183 .template-professional .meta-item:last-child {
184 border-bottom: none;
185 }
186
187 .template-professional .meta-label {
188 font-size: var(--font-size-sm);
189 color: var(--text-secondary);
190 font-weight: 500;
191 }
192
193 .template-professional .meta-value {
194 font-size: var(--font-size-base);
195 color: var(--text-primary);
196 font-weight: 600;
197 }
198
199 /* Address Section */
200 .template-professional .address-section {
201 display: grid;
202 grid-template-columns: 1fr 1fr;
203 gap: var(--spacing-8);
204 margin-bottom: var(--spacing-12);
205 }
206
207 .template-professional .address-block {
208 background: var(--background-secondary);
209 padding: var(--spacing-6);
210 border-radius: var(--radius-lg);
211 border: 1px solid var(--border-color);
212 position: relative;
213 overflow: hidden;
214 }
215
216 .template-professional .address-block::before {
217 content: '';
218 position: absolute;
219 top: 0;
220 left: 0;
221 right: 0;
222 height: 3px;
223 background: var(--primary-color);
224 }
225
226 .template-professional .address-block h2 {
227 font-family: var(--font-family-heading);
228 font-size: var(--font-size-lg);
229 font-weight: 600;
230 color: var(--text-primary);
231 margin-bottom: var(--spacing-4);
232 text-transform: uppercase;
233 letter-spacing: 0.05em;
234 }
235
236 .template-professional .client-name {
237 font-weight: 600;
238 color: var(--text-primary);
239 font-size: var(--font-size-base);
240 margin-bottom: var(--spacing-2);
241 }
242
243 .template-professional .address-content {
244 color: var(--text-secondary);
245 font-size: var(--font-size-sm);
246 line-height: 1.5;
247 }
248
249 /* Invoice Items Table */
250 .template-professional .invoice-items {
251 width: 100%;
252 border-collapse: collapse;
253 margin-bottom: var(--spacing-12);
254 background: var(--background-primary);
255 border-radius: var(--radius-lg);
256 overflow: hidden;
257 box-shadow: var(--shadow-lg);
258 border: 1px solid var(--border-color);
259 }
260
261 .template-professional .invoice-items th {
262 background: var(--primary-color);
263 color: white;
264 font-weight: 600;
265 text-align: left;
266 padding: var(--spacing-4) var(--spacing-6);
267 font-size: var(--font-size-sm);
268 text-transform: uppercase;
269 letter-spacing: 0.05em;
270 }
271
272 .template-professional .invoice-items td {
273 padding: var(--spacing-4) var(--spacing-6);
274 border-bottom: 1px solid var(--border-light);
275 vertical-align: top;
276 }
277
278 .template-professional .invoice-items tr:last-child td {
279 border-bottom: none;
280 }
281
282 .template-professional .invoice-items tr:hover {
283 background: var(--background-accent);
284 }
285
286 .template-professional .item-name .item-title {
287 font-weight: 600;
288 color: var(--text-primary);
289 margin-bottom: var(--spacing-1);
290 }
291
292 .template-professional .item-description {
293 color: var(--text-muted);
294 font-size: var(--font-size-sm);
295 line-height: 1.4;
296 font-weight: normal;
297 }
298
299 .template-professional .item-quantity,
300 .template-professional .item-price,
301 .template-professional .item-total {
302 text-align: right;
303 font-weight: 500;
304 color: var(--text-primary);
305 }
306
307 /* Invoice Totals */
308 .template-professional .invoice-totals {
309 margin-left: auto;
310 width: 400px;
311 background: var(--background-secondary);
312 padding: var(--spacing-8);
313 border-radius: var(--radius-lg);
314 border: 1px solid var(--border-color);
315 box-shadow: var(--shadow-md);
316 }
317
318 .template-professional .invoice-total-row {
319 display: flex;
320 justify-content: space-between;
321 align-items: center;
322 padding: var(--spacing-3) 0;
323 border-bottom: 1px solid var(--border-light);
324 }
325
326 .template-professional .invoice-total-row:last-child {
327 border-bottom: none;
328 }
329
330 .template-professional .invoice-total-label {
331 font-weight: 500;
332 color: var(--text-secondary);
333 }
334
335 .template-professional .invoice-total-value {
336 font-weight: 600;
337 color: var(--text-primary);
338 }
339
340 .template-professional .invoice-totals .invoice-grand-total {
341 font-size: var(--font-size-xl);
342 font-weight: 700;
343 color: var(--primary-color);
344 border-top: 2px solid var(--primary-color);
345 padding-top: var(--spacing-4);
346 margin-top: var(--spacing-4);
347 }
348
349 /* Notes Section */
350 .template-professional .invoice-notes {
351 margin-top: var(--spacing-8);
352 padding: var(--spacing-6);
353 background: var(--background-secondary);
354 border-radius: var(--radius-lg);
355 border: 1px solid var(--border-color);
356 }
357
358 .template-professional .invoice-notes h3 {
359 font-family: var(--font-family-heading);
360 font-size: var(--font-size-lg);
361 font-weight: 600;
362 color: var(--text-primary);
363 margin-bottom: var(--spacing-3);
364 border-bottom: 1px solid var(--border-color);
365 padding-bottom: var(--spacing-2);
366 }
367
368 .template-professional .notes-content {
369 color: var(--text-secondary);
370 font-size: var(--font-size-sm);
371 line-height: 1.6;
372 }
373
374 .template-professional .invoice-terms {
375 margin-top: var(--spacing-8);
376 padding: var(--spacing-6);
377 background: var(--background-secondary);
378 border-radius: var(--radius-lg);
379 border: 1px solid var(--border-color);
380 }
381
382 .template-professional .invoice-terms h3 {
383 font-family: var(--font-family-heading);
384 font-size: var(--font-size-lg);
385 font-weight: 600;
386 color: var(--text-primary);
387 margin-bottom: var(--spacing-3);
388 border-bottom: 1px solid var(--border-color);
389 padding-bottom: var(--spacing-2);
390 }
391
392 .template-professional .terms-content {
393 color: var(--text-secondary);
394 font-size: var(--font-size-sm);
395 line-height: 1.6;
396 }
397
398 /* Footer */
399 .template-professional .invoice-footer {
400 margin-top: var(--spacing-8);
401 padding-top: var(--spacing-6);
402 border-top: 2px solid var(--border-light);
403 text-align: center;
404 color: var(--text-secondary);
405 font-size: var(--font-size-sm);
406 }
407
408 .template-professional .invoice-footer p {
409 margin: 0;
410 font-size: var(--font-size-sm);
411 opacity: 0.9;
412 }
413
414 /* Responsive Design */
415 @media (max-width: 768px) {
416 .template-professional {
417 padding: var(--spacing-4);
418 }
419
420 .template-professional .invoice-header {
421 grid-template-columns: 1fr;
422 gap: var(--spacing-6);
423 }
424
425 .template-professional .invoice-meta {
426 min-width: auto;
427 }
428
429 .template-professional .address-section {
430 grid-template-columns: 1fr;
431 gap: var(--spacing-6);
432 }
433
434 .template-professional .invoice-totals {
435 width: 100%;
436 }
437 }
438
439 /* Shared polish: numbers line up, numeric headings sit over their figures. */
440 .template-professional .invoice-items th + th { text-align: right; }
441 .template-professional .invoice-items .item-quantity,
442 .template-professional .invoice-items .item-price,
443 .template-professional .invoice-items .item-adjust,
444 .template-professional .invoice-items .item-total,
445 .template-professional .invoice-total-value { font-variant-numeric: tabular-nums; white-space: nowrap; }
446 .template-professional .meta-value { white-space: nowrap; }
447 .template-professional .invoice-items .item-adjust { text-align: right; }
448 .template-professional .client-contact { font-weight: 500; margin-bottom: 0.15em; }
449 .template-professional .client-tax-number,
450 .template-professional .company-tax-number { margin-top: 0.35em; }
451 .template-professional .invoice-items .item-description { white-space: pre-line; }
452 .template-professional .document-kind { display: block; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-muted, #8a8a8a); font-family: var(--font-family-body, inherit); font-style: normal; margin-bottom: 0.3em; line-height: 1.2; }
453
454 /* Professional: the same navy, with the sections closer together and quieter shadows. */
455 .template-professional .invoice-header { margin-bottom: var(--spacing-8); padding-bottom: var(--spacing-6); }
456 .template-professional .invoice-meta { box-shadow: none; gap: 0; padding: var(--spacing-5) var(--spacing-6); }
457 .template-professional .invoice-title { margin-bottom: var(--spacing-2); font-size: var(--font-size-xl); letter-spacing: 0.04em; }
458 .template-professional .meta-item { padding: var(--spacing-2) 0; }
459 .template-professional .meta-item:last-child { border-bottom: 0; }
460 .template-professional .address-section { margin-bottom: var(--spacing-8); }
461 .template-professional .address-block { padding: var(--spacing-5); }
462 .template-professional .address-block h2 { font-size: var(--font-size-xs); letter-spacing: 0.14em; color: var(--text-muted); margin-bottom: var(--spacing-2); }
463 .template-professional .invoice-items { box-shadow: none; border: 1px solid var(--border-color); margin-bottom: var(--spacing-8); }
464 .template-professional .invoice-items th { padding: var(--spacing-3) var(--spacing-5); font-size: var(--font-size-xs); letter-spacing: 0.1em; }
465 .template-professional .invoice-items td { padding: var(--spacing-4) var(--spacing-5); }
466 .template-professional .invoice-items tr:hover { background: transparent; }
467 .template-professional .invoice-totals { box-shadow: none; padding: var(--spacing-5) var(--spacing-6); width: 360px; }
468 .template-professional .invoice-total-row { padding: var(--spacing-2) 0; }
469 .template-professional .invoice-totals .invoice-grand-total { padding-top: var(--spacing-3); margin-top: var(--spacing-2); }
470 .template-professional .invoice-notes, .template-professional .invoice-terms { margin-top: var(--spacing-8); padding: var(--spacing-5) var(--spacing-6); }
471 .template-professional .invoice-notes h3, .template-professional .invoice-terms h3 { font-size: var(--font-size-xs); text-transform: uppercase; letter-spacing: 0.14em; color: var(--text-muted); border: 0; padding: 0; margin-bottom: var(--spacing-2); }
472 .template-professional .invoice-totals .invoice-paid-row .invoice-total-value { color: var(--success-color, #047857); }
473 .template-professional .invoice-totals .invoice-balance-due { font-weight: 700; }
474 .template-professional .invoice-totals .invoice-balance-due .invoice-total-label { color: inherit; font-weight: 700; }
475 .template-professional .meta-amount-due .meta-value { font-weight: 700; font-size: 1.08em; }
476 </style>
477
478 <div class="template template-professional">
479 <div class="invoice-header">
480 <div class="company-info">
481 <?php if (!empty($company_info['logo'])): ?>
482 <div class="company-logo">
483 <img src="<?php echo esc_url($company_info['logo']); ?>" alt="<?php echo esc_attr($company_info['name']); ?>" class="logo-image" onerror="this.parentNode.parentNode.removeChild(this.parentNode)">
484 </div>
485 <?php endif; ?>
486 <div class="company-name"><?php echo esc_html($company_info['name']); ?></div>
487 <div class="company-details">
488 <?php echo wp_kses_post(\EasyInvoice\Helpers\TemplateTextHelper::generateFromSection($company_info, false, 'details-only')); ?>
489 </div>
490 </div>
491
492 <div class="invoice-meta">
493 <?php $ei_kind = \EasyInvoice\Helpers\TemplateTextHelper::documentKind($invoice); $ei_title = trim((string) $invoice->getTitle()); ?>
494 <div class="invoice-title"><?php if ('' !== $ei_title && 0 !== strcasecmp($ei_title, $ei_kind)) : ?><span class="document-kind"><?php echo esc_html($ei_kind); ?></span><?php endif; ?><?php echo esc_html('' !== $ei_title ? $ei_title : $ei_kind); ?></div>
495 <div class="meta-item">
496 <span class="meta-label"><?php echo esc_html($text_settings['invoice_number']); ?></span>
497 <span class="meta-value"><?php echo esc_html($invoice->getNumber()); ?></span>
498 </div>
499 <div class="meta-item">
500 <span class="meta-label"><?php echo esc_html($text_settings['invoice_date']); ?></span>
501 <span class="meta-value"><?php echo esc_html(\EasyInvoice\Controllers\SettingsController::formatDate($invoice->getIssueDate())); ?></span>
502 </div>
503 <?php if (empty($ei_is_credit_note)) : ?>
504 <div class="meta-item">
505 <span class="meta-label"><?php echo esc_html($text_settings['due_date']); ?></span>
506 <span class="meta-value"><?php echo esc_html(\EasyInvoice\Controllers\SettingsController::formatDate($invoice->getDueDate())); ?></span>
507 </div>
508 <?php endif; ?>
509 <?php if (empty($ei_is_credit_note)) : ?>
510 <div class="meta-item meta-amount-due">
511 <span class="meta-label"><?php echo esc_html($text_settings['total_due']); ?></span>
512 <span class="meta-value"><?php echo esc_html($formatter->format(\EasyInvoice\Helpers\TemplateTextHelper::amountDue($invoice))); ?></span>
513 </div>
514 <?php endif; ?>
515 </div>
516 </div>
517
518 <?php $ei_client_html = \EasyInvoice\Helpers\TemplateTextHelper::generateClientBlock($invoice); if ('' !== $ei_client_html) : ?>
519 <div class="address-section">
520 <div class="address-block">
521 <h2><?php echo esc_html($text_settings['to']); ?></h2>
522 <div class="address-content">
523 <?php echo wp_kses_post($ei_client_html); ?>
524 </div>
525 </div>
526 </div>
527 <?php endif; ?>
528
529 <?php
530 // The adjustment column appears only when at least one line uses it.
531 $ei_show_adjust = \EasyInvoice\Controllers\SettingsController::shouldShowInvoiceAdjustField();
532 if ($ei_show_adjust) {
533 $ei_show_adjust = false;
534 foreach ($invoice->getItems() as $ei_item) {
535 if ((float) $ei_item->getAdjustPercentage() != 0.0) { $ei_show_adjust = true; break; }
536 }
537 }
538 ?>
539 <table class="invoice-items">
540 <thead>
541 <tr>
542 <th><?php echo esc_html($text_settings['service']); ?></th>
543 <th><?php echo esc_html($text_settings['qty']); ?></th>
544 <th><?php echo esc_html($text_settings['rate_price']); ?></th>
545 <?php if ($ei_show_adjust): ?>
546 <th><?php echo esc_html($text_settings['adjust']); ?> (%)</th>
547 <?php endif; ?>
548 <th><?php echo esc_html($text_settings['line_total'] ?? $text_settings['total']); ?></th>
549 </tr>
550 </thead>
551 <tbody>
552 <?php if (!$invoice->getItems()) : ?>
553 <tr class="no-items"><td colspan="<?php echo $ei_show_adjust ? 5 : 4; ?>" style="text-align:center;color:#9ca3af;padding:18px;"><?php esc_html_e('No items yet.', 'easy-invoice'); ?></td></tr>
554 <?php endif; ?>
555 <?php foreach ($invoice->getItems() as $item): ?>
556 <tr>
557 <td class="item-name">
558 <div class="item-title"><?php echo esc_html($item->getName()); ?></div>
559 <?php if ($item->getDescription()): ?>
560 <div class="item-description"><?php echo esc_html($item->getDescription()); ?></div>
561 <?php endif; ?>
562 </td>
563 <td class="item-quantity"><?php echo esc_html($item->getQuantity() ?: '0'); ?></td>
564 <td class="item-price"><?php echo esc_html($formatter->format($item->getPrice())); ?></td>
565 <?php if ($ei_show_adjust): ?>
566 <td class="item-adjust"><?php
567 $adjust_percentage = $item->getAdjustPercentage();
568 if ($adjust_percentage != 0) {
569 echo esc_html($adjust_percentage > 0 ? '+' : '') . esc_html($adjust_percentage) . '%';
570 } else {
571 echo esc_html__('', 'easy-invoice');
572 }
573 ?></td>
574 <?php endif; ?>
575 <td class="item-total"><?php echo esc_html($formatter->format($item->getAmount())); ?></td>
576 </tr>
577 <?php endforeach; ?>
578 </tbody>
579 </table>
580
581 <div class="invoice-totals">
582 <?php echo wp_kses_post(\EasyInvoice\Helpers\TemplateTextHelper::generateTotalsSection($invoice, $text_settings, $formatter, 'invoice')); ?>
583 </div>
584
585 <?php if ($invoice->getNotes()): ?>
586 <div class="invoice-notes">
587 <h3><?php esc_html_e('Notes', 'easy-invoice'); ?></h3>
588 <div class="notes-content">
589 <?php echo wp_kses_post($invoice->getNotes() ?: ''); ?>
590 </div>
591 </div>
592 <?php endif; ?>
593
594 <?php
595 $terms_conditions = empty($ei_is_credit_note) ? ($invoice->getTerms() ?: \EasyInvoice\Controllers\SettingsController::getInvoiceTermsConditions()) : '';
596 if ($terms_conditions):
597 ?>
598 <div class="invoice-terms">
599 <h3><?php esc_html_e('Terms & Conditions', 'easy-invoice'); ?></h3>
600 <div class="terms-content">
601 <?php echo wp_kses_post($terms_conditions); ?>
602 </div>
603 </div>
604 <?php endif; ?>
605
606 <?php
607 /**
608 * Fires inside the document card, after notes and terms and before the
609 * footer text: attachments, the signature block, e-invoicing notes. Being
610 * inside the card, it is part of what "Download as PDF" captures.
611 *
612 * @param object $document The invoice model.
613 * @param string $type 'invoice'.
614 */
615 do_action('easy_invoice_document_body_after', $invoice, 'invoice');
616
617 $ei_footer_text = \EasyInvoice\Helpers\TemplateTextHelper::footerText($invoice, 'invoice');
618 if ('' !== trim(wp_strip_all_tags((string) $ei_footer_text))) :
619 ?>
620 <div class="invoice-footer">
621 <p><?php echo wp_kses_post($ei_footer_text); ?></p>
622 </div>
623 <?php endif; ?>
624 </div>
625