Added: Payments Report

This commit is contained in:
Fahim 2021-09-09 03:05:33 +06:00
parent e3317587bb
commit fe75cc546d
10 changed files with 253 additions and 9 deletions

View File

@ -10,6 +10,12 @@ use Illuminate\Support\Facades\Gate;
class ReportsController extends Controller
{
public function paymentsReport() {
abort_if(Gate::denies('access_payments_report'), 403);
return view('reports::payments.index');
}
public function salesReport() {
abort_if(Gate::denies('access_sales_report'), 403);

View File

@ -0,0 +1,16 @@
@extends('layouts.app')
@section('title', 'Payments Report')
@section('breadcrumb')
<ol class="breadcrumb border-0 m-0">
<li class="breadcrumb-item"><a href="{{ route('home') }}">Home</a></li>
<li class="breadcrumb-item active">Payments Report</li>
</ol>
@endsection
@section('content')
<div class="container-fluid">
<livewire:reports.payments-report/>
</div>
@endsection

View File

@ -12,6 +12,9 @@
*/
Route::group(['middleware' => 'auth'], function () {
//Payments Report
Route::get('/payments-report', 'ReportsController@paymentsReport')
->name('payments-report.index');
//Sales Report
Route::get('/sales-report', 'ReportsController@salesReport')
->name('sales-report.index');

View File

@ -0,0 +1,74 @@
<?php
namespace App\Http\Livewire\Reports;
use Livewire\Component;
use Livewire\WithPagination;
use Modules\People\Entities\Customer;
use Modules\People\Entities\Supplier;
use Modules\Purchase\Entities\PurchasePayment;
use Modules\PurchasesReturn\Entities\PurchaseReturnPayment;
use Modules\Sale\Entities\SalePayment;
use Modules\SalesReturn\Entities\SaleReturnPayment;
class PaymentsReport extends Component
{
use WithPagination;
protected $paginationTheme = 'bootstrap';
public $start_date;
public $end_date;
public $payments;
public $payment_method;
protected $rules = [
'start_date' => 'required|date|before:end_date',
'end_date' => 'required|date|after:start_date',
'payments' => 'required|string'
];
protected $query;
public function mount() {
$this->start_date = today()->subDays(30)->format('Y-m-d');
$this->end_date = today()->format('Y-m-d');
$this->payments = '';
$this->query = null;
}
public function render() {
$this->getQuery();
return view('livewire.reports.payments-report', [
'information' => $this->query ? $this->query->orderBy('date', 'desc')
->when($this->payment_method, function ($query) {
return $query->where('payment_method', $this->payment_method);
})
->paginate(10) : collect()
]);
}
public function generateReport() {
$this->validate();
$this->render();
}
public function updatedPayments($value) {
$this->resetPage();
}
public function getQuery() {
if ($this->payments == 'sale') {
$this->query = SalePayment::query()->with('sale');
} elseif ($this->payments == 'sale_return') {
$this->query = SaleReturnPayment::query()->with('saleReturn');
} elseif ($this->payments == 'purchase') {
$this->query = PurchasePayment::query()->with('purchase');
} elseif ($this->payments == 'purchase_return') {
$this->query = PurchaseReturnPayment::query()->with('purchaseReturn');
} else {
$this->query = null;
}
}
}

View File

@ -233,12 +233,19 @@
</li>
@endcan
@can('access_sales_report|access_purchases_report|access_sales_return_report|access_purchases_return_report')
@can('access_sales_report|access_purchases_report|access_sales_return_report|access_purchases_return_report|access_payments_reports')
<li class="c-sidebar-nav-item c-sidebar-nav-dropdown {{ request()->routeIs('*-report.index') ? 'c-show' : '' }}">
<a class="c-sidebar-nav-link c-sidebar-nav-dropdown-toggle" href="#">
<i class="c-sidebar-nav-icon bi bi-graph-up" style="line-height: 1;"></i> Reports
</a>
<ul class="c-sidebar-nav-dropdown-items">
@can('access_payments_report')
<li class="c-sidebar-nav-item">
<a class="c-sidebar-nav-link {{ request()->routeIs('payments-report.index') ? 'c-active' : '' }}" href="{{ route('payments-report.index') }}">
<i class="c-sidebar-nav-icon bi bi-clipboard-data" style="line-height: 1;"></i> Payments Report
</a>
</li>
@endcan
@can('access_sales_report')
<li class="c-sidebar-nav-item">
<a class="c-sidebar-nav-link {{ request()->routeIs('sales-report.index') ? 'c-active' : '' }}" href="{{ route('sales-report.index') }}">

View File

@ -0,0 +1,138 @@
<div>
<div class="row">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-body">
<form wire:submit.prevent="generateReport">
<div class="form-row">
<div class="col-lg-6">
<div class="form-group">
<label>Start Date <span class="text-danger">*</span></label>
<input wire:model.defer="start_date" type="date" class="form-control" name="start_date">
@error('start_date')
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label>End Date <span class="text-danger">*</span></label>
<input wire:model.defer="end_date" type="date" class="form-control" name="end_date">
@error('end_date')
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
</div>
<div class="form-row">
<div class="col-lg-6">
<div class="form-group">
<label>Payments</label>
<select wire:model="payments" class="form-control" name="payments">
<option value="">Select Payments</option>
<option value="sale">Sales</option>
<option value="sale_return">Sale Returns</option>
<option value="purchase">Purchase</option>
<option value="purchase_return">Purchase Returns</option>
</select>
@error('payments')
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Payment Method</label>
<select wire:model.defer="payment_method" class="form-control" name="payment_method">
<option value="">Select Payment Method</option>
<option value="Cash">Cash</option>
<option value="Credit Card">Credit Card</option>
<option value="Bank Transfer">Bank Transfer</option>
<option value="Cheque">Cheque</option>
<option value="Other">Other</option>
</select>
</div>
</div>
</div>
<div class="form-group mb-0">
<button type="submit" class="btn btn-primary">
<span wire:target="generateReport" wire:loading class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
<i wire:target="generateReport" wire:loading.remove class="bi bi-shuffle"></i>
Filter Report
</button>
</div>
</form>
</div>
</div>
</div>
</div>
@if($information->isNotEmpty())
<div class="row">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-body">
<table class="table table-bordered table-striped text-center mb-0">
<div wire:loading.flex class="col-12 position-absolute justify-content-center align-items-center" style="top:0;right:0;left:0;bottom:0;background-color: rgba(255,255,255,0.5);z-index: 99;">
<div class="spinner-border text-primary" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
<thead>
<tr>
<th>Date</th>
<th>Reference</th>
<th>{{ ucwords(str_replace('_', ' ', $payments)) }}</th>
<th>Total</th>
<th>Payment Method</th>
</tr>
</thead>
<tbody>
@forelse($information as $data)
<tr>
<td>{{ \Carbon\Carbon::parse($data->date)->format('d M, Y') }}</td>
<td>{{ $data->reference }}</td>
<td>
@if($payments == 'sale')
{{ $data->sale->reference }}
@elseif($payments == 'purchase')
{{ $data->purchase->reference }}
@elseif($payments == 'sale_return')
{{ $data->saleReturn->reference }}
@elseif($payments == 'purchase_return')
{{ $data->purchaseReturn->reference }}
@endif
</td>
<td>{{ format_currency($data->amount) }}</td>
<td>{{ $data->payment_method }}</td>
</tr>
@empty
<tr>
<td colspan="8">
<span class="text-danger">No Data Available!</span>
</td>
</tr>
@endforelse
</tbody>
</table>
<div @class(['mt-3' => $information->hasPages()])>
{{ $information->links() }}
</div>
</div>
</div>
</div>
</div>
@else
<div class="row">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-body">
<div class="alert alert-warning mb-0">
No Data Available!
</div>
</div>
</div>
</div>
</div>
@endif
</div>

View File

@ -10,7 +10,7 @@
<label>Start Date <span class="text-danger">*</span></label>
<input wire:model.defer="start_date" type="date" class="form-control" name="start_date">
@error('start_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
@ -19,7 +19,7 @@
<label>End Date <span class="text-danger">*</span></label>
<input wire:model.defer="end_date" type="date" class="form-control" name="end_date">
@error('end_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>

View File

@ -10,7 +10,7 @@
<label>Start Date <span class="text-danger">*</span></label>
<input wire:model.defer="start_date" type="date" class="form-control" name="start_date">
@error('start_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
@ -19,7 +19,7 @@
<label>End Date <span class="text-danger">*</span></label>
<input wire:model.defer="end_date" type="date" class="form-control" name="end_date">
@error('end_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>

View File

@ -10,7 +10,7 @@
<label>Start Date <span class="text-danger">*</span></label>
<input wire:model.defer="start_date" type="date" class="form-control" name="start_date">
@error('start_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
@ -19,7 +19,7 @@
<label>End Date <span class="text-danger">*</span></label>
<input wire:model.defer="end_date" type="date" class="form-control" name="end_date">
@error('end_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>

View File

@ -10,7 +10,7 @@
<label>Start Date <span class="text-danger">*</span></label>
<input wire:model.defer="start_date" type="date" class="form-control" name="start_date">
@error('start_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>
@ -19,7 +19,7 @@
<label>End Date <span class="text-danger">*</span></label>
<input wire:model.defer="end_date" type="date" class="form-control" name="end_date">
@error('end_date')
<span class="text-danger mb-1">{{ $message }}</span>
<span class="text-danger mt-1">{{ $message }}</span>
@enderror
</div>
</div>