print template
This commit is contained in:
parent
c6dbb977b9
commit
76367a31ec
@ -446,7 +446,7 @@ class Invoices extends Controller
|
|||||||
|
|
||||||
$invoice->paid = $paid;
|
$invoice->paid = $paid;
|
||||||
|
|
||||||
$invoice->template_path = 'incomes.invoices.print';
|
$invoice->template_path = 'incomes.invoices.print_' . setting('invoice.template' ,'default');
|
||||||
|
|
||||||
event(new \App\Events\Income\InvoicePrinting($invoice));
|
event(new \App\Events\Income\InvoicePrinting($invoice));
|
||||||
|
|
||||||
|
126
app/Http/Controllers/Modals/InvoiceTemplates.php
Normal file
126
app/Http/Controllers/Modals/InvoiceTemplates.php
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Modals;
|
||||||
|
|
||||||
|
use App\Abstracts\Http\Controller;
|
||||||
|
use App\Http\Requests\Setting\Setting as Request;
|
||||||
|
use App\Models\Common\Company;
|
||||||
|
use App\Models\Module\Module;
|
||||||
|
use App\Traits\DateTime;
|
||||||
|
use App\Traits\Uploads;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class InvoiceTemplates extends Controller
|
||||||
|
{
|
||||||
|
use DateTime, Uploads;
|
||||||
|
|
||||||
|
public $skip_keys = ['company_id', '_method', '_token', '_prefix', '_template'];
|
||||||
|
|
||||||
|
public $file_keys = ['company.logo', 'invoice.logo'];
|
||||||
|
/**
|
||||||
|
* Instantiate a new controller instance.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// Add CRUD permission check
|
||||||
|
$this->middleware('permission:create-settings-settings')->only(['create', 'store']);
|
||||||
|
$this->middleware('permission:read-settings-settings')->only(['index', 'edit']);
|
||||||
|
$this->middleware('permission:update-settings-settings')->only(['update', 'enable', 'disable']);
|
||||||
|
$this->middleware('permission:delete-settings-settings')->only('destroy');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function update(Request $request)
|
||||||
|
{
|
||||||
|
$fields = $request->all();
|
||||||
|
$prefix = $request->get('_prefix', 'general');
|
||||||
|
$company_id = $request->get('company_id');
|
||||||
|
|
||||||
|
if (empty($company_id)) {
|
||||||
|
$company_id = session('company_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$company = Company::find($company_id);
|
||||||
|
|
||||||
|
$companies = Company::all()->count();
|
||||||
|
|
||||||
|
foreach ($fields as $key => $value) {
|
||||||
|
$real_key = $prefix . '.' . $key;
|
||||||
|
|
||||||
|
// Don't process unwanted keys
|
||||||
|
if (in_array($key, $this->skip_keys)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process file uploads
|
||||||
|
if (in_array($real_key, $this->file_keys)) {
|
||||||
|
// Upload attachment
|
||||||
|
if ($request->file($key)) {
|
||||||
|
$media = $this->getMedia($request->file($key), 'settings');
|
||||||
|
|
||||||
|
$company->attachMedia($media, Str::snake($real_key));
|
||||||
|
|
||||||
|
$value = $media->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent reset
|
||||||
|
if (empty($value)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($real_key == 'default.locale') {
|
||||||
|
user()->setAttribute('locale', $value)->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If only 1 company
|
||||||
|
if ($companies == 1) {
|
||||||
|
$this->oneCompany($real_key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
setting()->set($real_key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save all settings
|
||||||
|
setting()->save();
|
||||||
|
|
||||||
|
$message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]);
|
||||||
|
|
||||||
|
$response = [
|
||||||
|
'status' => null,
|
||||||
|
'success' => true,
|
||||||
|
'error' => false,
|
||||||
|
'message' => $message,
|
||||||
|
'data' => null,
|
||||||
|
'redirect' => route('settings.invoice.edit'),
|
||||||
|
];
|
||||||
|
|
||||||
|
flash($message)->success();
|
||||||
|
|
||||||
|
return response()->json($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function oneCompany($real_key, $value)
|
||||||
|
{
|
||||||
|
switch ($real_key) {
|
||||||
|
case 'company.name':
|
||||||
|
Installer::updateEnv(['MAIL_FROM_NAME' => '"' . $value . '"']);
|
||||||
|
break;
|
||||||
|
case 'company.email':
|
||||||
|
Installer::updateEnv(['MAIL_FROM_ADDRESS' => $value]);
|
||||||
|
break;
|
||||||
|
case 'default.locale':
|
||||||
|
Installer::updateEnv(['APP_LOCALE' => $value]);
|
||||||
|
break;
|
||||||
|
case 'schedule.time':
|
||||||
|
Installer::updateEnv(['APP_SCHEDULE_TIME' => '"' . $value . '"']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -58,7 +58,7 @@ class ViewComposer extends Provider
|
|||||||
|
|
||||||
// Add logo
|
// Add logo
|
||||||
View::composer(
|
View::composer(
|
||||||
['expenses.bills.print', 'expenses.bills.show', 'incomes.invoices.print', 'incomes.invoices.show', 'portal.invoices.show'],
|
['expenses.bills.print', 'expenses.bills.show', 'incomes.invoices.print_default', 'incomes.invoices.print_classic', 'incomes.invoices.print_modern', 'incomes.invoices.show', 'portal.invoices.show'],
|
||||||
'App\Http\ViewComposers\Logo'
|
'App\Http\ViewComposers\Logo'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
59
public/css/custom.css
vendored
59
public/css/custom.css
vendored
@ -148,6 +148,14 @@
|
|||||||
/*--------Border Radius 0 Finished--------*/
|
/*--------Border Radius 0 Finished--------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------Border Radius 5--------*/
|
||||||
|
.border-radius-5
|
||||||
|
{
|
||||||
|
border-radius: 5px !important;
|
||||||
|
}
|
||||||
|
/*--------Border Radius 5 Finished--------*/
|
||||||
|
|
||||||
|
|
||||||
.dropup .dropdown-toggle::after
|
.dropup .dropdown-toggle::after
|
||||||
{
|
{
|
||||||
display: none !important;
|
display: none !important;
|
||||||
@ -749,6 +757,57 @@ table .align-items-center td span.badge {
|
|||||||
font-size: 9px;
|
font-size: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------Print Template--------*/
|
||||||
|
.choose
|
||||||
|
{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choose:hover > img
|
||||||
|
{
|
||||||
|
opacity: 0.50 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-print
|
||||||
|
{
|
||||||
|
background-color: rgba(229, 229, 229, 0.4)!important;;
|
||||||
|
}
|
||||||
|
|
||||||
|
.print-edge
|
||||||
|
{
|
||||||
|
width: 147px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------Border Dashed--------*/
|
||||||
|
.border-dashed
|
||||||
|
{
|
||||||
|
border-top: 1px dashed #3c3f72 !important;
|
||||||
|
}
|
||||||
|
/*--------Border Dashed Finish--------*/
|
||||||
|
|
||||||
|
.invoice-classic-line
|
||||||
|
{
|
||||||
|
border: 2px solid #3c3f72;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invoice-classic-frame
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
height:100px;
|
||||||
|
border: 3px solid #3c3f72;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invoice-classic-inline-frame
|
||||||
|
{
|
||||||
|
margin: 7px 1%;
|
||||||
|
width: 98%;
|
||||||
|
height: 80px;
|
||||||
|
border: 3px solid #3c3f72;
|
||||||
|
}
|
||||||
|
/*--------Print Template Finish--------*/
|
||||||
|
|
||||||
|
|
||||||
/*----------------RESPONSIVE START LINE----------------*/
|
/*----------------RESPONSIVE START LINE----------------*/
|
||||||
/*--------Xs Breakpoint--------*/
|
/*--------Xs Breakpoint--------*/
|
||||||
@media (min-width: 304px) and (max-width: 575.98px)
|
@media (min-width: 304px) and (max-width: 575.98px)
|
||||||
|
BIN
public/img/print_templates/classic.png
Normal file
BIN
public/img/print_templates/classic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
BIN
public/img/print_templates/default.png
Normal file
BIN
public/img/print_templates/default.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
BIN
public/img/print_templates/modern.png
Normal file
BIN
public/img/print_templates/modern.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
35
resources/assets/js/views/settings/settings.js
vendored
35
resources/assets/js/views/settings/settings.js
vendored
@ -36,6 +36,14 @@ const app = new Vue({
|
|||||||
smtpUsername:true,
|
smtpUsername:true,
|
||||||
smtpPassword:true,
|
smtpPassword:true,
|
||||||
smtpEncryption:true,
|
smtpEncryption:true,
|
||||||
|
},
|
||||||
|
invoice_form: new Form('template'),
|
||||||
|
template: {
|
||||||
|
modal: false,
|
||||||
|
title: '',
|
||||||
|
message: '',
|
||||||
|
html: '',
|
||||||
|
errors: new Error()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -72,6 +80,31 @@ const app = new Vue({
|
|||||||
this.email.smtpEncryption = true;
|
this.email.smtpEncryption = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
onTemplate() {
|
||||||
|
this.template.modal = true;
|
||||||
|
|
||||||
|
this.invoice_form = new Form('template');
|
||||||
|
|
||||||
|
this.invoice_form.template = this.invoice_form._template;
|
||||||
|
},
|
||||||
|
|
||||||
|
addTemplate() {
|
||||||
|
if (this.invoice_form.template != 1) {
|
||||||
|
this.invoice_form.submit();
|
||||||
|
|
||||||
|
this.template.errors = this.invoice_form.errors;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
closeTemplate() {
|
||||||
|
this.template = {
|
||||||
|
modal: false,
|
||||||
|
title: '',
|
||||||
|
message: '',
|
||||||
|
errors: this.invoice_form.errors
|
||||||
|
};
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -52,6 +52,11 @@ return [
|
|||||||
'subheading' => 'Subheading',
|
'subheading' => 'Subheading',
|
||||||
'due_receipt' => 'Due upon receipt',
|
'due_receipt' => 'Due upon receipt',
|
||||||
'due_days' => 'Due within :days days',
|
'due_days' => 'Due within :days days',
|
||||||
|
'invoice_template' => 'Invoice Template',
|
||||||
|
'choose_template' => 'Choose a template',
|
||||||
|
'default' => 'Default',
|
||||||
|
'classic' => 'Classic',
|
||||||
|
'modern' => 'Modern',
|
||||||
],
|
],
|
||||||
|
|
||||||
'default' => [
|
'default' => [
|
||||||
|
@ -1,282 +0,0 @@
|
|||||||
@extends('layouts.print')
|
|
||||||
|
|
||||||
@section('title', trans_choice('general.invoices', 1) . ': ' . $invoice->invoice_number)
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
<div class="mt-6">
|
|
||||||
<div class="row mx--4">
|
|
||||||
<div class="col-md-7 border-bottom-1">
|
|
||||||
<div class="table-responsive mt-2">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<img src="{{ $logo }}" alt="{{ setting('company.name') }}"/>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-5 border-bottom-1">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ setting('company.name') }}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{!! nl2br(setting('company.address')) !!}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@if (setting('company.tax_number'))
|
|
||||||
{{ trans('general.tax_number') }}: {{ setting('company.tax_number') }}
|
|
||||||
@endif
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@if (setting('company.phone'))
|
|
||||||
{{ setting('company.phone') }}
|
|
||||||
@endif
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ setting('company.email') }}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-7">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ trans('invoices.bill_to') }}
|
|
||||||
@stack('name_input_start')
|
|
||||||
<strong class="d-block">{{ $invoice->contact_name }}</strong>
|
|
||||||
@stack('name_input_end')
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@stack('address_input_start')
|
|
||||||
{!! nl2br($invoice->contact_address) !!}
|
|
||||||
@stack('address_input_end')
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@stack('tax_number_input_start')
|
|
||||||
@if ($invoice->contact_tax_number)
|
|
||||||
{{ trans('general.tax_number') }}: {{ $invoice->contact_tax_number }}<br>
|
|
||||||
@endif
|
|
||||||
@stack('tax_number_input_end')
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@stack('phone_input_start')
|
|
||||||
@if ($invoice->contact_phone)
|
|
||||||
{{ $invoice->contact_phone }}
|
|
||||||
@endif
|
|
||||||
@stack('phone_input_end')
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
@stack('email_start')
|
|
||||||
{{ $invoice->contact_email }}
|
|
||||||
@stack('email_input_end')
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-5">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
@stack('invoice_number_input_start')
|
|
||||||
<tr>
|
|
||||||
<th>{{ trans('invoices.invoice_number') }}:</th>
|
|
||||||
<td class="text-right">{{ $invoice->invoice_number }}</td>
|
|
||||||
</tr>
|
|
||||||
@stack('invoice_number_input_end')
|
|
||||||
|
|
||||||
@stack('order_number_input_start')
|
|
||||||
@if ($invoice->order_number)
|
|
||||||
<tr>
|
|
||||||
<th>{{ trans('invoices.order_number') }}:</th>
|
|
||||||
<td class="text-right">{{ $invoice->order_number }}</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
@stack('order_number_input_end')
|
|
||||||
|
|
||||||
@stack('invoiced_at_input_start')
|
|
||||||
<tr>
|
|
||||||
<th>{{ trans('invoices.invoice_date') }}:</th>
|
|
||||||
<td class="text-right">@date($invoice->invoiced_at)</td>
|
|
||||||
</tr>
|
|
||||||
@stack('invoiced_at_input_end')
|
|
||||||
|
|
||||||
@stack('due_at_input_start')
|
|
||||||
<tr>
|
|
||||||
<th>{{ trans('invoices.payment_due') }}:</th>
|
|
||||||
<td class="text-right">@date($invoice->due_at)</td>
|
|
||||||
</tr>
|
|
||||||
@stack('due_at_input_end')
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row show-table">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-striped">
|
|
||||||
<tbody>
|
|
||||||
<tr class="row">
|
|
||||||
@stack('name_th_start')
|
|
||||||
<th class="col-xs-4 col-sm-3 pl-5">{{ trans_choice($text_override['items'], 2) }}</th>
|
|
||||||
@stack('name_th_end')
|
|
||||||
|
|
||||||
@stack('quantity_th_start')
|
|
||||||
<th class="col-xs-4 col-sm-3 text-center">{{ trans($text_override['quantity']) }}</th>
|
|
||||||
@stack('quantity_th_end')
|
|
||||||
|
|
||||||
@stack('price_th_start')
|
|
||||||
<th class="col-sm-3 text-center d-none d-sm-block pl-5">{{ trans($text_override['price']) }}</th>
|
|
||||||
@stack('price_th_end')
|
|
||||||
|
|
||||||
@stack('total_th_start')
|
|
||||||
<th class="col-xs-4 col-sm-3 text-right pr-5">{{ trans('invoices.total') }}</th>
|
|
||||||
@stack('total_th_end')
|
|
||||||
</tr>
|
|
||||||
@foreach($invoice->items as $item)
|
|
||||||
<tr class="row">
|
|
||||||
@stack('name_td_start')
|
|
||||||
<td class="col-xs-4 col-sm-3 pl-5">
|
|
||||||
{{ $item->name }}
|
|
||||||
@if ($item->desc)
|
|
||||||
<br><small>{!! $item->desc !!}</small>
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
@stack('name_td_end')
|
|
||||||
|
|
||||||
@stack('quantity_td_start')
|
|
||||||
<td class="col-xs-4 col-sm-3 text-center">{{ $item->quantity }}</td>
|
|
||||||
@stack('quantity_td_end')
|
|
||||||
|
|
||||||
@stack('price_td_start')
|
|
||||||
<td class="col-sm-3 text-center d-none d-sm-block pl-5">@money($item->price, $invoice->currency_code, true)</td>
|
|
||||||
@stack('price_td_end')
|
|
||||||
|
|
||||||
@stack('total_td_start')
|
|
||||||
<td class="col-xs-4 col-sm-3 text-right pr-5">@money($item->total, $invoice->currency_code, true)</td>
|
|
||||||
@stack('total_td_end')
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mt-5">
|
|
||||||
<div class="col-md-7">
|
|
||||||
<div class="table-responsive">
|
|
||||||
@stack('notes_input_start')
|
|
||||||
@if ($invoice->notes)
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<p class="form-control-label">{{ trans_choice('general.notes', 2) }}</p>
|
|
||||||
<p class="form-control text-muted">{{ $invoice->notes }}</p>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
@endif
|
|
||||||
@stack('notes_input_end')
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-5">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table">
|
|
||||||
<tbody>
|
|
||||||
@foreach ($invoice->totals as $total)
|
|
||||||
@if ($total->code != 'total')
|
|
||||||
@stack($total->code . '_td_start')
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ trans($total->title) }}:
|
|
||||||
</th>
|
|
||||||
<td class="text-right">
|
|
||||||
@money($total->amount, $invoice->currency_code, true)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@stack($total->code . '_td_end')
|
|
||||||
@else
|
|
||||||
@if ($invoice->paid)
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ trans('invoices.paid') }}:
|
|
||||||
</th>
|
|
||||||
<td class="text-right">
|
|
||||||
- @money($invoice->paid, $invoice->currency_code, true)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endif
|
|
||||||
@stack('grand_total_td_start')
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{{ trans($total->name) }}:
|
|
||||||
</th>
|
|
||||||
<td class="text-right">
|
|
||||||
@money($total->amount - $invoice->paid, $invoice->currency_code, true)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@stack('grand_total_td_end')
|
|
||||||
@endif
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@if ($invoice->footer)
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
{!! $invoice->footer !!}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
@endsection
|
|
265
resources/views/incomes/invoices/print_classic.blade.php
Normal file
265
resources/views/incomes/invoices/print_classic.blade.php
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
@extends('layouts.print')
|
||||||
|
|
||||||
|
@section('title', trans_choice('general.invoices', 1) . ': ' . $invoice->invoice_number)
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<img class="mt-4" src="{{ $logo }}" alt="{{ setting('company.name') }}"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5 text-right">
|
||||||
|
<p class="mb-0 mt-4 font-weight-600">
|
||||||
|
{{ setting('company.name') }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="mb-0">
|
||||||
|
{!! nl2br(setting('company.address')) !!}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="mb-0">
|
||||||
|
@if (setting('company.tax_number'))
|
||||||
|
{{ trans('general.tax_number') }}: {{ setting('company.tax_number') }}
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="mb-0 mt-3">
|
||||||
|
@if (setting('company.phone'))
|
||||||
|
{{ setting('company.phone') }}
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="mb-0">
|
||||||
|
{{ setting('company.email') }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row my-4">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<hr class="bg-default invoice-classic-line mb-1 mt-5">
|
||||||
|
<hr class="bg-default invoice-classic-line my-0">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 text-center">
|
||||||
|
<div class="invoice-classic-frame">
|
||||||
|
<div class="invoice-classic-inline-frame">
|
||||||
|
@stack('invoice_number_input_start')
|
||||||
|
<p class="mt-4">
|
||||||
|
<b>{{ trans('invoices.invoice_number') }}:</b>
|
||||||
|
{{ $invoice->invoice_number }}
|
||||||
|
</p>
|
||||||
|
@stack('invoice_number_input_end')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<hr class="bg-default invoice-classic-line mb-1 mt-5">
|
||||||
|
<hr class="bg-default invoice-classic-line my-0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-md-7">
|
||||||
|
|
||||||
|
<h4>{{ trans('invoices.bill_to') }}</h4>
|
||||||
|
@stack('name_input_start')
|
||||||
|
<strong class="d-block">{{ $invoice->contact_name }}</strong>
|
||||||
|
@stack('name_input_end')
|
||||||
|
|
||||||
|
@stack('address_input_start')
|
||||||
|
<p class="mb-0">
|
||||||
|
{!! nl2br($invoice->contact_address) !!}
|
||||||
|
</p>
|
||||||
|
@stack('address_input_end')
|
||||||
|
|
||||||
|
@stack('tax_number_input_start')
|
||||||
|
<p class="mb-0">
|
||||||
|
@if ($invoice->contact_tax_number)
|
||||||
|
{{ trans('general.tax_number') }}: {{ $invoice->contact_tax_number }}<br>
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
@stack('tax_number_input_end')
|
||||||
|
|
||||||
|
@stack('phone_input_start')
|
||||||
|
<p class="mb-0 mt-3">
|
||||||
|
@if ($invoice->contact_phone)
|
||||||
|
{{ $invoice->contact_phone }}
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
@stack('phone_input_end')
|
||||||
|
|
||||||
|
@stack('email_start')
|
||||||
|
<p class="mb-0">
|
||||||
|
{{ $invoice->contact_email }}
|
||||||
|
</p>
|
||||||
|
@stack('email_input_end')
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5 text-right">
|
||||||
|
@stack('order_number_input_start')
|
||||||
|
@if ($invoice->order_number)
|
||||||
|
<p>
|
||||||
|
<b>{{ trans('invoices.order_number') }}:</b>
|
||||||
|
{{ $invoice->order_number }}
|
||||||
|
</p>
|
||||||
|
@endif
|
||||||
|
@stack('order_number_input_end')
|
||||||
|
|
||||||
|
@stack('invoiced_at_input_start')
|
||||||
|
<p>
|
||||||
|
<b>{{ trans('invoices.invoice_date') }}:</b>
|
||||||
|
@date($invoice->invoiced_at)
|
||||||
|
</p>
|
||||||
|
@stack('invoiced_at_input_end')
|
||||||
|
|
||||||
|
@stack('due_at_input_start')
|
||||||
|
<p>
|
||||||
|
<b>{{ trans('invoices.payment_due') }}:</b>
|
||||||
|
@date($invoice->due_at)
|
||||||
|
</p>
|
||||||
|
@stack('due_at_input_end')
|
||||||
|
|
||||||
|
@foreach ($invoice->totals as $total)
|
||||||
|
@if ($total->code == 'total')
|
||||||
|
<p class="bg-light border-radius-5 float-right text-center w-50">
|
||||||
|
<b>{{ trans($total->name) }}:</b>
|
||||||
|
@money($total->amount - $invoice->paid, $invoice->currency_code, true)
|
||||||
|
</p>
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row show-table">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr class="row border-dashed">
|
||||||
|
@stack('name_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 pl-5">{{ trans_choice($text_override['items'], 2) }}</th>
|
||||||
|
@stack('name_th_end')
|
||||||
|
|
||||||
|
@stack('quantity_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-center">{{ trans($text_override['quantity']) }}</th>
|
||||||
|
@stack('quantity_th_end')
|
||||||
|
|
||||||
|
@stack('price_th_start')
|
||||||
|
<th class="col-sm-3 text-center d-none d-sm-block pl-5">{{ trans($text_override['price']) }}</th>
|
||||||
|
@stack('price_th_end')
|
||||||
|
|
||||||
|
@stack('total_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-right pr-5">{{ trans('invoices.total') }}</th>
|
||||||
|
@stack('total_th_end')
|
||||||
|
</tr>
|
||||||
|
@foreach($invoice->items as $item)
|
||||||
|
<tr class="row border-dashed">
|
||||||
|
@stack('name_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 pl-5">
|
||||||
|
{{ $item->name }}
|
||||||
|
@if ($item->desc)
|
||||||
|
<br><small>{!! $item->desc !!}</small>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
@stack('name_td_end')
|
||||||
|
|
||||||
|
@stack('quantity_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-center">{{ $item->quantity }}</td>
|
||||||
|
@stack('quantity_td_end')
|
||||||
|
|
||||||
|
@stack('price_td_start')
|
||||||
|
<td class="col-sm-3 text-center d-none d-sm-block pl-5">@money($item->price, $invoice->currency_code, true)</td>
|
||||||
|
@stack('price_td_end')
|
||||||
|
|
||||||
|
@stack('total_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-right pr-5">@money($item->total, $invoice->currency_code, true)</td>
|
||||||
|
@stack('total_td_end')
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<div class="table-responsive">
|
||||||
|
@stack('notes_input_start')
|
||||||
|
@if ($invoice->notes)
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<p class="form-control-label">{{ trans_choice('general.notes', 2) }}</p>
|
||||||
|
<p class="form-control text-muted">{{ $invoice->notes }}</p>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
@endif
|
||||||
|
@stack('notes_input_end')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless border-dashed">
|
||||||
|
<tbody>
|
||||||
|
@foreach ($invoice->totals as $total)
|
||||||
|
@if ($total->code != 'total')
|
||||||
|
@stack($total->code . '_td_start')
|
||||||
|
<tr class="border-dashed">
|
||||||
|
<th>
|
||||||
|
{{ trans($total->title) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack($total->code . '_td_end')
|
||||||
|
@else
|
||||||
|
@if ($invoice->paid)
|
||||||
|
<tr class="border-dashed">
|
||||||
|
<th>
|
||||||
|
{{ trans('invoices.paid') }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
- @money($invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
@stack('grand_total_td_start')
|
||||||
|
<tr class="border-dashed">
|
||||||
|
<th>
|
||||||
|
{{ trans($total->name) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount - $invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack('grand_total_td_end')
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if ($invoice->footer)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless mb-0">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{!! $invoice->footer !!}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endsection
|
280
resources/views/incomes/invoices/print_default.blade.php
Normal file
280
resources/views/incomes/invoices/print_default.blade.php
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
@extends('layouts.print')
|
||||||
|
|
||||||
|
@section('title', trans_choice('general.invoices', 1) . ': ' . $invoice->invoice_number)
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="row mx--4">
|
||||||
|
<div class="col-md-7 border-bottom-1">
|
||||||
|
<div class="table-responsive mt-4">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<img src="{{ $logo }}" alt="{{ setting('company.name') }}"/>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5 border-bottom-1">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ setting('company.name') }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{!! nl2br(setting('company.address')) !!}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@if (setting('company.tax_number'))
|
||||||
|
{{ trans('general.tax_number') }}: {{ setting('company.tax_number') }}
|
||||||
|
@endif
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@if (setting('company.phone'))
|
||||||
|
{{ setting('company.phone') }}
|
||||||
|
@endif
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ setting('company.email') }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans('invoices.bill_to') }}
|
||||||
|
@stack('name_input_start')
|
||||||
|
<strong class="d-block">{{ $invoice->contact_name }}</strong>
|
||||||
|
@stack('name_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@stack('address_input_start')
|
||||||
|
{!! nl2br($invoice->contact_address) !!}
|
||||||
|
@stack('address_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@stack('tax_number_input_start')
|
||||||
|
@if ($invoice->contact_tax_number)
|
||||||
|
{{ trans('general.tax_number') }}: {{ $invoice->contact_tax_number }}<br>
|
||||||
|
@endif
|
||||||
|
@stack('tax_number_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@stack('phone_input_start')
|
||||||
|
@if ($invoice->contact_phone)
|
||||||
|
{{ $invoice->contact_phone }}
|
||||||
|
@endif
|
||||||
|
@stack('phone_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@stack('email_start')
|
||||||
|
{{ $invoice->contact_email }}
|
||||||
|
@stack('email_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
@stack('invoice_number_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.invoice_number') }}:</th>
|
||||||
|
<td class="text-right">{{ $invoice->invoice_number }}</td>
|
||||||
|
</tr>
|
||||||
|
@stack('invoice_number_input_end')
|
||||||
|
|
||||||
|
@stack('order_number_input_start')
|
||||||
|
@if ($invoice->order_number)
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.order_number') }}:</th>
|
||||||
|
<td class="text-right">{{ $invoice->order_number }}</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
@stack('order_number_input_end')
|
||||||
|
|
||||||
|
@stack('invoiced_at_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.invoice_date') }}:</th>
|
||||||
|
<td class="text-right">@date($invoice->invoiced_at)</td>
|
||||||
|
</tr>
|
||||||
|
@stack('invoiced_at_input_end')
|
||||||
|
|
||||||
|
@stack('due_at_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.payment_due') }}:</th>
|
||||||
|
<td class="text-right">@date($invoice->due_at)</td>
|
||||||
|
</tr>
|
||||||
|
@stack('due_at_input_end')
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row show-table">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">
|
||||||
|
<tbody>
|
||||||
|
<tr class="row bg-default text-white">
|
||||||
|
@stack('name_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 pl-5 text-white">{{ trans_choice($text_override['items'], 2) }}</th>
|
||||||
|
@stack('name_th_end')
|
||||||
|
|
||||||
|
@stack('quantity_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-center text-white">{{ trans($text_override['quantity']) }}</th>
|
||||||
|
@stack('quantity_th_end')
|
||||||
|
|
||||||
|
@stack('price_th_start')
|
||||||
|
<th class="col-sm-3 text-center d-none d-sm-block pl-5 text-white">{{ trans($text_override['price']) }}</th>
|
||||||
|
@stack('price_th_end')
|
||||||
|
|
||||||
|
@stack('total_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-right pr-5 text-white">{{ trans('invoices.total') }}</th>
|
||||||
|
@stack('total_th_end')
|
||||||
|
</tr>
|
||||||
|
@foreach($invoice->items as $item)
|
||||||
|
<tr class="row">
|
||||||
|
@stack('name_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 pl-5">
|
||||||
|
{{ $item->name }}
|
||||||
|
@if ($item->desc)
|
||||||
|
<br><small>{!! $item->desc !!}</small>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
@stack('name_td_end')
|
||||||
|
|
||||||
|
@stack('quantity_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-center">{{ $item->quantity }}</td>
|
||||||
|
@stack('quantity_td_end')
|
||||||
|
|
||||||
|
@stack('price_td_start')
|
||||||
|
<td class="col-sm-3 text-center d-none d-sm-block pl-5">@money($item->price, $invoice->currency_code, true)</td>
|
||||||
|
@stack('price_td_end')
|
||||||
|
|
||||||
|
@stack('total_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-right pr-5">@money($item->total, $invoice->currency_code, true)</td>
|
||||||
|
@stack('total_td_end')
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mt-5">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<div class="table-responsive">
|
||||||
|
@stack('notes_input_start')
|
||||||
|
@if ($invoice->notes)
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<p class="form-control-label">{{ trans_choice('general.notes', 2) }}</p>
|
||||||
|
<p class="form-control text-muted">{{ $invoice->notes }}</p>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
@endif
|
||||||
|
@stack('notes_input_end')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">
|
||||||
|
<tbody>
|
||||||
|
@foreach ($invoice->totals as $total)
|
||||||
|
@if ($total->code != 'total')
|
||||||
|
@stack($total->code . '_td_start')
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans($total->title) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack($total->code . '_td_end')
|
||||||
|
@else
|
||||||
|
@if ($invoice->paid)
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans('invoices.paid') }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
- @money($invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
@stack('grand_total_td_start')
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans($total->name) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount - $invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack('grand_total_td_end')
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if ($invoice->footer)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{!! $invoice->footer !!}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endsection
|
276
resources/views/incomes/invoices/print_modern.blade.php
Normal file
276
resources/views/incomes/invoices/print_modern.blade.php
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
@extends('layouts.print')
|
||||||
|
|
||||||
|
@section('title', trans_choice('general.invoices', 1) . ': ' . $invoice->invoice_number)
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-7 bg-primary">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless mt-4">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th class="d-flex align-items-center">
|
||||||
|
<img src="{{ $logo }}" alt="{{ setting('company.name') }}"/>
|
||||||
|
<h3 class="ml-4 text-white">{{ setting('company.name') }}</h3>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5 bg-default">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">
|
||||||
|
{!! nl2br(setting('company.address')) !!}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">
|
||||||
|
@if (setting('company.tax_number'))
|
||||||
|
{{ trans('general.tax_number') }}: {{ setting('company.tax_number') }}
|
||||||
|
@endif
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">
|
||||||
|
@if (setting('company.phone'))
|
||||||
|
{{ setting('company.phone') }}
|
||||||
|
@endif
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">
|
||||||
|
{{ setting('company.email') }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<h4>{{ trans('invoices.bill_to') }}</h4>
|
||||||
|
@stack('name_input_start')
|
||||||
|
<strong class="d-block">{{ $invoice->contact_name }}</strong>
|
||||||
|
@stack('name_input_end')
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@stack('address_input_start')
|
||||||
|
{!! nl2br($invoice->contact_address) !!}
|
||||||
|
@stack('address_input_end')
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@stack('tax_number_input_start')
|
||||||
|
@if ($invoice->contact_tax_number)
|
||||||
|
{{ trans('general.tax_number') }}: {{ $invoice->contact_tax_number }}<br>
|
||||||
|
@endif
|
||||||
|
@stack('tax_number_input_end')
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@stack('phone_input_start')
|
||||||
|
@if ($invoice->contact_phone)
|
||||||
|
{{ $invoice->contact_phone }}
|
||||||
|
@endif
|
||||||
|
@stack('phone_input_end')
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@stack('email_start')
|
||||||
|
{{ $invoice->contact_email }}
|
||||||
|
@stack('email_input_end')
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
@stack('invoice_number_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.invoice_number') }}:</th>
|
||||||
|
<td class="text-right">{{ $invoice->invoice_number }}</td>
|
||||||
|
</tr>
|
||||||
|
@stack('invoice_number_input_end')
|
||||||
|
|
||||||
|
@stack('order_number_input_start')
|
||||||
|
@if ($invoice->order_number)
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.order_number') }}:</th>
|
||||||
|
<td class="text-right">{{ $invoice->order_number }}</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
@stack('order_number_input_end')
|
||||||
|
|
||||||
|
@stack('invoiced_at_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.invoice_date') }}:</th>
|
||||||
|
<td class="text-right">@date($invoice->invoiced_at)</td>
|
||||||
|
</tr>
|
||||||
|
@stack('invoiced_at_input_end')
|
||||||
|
|
||||||
|
@stack('due_at_input_start')
|
||||||
|
<tr>
|
||||||
|
<th>{{ trans('invoices.payment_due') }}:</th>
|
||||||
|
<td class="text-right">@date($invoice->due_at)</td>
|
||||||
|
</tr>
|
||||||
|
@stack('due_at_input_end')
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row show-table">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr class="row bg-default">
|
||||||
|
@stack('name_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 pl-5 text-white">{{ trans_choice($text_override['items'], 2) }}</th>
|
||||||
|
@stack('name_th_end')
|
||||||
|
|
||||||
|
@stack('quantity_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-center text-white">{{ trans($text_override['quantity']) }}</th>
|
||||||
|
@stack('quantity_th_end')
|
||||||
|
|
||||||
|
@stack('price_th_start')
|
||||||
|
<th class="col-sm-3 text-center d-none d-sm-block pl-5 text-white">{{ trans($text_override['price']) }}</th>
|
||||||
|
@stack('price_th_end')
|
||||||
|
|
||||||
|
@stack('total_th_start')
|
||||||
|
<th class="col-xs-4 col-sm-3 text-right pr-5 text-white">{{ trans('invoices.total') }}</th>
|
||||||
|
@stack('total_th_end')
|
||||||
|
</tr>
|
||||||
|
@foreach($invoice->items as $item)
|
||||||
|
<tr class="row">
|
||||||
|
@stack('name_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 pl-5">
|
||||||
|
{{ $item->name }}
|
||||||
|
@if ($item->desc)
|
||||||
|
<br><small>{!! $item->desc !!}</small>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
@stack('name_td_end')
|
||||||
|
|
||||||
|
@stack('quantity_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-center">{{ $item->quantity }}</td>
|
||||||
|
@stack('quantity_td_end')
|
||||||
|
|
||||||
|
@stack('price_td_start')
|
||||||
|
<td class="col-sm-3 text-center d-none d-sm-block pl-5">@money($item->price, $invoice->currency_code, true)</td>
|
||||||
|
@stack('price_td_end')
|
||||||
|
|
||||||
|
@stack('total_td_start')
|
||||||
|
<td class="col-xs-4 col-sm-3 text-right pr-5">@money($item->total, $invoice->currency_code, true)</td>
|
||||||
|
@stack('total_td_end')
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<div class="table-responsive">
|
||||||
|
@stack('notes_input_start')
|
||||||
|
@if ($invoice->notes)
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<p class="form-control-label">{{ trans_choice('general.notes', 2) }}</p>
|
||||||
|
<p class="form-control text-muted">{{ $invoice->notes }}</p>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
@endif
|
||||||
|
@stack('notes_input_end')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
@foreach ($invoice->totals as $total)
|
||||||
|
@if ($total->code != 'total')
|
||||||
|
@stack($total->code . '_td_start')
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans($total->title) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack($total->code . '_td_end')
|
||||||
|
@else
|
||||||
|
@if ($invoice->paid)
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans('invoices.paid') }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
- @money($invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endif
|
||||||
|
@stack('grand_total_td_start')
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{{ trans($total->name) }}:
|
||||||
|
</th>
|
||||||
|
<td class="text-right">
|
||||||
|
@money($total->amount - $invoice->paid, $invoice->currency_code, true)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@stack('grand_total_td_end')
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if ($invoice->footer)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 bg-default">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-borderless mb-0">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">
|
||||||
|
{!! $invoice->footer !!}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endsection
|
48
resources/views/modals/settings/template.blade.php
Normal file
48
resources/views/modals/settings/template.blade.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<div class="modal-body">
|
||||||
|
{!! Form::open([
|
||||||
|
'route' => 'modals.invoice-template.update',
|
||||||
|
'method' => 'PATCH',
|
||||||
|
'id' => 'template',
|
||||||
|
'@submit.prevent' => 'onSubmit',
|
||||||
|
'@keydown' => 'invoice_form.errors.clear($event.target.name)',
|
||||||
|
'files' => true,
|
||||||
|
'role' => 'form',
|
||||||
|
'class' => 'form-loading-button mb-0',
|
||||||
|
'novalidate' => true
|
||||||
|
]) !!}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4 text-center px-0">
|
||||||
|
<div class="bg-print border-radius-5 print-edge choose" @click="invoice_form.template='default'">
|
||||||
|
<img src="{{ asset('public/img/print_templates/default.png') }}" class="mb-1 mt-3" height="200" alt="Default"/>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="template" value="default" v-model="invoice_form.template">
|
||||||
|
{{ trans('settings.invoice.default') }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4 text-center px-0">
|
||||||
|
<div class="bg-print border-radius-5 print-edge choose" @click="invoice_form.template='classic'">
|
||||||
|
<img src="{{ asset('public/img/print_templates/classic.png') }}" class="mb-1 mt-3" height="200" alt="Classic"/>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="template" value="classic" v-model="invoice_form.template">
|
||||||
|
{{ trans('settings.invoice.classic') }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4 text-center px-0">
|
||||||
|
<div class="bg-print border-radius-5 print-edge choose" @click="invoice_form.template='modern'">
|
||||||
|
<img src="{{ asset('public/img/print_templates/modern.png') }}" class="mb-1 mt-3" height="200" alt="Modern"/>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="template" value="modern" v-model="invoice_form.template">
|
||||||
|
{{ trans('settings.invoice.modern') }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{!! Form::hidden('_template', $setting['template']) !!}
|
||||||
|
{!! Form::hidden('_prefix', 'invoice') !!}
|
||||||
|
{!! Form::close() !!}
|
||||||
|
</div>
|
@ -39,6 +39,16 @@
|
|||||||
{{ Form::invoice_text('price_name', trans('settings.invoice.price_name'), 'font', $price_names, null, [], 'price_name_input', null) }}
|
{{ Form::invoice_text('price_name', trans('settings.invoice.price_name'), 'font', $price_names, null, [], 'price_name_input', null) }}
|
||||||
|
|
||||||
{{ Form::invoice_text('quantity_name', trans('settings.invoice.quantity_name'), 'font', $quantity_names, null, [], 'quantity_name_input', null) }}
|
{{ Form::invoice_text('quantity_name', trans('settings.invoice.quantity_name'), 'font', $quantity_names, null, [], 'quantity_name_input', null) }}
|
||||||
|
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
{!! Form::label('invoice_template', trans('settings.invoice.invoice_template'), ['class' => 'form-control-label']) !!}
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<a href="#" class="btn btn-block btn-outline-primary" @click="onTemplate">
|
||||||
|
<i class="fas fa-palette"></i> {{ trans('settings.invoice.choose_template') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -56,6 +66,33 @@
|
|||||||
{!! Form::close() !!}
|
{!! Form::close() !!}
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('content_content_end')
|
||||||
|
<akaunting-modal
|
||||||
|
:show="template.modal"
|
||||||
|
@cancel="template.modal = false"
|
||||||
|
:title="'{{ trans('settings.invoice.choose_template') }}'"
|
||||||
|
:message="template.html"
|
||||||
|
:button_cancel="'{{ trans('general.button.save') }}'"
|
||||||
|
:button_delete="'{{ trans('general.button.cancel') }}'">
|
||||||
|
<template #modal-body>
|
||||||
|
@include('modals.settings.template')
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #card-footer>
|
||||||
|
<div class="float-right">
|
||||||
|
<button type="button" class="btn btn-outline-secondary" @click="closeTemplate">
|
||||||
|
<span>{{ trans('general.cancel') }}</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button type="button" class="btn btn-success button-submit" @click="addTemplate">
|
||||||
|
<div class="aka-loader d-none"></div>
|
||||||
|
<span>{{ trans('general.confirm') }}</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</akaunting-modal>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@push('scripts_start')
|
@push('scripts_start')
|
||||||
<script src="{{ asset('public/js/settings/settings.js?v=' . version('short')) }}"></script>
|
<script src="{{ asset('public/js/settings/settings.js?v=' . version('short')) }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
@ -203,6 +203,7 @@ Route::group(['as' => 'modals.', 'prefix' => 'modals'], function () {
|
|||||||
Route::resource('categories', 'Modals\Categories');
|
Route::resource('categories', 'Modals\Categories');
|
||||||
Route::resource('customers', 'Modals\Customers');
|
Route::resource('customers', 'Modals\Customers');
|
||||||
Route::resource('vendors', 'Modals\Vendors');
|
Route::resource('vendors', 'Modals\Vendors');
|
||||||
|
Route::patch('invoice-templates', 'Modals\InvoiceTemplates@update')->name('invoice-template.update');
|
||||||
Route::resource('invoices/{invoice}/transactions', 'Modals\InvoiceTransactions', ['middleware' => ['date.format', 'money']]);
|
Route::resource('invoices/{invoice}/transactions', 'Modals\InvoiceTransactions', ['middleware' => ['date.format', 'money']]);
|
||||||
Route::resource('bills/{bill}/transactions', 'Modals\BillTransactions', ['middleware' => ['date.format', 'money']]);
|
Route::resource('bills/{bill}/transactions', 'Modals\BillTransactions', ['middleware' => ['date.format', 'money']]);
|
||||||
Route::resource('taxes', 'Modals\Taxes');
|
Route::resource('taxes', 'Modals\Taxes');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user