Files
InvoiceShelf/resources/views/app/pdf/invoice/invoice2.blade.php
T
Darko Gjorgjijoski 5ef7804e60 refactor: adopt modular domain architecture (#747)
* refactor: stabilize model identities for domain migration

* refactor: extract module platform context

* refactor: assign models to domain contexts

* refactor: extract ai platform context

* refactor: extract storage platform context

* refactor: extract mail platform context

* refactor: extract pdf platform context

* refactor: extract operations platform context

* refactor: move installation into operations platform

* refactor: extract money domain context

* refactor: extract taxation domain context

* refactor: extract catalog domain context

* refactor: extract metadata domain context

* refactor: extract reporting domain context

* refactor: extract purchases domain context

* refactor: extract receivables domain context

* refactor: extract accounts domain context

* refactor: complete reporting statement boundary

* refactor: extract contacts domain context

* refactor: extract sales domain context

* refactor: remove legacy application layers

* fix: migrate legacy bouncer role identities
2026-08-05 17:40:03 +02:00

475 lines
12 KiB
PHP

<!DOCTYPE html>
<html>
<head>
<title>@lang($invoice->isCreditNote() ? 'pdf_credit_note_label' : 'pdf_invoice_label') - {{ $invoice->invoice_number }}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@include("app.pdf.partials.fonts")
<style type="text/css">
/* -- Base -- */
body {
margin: 0px;
}
table {
border-collapse: collapse;
}
hr {
margin: 0 30px 0 30px;
color: rgba(0, 0, 0, 0.2);
border: 0.5px solid #EAF1FB;
}
/* -- Header -- */
.header-container {
background: #7675ff;
position: relative;
width: 100%;
height: 141px;
left: 0px;
top: 0px;
}
.header-section-left {
padding-bottom: 45px;
padding-left: 30px;
display: inline-block;
width: 30%;
}
.header-logo {
padding-top: 35px;
position: absolute;
text-transform: capitalize;
color: #fff;
}
.header-section-right {
display: inline-block;
width: 35%;
float: right;
padding: 10px 30px 20px 0px;
text-align: right;
color: white;
}
.header {
font-size: 20px;
color: rgba(0, 0, 0, 0.7);
}
/* -- Estimate Details -- */
.invoice-details-container {
text-align: center;
width: 40%;
}
.invoice-details-container h1 {
margin: 0;
font-size: 24px;
line-height: 36px;
text-align: right;
}
.invoice-details-container h4 {
margin: 0;
font-size: 10px;
line-height: 15px;
text-align: right;
}
.invoice-details-container h3 {
margin-bottom: 1px;
margin-top: 0;
}
/* -- Content Wrapper -- */
.content-wrapper {
display: block;
padding-bottom: 20px;
}
.address-container {
display: block;
padding-top: 32px;
}
/* -- Company -- */
.company-address-container {
padding: 0 0 0 30px;
display: inline;
float: left;
width: 30%;
}
.company-address-container h1 {
font-weight: bold;
font-size: 15px;
letter-spacing: 0.05em;
margin-bottom: 0;
/* margin-top: 18px; */
}
.company-address {
font-size: 10px;
line-height: 15px;
color: #595959;
margin-top: 0px;
word-wrap: break-word;
}
/* -- Billing -- */
.billing-address-container {
display: block;
/* position: absolute; */
float: right;
padding: 0 40px 0 0;
}
.billing-address-label {
font-size: 12px;
line-height: 18px;
padding: 0px;
margin-bottom: 0px;
}
.billing-address-name {
max-width: 250px;
font-size: 15px;
line-height: 22px;
padding: 0px;
margin-top: 0px;
margin-bottom: 0px;
}
.billing-address {
font-size: 10px;
line-height: 15px;
color: #595959;
padding: 0px;
margin: 0px;
width: 170px;
word-wrap: break-word;
}
/* -- Shipping -- */
.shipping-address-container {
display: block;
float: right;
padding: 0 30px 0 0;
}
.shipping-address-label {
font-size: 12px;
line-height: 18px;
padding: 0px;
margin-bottom: 0px;
}
.shipping-address-name {
max-width: 250px;
font-size: 15px;
line-height: 22px;
padding: 0px;
margin-top: 0px;
margin-bottom: 0px;
}
.shipping-address {
font-size: 10px;
line-height: 15px;
color: #595959;
padding: 0px 30px 0px 30px;
width: 170px;
word-wrap: break-word;
}
/* -- Items Table -- */
/* The items table sets border-collapse: collapse, and padding does not
apply to a table in that mode. dompdf applies it anyway, Chromium
follows the spec and drops it, which put the two renderers 22.5pt
apart on each side. All of the table's spacing lives on this wrapper
instead -- a plain block, honoured identically by both. Padding rather
than margin so nothing collapses through it either. */
.items-table-wrapper {
padding-top: 35px;
padding-bottom: 10px;
}
.items-table-inset {
padding-left: 30px;
padding-right: 30px;
}
.items-table {
page-break-before: avoid;
page-break-after: auto;
}
.items-table hr {
height: 0.1px;
}
.item-table-heading {
font-size: 13.5;
text-align: center;
color: rgba(0, 0, 0, 0.85);
padding: 5px;
color: #55547A;
}
tr.item-table-heading-row th {
border-bottom: 0.620315px solid #E8E8E8;
font-size: 12px;
line-height: 18px;
}
tr.item-row td {
font-size: 12px;
line-height: 18px;
}
.item-cell {
font-size: 13;
text-align: center;
padding: 5px;
padding-top: 10px;
color: #040405;
}
.item-description {
color: #595959;
font-size: 9px;
line-height: 12px;
display: block;
}
/* -- Total Display Table -- */
.total-display-container {
padding: 0 25px;
}
.item-cell-table-hr {
margin: 0 25px 0 30px;
}
.total-display-table {
border-top: none;
page-break-inside: avoid;
page-break-before: auto;
page-break-after: auto;
margin-top: 20px;
float: right;
width: auto;
}
.total-table-attribute-label {
font-size: 12px;
color: #55547A;
text-align: left;
padding-left: 10px;
}
.total-table-attribute-value {
font-weight: bold;
text-align: right;
font-size: 12px;
color: #040405;
padding-right: 10px;
padding-top: 2px;
padding-bottom: 2px;
}
.total-border-left {
border: 1px solid #E8E8E8 !important;
border-right: 0px !important;
padding-top: 0px;
padding: 8px !important;
}
.total-border-right {
border: 1px solid #E8E8E8 !important;
border-left: 0px !important;
padding-top: 0px;
padding: 8px !important;
}
/* -- Notes -- */
.notes {
font-size: 12px;
color: #595959;
margin-top: 15px;
margin-left: 30px;
width: 442px;
text-align: left;
page-break-inside: avoid;
}
.notes-label {
font-size: 15px;
line-height: 22px;
letter-spacing: 0.05em;
color: #040405;
width: 108px;
white-space: nowrap;
height: 19.87px;
padding-bottom: 10px;
}
/* -- Helpers -- */
.text-primary {
color: #5851DB;
}
.text-center {
text-align: center
}
table .text-left {
text-align: left;
}
table .text-right {
text-align: right;
}
.border-0 {
border: none;
}
.py-2 {
padding-top: 2px;
padding-bottom: 2px;
}
.py-8 {
padding-top: 8px;
padding-bottom: 8px;
}
.py-3 {
padding: 3px 0;
}
.pr-20 {
padding-right: 20px;
}
.pr-10 {
padding-right: 10px;
}
.pl-20 {
padding-left: 20px;
}
.pl-10 {
padding-left: 10px;
}
.pl-0 {
padding-left: 0;
}
/* The address formats emit <h3>{NAME}</h3> ahead of the <br>-joined
lines. Left to the user-agent default its margins differ between
dompdf and Chromium -- the construct where the two renderers drift
apart vertically -- and the extra top margin also pushes the company
column out of line with the Bill to / Ship to columns beside it.
Pinning both margins fixes the alignment and removes the divergence. */
.company-address h3,
.customer-address-container h3,
.billing-address h3,
.shipping-address h3 {
margin-top: 0;
margin-bottom: 6px;
}
</style>
</head>
<body>
<div class="header-container">
<table width="100%">
<tr>
<td width="60%" class="header-section-left">
@if ($logo)
<img class="header-logo" style="height:50px" src="{{ \App\Platform\Pdf\Rendering\ImageUtils::toBase64Src($logo) }}" alt="Company Logo">
@elseif ($invoice->customer->company)
<h1 class="header-logo" style="padding-top: 0px;">
{{ $invoice->customer->company->name }}
</h1>
@endif
</td>
<td width="40%" class="header-section-right invoice-details-container">
<h1>@lang($invoice->isCreditNote() ? 'pdf_credit_note_label' : 'pdf_invoice_label')</h1>
<h4>{{ $invoice->invoice_number }}</h4>
<h4>{{ $invoice->formattedInvoiceDate }}</h4>
</td>
</tr>
</table>
</div>
<hr>
<div class="content-wrapper">
@include('app.pdf.partials.credit-note-banner')
<div class="address-container">
<div class="company-address-container company-address">
{!! $company_address !!}
</div>
@if ($shipping_address !== '<br />')
<div class="shipping-address-container shipping-address">
@if ($shipping_address)
<b>@lang('pdf_ship_to')</b> <br>
{!! $shipping_address !!}
@endif
</div>
@endif
<div class="billing-address-container billing-address" @if ($shipping_address === '<br />') style="float:right; margin-right:30px;" @endif>
@if ($billing_address)
<b>@lang('pdf_bill_to')</b> <br>
{!! $billing_address !!}
@endif
</div>
<div style="clear: both;"></div>
</div>
<div class="items-table-wrapper">
@include('app.pdf.invoice.partials.table')
</div>
<div class="notes">
@if ($notes)
<div class="notes-label">
@lang('pdf_notes')
</div>
{!! $notes !!}
@endif
</div>
</div>
</body>
</html>