| Current Path : /var/www/html/LLCF-APP/app/Http/Controllers/Admin/ |
| Current File : /var/www/html/LLCF-APP/app/Http/Controllers/Admin/PettyCashBookController.php |
<?php
namespace App\Http\Controllers\Admin;
use Exception;
use Carbon\Carbon;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Models\PettyCashBook;
use App\Models\VoucherExpense;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Http\Controllers\Controller;
use App\Exports\PettyCashBookExport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Session;
use App\Http\Requests\PettyCashBookFormRequest;
class PettyCashBookController extends Controller
{
public function index(Request $request): View
{
$query = PettyCashBook::with('voucherExpense');
if ($request->filled('particulars')) {
$query->where('particulars', 'like', '%' . $request->particulars . '%');
}
if ($request->filled('voucher_no')) {
$query->where('voucher_no', $request->voucher_no);
}
if ($request->filled('date_from')) {
$query->whereDate('date', '>=', $request->date_from);
}
if ($request->filled('date_to')) {
$query->whereDate('date', '<=', $request->date_to);
}
$pettyCashBooks = $query
->orderBy('date', 'desc')
->paginate(10)
->withQueryString();
return view('admin.petty-cash-book.index', compact('pettyCashBooks'));
}
public function create(): View
{
$voucherExpenses = VoucherExpense::all();
return view('admin.petty-cash-book.create', compact('voucherExpenses'));
}
public function store(PettyCashBookFormRequest $request): RedirectResponse
{
try {
PettyCashBook::create($request->validated());
Session::flash('msg.success', 'Petty cash entry created successfully.');
return redirect()->route('admin.petty-cash-book.index');
} catch (Exception $e) {
Session::flash('msg.error', 'Failed to create entry: ' . $e->getMessage());
return redirect()->back()->withInput();
}
}
public function edit(int $id): View
{
$pettyCash = PettyCashBook::findOrFail($id);
$voucherExpenses = VoucherExpense::all();
return view('admin.petty-cash-book.edit', compact('pettyCash', 'voucherExpenses'));
}
public function update(PettyCashBookFormRequest $request, int $id): RedirectResponse
{
try {
$pettyCashBook = PettyCashBook::findOrFail($id);
$pettyCashBook->update($request->validated());
Session::flash('msg.success', 'Petty cash entry updated successfully.');
return redirect()->route('admin.petty-cash-book.index');
} catch (Exception $e) {
Session::flash('msg.error', 'Failed to update entry: ' . $e->getMessage());
return redirect()->back()->withInput();
}
}
public function destroy(int $id): RedirectResponse
{
try {
$pettyCashBook = PettyCashBook::findOrFail($id);
$pettyCashBook->delete();
Session::flash('msg.success', 'Petty cash entry deleted successfully.');
return redirect()->route('admin.petty-cash-book.index');
} catch (Exception $e) {
Session::flash('msg.error', 'Failed to delete entry: ' . $e->getMessage());
return redirect()->back();
}
}
public function exportPdf(Request $request)
{
$pettyCashEntries = PettyCashBook::with('voucherExpense')
->when($request->particulars, fn($q) => $q->where('particulars', 'like', '%' . $request->particulars . '%'))
->when($request->voucher_no, fn($q) => $q->where('voucher_no', $request->voucher_no))
->when($request->date_from, fn($q) => $q->whereDate('date', '>=', $request->date_from))
->when($request->date_to, fn($q) => $q->whereDate('date', '<=', $request->date_to))
->get();
$pdf = Pdf::loadView('admin.petty-cash-book.exports.pdf', compact('pettyCashEntries'));
$filename = 'petty-cash-book-' . Carbon::now()->format('Y-m-d-H:i:s') . '.pdf';
return $pdf->download($filename);
}
public function exportCsv(Request $request)
{
$filename = 'petty-cash-book-' . Carbon::now()->format('Y-m-d-H:i:s') . '.csv';
$entries = PettyCashBook::with('voucherExpense')
->when($request->particulars, fn($q) => $q->where('particulars', 'like', '%' . $request->particulars . '%'))
->when($request->voucher_no, fn($q) => $q->where('voucher_no', $request->voucher_no))
->when($request->date_from, fn($q) => $q->whereDate('date', '>=', $request->date_from))
->when($request->date_to, fn($q) => $q->whereDate('date', '<=', $request->date_to))
->get();
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => "attachment; filename=\"$filename\"",
];
$callback = function () use ($entries) {
$handle = fopen('php://output', 'w');
fputcsv($handle, [
'Particulars',
'Voucher No',
'Amount Received',
'Amount Paid',
'Voucher Expense',
'Date'
]);
foreach ($entries as $entry) {
fputcsv($handle, [
$entry->particulars,
$entry->voucher_no,
$entry->amount_recieved,
$entry->amount_paid,
$entry->voucherExpense?->title,
$entry->date?->format('Y-m-d'),
]);
}
fclose($handle);
};
return response()->stream($callback, 200, $headers);
}
public function exportExcel(Request $request)
{
$entries = PettyCashBook::with('voucherExpense')
->when($request->particulars, fn($q) => $q->where('particulars', 'like', '%' . $request->particulars . '%'))
->when($request->voucher_no, fn($q) => $q->where('voucher_no', $request->voucher_no))
->when($request->date_from, fn($q) => $q->whereDate('date', '>=', $request->date_from))
->when($request->date_to, fn($q) => $q->whereDate('date', '<=', $request->date_to))
->get();
$filename = 'petty-cash-book-' . now()->format('Y-m-d-H-i-s') . '.xlsx';
return Excel::download(new PettyCashBookExport($entries), $filename);
}
}