Files

607 lines
23 KiB
PHP
Raw Permalink Normal View History

2026-03-15 17:08:23 +07:00
@extends('layouts.business.pdf.pdf_layout')
@section('pdf_title')
<style>
body {
font-family: sans-serif;
font-size: 12px;
color: #000;
}
.invoice-container {
width: 100%;
padding: 10px;
}
.border-none {
border: 1px solid transparent
}
.top-table {
width: 100%;
border-collapse: collapse;
}
.logo-cell img {
height: 45px;
}
.company-name {
font-size: 20px;
font-weight: bold;
}
.right-info {
text-align: right;
font-size: 12px;
line-height: 1.6;
}
.invoice-badge {
margin: 10px auto 15px auto;
text-align: center;
}
.invoice-badge span {
display: inline-block;
padding: 6px 25px;
background: #c5161d;
color: #fff;
border-radius: 20px;
font-weight: bold;
letter-spacing: 1px;
}
.info-table {
width: 100%;
margin-bottom: 10px;
}
.info-table td {
vertical-align: top;
padding: 2px 4px;
}
.item-table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
.item-table th,
.item-table td {
border: 1px solid #000;
padding: 6px;
font-size: 12px;
}
.item-table th {
background: #f5f5f5;
font-weight: bold;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
.summary-table {
width: 100%;
margin-top: 10px;
}
.summary-table td {
padding: 4px;
font-size: 12px;
}
.summary-right {
width: 40%;
float: right;
}
.return-title {
margin-top: 15px;
font-weight: bold;
}
.footer-table {
width: 100%;
margin-top: 25px;
}
.signature {
width: 40%;
text-align: end;
}
.signature-2 {
text-align: right
}
.signature hr {
margin-bottom: 3px;
}
.warranty-box {
border: 1px solid #000;
padding: 6px;
margin-top: 15px;
font-size: 11px;
}
</style>
@endsection
@section('pdf_title')
<div style="text-align:center; margin-bottom: 10px;">
@include('business::print.header')
<h4 class="mt-2" style="text-align:center;">{{ __('Sales Invoice') }}</h4>
<div class="invoice-badge">
<span>{{ __('Invoice') }}</span>
</div>
</div>
@push('css')
@include('business::pdf.fonts-css')
<style>
body {
font-family: sans-serif;
font-size: 12px;
}
.header-table {
width: 100%;
margin-bottom: 10px;
}
.header-table td {
vertical-align: top;
padding: 2px 5px;
}
.invoice-table,
.return-table,
.summary-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 10px;
}
.invoice-table th,
.invoice-table td,
.return-table th,
.return-table td,
.summary-table td {
border: 1px solid #000;
padding: 4px;
}
.invoice-table th,
.return-table th {
background-color: #f2f2f2;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.signature {
width: 45%;
display: inline-block;
text-align: center;
margin-top: 30px;
}
.signature hr {
margin: 30px 0 5px;
border: none;
border-top: 1px solid #000;
}
.warranty {
border: 1px solid #000;
padding: 5px;
font-size: 11px;
margin-top: 10px;
}
</style>
@endpush
@endsection
@section('pdf_content')
@php
$subtotal = 0;
foreach ($sale->details as $detail) {
$subtotal += ($detail->price - $detail->discount) * $detail->quantities;
}
$total_return_amount = 0;
foreach ($sale_returns as $return) {
foreach ($return->details as $detail) {
$total_return_amount += $detail->return_amount;
}
}
@endphp
<div class="invoice-container">
{{-- Header --}}
<table class="header-table">
<tr>
<td style="width:60%;">
@php
$defaultLogo = public_path('assets/images/default.svg');
$customLogo = public_path(
get_business_option('business-settings')['a4_invoice_logo'] ?? 'assets/images/default.svg',
);
$logoPath = file_exists($customLogo) ? $customLogo : $defaultLogo;
$logoData = base64_encode(file_get_contents($logoPath));
$logoType = pathinfo($logoPath, PATHINFO_EXTENSION);
$src = 'data:image/' . $logoType . ';base64,' . $logoData;
@endphp
@if ((get_business_option('business-settings')['show_a4_invoice_logo'] ?? 0) == 1)
<img style="
width: auto;
height: 54px;
display: block;" src="{{ $src }}">
@endif
</td>
<td style="width:40%; text-align:right;">
@if (($sale->business->meta['show_address'] ?? 0) == 1)
<div>{{ __('Address') }} : {{ $sale->branch?->address ?? ($sale->business?->address ?? '') }}</div>
@endif
@if (($sale->business->meta['show_phone_number'] ?? 0) == 1)
<div>{{ __('Mobile') }} : {{ $sale->branch?->phone ?? ($sale->business?->phoneNumber ?? '') }}</div>
@endif
@if (($sale->business->meta['show_email'] ?? 0) == 1)
<div>{{ __('Email') }} : {{ $sale->branch?->email ?? ($sale->business?->email ?? '') }}</div>
@endif
<div>
@if (($sale->business->meta['show_vat'] ?? 0) == 1)
{{ $sale->business->vat_name }}
@endif
{{ ($sale->business->meta['show_vat'] ?? 0) == 1 && ($sale->business->meta['show_vat'] ?? 0) == 1 ? ':' : '' }}
@if (($sale->business->meta['show_vat'] ?? 0) == 1)
{{ $sale->business->vat_no ?? '' }}
@endif
</div>
</td>
</tr>
</table>
{{-- INVOICE BADGE --}}
<h3
style="
font-size: 20px;
font-weight: 600;
color: white;
background-color: #c52127;
padding: 5px 12px;
border-radius: 30px;
margin: 0;
width: 100px;
display: flex;
align-items: center;
justify-content: center;
margin: auto;
border: 1px solid black;
text-align: center;">
{{ __('INVOICE') }}
</h3>
{{-- Customer & Invoice Info --}}
<table class="header-table">
<tr>
<td style="width:50%; text-align:{{ app()->getLocale() == 'ar' ? 'left' : 'left' }};">
<div>{{ __('Customer') }} : {{ $sale->party->name ?? __('Guest') }}</div>
<div>{{ __('Address') }} : {{ $sale->party->address ?? '' }}</div>
<div>{{ __('Phone') }} : {{ $sale->party->phone ?? __('Guest') }}</div>
<div>{{ __('Remarks') }} : {{ $sale->meta['note'] ?? 'N/A' }}</div>
</td>
<td style="width:50%; text-align:{{ app()->getLocale() == 'ar' ? 'right' : 'right' }};">
<div>{{ __('Invoice No') }} : {{ $sale->invoiceNumber ?? '' }}</div>
<div>{{ __('Date') }} : {{ formatted_date($sale->saleDate ?? '') }}</div>
<div>{{ __('Time') }} : {{ formatted_time($sale->saleDate ?? '') }}</div>
<div>{{ __('Sales By') }} :
{{ $sale->user->role != 'staff' ? __('Admin') : $sale->user->name }}
</div>
</td>
</tr>
</table>
{{-- Sale Items --}}
<table class="invoice-table">
<thead>
<tr>
<th>{{ __('SL') }}</th>
<th>{{ __('Item') }}</th>
<th>{{ __('Quantity') }}</th>
@if ($hasWarranty)
<th>{{ __('Warranty') }}</th>
@endif
@if ($hasGuarantee)
<th>{{ __('Guarantee') }}</th>
@endif
<th>{{ __('Unit Price') }}</th>
<th>{{ __('Discount') }}</th>
<th>{{ __('Total Price') }}</th>
</tr>
</thead>
<tbody>
@foreach ($sale->details as $detail)
@php
$price = $detail->price ?? 0;
$discount = $detail->discount ?? 0;
$qty = $detail->quantities ?? 0;
$productTotal = ($price - $discount) * $qty;
$info = $detail->warranty_guarantee_info ?? [];
@endphp
<tr>
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-center">
{{ $detail->product->productName ?? '' }}
{{ !empty($detail->stock?->batch_no) ? ' (' . $detail->stock->batch_no . ')' : '' }}
</td>
<td class="text-center">{{ $qty }}</td>
@if ($hasWarranty)
<td class="text-center">{{ $info['warranty_duration'] ?? '' }}
{{ $info['warranty_unit'] ?? '' }}</td>
@endif
@if ($hasGuarantee)
<td class="text-center">{{ $info['guarantee_duration'] ?? '' }}
{{ $info['guarantee_unit'] ?? '' }}</td>
@endif
<td class="text-center">{{ currency_format($price, currency: business_currency()) }}</td>
<td class="text-center">{{ currency_format($discount, currency: business_currency()) }}</td>
<td class="text-center">{{ currency_format($productTotal, currency: business_currency()) }}</td>
</tr>
@endforeach
</tbody>
</table>
<table width="100%" style="margin-top:15px;">
<tr>
<!-- LEFT SIDE -->
<td width="60%" valign="top">
<table width="100%">
<tbody>
<tr>
<td>{{ amountInWords($subtotal) }}</td>
</tr>
<tr>
<td style="padding-bottom:8px;">
@if (get_business_option('business-settings')['show_note'] ?? 0 == 1)
{{ get_business_option('business-settings')['note_label'] ?? '' }} :
@endif
@if (get_business_option('business-settings')['show_note'] ?? 0 == 1)
{{ get_business_option('business-settings')['note'] ?? '' }}
@endif
</td>
</tr>
<tr>
<td style="padding-top:5px; font-weight:bold;">
{{ __('Paid by') }} :
{{ $transactionTypes ??
($due_collect->payment_type_id ? $due_collect->payment_type->name ?? '' : $due_collect->paymentType ?? '') }}
</td>
</tr>
</tbody>
</table>
{{-- BANK DETAILS --}}
@if (($bank_detail->show_in_invoice ?? 0) == 1)
<table width="" style="margin-top:10px; border:1px solid #ccc;" cellspacing="0"
cellpadding="5">
<tr>
<td colspan="2" style="font-weight:bold; background:#f5f5f5;">
{{ __('Bank Details') }}
</td>
</tr>
<tr>
<td width="40%">{{ __('Name') }}</td>
<td width="60%">: {{ $bank_detail->name }}</td>
</tr>
<tr>
<td>{{ __('Account No') }}</td>
<td>: {{ $bank_detail->meta['account_number'] ?? '' }}</td>
</tr>
<tr>
<td>{{ __('UPI ID') }}</td>
<td>: {{ $bank_detail->meta['upi_id'] ?? '' }}</td>
</tr>
<tr>
<td>{{ __('Holders Name') }}</td>
<td>: {{ $bank_detail->meta['account_holder'] ?? '' }}</td>
</tr>
</table>
@endif
</td>
<!-- RIGHT SIDE -->
<td width="40%" valign="top" align="right">
<table width="100%">
<tbody>
<tr>
<td align="right">{{ __('Subtotal') }}</td>
<td align="right">:</td>
<td align="right">{{ currency_format($subtotal, currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Vat') }}</td>
<td align="right">:</td>
<td align="right">{{ currency_format($sale->vat_amount, currency: business_currency()) }}
</td>
</tr>
<tr>
<td align="right">{{ __('Shipping Charge') }} </td>
<td align="right">:</td>
<td align="right">
{{ currency_format($sale->shipping_charge, currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Discount') }} </td>
<td align="right">:</td>
<td align="right">
{{ currency_format($sale->discountAmount + $total_discount, currency: business_currency()) }}
</td>
</tr>
<tr>
<td align="right">{{ __('Total Amount') }} </td>
<td align="right">:</td>
<td align="right">
{{ currency_format(
$subtotal +
$sale->vat_amount -
($sale->discountAmount + $total_discount) +
$sale->shipping_charge +
$sale->rounding_amount,
currency: business_currency(),
) }}
</td>
</tr>
<tr>
<td align="right">{{ __('Rounding (+/-)') }} </td>
<td align="right">:</td>
<td align="right">
{{ currency_format(abs($sale->rounding_amount), currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Total Payable') }} </td>
<td align="right">:</td>
<td align="right">{{ currency_format($sale->totalAmount, currency: business_currency()) }}
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
{{-- Sale Returns --}}
@if (!$sale_returns->isEmpty())
<table style="margin-top: 14px" class="return-table">
<thead>
<tr>
<th>{{ __('SL') }}</th>
<th>{{ __('Date') }}</th>
<th>{{ __('Returned Item') }}</th>
<th>{{ __('Quantity') }}</th>
<th>{{ __('Total Amount') }}</th>
</tr>
</thead>
<tbody>
@php
$total_return_amount = 0;
$row_counter = 0;
@endphp
@foreach ($sale_returns as $return)
@foreach ($return->details as $detail)
@php
$total_return_amount += $detail->return_amount ?? 0;
$row_counter++;
@endphp
<tr>
<td class="text-center">{{ $row_counter }}</td>
<td class="text-center">{{ formatted_date($return->return_date) }}</td>
<td class="text-center">
{{ $detail->saleDetail->product->productName ?? '' }}
{{ $detail->saleDetail?->stock?->batch_no ? '(' . $detail->saleDetail?->stock?->batch_no . ')' : '' }}
</td>
<td class="text-center">{{ $detail->return_qty }}</td>
<td class="text-center">
{{ currency_format($detail->return_amount, currency: business_currency()) }}</td>
</tr>
@endforeach
@endforeach
</tbody>
</table>
<table width="100%" style="margin-top:15px;">
<tr>
<td>{{ amountInWords($total_return_amount) }}</td>
</tr>
<tr>
<!-- LEFT SIDE -->
<td width="60%" valign="top">
{{ __('Paid by') }} :
{{ $returnTransactionType ?? ($sale->paymentType ?? '') }}
</td>
<!-- RIGHT SIDE -->
<td width="40%" valign="top" align="right">
<table width="100%">
<tbody>
<tr>
<td align="right">{{ __('Total Return Amount') }}</td>
<td align="right">:</td>
<td align="right">
{{ currency_format($total_return_amount, currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Payable Amount') }}</td>
<td align="right">:</td>
<td align="right">{{ currency_format($sale->totalAmount, currency: business_currency()) }}
</td>
</tr>
<tr>
<td align="right">{{ __('Paid Amount') }} </td>
<td align="right">:</td>
<td align="right">{{ currency_format($sale->paidAmount, currency: business_currency()) }}
</td>
</tr>
<tr>
<td align="right">{{ __('Due') }} </td>
<td align="right">:</td>
<td align="right">{{ currency_format($sale->dueAmount, currency: business_currency()) }}
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
@endif
{{-- Payment Info & Signature --}}
{{-- SIGNATURE --}}
<table class="footer-table">
<tr>
<td class="signature">
<div class="" style="border-top: 1px solid black">
{{ __('Customer Signature') }}
</div>
</td>
<td></td>
<td class="signature-2">
<div style="border-top: 1px solid black;">
{{ __('Authorized Signature') }}
</div>
</td>
</tr>
</table>
{{-- Warranty Box --}}
@if ((get_business_option('business-settings')['show_warranty'] ?? 0) == 1)
<div class="warranty">
@if ((get_business_option('business-settings')['show_warranty'] ?? 0) == 1)
<strong>{{ get_business_option('business-settings')['warranty_void_label'] ?? '' }} - </strong>
@endif
{{ get_business_option('business-settings')['warranty_void'] ?? '' }}
</div>
@endif
</div>
@endsection