Added: Purchases Report

This commit is contained in:
Fahim 2021-09-08 16:06:39 +06:00
parent f9d4295656
commit 9577fd7f41
7 changed files with 251 additions and 9 deletions

View File

@ -11,4 +11,8 @@ class ReportsController extends Controller
public function salesReport() {
return view('reports::sales.index');
}
public function purchasesReport() {
return view('reports::purchases.index');
}
}

View File

@ -0,0 +1,16 @@
@extends('layouts.app')
@section('title', 'Purchases 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">Purchases Report</li>
</ol>
@endsection
@section('content')
<div class="container-fluid">
<livewire:reports.purchases-report :suppliers="\Modules\People\Entities\Supplier::all()"/>
</div>
@endsection

View File

@ -15,4 +15,7 @@ Route::group(['middleware' => 'auth'], function () {
//Sales Report
Route::get('/sales-report', 'ReportsController@salesReport')
->name('sales-report.index');
//Purchases Report
Route::get('/purchases-report', 'ReportsController@purchasesReport')
->name('purchases-report.index');
});

View File

@ -0,0 +1,60 @@
<?php
namespace App\Http\Livewire\Reports;
use Livewire\Component;
use Livewire\WithPagination;
use Modules\Purchase\Entities\Purchase;
class PurchasesReport extends Component
{
use WithPagination;
protected $paginationTheme = 'bootstrap';
public $suppliers;
public $start_date;
public $end_date;
public $supplier_id;
public $purchase_status;
public $payment_status;
protected $rules = [
'start_date' => 'required|date|before:end_date',
'end_date' => 'required|date|after:start_date',
];
public function mount($suppliers) {
$this->suppliers = $suppliers;
$this->start_date = today()->subDays(30)->format('Y-m-d');
$this->end_date = today()->format('Y-m-d');
$this->supplier_id = '';
$this->purchase_status = '';
$this->payment_status = '';
}
public function render() {
$purchases = Purchase::whereDate('date', '>=', $this->start_date)
->whereDate('date', '<=', $this->end_date)
->when($this->supplier_id, function ($query) {
return $query->where('supplier_id', $this->supplier_id);
})
->when($this->purchase_status, function ($query) {
return $query->where('status', $this->purchase_status);
})
->when($this->payment_status, function ($query) {
return $query->where('payment_status', $this->payment_status);
})
->orderBy('date', 'desc')->paginate(10);
return view('livewire.reports.purchases-report', [
'purchases' => $purchases
]);
}
public function generateReport() {
$this->validate();
$this->render();
}
}

View File

@ -85,7 +85,7 @@
@endcan
@can('access_purchases')
<li class="c-sidebar-nav-item c-sidebar-nav-dropdown {{ request()->routeIs('purchases*') || request()->routeIs('purchase-payments*') ? 'c-show' : '' }}">
<li class="c-sidebar-nav-item c-sidebar-nav-dropdown {{ request()->routeIs('purchases.*') || request()->routeIs('purchase-payments*') ? 'c-show' : '' }}">
<a class="c-sidebar-nav-link c-sidebar-nav-dropdown-toggle" href="#">
<i class="c-sidebar-nav-icon bi bi-bag" style="line-height: 1;"></i> Purchases
</a>
@ -233,8 +233,8 @@
</li>
@endcan
@can('access_sales_report')
<li class="c-sidebar-nav-item c-sidebar-nav-dropdown {{ request()->routeIs('sales-report.index') ? 'c-show' : '' }}">
@can('access_sales_report|access_purchases_report')
<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>
@ -246,6 +246,13 @@
</a>
</li>
@endcan
@can('access_purchases_report')
<li class="c-sidebar-nav-item">
<a class="c-sidebar-nav-link {{ request()->routeIs('purchases-report.index') ? 'c-active' : '' }}" href="{{ route('purchases-report.index') }}">
<i class="c-sidebar-nav-icon bi bi-clipboard-data" style="line-height: 1;"></i> Purchases Report
</a>
</li>
@endcan
</ul>
</li>
@endcan

View File

@ -0,0 +1,154 @@
<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-4">
<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 mb-1">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-lg-4">
<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 mb-1">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-lg-4">
<div class="form-group">
<label>Supplier</label>
<select wire:model.defer="supplier_id" class="form-control" name="supplier_id">
<option value="">Select Supplier</option>
@foreach($suppliers as $supplier)
<option value="{{ $supplier->id }}">{{ $supplier->supplier_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
<div class="form-row">
<div class="col-lg-6">
<div class="form-group">
<label>Status</label>
<select wire:model.defer="purchase_status" class="form-control" name="purchase_status">
<option value="">Select Status</option>
<option value="Pending">Pending</option>
<option value="Ordered">Ordered</option>
<option value="Completed">Completed</option>
</select>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Payment Status</label>
<select wire:model.defer="payment_status" class="form-control" name="payment_status">
<option value="">Select Payment Status</option>
<option value="Paid">Paid</option>
<option value="Unpaid">Unpaid</option>
<option value="Partial">Partial</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>
<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>Supplier</th>
<th>Status</th>
<th>Total</th>
<th>Paid</th>
<th>Due</th>
<th>Payment Status</th>
</tr>
</thead>
<tbody>
@forelse($purchases as $purchase)
<tr>
<td>{{ \Carbon\Carbon::parse($purchase->date)->format('d M, Y') }}</td>
<td>{{ $purchase->reference }}</td>
<td>{{ $purchase->supplier_name }}</td>
<td>
@if ($purchase->status == 'Pending')
<span class="badge badge-info">
{{ $purchase->status }}
</span>
@elseif ($purchase->status == 'Ordered')
<span class="badge badge-primary">
{{ $purchase->status }}
</span>
@else
<span class="badge badge-success">
{{ $purchase->status }}
</span>
@endif
</td>
<td>{{ format_currency($purchase->total_amount) }}</td>
<td>{{ format_currency($purchase->paid_amount) }}</td>
<td>{{ format_currency($purchase->due_amount) }}</td>
<td>
@if ($purchase->payment_status == 'Partial')
<span class="badge badge-warning">
{{ $purchase->payment_status }}
</span>
@elseif ($purchase->payment_status == 'Paid')
<span class="badge badge-success">
{{ $purchase->payment_status }}
</span>
@else
<span class="badge badge-danger">
{{ $purchase->payment_status }}
</span>
@endif
</td>
</tr>
@empty
<tr>
<td colspan="8">
<span class="text-danger">No Purchases Data Available!</span>
</td>
</tr>
@endforelse
</tbody>
</table>
<div @class(['mt-3' => $purchases->hasPages()])>
{{ $purchases->links() }}
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -27,7 +27,7 @@
<div class="form-group">
<label>Customer</label>
<select wire:model.defer="customer_id" class="form-control" name="customer_id">
<option value="" disabled>Select Customer</option>
<option value="">Select Customer</option>
@foreach($customers as $customer)
<option value="{{ $customer->id }}">{{ $customer->customer_name }}</option>
@endforeach
@ -40,7 +40,7 @@
<div class="form-group">
<label>Status</label>
<select wire:model.defer="sale_status" class="form-control" name="sale_status">
<option value="" disabled>Select Status</option>
<option value="">Select Status</option>
<option value="Pending">Pending</option>
<option value="Shipped">Shipped</option>
<option value="Completed">Completed</option>
@ -51,7 +51,7 @@
<div class="form-group">
<label>Payment Status</label>
<select wire:model.defer="sale_status" class="form-control" name="payment_status">
<option value="" disabled>Select Payment Status</option>
<option value="">Select Payment Status</option>
<option value="Paid">Paid</option>
<option value="Unpaid">Unpaid</option>
<option value="Partial">Partial</option>
@ -144,11 +144,9 @@
@endforelse
</tbody>
</table>
@if($sales->links())
<div class="mt-3">
<div @class(['mt-3' => $sales->hasPages()])>
{{ $sales->links() }}
</div>
@endif
</div>
</div>
</div>