migrate to gtea from bistbucket

This commit is contained in:
2026-03-15 17:08:23 +07:00
commit 129ca2260c
3716 changed files with 566316 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
<div class="modal fade common-validation-modal" id="add-purchase-payment-modal">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">{{ __('Add Payment') }}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="personal-info">
<form action="#" method="post" enctype="multipart/form-data" class="ajaxform_instant_reload">
@csrf
<div class="row">
<div class="col-lg-6 mb-2">
<label>{{ __('Paying Amount') }}</label>
<input type="number" name="amount" class="form-control" placeholder="{{ __('Enter Paying Amount') }}" required>
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Received Amount') }}</label>
<input type="number" name="amount" class="form-control" placeholder="{{ __('Enter Received Amount') }}" required>
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Change Amount') }}</label>
<input type="number" name="amount" class="form-control" placeholder="{{ __('$0.00') }}" required>
</div>
<div class="col-lg-6">
<label class="custom-top-label">{{ __('Payment Type') }}</label>
<div class="gpt-up-down-arrow position-relative">
<select class="form-control form-selected" name="payment_type_id" required>
<option value="cash">{{ __('Cash') }}</option>
<option value="card">{{ __('Card') }}</option>
</select>
<span></span>
</div>
</div>
<div class="col-lg-12">
<label>{{__('Note')}}</label>
<textarea name="note" class="form-control" placeholder="{{ __('Type note...') }}"></textarea>
</div>
</div>
<div class="col-lg-12">
<div class="button-group text-center mt-5">
<button type="reset" class="theme-btn border-btn m-2">{{ __('Cancel') }}</button>
<button class="theme-btn m-2 submit-btn">{{ __('Pay Now') }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,6 @@
@foreach ($brands as $brand)
<div class="category-content brand-list" data-id="{{ $brand->id }}" data-route="{{ route('business.purchases.product-filter') }}">
<img class="category-brand-img" src="{{ asset($brand->icon ?? 'assets/img/icon/no-image.svg') }}" alt="">
<h6 class="brand-name">{{ $brand->brandName }}</h6>
</div>
@endforeach

View File

@@ -0,0 +1,21 @@
<div class="offcanvas offcanvas-end custom-offcanvas" tabindex="-1" id="brand-search-modal"
aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header border-bottom">
<h5 class="offcanvas-title fw-bolder" id="offcanvasRightLabel">{{ __('Brand list') }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="p-3 category-brand-scroll">
<form id="brandSearchForm" method="post" data-route="{{ route('business.sales.brand-filter') }}">
@csrf
<div class="position-relative">
<input class="form-control mr-sm-2 p-2 brand-search" type="search" placeholder="{{ __('Search') }}" aria-label="Search">
<i class="fas fa-search search-icon"></i>
</div>
</form>
<div class="category-container" id="brand-data">
@include('business::purchases.brand-list')
</div>
</div>
</div>

View File

@@ -0,0 +1,54 @@
<div class="modal fade" id="bulk-upload-modal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">{{__('Bulk Upload') }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<!-- Modal Body -->
<div class="modal-body">
<div class="erp-table-section">
<div class="container-fluid">
<div class="border-0">
<div class="card-bodys">
<form action="{{ route('business.purchases.bulk-cart-store') }}" method="post" enctype="multipart/form-data"
class="bulk_cart_upload_form">
@csrf
<div class="bulk-upload-container w-100">
<div class="d-flex justify-content-between align-items-center w-100">
<div class="bulk-input w-100">
<input class="form-control" type="file" name="file" required>
</div>
</div>
<div class="d-flex align-items-center justify-content-center gap-2 flex-wrap">
<button type="submit" class="add-order-btn process-csv-btn rounded-2 border-0 submit-btn mt-3">{{__('Submit')}}</button>
<a href="{{ asset('assets/purchase_product_bulk_upload.xlsx') }}" download="purchase_product_bulk_upload.xlsx" class="download-file-btn mt-3">{{__('Download Sample File')}}</a>
</div>
</div>
<div class="bulk-upload-container mt-3">
<div class="instruction-header">
<h5>{{__('Instructions') }}</h5>
<div class="mt-3">
<h6><strong>{{__('Note') }}: </strong>{{__(' Please follow the instructions below to upload your file.')}}</h6>
<ul>
<li><b>{{__('1.')}}</b>{{__(' Download the sample file first and add all your purchases data to it.')}}</li>
<li><b>{{__('2.')}}</b> <span class="text-danger">*</span> {{__('Indicates a required field. If you do not provide the required fields, the system will ignore except product information.')}}</li>
<li><b>{{__('3.')}}</b> {{__('After adding all your purchases, please save the file and then upload the updated version.')}}</li>
</ul>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,53 @@
<div class="modal fade" id="bulk-upload-modal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">{{__('Bulk Upload')}}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<!-- Modal Body -->
<div class="modal-body">
<div class="erp-table-section">
<div class="container-fluid">
<div class="border-0">
<div class="card-bodys">
<form action="{{ route('business.purchases.bulk-store') }}" method="post" enctype="multipart/form-data" class="ajaxform_instant_reload">
@csrf
<div class="bulk-upload-container w-100">
<div class="d-flex justify-content-between align-items-center w-100">
<div class="bulk-input w-100">
<input class="form-control w-100" type="file" name="file" required>
</div>
</div>
<div class="d-flex align-items-center justify-content-center gap-2 flex-wrap">
<button type="submit" class="add-order-btn process-csv-btn rounded-2 border-0 submit-btn mt-3">{{__('Submit')}}</button>
<a href="{{ asset('assets/PosPro_purchase_bulk_upload.xlsx') }}" download="PosPro_purchase_bulk_upload.xlsx" class="download-file-btn mt-3">{{__('Download Sample File')}}</a>
</div>
</div>
<div class="bulk-upload-container mt-3">
<div class="instruction-header">
<h5>{{__('Instructions')}}</h5>
<div class="mt-3">
<h6><strong>{{__('Note')}}: </strong> {{__('Please follow the instructions below to upload your file.')}}</h6>
<ul>
<li><b>{{__('1.')}}</b> {{__('Download the sample file first and add all your purchases data to it.')}}</li>
<li><b>{{__('2.')}}</b> <span class="text-danger">*</span> {{__('Indicates a required field. If you do not provide the required fields, the system will ignore except product information.')}}</li>
<li><b>{{__('3.')}}</b> {{__('After adding all your purchases, please save the file and then upload the updated version.')}}</li>
</ul>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,79 @@
<div class="modal fade" id="calculatorModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog calculator-dialog" role="document">
<div class="modal-content calculator-content">
<div class="modal-header d-flex align-items-center justify-content-between">
<div class="custom-modal-header">
<button type="button" class="btn-close custom-close-btn calculator-btn" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
</div>
<div class="modal-body">
<div class="container calculator">
<form>
<input readonly id="display" type="text" class="form-control-lg text-right w-100" value="" />
</form>
<div class="d-flex justify-content-between button-row">
<button id="left-parenthesis" type="button" class="operator-group calculator-btn">
&#40;
</button>
<button id="right-parenthesis" type="button" class="operator-group calculator-btn">
&#41;
</button>
<button id="square-root" type="button" class="operator-group calculator-btn">
&#8730;
</button>
<button id="square" type="button" class="operator-group calculator-btn">
&#120;&#178;
</button>
</div>
<div class="d-flex justify-content-between button-row">
<button id="clear" type="button" class="calculator-btn">&#67;</button>
<button id="backspace" type="button" class="calculator-btn">&#9003;</button>
<button id="ans" type="button" class="operand-group calculator-btn">
&#65;&#110;&#115;
</button>
<button id="divide" type="button" class="operator-group calculator-btn">
&#247;
</button>
</div>
<div class="d-flex justify-content-between button-row">
<button id="seven" type="button" class="operand-group calculator-btn">&#55;</button>
<button id="eight" type="button" class="operand-group calculator-btn">&#56;</button>
<button id="nine" type="button" class="operand-group calculator-btn">&#57;</button>
<button id="multiply" type="button" class="operator-group calculator-btn">
&#215;
</button>
</div>
<div class="d-flex justify-content-between button-row">
<button id="four" type="button" class="operand-group calculator-btn">&#52;</button>
<button id="five" type="button" class="operand-group calculator-btn">&#53;</button>
<button id="six" type="button" class="operand-group calculator-btn">&#54;</button>
<button id="subtract" type="button" class="operator-group calculator-btn">
&#8722;
</button>
</div>
<div class="d-flex justify-content-between button-row">
<button id="one" type="button" class="operand-group calculator-btn">&#49;</button>
<button id="two" type="button" class="operand-group calculator-btn">&#50;</button>
<button id="three" type="button" class="operand-group calculator-btn">&#51;</button>
<button id="add" type="button" class="operator-group calculator-btn">&#43;</button>
</div>
<div class="d-flex justify-content-between button-row">
<button id="percentage" type="button" class="operand-group calculator-btn">
&#37;
</button>
<button id="zero" type="button" class="operand-group calculator-btn">&#48;</button>
<button id="decimal" type="button" class="operand-group calculator-btn">&#46;</button>
<button id="equal" type="button" class="calculator-btn">&#61;</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,49 @@
@foreach($cart_contents as $cart)
@php
$modules = product_setting()->modules ?? [];
@endphp
<tr data-row_id="{{ $cart->rowId }}" data-update_route="{{ route('business.carts.update', $cart->rowId) }}" data-destroy_route="{{ route('business.carts.destroy', $cart->rowId) }}">
<td class='text-start '>
<img class="table-img" src="{{ asset($cart->options->product_image ?? 'assets/images/products/box.svg') }}">
</td>
<td class='text-start'>{{ $cart->name }}</td>
<td class='text-start'>{{ $cart->options->product_code }}</td>
<td class='text-start'>{{ $cart->options->product_unit_name }}</td>
@if (is_module_enabled($modules, 'show_product_batch_no'))
<td>
<input type="text" name="batch_no" class="batch_no sales-input" value="{{ $cart->options->batch_no ?? '' }}">
</td>
@endif
@if (is_module_enabled($modules, 'show_product_expire_date'))
<td>
@if (isset($modules['expire_date_type']) && ($modules['expire_date_type'] == 'dmy' || is_null($modules['expire_date_type'])))
<input type="date" name="expire_date" value="{{ date('Y-m-d', strtotime($cart->options->expire_date ?? '')) }}" class="form-control expire_date">
@else
<input type="month" name="expire_date" value="{{ date('Y-m', strtotime($cart->options->expire_date ?? '')) }}" class="form-control expire_date">
@endif
</td>
@endif
@usercan('purchases.price')
<td class='text-center'>
<input type="number" step="any" value="{{ $cart->price }}" class="custom-number-input price" placeholder="{{ __('0') }}">
</td>
@endusercan
<td class='text-start'>
<div class="d-flex align-items-center justify-content-center gap-2">
<button class="incre-decre minus-btn">
<i class="fas fa-minus icon"></i>
</button>
<input type="number" step="any" value="{{ $cart->qty }}" class="dynamic-width cart-qty" placeholder="{{ __('0') }}">
<button class="incre-decre plus-btn">
<i class="fas fa-plus icon"></i>
</button>
</div>
</td>
<td class="cart-subtotal">{{ currency_format($cart->subtotal, currency: business_currency()) }}</td>
<td>
<button class='x-btn remove-btn'>
<img src="{{ asset('assets/images/icons/x.svg') }}" alt="">
</button>
</td>
</tr>
@endforeach

View File

@@ -0,0 +1,6 @@
@foreach ($categories as $category)
<div class="category-content category-list" data-id="{{ $category->id }}" data-route="{{ route('business.purchases.product-filter') }}">
<img class="category-brand-img" src="{{ asset($category->icon ?? 'assets/img/icon/no-image.svg') }}" alt="">
<h6 class="category-name">{{ $category->categoryName }}</h6>
</div>
@endforeach

View File

@@ -0,0 +1,20 @@
<div class="offcanvas offcanvas-end custom-offcanvas" tabindex="-1" id="category-search-modal" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header border-bottom">
<h5 class="offcanvas-title fw-bolder" id="offcanvasRightLabel">{{ __('Category List') }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="p-3 category-brand-scroll">
<form id="categorySearchForm" method="post" data-route="{{ route('business.purchases.category-filter') }}">
@csrf
<div class="position-relative">
<input class="form-control mr-sm-2 p-2 category-search" type="text" name="search" placeholder="{{ __('Search') }}" aria-label="Search">
<i class="fas fa-search search-icon"></i>
</div>
</form>
<div class="category-container" id="category-data">
@include('business::purchases.category-list')
</div>
</div>
</div>

View File

@@ -0,0 +1,277 @@
@extends('layouts.business.master')
@section('title')
{{ __('Purchase') }}
@endsection
@push('css')
<link rel="stylesheet" href="{{ asset('assets/css/calculator.css') }}">
<link rel="stylesheet" href="{{ asset('assets/css/choices.min.css') }}">
@endpush
@php
$modules = product_setting()->modules ?? [];
@endphp
@section('main_content')
<div class="container-fluid">
<div class="grid row sales-main-container p-lr">
<div class="sales-container">
<!-- Quick Action Section -->
<div class="quick-act-header">
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-center">
<div class="mb-2 mb-sm-0">
<h4 class='quick-act-title'>{{ __('Quick Action') }}</h4>
</div>
<div class="quick-actions-container">
<a data-bs-toggle="modal" data-bs-target="#bulk-upload-modal" href="{{ route('business.bulk-uploads.index') }}" class='bulk-upload-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/logo/bulk-upload.svg') }}" alt="">
{{ __('Bulk Upload') }}
</a>
<a href="{{ route('business.purchases.index', ['today' => true]) }}" class='sales-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/sales.svg') }}" alt="">
{{ __('Today Purchase') }}
</a>
<button data-bs-toggle="modal" data-bs-target="#calculatorModal" class='calculator-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/calculator.svg') }}" alt="">
{{ __('Calculator') }}
</button>
<a href="{{ route('business.dashboard.index') }}" class='dashboard-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/dashboard.svg') }}" alt="">
{{ __('Dashboard') }}
</a>
</div>
</div>
</div>
<form action="{{ route('business.purchases.store') }}" method="post" enctype="multipart/form-data" class="ajaxform">
@csrf
<div class="mt-4 mb-3">
<div class="row g-3">
<!-- First Row -->
<div class="col-12 col-md-6">
<div class="input-group">
<input type="date" name="purchaseDate" class="form-control" value="{{ now()->format('Y-m-d') }}">
</div>
</div>
<div class="col-12 col-md-6">
<input type="text" name="invoiceNumber" value="{{ $invoice_no }}" class="form-control" placeholder="{{ __('Invoice no') }}.">
</div>
<div class="col-12">
<div class="d-flex align-items-center">
<select name="party_id" id="supplier_id" class="form-select choices-select" aria-label="Select Supplier" required>
<option value="">{{ __('Select Supplier') }}</option>
@foreach ($suppliers as $supplier)
<option value="{{ $supplier->id }}">
{{ $supplier->name }} ({{ __('Due: ') }}
{{ currency_format($supplier->due, currency: business_currency()) }})
</option>
@endforeach
</select>
<a type="button" href="#supplier-create-modal" data-bs-toggle="modal" class="btn btn-danger square-btn d-flex justify-content-center align-items-center">
<img src="{{ asset('assets/images/icons/plus-square.svg') }}" alt="">
</a>
</div>
</div>
</div>
</div>
<div class="cart-payment">
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th class="border table-background">{{ __('Image') }}</th>
<th class="border table-background">{{ __('Items') }}</th>
<th class="border table-background">{{ __('Code') }}</th>
<th class="border table-background">{{ __('Unit') }}</th>
@if (is_module_enabled($modules, 'show_product_batch_no'))
<th class="border table-background">{{ __('Batch') }}</th>
@endif
@if (is_module_enabled($modules, 'show_product_expire_date'))
<th class="border table-background">{{ __('Expire Date') }}</th>
@endif
@usercan('purchases.price')
<th class="border table-background">{{ __('Purchase Price') }}</th>
@endusercan
<th class="border table-background">{{ __('Qty') }}</th>
<th class="border table-background">{{ __('Sub Total') }}</th>
<th class="border table-background">{{ __('Action') }}</th>
</tr>
</thead>
<tbody class='text-start' id="purchase_cart_list">
@include('business::purchases.cart-list')
</tbody>
</table>
</div>
<div class="hr-container">
<hr>
</div>
<!-- Make Payment Section start -->
<div class="grid row py-3 payment-section">
<div class="col-sm-12 col-md-6 col-lg-6">
<div class="amount-info-container">
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Paid Amount') }}</h6>
<input name="receive_amount" type="number" step="any" id="receive_amount" min="0" class="form-control receive_amount" placeholder="{{ currency_format(0, currency: business_currency()) }}">
</div>
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Change Amount') }}</h6>
<input type="number" step="any" id="change_amount" class="form-control" placeholder="{{ currency_format(0, currency: business_currency()) }}" readonly>
</div>
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Due Amount') }}</h6>
<input type="number" step="any" id="due_amount" class="form-control"
placeholder="{{ currency_format(0, currency: business_currency()) }}"
readonly>
</div>
<div class="row amount-container align-items-start mb-2">
<h6 class="payment-title">{{ __('Payment Type') }}</h6>
@include('business::component.payment_type', ['context' => 'purchase', 'payment_types' => $payment_types])
</div>
</div>
<div class="mt-3">
<button class="save-btn cancel-sale-btn"
data-route="{{ route('business.carts.remove-all') }}">{{ __('Cancel') }}</button>
</div>
</div>
<div class="col-sm-12 col-md-6 col-lg-6">
<div class="payment-container mb-3 amount-info-container">
<div class="mb-2 d-flex align-items-center justify-content-between">
<h6>{{ __('Sub Total') }}</h6>
<h6 class="fw-bold" id="sub_total">
{{ currency_format(0, currency: business_currency()) }}</h6>
</div>
<div class="row save-amount-container align-items-center mb-2">
<h6 class="payment-title col-6">{{ get_business_option('business-settings')['vat_name'] ?? 'Vat'}}</h6>
<div class="col-6 w-100 d-flex justify-content-between gap-2">
<div class="d-flex d-flex align-items-center gap-2">
<select name="vat_id" class="form-select vat_select" id='form-ware'>
<option value="">{{ __('Select') }}</option>
@foreach($vats as $vat)
<option value="{{ $vat->id }}"
data-rate="{{ $vat->rate }}">{{ $vat->name }}
({{ $vat->rate }}%)
</option>
@endforeach
</select>
</div>
<input type="number" step="any" name="vat_amount" id="vat_amount" min="0"
class="form-control right-start-input" placeholder="{{ __('0') }}"
readonly>
</div>
</div>
<div class="row save-amount-container align-items-center mb-2">
<h6 class="payment-title col-6">{{ __('Discount') }}</h6>
<div class="col-6 w-100 d-flex justify-content-between gap-2">
<div class="d-flex d-flex align-items-center gap-2">
<select name="discount_type" class="form-select discount_type"
id='form-ware'>
<option value="flat">{{ __('Flat') }}
({{ business_currency()->symbol }})
</option>
<option value="percent">{{ __('Percent (%)') }}</option>
</select>
</div>
<input type="number" step="any" name="discountAmount" id="discount_amount"
min="0" class="form-control right-start-input"
placeholder="{{ __('0') }}">
</div>
</div>
<div class="shopping-crg-grid mb-2">
<h6 class="payment-title">{{ __('Shipping Charge') }}</h6>
<div class="">
<input type="number" step="any" name="shipping_charge" id="shipping_charge"
class="form-control right-start-input" placeholder="0">
</div>
</div>
<div class=" d-flex align-items-center justify-content-between fw-bold">
<div class="fw-bold">{{ __('Total Amount') }}</div>
<h6 class='fw-bold' id="total_amount">
{{ currency_format(0, currency: business_currency()) }}</h6>
</div>
</div>
@usercan('purchases.create')
<div class="save-btn-container">
<button class="submit-btn payment-btn">{{ __('Save') }}</button>
</div>
@endusercan
</div>
</div>
<!-- Make Payment Section end -->
</div>
</form>
</div>
<div class=" main-container">
<!-- Products Header -->
<div class="products-header">
<div class="container-fluid p-0">
<div class=" g-2 w-100 align-items-center search-product">
<div class="w-100">
<!-- Search Input and Add Button -->
<form action="{{ route('business.purchases.product-filter') }}" method="post"
class="product-filter w-100" table="#products-list">
@csrf
<div class=" d-flex">
<input type="text" name="search" id="purchase_product_search"
class="form-control search-input"
placeholder="{{ __('Search product...') }}">
<button class="btn btn-search">
<i class="far fa-search"></i>
</button>
</div>
</form>
</div>
<div class="d-flex align-items-center justify-content-end gap-2 ">
<a data-bs-toggle="offcanvas" data-bs-target="#category-search-modal"
aria-controls="offcanvasRight"
class="btn btn-category w-100">{{ __('Category') }}</a>
<a data-bs-toggle="offcanvas" data-bs-target="#brand-search-modal"
aria-controls="offcanvasRight" class="btn btn-brand w-100">{{ __('Brand') }}</a>
</div>
</div>
</div>
</div>
<div class="products-container">
<div class="p-3 scroll-card">
<div class="search-product-card products gap-2 @if (count($products) === 1) single-product @endif product-list-container" id="products-list">
@include('business::purchases.product-list')
</div>
</div>
</div>
</div>
</div>
</div>
@include('business::purchases.product-modal')
<input type="hidden" id="get_product" value="{{ route('business.products.prices') }}">
<input type="hidden" id="purchase-cart" value="{{ route('business.purchases.cart') }}">
<input type="hidden" id="clear-cart" value="{{ route('business.carts.remove-all') }}">
<input type="hidden" id="get-product-variants" value="{{ route('business.products.variants') }}">
@endsection
@push('modal')
@include('business::purchases.calculator')
@include('business::purchases.category-search')
@include('business::purchases.brand-search')
@include('business::purchases.supplier-create')
@include('business::purchases.bulk-upload.index')
@endpush
@push('js')
<script src="{{ asset('assets/js/custom/purchase.js') }}"></script>
<script src="{{ asset('assets/js/custom/math.min.js') }}"></script>
<script src="{{ asset('assets/js/custom/calculator.js') }}"></script>
<script src="{{ asset('assets/js/choices.min.js') }}"></script>
@endpush

View File

@@ -0,0 +1,158 @@
<div class="responsive-table m-0">
<table class="table" id="datatable">
<thead>
<tr>
@usercan('purchases.delete')
<th class="w-60">
<div class="d-flex align-items-center gap-3">
<input type="checkbox" class="select-all-delete multi-delete ">
</div>
</th>
@endusercan
<th>{{ __('SL') }}.</th>
<th class="text-start">{{ __('Date') }}</th>
@if (auth()->user()->accessToMultiBranch())
<th class="text-start">{{ __('Branch') }}</th>
@endif
<th class="text-start">{{ __('Invoice No') }}</th>
<th class="text-start">{{ __('Party Name') }}</th>
<th class="text-start">{{ __('Total') }}</th>
<th class="text-start">{{ __('Discount') }}</th>
<th class="text-start">{{ __('Paid') }}</th>
<th class="text-start">{{ __('Due') }}</th>
<th>{{ __('Status') }}</th>
<th>{{ __('Action') }}</th>
</tr>
</thead>
<tbody>
@foreach ($purchases as $purchase)
<tr>
@usercan('purchases.delete')
<td class="w-60 checkbox">
<input type="checkbox" name="ids[]" class="delete-checkbox-item multi-delete"
value="{{ $purchase->id }}">
</td>
@endusercan
<td>{{ ($purchases->currentPage() - 1) * $purchases->perPage() + $loop->iteration }}</td>
<td class="text-start">{{ formatted_date($purchase->purchaseDate) }}</td>
@if (auth()->user()->accessToMultiBranch())
<td class="text-start">{{ $purchase->branch->name ?? '' }}</td>
@endif
<td class="text-start">{{ $purchase->invoiceNumber }}</td>
<td class="text-start">{{ $purchase->party->name }}</td>
<td class="text-start">{{ currency_format($purchase->totalAmount, currency: business_currency()) }}
</td>
<td class="text-start">
{{ currency_format($purchase->discountAmount, currency: business_currency()) }}</td>
<td class="text-start">{{ currency_format($purchase->paidAmount, currency: business_currency()) }}
</td>
<td class="text-start">{{ currency_format($purchase->dueAmount, currency: business_currency()) }}
</td>
<td>
@if ($purchase->details->sum('quantities') == 0)
<div class="paid-badge">{{ __('Returned') }}</div>
@elseif($purchase->dueAmount == 0)
<div class="paid-badge">{{ __('Paid') }}</div>
@elseif($purchase->dueAmount > 0 && $purchase->dueAmount < $purchase->totalAmount)
<div class="unpaid-badge">{{ __('Partial Paid') }}</div>
@else
<div class="unpaid-badge-2">{{ __('Unpaid') }}</div>
@endif
</td>
<td class="d-print-none">
<div class="dropdown table-action">
<button type="button" data-bs-toggle="dropdown">
<i class="far fa-ellipsis-v"></i>
</button>
<ul class="dropdown-menu">
@usercan('purchases.read')
<li>
<a target="_blank" href="{{ route('business.purchases.invoice', $purchase->id) }}">
<img src="{{ asset('assets/images/icons/Invoic.svg') }}" alt="">
{{ __('Invoice') }}
</a>
</li>
@endusercan
@usercan('purchase-returns.read')
<li>
<a
href="{{ route('business.purchase-returns.create', ['purchase_id' => $purchase->id]) }}">
<i class="fal fa-undo-alt"></i>
{{ __('Purchase Return') }}
</a>
</li>
@endusercan
{{-- @if ($purchase->dueAmount > 0)
<li>
<a href="#" class="open-payment-modal" data-bs-toggle="modal"
data-bs-target="#add-payment-modal" data-url=""
data-total="{{ $purchase->totalAmount }}"
data-due="{{ $purchase->dueAmount }}">
<svg width="18" height="18" viewBox="0 0 18 18" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M15.707 12.6265C15.2148 9.66495 13.6824 7.4596 12.3502 6.16425C11.9626 5.78731 11.7688 5.59885 11.3406 5.42443C10.9124 5.25 10.5444 5.25 9.80835 5.25H8.19165C7.45561 5.25 7.08757 5.25 6.65941 5.42443C6.23125 5.59885 6.03743 5.78731 5.64978 6.16425C4.31761 7.4596 2.78521 9.66495 2.29295 12.6265C1.9267 14.83 3.95945 16.5 6.23124 16.5H11.7688C14.0405 16.5 16.0733 14.83 15.707 12.6265Z"
stroke="#4B5563" stroke-linecap="round" stroke-linejoin="round" />
<path
d="M5.44246 3.33215C5.28773 3.10694 5.06346 2.80124 5.52674 2.73154C6.00294 2.65988 6.49741 2.98586 6.98141 2.97916C7.41928 2.9731 7.64235 2.77889 7.88167 2.50161C8.13367 2.20963 8.5239 1.5 9 1.5C9.4761 1.5 9.86633 2.20963 10.1183 2.50161C10.3577 2.77889 10.5807 2.9731 11.0185 2.97916C11.5026 2.98586 11.9971 2.65988 12.4733 2.73154C12.9365 2.80124 12.7123 3.10694 12.5576 3.33215L11.8579 4.35048C11.5586 4.7861 11.409 5.0039 11.0958 5.12696C10.7827 5.25 10.378 5.25 9.56865 5.25H8.43135C7.62203 5.25 7.21732 5.25 6.90417 5.12696C6.59101 5.0039 6.44138 4.7861 6.14209 4.35048L5.44246 3.33215Z"
stroke="#4B5563" stroke-linejoin="round" />
<path
d="M10.2195 9.68661C10.0574 9.08804 9.23209 8.54789 8.24141 8.95199C7.25073 9.35601 7.09337 10.6561 8.59189 10.7943C9.26914 10.8567 9.71074 10.7218 10.115 11.1034C10.5193 11.4848 10.5944 12.5458 9.56089 12.8317C8.52739 13.1176 7.50401 12.6709 7.39258 12.0364M8.88079 8.24219V8.81249M8.88079 12.9196V13.4922"
stroke="#4B5563" stroke-linecap="round" stroke-linejoin="round" />
</svg>
{{ __('Add Payment') }}
</a>
</li>
@endif --}}
<li>
<a href="#"
data-url="{{ route('business.view-payment', ['type' => 'purchase', 'id' => $purchase->id]) }}"
class="view-payment-btn" data-bs-toggle="modal"
data-bs-target="#view-payment-modal">
<svg width="18" height="18" viewBox="0 0 18 18" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M3 13.9844V6.0407C3 3.90019 3 2.82994 3.65901 2.16497C4.31802 1.5 5.37868 1.5 7.5 1.5H10.5C12.6213 1.5 13.6819 1.5 14.341 2.16497C15 2.82994 15 3.90019 15 6.0407V13.9844C15 15.1181 15 15.685 14.6535 15.9081C14.0873 16.2728 13.2121 15.5081 12.7718 15.2305C12.4081 15.0011 12.2263 14.8864 12.0244 14.8798C11.8063 14.8726 11.6212 14.9826 11.2282 15.2305L9.795 16.1343C9.40838 16.3781 9.2151 16.5 9 16.5C8.7849 16.5 8.59162 16.3781 8.205 16.1343L6.77185 15.2305C6.40811 15.0011 6.22624 14.8864 6.0244 14.8798C5.80629 14.8726 5.6212 14.9826 5.22815 15.2305C4.78796 15.5081 3.91265 16.2728 3.34646 15.9081C3 15.685 3 15.1181 3 13.9844Z"
stroke="#4B5563" stroke-linecap="round" stroke-linejoin="round" />
<path d="M12 4.5H6" stroke="#4B5563" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M7.5 7.5H6" stroke="#4B5563" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M10.875 7.40625C10.2537 7.40625 9.75 7.84695 9.75 8.39063C9.75 8.9343 10.2537 9.375 10.875 9.375C11.4963 9.375 12 9.8157 12 10.3594C12 10.9031 11.4963 11.3438 10.875 11.3438M10.875 7.40625C11.3648 7.40625 11.7815 7.68015 11.936 8.0625M10.875 7.40625V6.75M10.875 11.3438C10.3852 11.3438 9.96847 11.0699 9.81405 10.6875M10.875 11.3438V12"
stroke="#4B5563" stroke-linecap="round" />
</svg>
{{ __('View Payment') }}
</a>
</li>
@if (!in_array($purchase->id, $purchasesWithReturns))
@usercan('purchases.read')
<li>
<a href="{{ route('business.purchases.edit', $purchase->id) }}">
<i class="fal fa-edit"></i>
{{ __('Edit') }}
</a>
</li>
@endusercan
@usercan('purchases.delete')
<li>
<a href="{{ route('business.purchases.destroy', $purchase->id) }}"
class="confirm-action" data-method="DELETE">
<i class="fal fa-trash-alt"></i>
{{ __('Delete') }}
</a>
</li>
@endusercan
@endif
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mt-3">
{{ $purchases->links('vendor.pagination.bootstrap-5') }}
</div>

View File

@@ -0,0 +1,275 @@
@extends('layouts.business.master')
@section('title')
{{ __('Purchase') }}
@endsection
@push('css')
<link rel="stylesheet" href="{{ asset('assets/css/calculator.css') }}">
<link rel="stylesheet" href="{{ asset('assets/css/choices.min.css') }}">
@endpush
@php
$modules = product_setting()->modules ?? [];
@endphp
@section('main_content')
<div class="container-fluid">
<div class="grid row sales-main-container p-lr2">
<div class="sales-container">
<!-- Quick Action Section -->
<div class="quick-act-header">
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-center">
<div class="mb-2 mb-sm-0">
<h4 class='quick-act-title'>{{ __('Quick Action') }}</h4>
</div>
<div class="quick-actions-container">
<a href="{{ route('business.products.index') }}"
class='save-product-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/product.svg') }}" alt="">
{{ __('Product List') }}
</a>
<a href="{{ route('business.purchases.index', ['today' => true]) }}"
class='sales-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/sales.svg') }}" alt="">
{{ __('Today Purchase') }}
</a>
<button data-bs-toggle="modal" data-bs-target="#calculatorModal"
class='calculator-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/calculator.svg') }}" alt="">
{{ __('Calculator') }}
</button>
<a href="{{ route('business.dashboard.index') }}"
class='dashboard-btn d-flex align-items-center gap-1'>
<img src="{{ asset('assets/images/icons/dashboard.svg') }}" alt="">
{{ __('Dashboard') }}
</a>
</div>
</div>
</div>
<form action="{{ route('business.purchases.update', $purchase->id) }}" method="post" enctype="multipart/form-data" class="ajaxform">
@csrf
@method('put')
<div class="mt-4 mb-3">
<div class="row g-3">
<!-- First Row -->
<div class="col-12 col-md-6">
<div class="input-group">
<input type="date" name="purchaseDate" class="form-control" value="{{ formatted_date($purchase->purchaseDate, 'Y-m-d') }}">
</div>
</div>
<div class="col-12 col-md-6">
<input type="text" name="invoiceNumber" value="{{ $purchase->invoiceNumber }}" class="form-control" placeholder="{{ __('Invoice no') }}.">
</div>
<div class="col-12 ">
<div class="d-flex align-items-center">
<select name="party_id" class="form-select choices-select" aria-label="Select Customer" required>
<option value="">{{ __('Select Supplier') }}</option>
@foreach ($suppliers as $supplier)
<option value="{{ $supplier->id }}" @selected($purchase->party_id == $supplier->id)>
{{ $supplier->name }} ({{ __('Due: ') }}
{{ currency_format($supplier->due, currency: business_currency()) }})
</option>
@endforeach
</select>
<a href="{{ route('business.parties.create', ['type' => 'Supplier']) }}" class="btn btn-danger square-btn d-flex justify-content-center align-items-center" type="button">
<img src="{{ asset('assets/images/icons/plus-square.svg') }}" alt="">
</a>
</div>
</div>
</div>
</div>
<div class="cart-payment">
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th class="border table-background">{{ __('Image') }}</th>
<th class="border table-background">{{ __('Items') }}</th>
<th class="border table-background">{{ __('Code') }}</th>
<th class="border table-background">{{ __('Unit') }}</th>
@if (is_module_enabled($modules, 'show_product_batch_no'))
<th class="border table-background">{{ __('Batch') }}</th>
@endif
@if (is_module_enabled($modules, 'show_product_expire_date'))
<th class="border table-background">{{ __('Expire Date') }}</th>
@endif
@usercan('purchases.price')
<th class="border table-background">{{ __('Purchase Price') }}</th>
@endusercan
<th class="border table-background">{{ __('Qty') }}</th>
<th class="border table-background">{{ __('Sub Total') }}</th>
<th class="border table-background">{{ __('Action') }}</th>
</tr>
</thead>
<tbody class='text-start' id="purchase_cart_list">
@include('business::purchases.cart-list')
</tbody>
</table>
</div>
<div class="hr-container">
<hr>
</div>
<!-- Make Payment Section start -->
<div class="grid row py-3 payment-section">
<div class="col-sm-12 col-md-6 col-lg-6">
<div class="amount-info-container">
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Receive Amount') }}</h6>
<input name="receive_amount" type="number" step="any" id="receive_amount"
value="{{ $purchase->paidAmount + $purchase->change_amount }}" min="0"
class="form-control receive_amount"
placeholder="{{ currency_format(0, currency: business_currency()) }}">
</div>
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Change Amount') }}</h6>
<input type="number" step="any" id="change_amount"
value="{{ $purchase->change_amount }}" class="form-control"
placeholder="{{ currency_format(0, currency: business_currency()) }}" readonly>
</div>
<div class="row amount-container align-items-center mb-2">
<h6 class="payment-title">{{ __('Due Amount') }}</h6>
<input type="number" step="any" id="due_amount" class="form-control"
placeholder="{{ currency_format(0, currency: business_currency()) }}" readonly>
</div>
<div class="row amount-container align-items-start mb-2">
<h6 class="payment-title">{{ __('Payment Type') }}</h6>
@include('business::component.payment_type', [ 'context' => 'purchase', 'payment_types' => $payment_types, 'transactions' => $sale->transactions ?? [] ])
</div>
</div>
<div class="mt-3">
<button class="save-btn cancel-sale-btn" data-route="{{ route('business.carts.remove-all') }}">{{ __('Cancel') }}</button>
</div>
</div>
<div class="col-sm-12 col-md-6 col-lg-6">
<div class="payment-container mb-3 amount-info-container">
<div class="mb-2 d-flex align-items-center justify-content-between">
<h6>{{ __('Sub Total') }}</h6>
<h6 class="fw-bold" id="sub_total">{{ currency_format(0) }}</h6>
</div>
<div class="row save-amount-container align-items-center mb-2">
<h6 class="payment-title col-6">{{ get_business_option('business-settings')['vat_name'] ?? 'Vat' }}</h6>
<div class="col-6 w-100 d-flex justify-content-between gap-2">
<div class="d-flex d-flex align-items-center gap-2">
<select name="vat_id" class="form-select vat_select" id='form-ware'>
<option value="">{{ __('Select') }}</option>
@foreach($vats as $vat)
<option value="{{ $vat->id }}" data-rate="{{ $vat->rate }}" @selected($purchase->vat_id == $vat->id)>{{ $vat->name }}
({{ $vat->rate }}%)
</option>
@endforeach
</select>
</div>
<input type="number" step="any" name="vat_amount" id="vat_amount"
value="{{ ($purchase->vat_amount ?? 0) != 0 ? $purchase->vat_amount : (($purchase->vat_percent ?? 0) != 0 ? $purchase->vat_percent : 0) }}"
min="0" class="form-control right-start-input" placeholder="{{ __('0') }}" readonly>
</div>
</div>
<div class="row save-amount-container align-items-center mb-2">
<h6 class="payment-title col-6">{{ __('Discount') }}</h6>
<div class="col-6 w-100 d-flex justify-content-between gap-2">
<div class="d-flex d-flex align-items-center gap-2">
<select name="discount_type" class="form-select discount_type" id='form-ware'>
<option value="flat" @selected($purchase->discount_type == 'flat')>{{ __('Flat') }}
({{ business_currency()->symbol }})
</option>
<option value="percent" @selected($purchase->discount_type == 'percent')>{{ __('Percent (%)') }}</option>
</select>
</div>
<input type="number" step="any" name="discountAmount"
value="{{ $purchase->discount_type == 'percent' ? $purchase->discount_percent : $purchase->discountAmount }}"
id="discount_amount" min="0" class="form-control right-start-input" placeholder="{{ __('0') }}">
</div>
</div>
<div class="shopping-crg-grid mb-2">
<h6 class="">{{ __('Shipping Charge') }}</h6>
<div class="">
<input type="number" step="any" name="shipping_charge" value="{{ $purchase->shipping_charge }}" id="shipping_charge" class="form-control right-start-input" placeholder="0">
</div>
</div>
<div class=" d-flex align-items-center justify-content-between fw-bold">
<div class="fw-bold">{{ __('Total Amount') }}</div>
<h6 class='fw-bold' id="total_amount">
{{ currency_format($purchase->totalAmount, currency: business_currency()) }}
</h6>
</div>
</div>
@usercan('purchases.update')
<div class="save-btn-container">
<button class="submit-btn payment-btn">{{ __('Save') }}</button>
</div>
@endusercan
</div>
</div>
<!-- Make Payment Section end -->
</div>
</form>
</div>
<div class=" main-container">
<!-- Products Header -->
<div class="products-header">
<div class="container-fluid p-0">
<div class="row g-2 w-100 align-items-center search-product">
<div class="w-100">
<!-- Search Input and Add Button -->
<form action="{{ route('business.purchases.product-filter') }}" method="post" class="w-100 product-filter" table="#products-list">
@csrf
<div class="d-flex">
<input type="text" name="search" class="form-control search-input" placeholder="{{ __('Search product...') }}">
<button class="btn btn-search">
<i class="far fa-search"></i>
</button>
</div>
</form>
</div>
<!-- Category Button -->
<div class="d-flex align-items-center justify-content-end gap-2 ">
<a data-bs-toggle="offcanvas" data-bs-target="#category-search-modal"
aria-controls="offcanvasRight"
class="btn btn-category w-100">{{ __('Category') }}</a>
<!-- Brand Button -->
<a data-bs-toggle="offcanvas" data-bs-target="#brand-search-modal"
aria-controls="offcanvasRight" class="btn btn-brand w-100">{{ __('Brand') }}</a>
</div>
</div>
</div>
</div>
<div class="products-container">
<div class="p-3 scroll-card">
<div class="search-product-card products gap-2 @if (count($products) === 1) single-product @endif product-list-container"
id="products-list">
@include('business::purchases.product-list')
</div>
</div>
</div>
</div>
</div>
</div>
@include('business::purchases.product-modal')
<input type="hidden" id="get_product" value="{{ route('business.products.prices') }}">
<input type="hidden" value="{{ route('business.purchases.cart') }}" id="purchase-cart">
<input type="hidden" value="{{ route('business.carts.remove-all') }}" id="clear-cart">
<input type="hidden" id="get-product-variants" value="{{ route('business.products.variants') }}">
@endsection
@push('modal')
@include('business::purchases.calculator')
@include('business::purchases.category-search')
@include('business::purchases.brand-search')
@endpush
@push('js')
<script src="{{ asset('assets/js/custom/purchase.js') }}"></script>
<script src="{{ asset('assets/js/custom/math.min.js') }}"></script>
<script src="{{ asset('assets/js/custom/calculator.js') }}"></script>
<script src="{{ asset('assets/js/choices.min.js') }}"></script>
@endpush

View File

@@ -0,0 +1,109 @@
@extends('layouts.business.master')
@section('title')
{{ __('Purchase List') }}
@endsection
@section('main_content')
<div class="erp-table-section">
<div class="container-fluid">
<div class="card">
<div class="card-bodys">
<div class="table-header p-16">
<h4>{{ __('Purchase List') }}</h4>
</div>
<div class="table-top-form p-16-0">
<div class="d-flex align-items-center gap-3 flex-wrap margin-lr-16">
<form action="{{ route('business.purchases.index') }}" method="GET" class="report-filter-form" table="#purchases-data">
<div class="table-top-left d-flex gap-3 flex-wrap">
<div class="gpt-up-down-arrow position-relative">
<select name="per_page" class="form-control">
<option @selected(request('per_page') == 20) value="20">{{ __('Show 20') }}</option>
<option @selected(request('per_page') == 50) value="50">{{ __('Show 50') }}</option>
<option @selected(request('per_page') == 100) value="100">{{ __('Show 100') }}</option>
<option @selected(request('per_page') == 500) value="500">{{ __('Show 500') }}</option>
</select>
<span></span>
</div>
@if(auth()->user()->accessToMultiBranch())
<div class="table-search position-relative">
<div class="gpt-up-down-arrow position-relative">
<select name="branch_id" class="form-control">
<option value="">{{ __('Select Branch') }}</option>
@foreach ($branches as $branch)
<option value="{{ $branch->id }}" @selected(request('branch_id') == $branch->id) >{{ $branch->name }}</option>
@endforeach
</select>
<span></span>
</div>
</div>
@endif
<div class="table-search position-relative">
<input type="text" name="search" class="form-control" placeholder="{{ __('Search...') }}" value="{{ request('search') }}">
<span class="position-absolute">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.582 14.582L18.332 18.332" stroke="#4D4D4D" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M16.668 9.16797C16.668 5.02584 13.3101 1.66797 9.16797 1.66797C5.02584 1.66797 1.66797 5.02584 1.66797 9.16797C1.66797 13.3101 5.02584 16.668 9.16797 16.668C13.3101 16.668 16.668 13.3101 16.668 9.16797Z" stroke="#4D4D4D" stroke-width="1.25" stroke-linejoin="round"/>
</svg>
</span>
</div>
<div class="custom-from-to align-items-center date-filters d-none">
<label class="header-label">{{ __('From Date') }}</label>
<input type="date" name="from_date" value="{{ request('from_date') ?? now()->format('Y-m-d') }}" class="form-control">
</div>
<div class="custom-from-to align-items-center date-filters d-none">
<label class="header-label">{{ __('To Date') }}</label>
<input type="date" name="to_date" value="{{ request('to_date') ?? now()->format('Y-m-d') }}" class="form-control">
</div>
<div class="gpt-up-down-arrow position-relative d-print-none custom-date-filter">
<select name="custom_days" class="form-control custom-days">
<option value="today" {{ request()->get('custom_days') == 'today' ? 'selected' : '' }}>{{ __('Today') }}</option>
<option value="yesterday" {{ request()->get('custom_days') == 'yesterday' ? 'selected' : '' }}>{{ __('Yesterday') }}</option>
<option value="last_seven_days" {{ request()->get('custom_days') == 'last_seven_days' ? 'selected' : '' }}>{{ __('Last 7 Days') }}</option>
<option value="last_thirty_days" {{ request()->get('custom_days') == 'last_thirty_days' ? 'selected' : '' }}>{{ __('Last 30 Days') }}</option>
<option value="current_month" {{ request()->get('custom_days') == 'current_month' ? 'selected' : '' }}>{{ __('Current Month') }}</option>
<option value="last_month" {{ request()->get('custom_days') == 'last_month' ? 'selected' : '' }}>{{ __('Last Month') }}</option>
<option value="current_year" {{ request()->get('custom_days') == 'current_year' ? 'selected' : '' }}>{{ __('Current Year') }}</option>
<option value="custom_date" {{ request()->get('custom_days') == 'custom_date' ? 'selected' : '' }}>{{ __('Custom Date') }}</option>
</select>
<span></span>
<div class="calendar-icon">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6667 2.67188H3.33333C2.59695 2.67188 2 3.26883 2 4.00521V13.3385C2 14.0749 2.59695 14.6719 3.33333 14.6719H12.6667C13.403 14.6719 14 14.0749 14 13.3385V4.00521C14 3.26883 13.403 2.67188 12.6667 2.67188Z" stroke="#4B5563" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.6641 1.32812V3.99479" stroke="#4B5563" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5.33594 1.32812V3.99479" stroke="#4B5563" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 6.67188H14" stroke="#4B5563" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="delete-item delete-show d-none">
<div class="delete-item-show">
<p class="fw-bold"><span class="selected-count"></span> {{ __('items show') }}</p>
<button data-bs-toggle="modal" class="trigger-modal" data-bs-target="#multi-delete-modal" data-url="{{ route('business.purchases.delete-all') }}">{{ __('Delete') }}</button>
</div>
</div>
<div id="purchases-data">
@include('business::purchases.datas')
</div>
</div>
</div>
</div>
<input type="hidden" id="payment-delete-route" data-url="{{ route('business.delete.payments', ['type' => ':type', 'id' => ':id']) }}">
@endsection
@push('modal')
@include('business::component.add-payment')
@include('business::component.delete-modal')
@include('business::component.view-payment-modal')
@include('business::component.edit-payment')
@endpush

View File

@@ -0,0 +1,15 @@
@extends('layouts.business.blank')
@section('title')
{{ __('Invoice') }}
@endsection
@section('main_content')
@if (invoice_setting() == '3_inch_80mm' && moduleCheck('ThermalPrinterAddon'))
@include('thermalprinteraddon::purchases.3_inch_80mm')
@else
@include('business::purchases.invoices.a4-size')
@endif
@endsection

View File

@@ -0,0 +1,522 @@
<div class="invoice-container">
<div class="invoice-content p-4 position-relative">
<div class="row d-print-none py-2 d-flex align-items-start justify-content-between border-bottom print-container">
<div class="col-md-6 d-flex align-items-center p-2">
<span class="Money-Receipt">{{ __('Purchase Invoice') }}</span>
</div>
<div class="col-md-6 d-flex justify-content-end align-items-end">
<div class="d-flex gap-2 ">
<form action="{{ route('business.purchases.mail', ['purchase_id' => $purchase->id]) }}" method="POST"
class="ajaxform_instant_reload">
@csrf
<button type="submit" class="btn custom-print-btn"><img class="w-10 h-10"
src="{{ asset('assets/img/email.svg') }}"><span class="pl-1">{{__('Email')}}</span> </button>
</form>
<a target="blank" href="{{ route('business.purchases.pdf', ['purchase_id' => $purchase->id]) }}"
class="pdf-btn print-btn">
<img class="w-10 h-10" src="{{ asset('assets/img/pdf.svg') }}">
{{__('PDF')}}</a>
<a class="print-btn-2 print-btn" onclick="window.print()"><img class="w-10 h-10"
src="{{ asset('assets/img/print.svg') }}">{{ __('Print') }}</a>
</div>
</div>
</div>
<div class="d-flex justify-content-between align-items-center gap-3 print-logo-container">
{{-- Left Side: Logo and Content --}}
<div class="d-flex align-items-center gap-2 logo">
@if ((get_business_option('business-settings')['show_a4_invoice_logo'] ?? 0) == 1 )
<img class="invoice-logo" src="{{ asset(get_business_option('business-settings')['a4_invoice_logo'] ?? 'assets/images/default.svg') ?? '' }}">
@endif
</div>
{{-- Right Side: Invoice --}}
<div>
<div class="address-container">
@if (($purchase->business->meta['show_address'] ?? 0) == 1)
<p> {{__('Address')}} : {{ $purchase->branch?->address ?? $purchase->business?->address ?? '' }}</p>
@endif
@if (($purchase->business->meta['show_phone_number'] ?? 0) == 1)
<p> {{__('Mobile')}} : {{ $purchase->branch?->phone ?? $purchase->business?->phoneNumber ?? '' }}</p>
@endif
@if (($purchase->business->meta['show_email'] ?? 0) == 1)
<p> {{__('Email')}} : {{ $purchase->branch?->email ?? $purchase->business?->email ?? '' }}</p>
@endif
<p>
@if (($purchase->business->meta['show_vat'] ?? 0) == 1)
{{ $purchase->business->vat_name }}
@endif
{{ (($purchase->business->meta['show_vat'] ?? 0) == 1 && ($purchase->business->meta['show_vat'] ?? 0) == 1) ? ':' : '' }}
@if (($purchase->business->meta['show_vat'] ?? 0) == 1)
{{ $purchase->business->vat_no ?? '' }}
@endif
</p>
</div>
</div>
</div>
<h3 class="right-invoice white-text">{{ __('INVOICE') }}</h3>
<div class="d-flex align-items-start justify-content-between flex-wrap mt-3">
<div>
<table class="table">
<tbody>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Supplier Name') }}</td>
<td class="text-start ">: {{ $purchase->party->name ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Mobile') }}</td>
<td class="text-start">: {{ $purchase->party->phone ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Address') }}</td>
<td class="text-start">: {{ $purchase->party->address ?? '' }}</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="table">
<tbody>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Invoice') }}</td>
<td class="text-start">: {{ $purchase->invoiceNumber ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Date') }}</td>
<td class="text-start">: {{ formatted_date($purchase->purchaseDate ?? '') }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start bold-title">{{ __('Purchases By') }}</td>
<td class="text-start ">: {{ $purchase->user->role != 'staff' ? 'Admin' : $purchase->user->name }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@if (!$purchase_returns->isEmpty())
{{-- purchases --}}
<div class="custom-invoice-table">
<table class="table table-striped">
<thead>
<tr class="in-table-header">
<th class="head-red text-center">{{ __('SL') }}</th>
<th class="head-red text-start">{{ __('Item') }}</th>
<th class="head-black text-center">{{ __('Quantity') }}</th>
@usercan('purchases.price')
<th class="head-black text-end">{{ __('Unit Price') }}</th>
@endusercan
<th class="head-black text-end">{{ __('Total Price') }}</th>
</tr>
</thead>
@php
$subtotal = 0;
@endphp
<tbody class="in-table-body-container">
@foreach ($purchase->details as $detail)
@php
$productTotal = ($detail->productPurchasePrice ?? 0) * ($detail->quantities ?? 0);
$subtotal += $productTotal;
@endphp
<tr class="in-table-body">
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-start">
<div class="invoice-item">
{{ ($detail->product->productName ?? '') . (!empty($detail->stock?->batch_no) ? ' (' . $detail->stock?->batch_no . ')' : '') }}
</div>
</td>
<td class="text-center">{{ $detail->quantities ?? '' }}</td>
@usercan('purchases.price')
<td class="text-end">
{{ currency_format($detail->productPurchasePrice ?? 0, currency: business_currency()) }}
</td>
@endusercan
<td class="text-end">
{{ currency_format($productTotal, currency: business_currency()) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="d-flex align-items-center justify-content-between position-relative">
<div>
<table class="table">
<tbody>
<tr class="in-table-row">
<td class="text-start"></td>
</tr>
<tr class="in-table-row">
<td class="text-start"></td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="table">
<tbody>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Subtotal') }}</td>
<td class="text-end">:</td>
<td class="text-end">{{ currency_format($subtotal, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ get_business_option('business-settings')['vat_name'] ?? 'Vat' }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->vat_amount, currency: business_currency()) }}</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Shipping Charge') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->shipping_charge, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom border-bottom-dis">
<td class="text-end">{{ __('Discount') }}
@if ($purchase->discount_type == 'percent')
({{ $purchase->discount_percent }}%)
@endif
</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->discountAmount + $total_discount, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end total-amound">{{ __('Total Amount') }}</td>
<td class="text-end total-amound">:</td>
<td class="text-end total-amound">
{{ currency_format($subtotal + $purchase->vat_amount - ($purchase->discountAmount + $total_discount) + $purchase->shipping_charge, currency: business_currency()) }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
{{-- purchase Return --}}
<div class="custom-invoice-table">
<table class="table table-striped">
<thead>
<tr class="in-table-header">
<th class="head-red text-center">{{ __('SL') }}</th>
<th class="head-red text-start">{{ __('Date') }}</th>
<th class="head-black text-start">{{ __('Returned Item') }}</th>
<th class="head-black text-center">{{ __('Quantity') }}</th>
<th class="head-black text-end">{{ __('Total Amount') }}</th>
</tr>
</thead>
@php $total_return_amount = 0; @endphp
<tbody class="in-table-body-container">
@foreach ($purchase_returns as $key => $return)
@foreach ($return->details as $detail)
@php
$total_return_amount += $detail->return_amount ?? 0;
@endphp
<tr class="in-table-body">
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-start">{{ formatted_date($return->return_date) }}</td>
<td class="text-start">
<div class="invoice-item">
{{ $detail->purchaseDetail->product->productName ?? '' }}
{{ $detail->purchaseDetail?->stock?->batch_no ? '(' . $detail->purchaseDetail?->stock?->batch_no . ')' : '' }}
</div>
</td>
<td class="text-center">{{ $detail->return_qty ?? 0 }}</td>
<td class="text-end">
{{ currency_format($detail->return_amount ?? 0, currency: business_currency()) }}
</td>
</tr>
@endforeach
@endforeach
</tbody>
</table>
</div>
<div class="d-flex align-items-start justify-content-between position-relative bottom-info-container">
<h2 class="word-amount">{{ amountInWords($total_return_amount) }}</h2>
<div>
<table class="table">
<tbody>
<tr class="in-table-row">
<td class="text-start"></td>
</tr>
<tr class="in-table-row">
<td class="text-start paid-by pb-2 pt-3">{{ __('Paid by') }} :
{{ $returnTransactionType ?? $purchase->paymentType ?? '' }}
</td>
</tr>
@if ((get_business_option('business-settings')['show_note'] ?? 0) == 1)
<tr class="in-table-row">
<td class="text-start">
{{ get_business_option('business-settings')['note'] ?? '' }}
</td>
</tr>
@endif
</tbody>
</table>
@if ($bank_detail->show_in_invoice ?? 0 == 1)
<div class="bank-details-container">
<div class="bank-details-title">
Bank Details
</div>
<div class="back-details-content">
<table class="table mb-2">
<tbody>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Name') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->name }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Account No') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['account_number'] ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('UPI ID') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['upi_id'] ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Holders Name') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['account_holder'] ?? '' }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@endif
</div>
<div>
<table class="table">
<tbody>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Total Return Amount') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($total_return_amount, currency: business_currency()) }}</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end total-amound">{{ __('Payable Amount') }}</td>
<td class="text-end total-amound">:</td>
<td class="text-end total-amound">
{{ currency_format($purchase->totalAmount, currency: business_currency()) }}</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Paid Amount') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->paidAmount, currency: business_currency()) }}</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Due') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->dueAmount, currency: business_currency()) }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@else
{{-- purchases --}}
<div class="custom-invoice-table">
<table class="table table-striped">
<thead>
<tr class="in-table-header">
<th class="head-red text-center">{{ __('SL') }}</th>
<th class="head-red text-start">{{ __('Item') }}</th>
<th class="head-black text-center">{{ __('Quantity') }}</th>
@usercan('purchases.price')
<th class="head-black text-end">{{ __('Unit Price') }}</th>
@endusercan
<th class="head-black text-end">{{ __('Total Price') }}</th>
</tr>
</thead>
@php $subtotal = 0; @endphp
<tbody class="in-table-body-container">
@foreach ($purchase->details as $detail)
@php
$productTotal = ($detail->productPurchasePrice ?? 0) * ($detail->quantities ?? 0);
$subtotal += $productTotal;
@endphp
<tr class="in-table-body">
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-start">
<div class="invoice-item">
{{ ($detail->product->productName ?? '') . (!empty($detail->stock?->batch_no) ? ' (' . $detail->stock?->batch_no . ')' : '') }}
</div>
</td>
<td class="text-center">{{ $detail->quantities ?? '' }}</td>
@usercan('purchases.price')
<td class="text-end">
{{ currency_format($detail->productPurchasePrice ?? 0, currency: business_currency()) }}
</td>
@endusercan
<td class="text-end">
{{ currency_format($productTotal, currency: business_currency()) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="d-flex align-items-start justify-content-between position-relative bottom-info-container">
<h2 class="word-amount">{{ amountInWords($subtotal) }}</h2>
<div>
<table class="table">
<tbody>
<tr class="in-table-row">
<td class="text-start"></td>
</tr>
<tr class="in-table-row">
<td class="text-start paid-by pb-2 pt-3">{{ __('Paid by') }} :
{{ $transactionTypes ?? ($purchase->payment_type_id ? ($purchase->payment_type->name ?? '') : ($purchase->paymentType ?? '')) }}
</td>
</tr>
@if ((get_business_option('business-settings')['show_note'] ?? 0) == 1)
<tr class="in-table-row">
<td class="text-start">
{{ get_business_option('business-settings')['note'] ?? '' }}
</td>
</tr>
@endif
</tbody>
</table>
@if ($bank_detail->show_in_invoice ?? 0 == 1)
<div class="bank-details-container">
<div class="bank-details-title">
{{__('Bank Details')}}
</div>
<div class="back-details-content">
<table class="table mb-2">
<tbody>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Name') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->name }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Account No') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['account_number'] ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('UPI ID') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['upi_id'] ?? '' }}</td>
</tr>
<tr class="in-table-row">
<td class="text-start in-table-title">{{ __('Holders Name') }}</td>
<td class="clone-width">:</td>
<td class="text-start">{{ $bank_detail->meta['account_holder'] ?? '' }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@endif
</div>
<div>
<table class="table">
<tbody>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Subtotal') }}</td>
<td class="text-end">:</td>
<td class="text-end">{{ currency_format($subtotal, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ get_business_option('business-settings')['vat_name'] ?? 'Vat' }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->vat_amount, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Shipping Charge') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->shipping_charge, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom border-bottom-dis" >
<td class="text-end">{{ __('Discount') }}
@if ($purchase->discount_type == 'percent')
({{ $purchase->discount_percent }}%)
@endif
</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->discountAmount, currency: business_currency()) }}
</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end total-amound">{{ __('Total Amount') }}</td>
<td class="text-end total-amound">:</td>
<td class="text-end total-amound">
{{ currency_format($purchase->totalAmount, currency: business_currency()) }}</td>
</tr>
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Paid Amount') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->paidAmount + $purchase->change_amount, currency: business_currency()) }}
</td>
</tr>
@if($purchase->change_amount > 0)
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Change Amount') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->change_amount, currency: business_currency()) }}
</td>
</tr>
@else
<tr class="in-table-row-bottom">
<td class="text-end">{{ __('Due') }}</td>
<td class="text-end">:</td>
<td class="text-end">
{{ currency_format($purchase->dueAmount, currency: business_currency()) }}
</td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
@endif
<div class="pdf-footer">
<div class="in-signature-container d-flex align-items-center justify-content-between ">
<div class="in-signature">
<hr class="in-hr">
<h4>{{ __('Customer Signature') }}</h4>
</div>
<div class="in-signature">
<hr class="in-hr">
<h4>{{ __('Authorized Signature') }}</h4>
</div>
</div>
</div>
@if ((get_business_option('business-settings')['show_warranty'] ?? 0) == 1)
<div class="warranty-container-2">
<p>
@if ((get_business_option('business-settings')['show_warranty'] ?? 0) == 1)
<span>{{ get_business_option('business-settings')['warranty_void_label'] ?? '' }} - </span>
@endif
{{ get_business_option('business-settings')['warranty_void'] ?? '' }}
</p>
</div>
@endif
</div>
</div>

View File

@@ -0,0 +1,478 @@
@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;
}
.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_content')
<div class="invoice-container">
{{-- HEADER --}}
<table class="top-table">
<tr>
<td>
@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);
@endphp
<table>
<tr>
@if ((get_business_option('business-settings')['show_a4_invoice_logo'] ?? 0) == 1)
<td>
<img style="width: auto;
height: 54px;
display: block;" src="data:image/{{ $logoType }};base64,{{ $logoData }}">
</td>
@endif
</tr>
</table>
</td>
<td class="right-info">
{{ __('Address') }} : {{ $purchase->branch?->address ?? $purchase->business?->address }}<br>
{{ __('Mobile') }} : {{ $purchase->branch?->phone ?? $purchase->business?->phoneNumber }}<br>
{{ __('Email') }} : {{ $purchase->branch?->email ?? $purchase->business?->email }}<br>
@if (($purchase->business->meta['show_vat'] ?? 0) == 1)
{{ $purchase->business->vat_name }}
@endif
{{ ($purchase->business->meta['show_vat'] ?? 0) == 1 && ($purchase->business->meta['show_vat'] ?? 0) == 1 ? ':' : '' }}
@if (($purchase->business->meta['show_vat'] ?? 0) == 1)
{{ $purchase->business->vat_no ?? '' }}
@endif
</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>
{{-- SUPPLIER / PURCHASE INFO --}}
<table class="info-table">
<tr>
<td width="50%" style="text-align:{{ app()->getLocale() == 'ar' ? 'left' : 'left' }};">
<strong>{{ __('Supplier Name') }}</strong> : {{ $purchase->party->name }}<br>
<strong>{{ __('Mobile') }}</strong> : {{ $purchase->party->phone }}<br>
<strong>{{ __('Address') }}</strong> : {{ $purchase->party->address }}
</td>
<td width="50%" style="text-align:{{ app()->getLocale() == 'ar' ? 'right' : 'right' }};">
<strong>{{ __('Invoice') }}</strong> : {{ $purchase->invoiceNumber }}<br>
<strong>{{ __('Date') }}</strong> : {{ formatted_date($purchase->purchaseDate) }}<br>
<strong>{{ __('Purchases By') }}</strong> :
{{ $purchase->user->role != 'staff' ? __('Admin') : $purchase->user->name }}
</td>
</tr>
</table>
{{-- ITEM TABLE --}}
<table class="item-table">
<thead>
<tr>
<th width="5%">{{ __('SL') }}</th>
<th width="45%">{{ __('Item') }}</th>
<th width="10%">{{ __('Quantity') }}</th>
@usercan('purchases.price')
<th width="20%">{{ __('Unit Price') }}</th>
@endusercan
<th width="20%">{{ __('Total Price') }}</th>
</tr>
</thead>
<tbody>
@php $subtotal = 0; @endphp
@foreach ($purchase->details as $detail)
@php
$productTotal = ($detail->productPurchasePrice ?? 0) * ($detail->quantities ?? 0);
$subtotal += $productTotal;
@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">{{ $detail->quantities }}</td>
@usercan('purchases.price')
<td class="text-center">
{{ currency_format($detail->productPurchasePrice, currency: business_currency()) }}
</td>
@endusercan
<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 style="padding-bottom:8px;">
{{ amountInWords($subtotal) }}
</td>
</tr>
<tr>
<td style="padding-bottom:8px;">
{{ __('Paid by') }} :
{{ $transactionTypes ?? ($purchase->payment_type_id ? ($purchase->payment_type->name ?? '') : ($purchase->paymentType ?? '')) }}
</td>
</tr>
@if ((get_business_option('business-settings')['show_note'] ?? 0) == 1)
<tr>
<td style="padding-top:5px;">
{{ get_business_option('business-settings')['note'] ?? '' }}
</td>
</tr>
@endif
</tbody>
</table>
{{-- BANK DETAILS --}}
@if (($bank_detail->show_in_invoice ?? 0) == 1)
<table 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 class="text-right">{{ __('Subtotal') }}</td>
<td class="text-right">{{ currency_format($subtotal, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Vat') }}</td>
<td class="text-right">
{{ currency_format($purchase->vat_amount, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Shipping Charge') }}</td>
<td class="text-right">
{{ currency_format($purchase->shipping_charge, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Discount') }}</td>
<td class="text-right">
{{ currency_format($purchase->discountAmount, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right"><strong>{{ __('Total Amount') }}</strong></td>
<td class="text-right">
<strong>{{ currency_format($purchase->totalAmount, currency: business_currency()) }}</strong>
</td>
</tr>
<tr>
<td class="text-right">{{ __('Total Return Amount') }}</td>
<td class="text-right">
{{ currency_format($returnTotal ?? 0, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Payable Amount') }}</td>
<td class="text-right">
{{ currency_format($purchase->totalAmount, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Paid Amount') }}</td>
<td class="text-right">
{{ currency_format($purchase->paidAmount, currency: business_currency()) }}</td>
</tr>
<tr>
<td class="text-right">{{ __('Due') }}</td>
<td class="text-right">
{{ currency_format($purchase->dueAmount, currency: business_currency()) }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<div style="clear: both;"></div>
{{-- RETURN TABLE --}}
@if (!$purchase_returns->isEmpty())
<div class="return-title">{{ __('Returned Items') }}</div>
<table class="item-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; @endphp
@foreach ($purchase_returns as $return)
@foreach ($return->details as $detail)
@php $total_return_amount += $detail->return_amount ?? 0; @endphp
<tr>
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-center">{{ formatted_date($return->return_date) }}</td>
<td class="text-center">
{{ $detail->purchaseDetail->product->productName ?? '' }}
{{ $detail->purchaseDetail?->stock?->batch_no ? '(' . $detail->purchaseDetail?->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 ?? $purchase->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($purchase->totalAmount, currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Paid Amount') }} </td>
<td align="right">:</td>
<td align="right">{{ currency_format($purchase->paidAmount, currency: business_currency()) }}</td>
</tr>
<tr>
<td align="right">{{ __('Due') }} </td>
<td align="right">:</td>
<td align="right">{{ currency_format($purchase->dueAmount, currency: business_currency()) }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
@endif
{{-- PAYMENT INFO --}}
<div style="clear: both;"></div>
{{-- 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 --}}
@if ((get_business_option('business-settings')['show_warranty'] ?? 0) == 1)
<div class="warranty-box">
@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

View File

@@ -0,0 +1,32 @@
@foreach($products as $product)
@php
$firstStock = $product->stocks->first();
@endphp
<div id="single-product" class="single-product {{ $product->id }}"
data-product_id="{{ $product->id }}"
data-product_type="{{ $product->product_type }}" {{-- newly added. this logic apply when product-modal opeb --}}
data-product_code="{{ $product->productCode }}"
data-product_unit_id="{{ $product->unit->id ?? null }}"
data-product_unit_name="{{ $product->unit->unitName ?? null }}"
data-product_image="{{ $product->productPicture }}"
data-brand="{{ $product->brand->brandName ?? '' }}"
data-stock="{{ $product->stocks_sum_product_stock ?? 0 }}"
data-purchase_price="{{ $firstStock->productPurchasePrice ?? 0 }}"
data-sales_price="{{ $firstStock->productSalePrice ?? 0 }}"
data-whole_sale_price="{{ $firstStock->productWholeSalePrice ?? 0 }}"
data-dealer_price="{{ $firstStock->productDealerPrice ?? 0 }}"
>
<div class="pro-img">
<img class='w-100 rounded' src="{{ asset($product->productPicture ?? 'assets/images/products/box.svg') }}" alt="">
</div>
<div class="product-con">
<h6 class="pro-title product_name">{{ $product->productName }}</h6>
<p class="pro-category">{{ $product->category->categoryName ?? '' }}</p>
@usercan('purchases.price')
<div class="price">
<h6 class="pro-price product_price">{{ currency_format($firstStock->productPurchasePrice ?? 0, currency: business_currency()) }}</h6>
</div>
@endusercan
</div>
</div>
@endforeach

View File

@@ -0,0 +1,98 @@
<div class="modal fade" id="product-modal">
<div class="modal-dialog modal-dialog-centered modal-md">
<div class="modal-content">
<div class="modal-header d-flex align-items-center justify-content-between">
<h1 class="modal-title fs-5">{{ __('Add Items') }}</h1>
<div class="custom-modal-header">
<button type="button" class="btn-close custom-close-btn" data-bs-dismiss="modal" aria-label="Close" ></button>
</div>
</div>
<div class="modal-body">
<div class="personal-info">
<form id="purchase_modal" data-route="{{ route('business.carts.store') }}">
@csrf
<input type="hidden" id="setting_expire_type" value="{{ $modules['expire_date_type'] ?? 'dmy' }}">
<div class="row">
<div class="col-lg-6 mb-2 mt-2">
<ul>
<li><span class="fw-bold">{{ __('Product Name') }}</span> <span>:</span> <span id="product_name"></span></li>
<li><span class="fw-bold">{{ __('Brand') }}</span> <span>:</span> <span id="brand"></span></li>
</ul>
</div>
<div class="col-lg-6 mb-2 mt-2 text-end">
<ul>
<li><span class="fw-bold">{{ __('Stock') }}</span> <span>:</span> <span id="stock"></span></li>
</ul>
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Quantity') }}</label>
<input type="number" step="any" name="amount" id="product_qty" value="" required class="form-control" placeholder="{{ __('Enter Quantity') }}">
</div>
<div class="col-lg-6 mb-2 d-none">
<label>{{ __('Variant') }}</label>
<div class="gpt-up-down-arrow position-relative">
<select name="variant_name" id="variant_name" class="form-control w-100 role" required disabled>
<option value="">{{ __('Select Variant') }} </option>
{{-- load from js --}}
</select>
<span></span>
</div>
</div>
@usercan('purchases.price')
<div class="col-lg-6 mb-2">
<label>{{ __('Purchase Price') }}</label>
<input type="number" step="any" name="amount" id="purchase_price" required class="form-control" placeholder="{{ __('Enter Purchase Price') }}">
</div>
@endusercan
<div class="col-lg-6 mb-2">
<label>{{ __('Sales Price') }}</label>
<input type="number" step="any" name="amount" id="sales_price" required class="form-control" placeholder="{{ __('Enter Sales Price') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('WholeSale Price') }}</label>
<input type="number" step="any" name="amount" id="whole_sale_price" required class="form-control" placeholder="{{ __('Enter WholeSale Price') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Dealer Price') }}</label>
<input type="number" step="any" name="amount" id="dealer_price" required class="form-control" placeholder="{{ __('Enter Dealer Price') }}">
</div>
@if (is_module_enabled($modules, 'show_product_batch_no'))
<div class="col-lg-6 mb-2">
<label>{{ __('Batch') }}</label>
<input type="text" name="batch_no" id="batch_no" value="{{ $modules['default_batch_no'] ?? '' }}" class="form-control" placeholder="{{ __('Enter Batch No.') }}">
</div>
@endif
@if (is_module_enabled($modules, 'show_product_expire_date'))
<div class="col-lg-6 mb-2">
<label>{{ __('Expire Date') }}</label>
<input type="{{ isset($modules['expire_date_type']) && $modules['expire_date_type'] == 'my' ? 'month' : 'date' }}" name="expire_date" value="{{ $modules['default_expired_date'] ?? '' }}" id="expire_date" class="form-control">
</div>
@endif
@if(moduleCheck('warehouseAddon') && is_module_enabled($modules, 'show_warehouse'))
<div class="col-lg-6 mb-2">
<label>{{ __('Warehouse') }}</label>
<div class="gpt-up-down-arrow position-relative">
<select name="warehouse_id" id="warehouse_id" class="form-control table-select w-100 role">
<option value=""> {{ __('Select one') }}</option>
@foreach ($warehouses as $warehouse)
<option value="{{ $warehouse->id }}"> {{ $warehouse->name }}</option>
@endforeach
</select>
<span></span>
</div>
</div>
@endif
</div>
<div class="col-lg-12">
<div class="button-group text-center mt-5">
<button type="reset" class="theme-btn border-btn m-2">{{ __('Reset') }}</button>
<button class="theme-btn m-2 submit-btn">{{ __('Save') }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,62 @@
<div class="modal fade common-validation-modal" id="supplier-create-modal">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">{{ __('Create Supplier') }}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="personal-info">
<form action="{{ route('business.purchases.store.supplier') }}" method="post" enctype="multipart/form-data"
class="ajaxform_instant_reload">
@csrf
<div class="row">
<div class="col-lg-6 mb-2">
<label>{{ __('Name') }}</label>
<input type="text" name="name" required class="form-control" placeholder="{{ __('Enter Name') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Phone') }}</label>
<input type="number" name="phone" required class="form-control" placeholder="{{ __('Enter phone number') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Email') }}</label>
<input type="email" name="email" class="form-control" placeholder="{{ __('Enter Email') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Address') }}</label>
<input type="text" name="address" class="form-control" placeholder="{{ __('Enter Address') }}">
</div>
<div class="col-lg-6 mb-2">
<label>{{ __('Due') }}</label>
<input type="number" name="due" step="any" class="form-control" placeholder="{{ __('Enter Due') }}">
</div>
<div class="col-lg-12">
<div class="row">
<div class="col-10">
<label class="img-label">{{ __('Image') }}</label>
<input type="file" accept="image/*" name="image" class="form-control file-input-change" data-id="image">
</div>
<div class="col-1 align-self-center mt-3">
<img src="{{ asset('assets/images/icons/upload.png') }}" id="image" class="table-img">
</div>
</div>
</div>
<input type="hidden" name="type" value="Supplier">
</div>
<div class="col-lg-12">
<div class="button-group text-center mt-5">
<button type="reset" class="theme-btn border-btn m-2">{{ __('Reset') }}</button>
<button class="theme-btn m-2 submit-btn">{{ __('Save') }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>