mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 00:54:32 -04:00
Merge pull request #4051 from beganovich/v2-design-improvements
Design improvements
This commit is contained in:
commit
519293c6dd
@ -173,14 +173,7 @@ class PreviewController extends BaseController
|
|||||||
|
|
||||||
$html = new HtmlEngine(null, $invoice->invitations()->first(), 'invoice');
|
$html = new HtmlEngine(null, $invoice->invitations()->first(), 'invoice');
|
||||||
|
|
||||||
if (isset(request()->design['name'])) {
|
$design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]);
|
||||||
$design = new Design(strtolower(request()->design['name']));
|
|
||||||
} else {
|
|
||||||
$design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// $designer = new Designer($entity_obj, $design_object, $entity_obj->client->getSetting('pdf_variables'), lcfirst($entity));
|
|
||||||
// $html = $this->generateEntityHtml($designer, $entity_obj);
|
|
||||||
|
|
||||||
$state = [
|
$state = [
|
||||||
'template' => $design->elements([
|
'template' => $design->elements([
|
||||||
|
@ -67,7 +67,7 @@ class Design extends BaseDesign
|
|||||||
: config('ninja.designs.base_path');
|
: config('ninja.designs.base_path');
|
||||||
|
|
||||||
return file_get_contents(
|
return file_get_contents(
|
||||||
$path.$this->design
|
$path . $this->design
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +164,7 @@ class Design extends BaseDesign
|
|||||||
|
|
||||||
foreach ($variables as $variable) {
|
foreach ($variables as $variable) {
|
||||||
$elements[] = ['element' => 'tr', 'properties' => ['hidden' => $this->entityVariableCheck($variable)], 'elements' => [
|
$elements[] = ['element' => 'tr', 'properties' => ['hidden' => $this->entityVariableCheck($variable)], 'elements' => [
|
||||||
['element' => 'th', 'content' => $variable.'_label'],
|
['element' => 'th', 'content' => $variable . '_label'],
|
||||||
['element' => 'th', 'content' => $variable],
|
['element' => 'th', 'content' => $variable],
|
||||||
]];
|
]];
|
||||||
}
|
}
|
||||||
@ -187,7 +187,7 @@ class Design extends BaseDesign
|
|||||||
$elements = [];
|
$elements = [];
|
||||||
|
|
||||||
foreach ($this->context['pdf_variables']["{$this->type}_columns"] as $column) {
|
foreach ($this->context['pdf_variables']["{$this->type}_columns"] as $column) {
|
||||||
$elements[] = ['element' => 'th', 'content' => $column.'_label'];
|
$elements[] = ['element' => 'th', 'content' => $column . '_label'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $elements;
|
return $elements;
|
||||||
@ -226,6 +226,22 @@ class Design extends BaseDesign
|
|||||||
]],
|
]],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
foreach (['discount', 'custom_surcharge1', 'custom_surcharge2', 'custom_surcharge3', 'custom_surcharge4'] as $property) {
|
||||||
|
$variable = sprintf('%s%s', '$', $property);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!is_null($this->entity->{$property}) ||
|
||||||
|
!empty($this->entity->{$property}) ||
|
||||||
|
$this->entity->{$property} !== 0
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$variables = array_filter($variables, function ($m) use ($variable) {
|
||||||
|
return $m != $variable;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($variables as $variable) {
|
foreach ($variables as $variable) {
|
||||||
if ($variable == '$total_taxes' || $variable == '$line_taxes') {
|
if ($variable == '$total_taxes' || $variable == '$line_taxes') {
|
||||||
continue;
|
continue;
|
||||||
@ -233,7 +249,7 @@ class Design extends BaseDesign
|
|||||||
|
|
||||||
$elements[] = ['element' => 'div', 'elements' => [
|
$elements[] = ['element' => 'div', 'elements' => [
|
||||||
['element' => 'span', 'content' => 'This is placeholder for the 3rd fraction of element.', 'properties' => ['style' => 'opacity: 0%']], // Placeholder for fraction of element (3fr)
|
['element' => 'span', 'content' => 'This is placeholder for the 3rd fraction of element.', 'properties' => ['style' => 'opacity: 0%']], // Placeholder for fraction of element (3fr)
|
||||||
['element' => 'span', 'content' => $variable.'_label'],
|
['element' => 'span', 'content' => $variable . '_label'],
|
||||||
['element' => 'span', 'content' => $variable],
|
['element' => 'span', 'content' => $variable],
|
||||||
]];
|
]];
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,9 @@ trait DesignHelpers
|
|||||||
$document->importNode($element, true)
|
$document->importNode($element, true)
|
||||||
);
|
);
|
||||||
|
|
||||||
return $document->saveXML();
|
$html = $document->saveHTML();
|
||||||
|
|
||||||
|
return str_replace('%24', '$', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
@ -71,14 +71,8 @@ class PdfMaker
|
|||||||
|
|
||||||
public function getCompiledHTML($final = false)
|
public function getCompiledHTML($final = false)
|
||||||
{
|
{
|
||||||
if ($final) {
|
$html = $this->document->saveHTML();
|
||||||
$html = $this->document->saveXML();
|
|
||||||
|
return str_replace('%24', '$', $html);
|
||||||
$filtered = strtr($html, $this->filters);
|
|
||||||
|
|
||||||
return $filtered;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->document->saveXML();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,7 @@ class HtmlEngine
|
|||||||
//$data['$invoice_date'] = ['value' => $this->date ?: ' ', 'label' => ctrans('texts.invoice_date')];
|
//$data['$invoice_date'] = ['value' => $this->date ?: ' ', 'label' => ctrans('texts.invoice_date')];
|
||||||
$data['$invoice.date'] = &$data['$date'];
|
$data['$invoice.date'] = &$data['$date'];
|
||||||
$data['$due_date'] = ['value' => $this->entity->due_date ?: ' ', 'label' => ctrans('texts.'.$this->entity_string.'_due_date')];
|
$data['$due_date'] = ['value' => $this->entity->due_date ?: ' ', 'label' => ctrans('texts.'.$this->entity_string.'_due_date')];
|
||||||
|
$data['$payment_due'] = ['value' => $this->entity->due_date ?: ' ', 'label' => ctrans('texts.payment_due')];
|
||||||
$data['$invoice.due_date'] = &$data['$due_date'];
|
$data['$invoice.due_date'] = &$data['$due_date'];
|
||||||
$data['$invoice.number'] = ['value' => $this->entity->number ?: ' ', 'label' => ctrans('texts.invoice_number')];
|
$data['$invoice.number'] = ['value' => $this->entity->number ?: ' ', 'label' => ctrans('texts.invoice_number')];
|
||||||
$data['$invoice.po_number'] = ['value' => $this->entity->po_number ?: ' ', 'label' => ctrans('texts.po_number')];
|
$data['$invoice.po_number'] = ['value' => $this->entity->po_number ?: ' ', 'label' => ctrans('texts.po_number')];
|
||||||
@ -154,6 +155,7 @@ class HtmlEngine
|
|||||||
$data['$partial_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->client) ?: ' ', 'label' => ctrans('texts.partial_due')];
|
$data['$partial_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->client) ?: ' ', 'label' => ctrans('texts.partial_due')];
|
||||||
$data['$total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.total')];
|
$data['$total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.total')];
|
||||||
$data['$amount'] = &$data['$total'];
|
$data['$amount'] = &$data['$total'];
|
||||||
|
$data['$amount_due'] = ['value' => &$data['$total']['value'], 'label' => ctrans('texts.amount_due')];
|
||||||
$data['$quote.total'] = &$data['$total'];
|
$data['$quote.total'] = &$data['$total'];
|
||||||
$data['$invoice.total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.invoice_total')];
|
$data['$invoice.total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.invoice_total')];
|
||||||
$data['$invoice.amount'] = &$data['$total'];
|
$data['$invoice.amount'] = &$data['$total'];
|
||||||
@ -275,10 +277,10 @@ class HtmlEngine
|
|||||||
$data['$company3'] = ['value' => $this->settings->custom_value3 ?: ' ', 'label' => $this->makeCustomField('company3')];
|
$data['$company3'] = ['value' => $this->settings->custom_value3 ?: ' ', 'label' => $this->makeCustomField('company3')];
|
||||||
$data['$company4'] = ['value' => $this->settings->custom_value4 ?: ' ', 'label' => $this->makeCustomField('company4')];
|
$data['$company4'] = ['value' => $this->settings->custom_value4 ?: ' ', 'label' => $this->makeCustomField('company4')];
|
||||||
|
|
||||||
$data['$custom_surcharge1'] = ['value' => $this->entity->custom_surcharge1, 'label' => $this->makeCustomField('custom_surcharge1')];
|
$data['$custom_surcharge1'] = ['value' => $this->entity->custom_surcharge1 ?: ' ', 'label' => $this->makeCustomField('custom_surcharge1')];
|
||||||
$data['$custom_surcharge2'] = ['value' => $this->entity->custom_surcharge2, 'label' => $this->makeCustomField('custom_surcharge2')];
|
$data['$custom_surcharge2'] = ['value' => $this->entity->custom_surcharge2 ?: ' ', 'label' => $this->makeCustomField('custom_surcharge2')];
|
||||||
$data['$custom_surcharge3'] = ['value' => $this->entity->custom_surcharge3, 'label' => $this->makeCustomField('custom_surcharge3')];
|
$data['$custom_surcharge3'] = ['value' => $this->entity->custom_surcharge3 ?: ' ', 'label' => $this->makeCustomField('custom_surcharge3')];
|
||||||
$data['$custom_surcharge4'] = ['value' => $this->entity->custom_surcharge4, 'label' => $this->makeCustomField('custom_surcharge4')];
|
$data['$custom_surcharge4'] = ['value' => $this->entity->custom_surcharge4 ?: ' ', 'label' => $this->makeCustomField('custom_surcharge4')];
|
||||||
|
|
||||||
$data['$product.date'] = ['value' => '', 'label' => ctrans('texts.date')];
|
$data['$product.date'] = ['value' => '', 'label' => ctrans('texts.date')];
|
||||||
$data['$product.discount'] = ['value' => '', 'label' => ctrans('texts.discount')];
|
$data['$product.discount'] = ['value' => '', 'label' => ctrans('texts.discount')];
|
||||||
@ -313,6 +315,8 @@ class HtmlEngine
|
|||||||
$data['_rate2'] = ['value' => '', 'label' => ctrans('texts.tax')];
|
$data['_rate2'] = ['value' => '', 'label' => ctrans('texts.tax')];
|
||||||
$data['_rate3'] = ['value' => '', 'label' => ctrans('texts.tax')];
|
$data['_rate3'] = ['value' => '', 'label' => ctrans('texts.tax')];
|
||||||
|
|
||||||
|
$data['$font-size'] = ['value' => $this->settings->font_size . 'px', 'label' => ''];
|
||||||
|
|
||||||
// $data['custom_label1'] = ['value' => '', 'label' => ctrans('texts.')];
|
// $data['custom_label1'] = ['value' => '', 'label' => ctrans('texts.')];
|
||||||
// $data['custom_label2'] = ['value' => '', 'label' => ctrans('texts.')];
|
// $data['custom_label2'] = ['value' => '', 'label' => ctrans('texts.')];
|
||||||
// $data['custom_label3'] = ['value' => '', 'label' => ctrans('texts.')];
|
// $data['custom_label3'] = ['value' => '', 'label' => ctrans('texts.')];
|
||||||
|
@ -3266,4 +3266,6 @@ return [
|
|||||||
'add_payment_method_first' => 'add payment method',
|
'add_payment_method_first' => 'add payment method',
|
||||||
|
|
||||||
'no_items_selected' => 'No items selected.',
|
'no_items_selected' => 'No items selected.',
|
||||||
|
|
||||||
|
'payment_due' => 'Payment due',
|
||||||
];
|
];
|
||||||
|
@ -3,144 +3,147 @@
|
|||||||
<head id="head">
|
<head id="head">
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
|
<style id="style">
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-size: '$font-size';
|
||||||
|
}
|
||||||
|
|
||||||
|
@page {
|
||||||
|
margin: 1cm;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
body {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.header-wrapper {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1.5fr 1fr 1fr;
|
||||||
|
background-color: #2d2c2a;
|
||||||
|
padding: 3rem;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.company-logo {
|
||||||
|
height: 6rem;
|
||||||
|
padding: 2rem;
|
||||||
|
background-color: white;
|
||||||
|
margin: 2rem;
|
||||||
|
margin-top: -4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#company-details,
|
||||||
|
#company-address {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#client-details {
|
||||||
|
margin: 2rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
#client-details > :first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.client-entity-wrapper {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1.5fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entity-details-wrapper {
|
||||||
|
background-color: #35a39a;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entity-details {
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
color: white !important;
|
||||||
|
}
|
||||||
|
#entity-details > tr,
|
||||||
|
#entity-details th {
|
||||||
|
font-weight: normal;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#product-table {
|
||||||
|
min-width: 100%;
|
||||||
|
table-layout: fixed;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
#product-table > thead {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
#product-table > thead > tr > th {
|
||||||
|
padding: 2rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
#product-table > thead > tr > th:last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
#product-table > tbody > tr > td {
|
||||||
|
padding: 1.5rem;
|
||||||
|
}
|
||||||
|
#product-table > tbody > tr > td:last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
#product-table > tbody > tr > td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#product-table > tbody > tr:nth-child(odd) {
|
||||||
|
background-color: #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#product-table-footer > * {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 3fr 1fr 1fr;
|
||||||
|
padding-top: 1.2rem;
|
||||||
|
padding-left: 1.2rem;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
#product-table-footer
|
||||||
|
> *
|
||||||
|
[data-element='product-table-balance-due-label'],
|
||||||
|
#product-table-footer
|
||||||
|
> *
|
||||||
|
[data-element='product-table-balance-due'] {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
#product-table-footer
|
||||||
|
> *
|
||||||
|
[data-element='product-table-balance-due'] {
|
||||||
|
color: #35a39a;
|
||||||
|
}
|
||||||
|
#product-table-footer > * > :last-child {
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 1.5rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<style id="style">
|
<div class="header-wrapper" id="header">
|
||||||
* {
|
<div><!-- Empty space placeholder--></div>
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@page {
|
<div id="company-details"></div>
|
||||||
margin-top: 1cm;
|
<div id="company-address"></div>
|
||||||
margin-bottom: 1cm;
|
</div>
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.header-wrapper {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1.5fr 1fr 1fr;
|
|
||||||
background-color: #2d2c2a;
|
|
||||||
padding: 3rem;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.company-logo {
|
|
||||||
height: 6rem;
|
|
||||||
padding: 2rem;
|
|
||||||
background-color: white;
|
|
||||||
margin: 2rem;
|
|
||||||
margin-top: -4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#company-details,
|
|
||||||
#company-address {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
#client-details {
|
|
||||||
margin: 2rem;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
#client-details > :first-child {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.client-entity-wrapper {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1.5fr 1fr;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entity-details-wrapper {
|
|
||||||
background-color: #35a39a;
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entity-details {
|
|
||||||
width: 100%;
|
|
||||||
text-align: left;
|
|
||||||
color: white !important;
|
|
||||||
}
|
|
||||||
#entity-details > tr,
|
|
||||||
#entity-details th {
|
|
||||||
font-weight: normal;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#product-table {
|
|
||||||
min-width: 100%;
|
|
||||||
table-layout: fixed;
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
margin-top: 3rem;
|
|
||||||
}
|
|
||||||
#product-table > thead {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
#product-table > thead > tr > th {
|
|
||||||
padding: 2rem;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
#product-table > thead > tr > th:last-child {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
#product-table > tbody > tr > td {
|
|
||||||
padding: 1.5rem;
|
|
||||||
}
|
|
||||||
#product-table > tbody > tr > td:last-child {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
#product-table > tbody > tr > td:first-child {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
#product-table > tbody > tr:nth-child(odd) {
|
|
||||||
background-color: #ebebeb;
|
|
||||||
}
|
|
||||||
|
|
||||||
#product-table-footer > * {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 3fr 1fr 1fr;
|
|
||||||
padding-top: 1.2rem;
|
|
||||||
padding-left: 1.2rem;
|
|
||||||
gap: 20px;
|
|
||||||
}
|
|
||||||
#product-table-footer
|
|
||||||
> *
|
|
||||||
[data-element='product-table-balance-due-label'],
|
|
||||||
#product-table-footer > * [data-element='product-table-balance-due'] {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.4rem;
|
|
||||||
}
|
|
||||||
#product-table-footer > * [data-element='product-table-balance-due'] {
|
|
||||||
color: #35a39a;
|
|
||||||
}
|
|
||||||
#product-table-footer > * > :last-child {
|
|
||||||
text-align: right;
|
|
||||||
padding-right: 1.5rem;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-wrapper" id="header">
|
|
||||||
<div><!-- Empty space placeholder--></div>
|
|
||||||
|
|
||||||
<div id="company-details"></div>
|
|
||||||
<div id="company-address"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<img
|
<img
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
src="$company.logo"
|
src="$company.logo"
|
||||||
@ -158,7 +161,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,23 +6,14 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
body {
|
body {
|
||||||
margin: 2rem;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 14px;
|
font-size: '$font-size';
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-container {
|
.header-container {
|
||||||
@ -172,8 +163,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-container" id="header">
|
<div class="header-container">
|
||||||
<img
|
<img
|
||||||
src="$company.logo"
|
src="$company.logo"
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
@ -196,7 +189,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -7,23 +7,16 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
body {
|
body {
|
||||||
margin: 2rem;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
font-size: '$font-size';
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.header-container {
|
.header-container {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr 1fr;
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
@ -134,8 +127,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-container" id="header">
|
<div class="header-container">
|
||||||
<img
|
<img
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
src="$company.logo"
|
src="$company.logo"
|
||||||
@ -157,7 +152,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,9 +6,7 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
@ -128,8 +126,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-wrapper" id="header">
|
<div class="header-wrapper">
|
||||||
<div id="client-details"></div>
|
<div id="client-details"></div>
|
||||||
|
|
||||||
<div class="company-info-wrapper">
|
<div class="company-info-wrapper">
|
||||||
@ -156,7 +156,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,14 +6,11 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -22,16 +19,6 @@
|
|||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.company-logo-wrapper {
|
.company-logo-wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@ -147,8 +134,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="company-logo-wrapper" id="header">
|
<div class="company-logo-wrapper">
|
||||||
<img
|
<img
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
src="$company.logo"
|
src="$company.logo"
|
||||||
@ -181,10 +170,10 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer">
|
|
||||||
<p class="thanks-label">$thanks_label!</p>
|
|
||||||
<hr class="double-border" />
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<footer id="footer">
|
||||||
|
<p class="thanks-label">$thanks_label!</p>
|
||||||
|
<hr class="double-border" />
|
||||||
|
</footer>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,14 +6,11 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -22,16 +19,6 @@
|
|||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-wrapper {
|
.header-wrapper {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1.2fr 1.8fr;
|
grid-template-columns: 1.2fr 1.8fr;
|
||||||
@ -151,8 +138,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-wrapper" id="header">
|
<div class="header-wrapper">
|
||||||
<div class="header-left-side-wrapper">
|
<div class="header-left-side-wrapper">
|
||||||
<p class="header-text-label">$from_label:</p>
|
<p class="header-text-label">$from_label:</p>
|
||||||
|
|
||||||
@ -185,8 +174,8 @@
|
|||||||
<span class="entity-property-value">$entity_number</span>
|
<span class="entity-property-value">$entity_number</span>
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="entity-property-label">$entity_date_label:</span>
|
<span class="entity-property-label">$date_label:</span>
|
||||||
<span class="entity-property-value">$entity_date</span>
|
<span class="entity-property-value">$date</span>
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="entity-property-label">$payment_due_label:</span>
|
<span class="entity-property-label">$payment_due_label:</span>
|
||||||
@ -205,7 +194,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,14 +6,7 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@page {
|
|
||||||
margin-top: 1cm;
|
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -22,12 +15,6 @@
|
|||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.header-container {
|
.header-container {
|
||||||
background-color: #f46521;
|
background-color: #f46521;
|
||||||
color: white;
|
color: white;
|
||||||
@ -100,8 +87,6 @@
|
|||||||
|
|
||||||
.footer-wrapper {
|
.footer-wrapper {
|
||||||
display: grid;
|
display: grid;
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
grid-template-columns: 2fr 1fr 1fr;
|
grid-template-columns: 2fr 1fr 1fr;
|
||||||
@ -151,13 +136,13 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div class="header-container" id="header">
|
||||||
|
<h1 class="company-name">$company.name</h1>
|
||||||
|
|
||||||
|
<table id="entity-details" cellspacing="0"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-container" id="header">
|
|
||||||
<h1 class="company-name">$company.name</h1>
|
|
||||||
|
|
||||||
<table id="entity-details" cellspacing="0"></table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="logo-client-wrapper">
|
<div class="logo-client-wrapper">
|
||||||
<img
|
<img
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
@ -173,16 +158,14 @@
|
|||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
</div>
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
<div class="footer-wrapper">
|
<div class="footer-wrapper" id="footer">
|
||||||
<div>
|
<div>
|
||||||
<!-- Placeholder for offset -->
|
<!-- Placeholder for offset -->
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="company-details"></div>
|
|
||||||
<div id="company-address"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
<div id="company-details"></div>
|
||||||
</body>
|
<div id="company-address"></div>
|
||||||
|
</div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,14 +6,11 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -22,16 +19,6 @@
|
|||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-wrapper {
|
.header-wrapper {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr 1fr;
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
@ -115,8 +102,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-wrapper" id="header">
|
<div class="header-wrapper">
|
||||||
<p>$company.name</p>
|
<p>$company.name</p>
|
||||||
|
|
||||||
<div id="company-address"></div>
|
<div id="company-address"></div>
|
||||||
@ -137,7 +126,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,14 +6,11 @@
|
|||||||
|
|
||||||
<style id="style">
|
<style id="style">
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
font-size: '$font-size';
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin-top: 1cm;
|
margin: 1cm;
|
||||||
margin-bottom: 1cm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -22,16 +19,6 @@
|
|||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-wrapper {
|
.header-wrapper {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr 1fr;
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
@ -152,8 +139,10 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
<div id="header"></div>
|
||||||
|
|
||||||
<body id="body">
|
<body id="body">
|
||||||
<div class="header-wrapper" id="header">
|
<div class="header-wrapper">
|
||||||
<img
|
<img
|
||||||
class="company-logo"
|
class="company-logo"
|
||||||
src="$company.logo"
|
src="$company.logo"
|
||||||
@ -188,7 +177,7 @@
|
|||||||
<table id="product-table" cellspacing="0"></table>
|
<table id="product-table" cellspacing="0"></table>
|
||||||
|
|
||||||
<div id="product-table-footer" cellspacing="0"></div>
|
<div id="product-table-footer" cellspacing="0"></div>
|
||||||
|
|
||||||
<footer id="footer"></footer>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<div id="footer"><!-- Your footer content here --></div>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user