Your IP : 216.73.216.91


Current Path : /var/www/html/LLCF-APP/app/Http/Controllers/Admin/
Upload File :
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);
    }


}