improved invoice and fixed bill print/pdf layouts #540
This commit is contained in:
parent
856d444f09
commit
a656c2e0bb
100
public/css/invoice.css
vendored
Normal file
100
public/css/invoice.css
vendored
Normal file
@ -0,0 +1,100 @@
|
||||
body {
|
||||
margin: 0 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.row {
|
||||
font-size: 0; /* prevent whitespace from stuffing up inline-block column layouts */
|
||||
}
|
||||
|
||||
.col-58 {
|
||||
display: inline-block;
|
||||
width: 58%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.col-42 {
|
||||
display: inline-block;
|
||||
width: 42%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: #28a745;
|
||||
}
|
||||
|
||||
.header {
|
||||
padding-bottom: 9px;
|
||||
margin: 10px 0 20px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.company {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
max-width: 430px;
|
||||
max-height: 120px;
|
||||
}
|
||||
|
||||
.lines {
|
||||
margin: 30px 0;
|
||||
border-collapse: collapse;
|
||||
table-layout: fixed;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.lines thead tr {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.lines tbody td {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.lines .item {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.lines .quantity {
|
||||
width: 20%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lines .price {
|
||||
width: 20%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.lines .total {
|
||||
width: 20%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.notes {
|
||||
font-size: 14px;
|
||||
}
|
@ -3,138 +3,131 @@
|
||||
@section('title', trans_choice('general.bills', 1) . ': ' . $bill->bill_number)
|
||||
|
||||
@section('content')
|
||||
<section class="bill">
|
||||
<div class="row invoice-header">
|
||||
<div class="col-xs-7">
|
||||
@if ($logo)
|
||||
<img src="{{ $logo }}" class="invoice-logo" />
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-xs-5 invoice-company">
|
||||
<address>
|
||||
<strong>{{ setting('general.company_name') }}</strong><br>
|
||||
{!! nl2br(setting('general.company_address')) !!}<br>
|
||||
@if (setting('general.company_tax_number'))
|
||||
{{ trans('general.tax_number') }}: {{ setting('general.company_tax_number') }}<br>
|
||||
@endif
|
||||
<br>
|
||||
@if (setting('general.company_phone'))
|
||||
{{ setting('general.company_phone') }}<br>
|
||||
@endif
|
||||
{{ setting('general.company_email') }}
|
||||
</address>
|
||||
</div>
|
||||
<div class="row header">
|
||||
<div class="col-58">
|
||||
@if ($logo)
|
||||
<img src="{{ $logo }}" class="logo" />
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<div class="text company">
|
||||
<strong>{{ setting('general.company_name') }}</strong><br>
|
||||
{!! nl2br(setting('general.company_address')) !!}<br>
|
||||
@if (setting('general.company_tax_number'))
|
||||
{{ trans('general.tax_number') }}: {{ setting('general.company_tax_number') }}<br>
|
||||
@endif
|
||||
<br>
|
||||
@if (setting('general.company_phone'))
|
||||
{{ setting('general.company_phone') }}<br>
|
||||
@endif
|
||||
{{ setting('general.company_email') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-7">
|
||||
{{ trans('bills.bill_from') }}
|
||||
<address>
|
||||
<strong>{{ $bill->vendor_name }}</strong><br>
|
||||
{!! nl2br($bill->vendor_address) !!}<br>
|
||||
@if ($bill->vendor_tax_number)
|
||||
{{ trans('general.tax_number') }}: {{ $bill->vendor_tax_number }}<br>
|
||||
@endif
|
||||
<br>
|
||||
@if ($bill->vendor_phone)
|
||||
{{ $bill->vendor_phone }}<br>
|
||||
@endif
|
||||
{{ $bill->vendor_email }}
|
||||
</address>
|
||||
</div>
|
||||
<div class="col-xs-5">
|
||||
<div class="table-responsive">
|
||||
<table class="table no-border">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>{{ trans('bills.bill_number') }}:</th>
|
||||
<td class="text-right">{{ $bill->bill_number }}</td>
|
||||
</tr>
|
||||
@if ($bill->order_number)
|
||||
<tr>
|
||||
<th>{{ trans('bills.order_number') }}:</th>
|
||||
<td class="text-right">{{ $bill->order_number }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<th>{{ trans('bills.bill_date') }}:</th>
|
||||
<td class="text-right">{{ Date::parse($bill->billed_at)->format($date_format) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ trans('bills.payment_due') }}:</th>
|
||||
<td class="text-right">{{ Date::parse($bill->due_at)->format($date_format) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-58">
|
||||
<div class="text">
|
||||
{{ trans('bills.bill_from') }}<br><br>
|
||||
<strong>{{ $bill->vendor_name }}</strong><br>
|
||||
{!! nl2br($bill->vendor_address) !!}<br>
|
||||
@if ($bill->vendor_tax_number)
|
||||
{{ trans('general.tax_number') }}: {{ $bill->vendor_tax_number }}<br>
|
||||
@endif
|
||||
<br>
|
||||
@if ($bill->vendor_phone)
|
||||
{{ $bill->vendor_phone }}<br>
|
||||
@endif
|
||||
{{ $bill->vendor_email }}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12 table-responsive">
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<div class="text">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>{{ trans_choice('general.items', 1) }}</th>
|
||||
<th class="text-center">{{ trans('bills.quantity') }}</th>
|
||||
<th class="text-right">{{ trans('bills.price') }}</th>
|
||||
<th class="text-right">{{ trans('bills.total') }}</th>
|
||||
<th>{{ trans('bills.bill_number') }}:</th>
|
||||
<td class="text-right">{{ $bill->bill_number }}</td>
|
||||
</tr>
|
||||
@foreach($bill->items as $item)
|
||||
<tr>
|
||||
<td>
|
||||
{{ $item->name }}
|
||||
@if ($item->sku)
|
||||
<br><small>{{ trans('items.sku') }}: {{ $item->sku }}</small>
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-center">{{ $item->quantity }}</td>
|
||||
<td class="text-right">@money($item->price, $bill->currency_code, true)</td>
|
||||
<td class="text-right">@money($item->total, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@if ($bill->order_number)
|
||||
<tr>
|
||||
<th>{{ trans('bills.order_number') }}:</th>
|
||||
<td class="text-right">{{ $bill->order_number }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<th>{{ trans('bills.bill_date') }}:</th>
|
||||
<td class="text-right">{{ Date::parse($bill->billed_at)->format($date_format) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ trans('bills.payment_due') }}:</th>
|
||||
<td class="text-right">{{ Date::parse($bill->due_at)->format($date_format) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-7">
|
||||
@if ($bill->notes)
|
||||
<p class="lead">{{ trans_choice('general.notes', 2) }}:</p>
|
||||
|
||||
<p class="text-muted well well-sm no-shadow" style="margin-top: 10px;">
|
||||
{{ $bill->notes }}
|
||||
</p>
|
||||
<table class="lines">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="item">{{ trans_choice('general.items', 1) }}</th>
|
||||
<th class="quantity">{{ trans('bills.quantity') }}</th>
|
||||
<th class="price">{{ trans('bills.price') }}</th>
|
||||
<th class="total">{{ trans('bills.total') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($bill->items as $item)
|
||||
<tr>
|
||||
<td class="item">
|
||||
{{ $item->name }}
|
||||
@if ($item->sku)
|
||||
<br><small>{{ trans('items.sku') }}: {{ $item->sku }}</small>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-xs-5">
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
@foreach($bill->totals as $total)
|
||||
@if ($total->code != 'total')
|
||||
<tr>
|
||||
<th>{{ trans($total->title) }}:</th>
|
||||
<td class="text-right">@money($total->amount, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@else
|
||||
@if ($bill->paid)
|
||||
<tr class="text-success">
|
||||
<th>{{ trans('invoices.paid') }}:</th>
|
||||
<td class="text-right">- @money($bill->paid, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<th>{{ trans($total->name) }}:</th>
|
||||
<td class="text-right">@money($total->amount - $bill->paid, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</td>
|
||||
<td class="quantity">{{ $item->quantity }}</td>
|
||||
<td class="price">@money($item->price, $bill->currency_code, true)</td>
|
||||
<td class="total">@money($item->total, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-58">
|
||||
@if ($bill->notes)
|
||||
<table class="text" style="page-break-inside: avoid;">
|
||||
<tr><th>{{ trans_choice('general.notes', 2) }}</th></tr>
|
||||
<tr><td>{{ $bill->notes }}</td></tr>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<table class="text" style="page-break-inside: avoid;">
|
||||
<tbody>
|
||||
@foreach ($bill->totals as $total)
|
||||
@if ($total->code != 'total')
|
||||
<tr>
|
||||
<th>{{ trans($total->title) }}:</th>
|
||||
<td class="text-right">@money($total->amount, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@else
|
||||
@if ($bill->paid)
|
||||
<tr class="text-success">
|
||||
<th>{{ trans('invoices.paid') }}:</th>
|
||||
<td class="text-right">- @money($bill->paid, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<th>{{ trans($total->name) }}:</th>
|
||||
<td class="text-right">@money($total->amount - $bill->paid, $bill->currency_code, true)</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
@ -2,100 +2,15 @@
|
||||
|
||||
@section('title', trans_choice('general.invoices', 1) . ': ' . $invoice->invoice_number)
|
||||
|
||||
@push('css')
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
color: #000;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
th, td {
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
.row {
|
||||
font-size: 0; /* prevent whitespace from stuffing up inline-block column layouts */
|
||||
}
|
||||
.col-58 {
|
||||
display: inline-block;
|
||||
width: 58%;
|
||||
vertical-align: top;
|
||||
}
|
||||
.col-42 {
|
||||
display: inline-block;
|
||||
width: 42%;
|
||||
vertical-align: top;
|
||||
}
|
||||
.text {
|
||||
font-size: 16px;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
.text-success {
|
||||
color: #28a745;
|
||||
}
|
||||
.invoice-header {
|
||||
padding-bottom: 9px;
|
||||
margin: 10px 0 20px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.invoice-company {
|
||||
padding-left: 23px;
|
||||
}
|
||||
.invoice-logo {
|
||||
max-width: 430px;
|
||||
max-height: 120px;
|
||||
}
|
||||
.invoice-lines {
|
||||
margin: 30px 0;
|
||||
border-collapse: collapse;
|
||||
table-layout: fixed;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.invoice-lines thead tr {
|
||||
background-color: #eee;
|
||||
}
|
||||
.invoice-lines tbody td {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
.invoice-lines .item {
|
||||
width: 40%;
|
||||
}
|
||||
.invoice-lines .quantity {
|
||||
width: 20%;
|
||||
text-align: center;
|
||||
}
|
||||
.invoice-lines .price {
|
||||
width: 20%:;
|
||||
text-align: right;
|
||||
}
|
||||
.invoice-lines .total {
|
||||
width: 20%;
|
||||
text-align: right;
|
||||
}
|
||||
.notes {
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="row invoice-header">
|
||||
<div class="row header">
|
||||
<div class="col-58">
|
||||
@if ($logo)
|
||||
<img src="{{ $logo }}" class="invoice-logo">
|
||||
<img src="{{ $logo }}" class="logo" />
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-42">
|
||||
<div class="text invoice-company">
|
||||
<div class="text company">
|
||||
<strong>{{ setting('general.company_name') }}</strong><br>
|
||||
{!! nl2br(setting('general.company_address')) !!}<br>
|
||||
@if (setting('general.company_tax_number'))
|
||||
@ -154,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="invoice-lines">
|
||||
<table class="lines">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="item">{{ trans_choice('general.items', 1) }}</th>
|
||||
@ -165,17 +80,17 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($invoice->items as $item)
|
||||
<tr>
|
||||
<td class="item">
|
||||
{{ $item->name }}
|
||||
@if ($item->sku)
|
||||
<br><small>{{ trans('items.sku') }}: {{ $item->sku }}</small>
|
||||
@endif
|
||||
</td>
|
||||
<td class="quantity">{{ $item->quantity }}</td>
|
||||
<td class="price">@money($item->price, $invoice->currency_code, true)</td>
|
||||
<td class="total">@money($item->total, $invoice->currency_code, true)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="item">
|
||||
{{ $item->name }}
|
||||
@if ($item->sku)
|
||||
<br><small>{{ trans('items.sku') }}: {{ $item->sku }}</small>
|
||||
@endif
|
||||
</td>
|
||||
<td class="quantity">{{ $item->quantity }}</td>
|
||||
<td class="price">@money($item->price, $invoice->currency_code, true)</td>
|
||||
<td class="total">@money($item->total, $invoice->currency_code, true)</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@ -183,10 +98,10 @@
|
||||
<div class="row">
|
||||
<div class="col-58">
|
||||
@if ($invoice->notes)
|
||||
<table class="text" style="page-break-inside: avoid;">
|
||||
<tr><th>{{ trans_choice('general.notes', 2) }}</th></tr>
|
||||
<tr><td>{{ $invoice->notes }}</td></tr>
|
||||
</table>
|
||||
<table class="text" style="page-break-inside: avoid;">
|
||||
<tr><th>{{ trans_choice('general.notes', 2) }}</th></tr>
|
||||
<tr><td>{{ $invoice->notes }}</td></tr>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-42">
|
||||
|
@ -9,48 +9,12 @@
|
||||
|
||||
<title>@yield('title') - @setting('general.company_name')</title>
|
||||
|
||||
<!-- Bootstrap 3.3.6 -->
|
||||
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/bootstrap/css/bootstrap.min.css') }}">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="{{ asset('public/css/font-awesome.min.css') }}">
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="{{ asset('public/css/ionicons.min.css') }}">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/dist/css/AdminLTE.min.css') }}">
|
||||
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
||||
folder instead of downloading all of them to reduce the load. -->
|
||||
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/dist/css/skins/_all-skins.min.css') }}">
|
||||
<!-- App style -->
|
||||
<link rel="stylesheet" href="{{ asset('public/css/app.css?v=' . version('short')) }}">
|
||||
|
||||
<style type="text/css">
|
||||
* {
|
||||
font-family: "DejaVu Sans Mono", monospace;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="{{ asset('public/css/invoice.css?v=' . version('short')) }}">
|
||||
|
||||
@stack('css')
|
||||
|
||||
@stack('stylesheet')
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- jQuery 2.2.3 -->
|
||||
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/jQuery/jquery-2.2.3.min.js') }}"></script>
|
||||
<!-- Bootstrap 3.3.6 -->
|
||||
<script src="{{ asset('vendor/almasaeed2010/adminlte/bootstrap/js/bootstrap.min.js') }}"></script>
|
||||
<!-- SlimScroll -->
|
||||
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/slimScroll/jquery.slimscroll.min.js') }}"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="{{ asset('vendor/almasaeed2010/adminlte/dist/js/app.min.js') }}"></script>
|
||||
|
||||
<script src="{{ asset('public/js/app.js?v=' . version('short')) }}"></script>
|
||||
|
||||
@stack('js')
|
||||
|
||||
@stack('scripts')
|
||||
|
@ -9,6 +9,8 @@
|
||||
|
||||
<title>@yield('title') - @setting('general.company_name')</title>
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('public/css/invoice.css?v=' . version('short')) }}">
|
||||
|
||||
@stack('css')
|
||||
|
||||
@stack('stylesheet')
|
||||
|
Loading…
x
Reference in New Issue
Block a user