Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/
Upload File :
Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/ContentPublicHolidayController.php

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\ContentPublicHolidayRequest;
use App\Models\Backend\ContentPublicHoliday;
use App\Models\Backend\Ref;
use Illuminate\Http\Request;

class ContentPublicHolidayController extends Controller
{
    public function index(Request $request)
    {
        $search = $request->get('search');
        $statusFilter = $request->get('status');
        $yearFilter = $request->get('year');

        $holidays = ContentPublicHoliday::query()
            ->when($search, function ($q) use ($search) {
                $q->where(function ($sub) use ($search) {
                    $sub->where('public_holiday_title', 'like', "%{$search}%")
                        ->orWhere('public_holiday_status', 'like', "%{$search}%");
                });
            })
            ->when($statusFilter, fn($q) => $q->where('public_holiday_status', $statusFilter))
            ->when($yearFilter, function ($q) use ($yearFilter) {
                $q->whereYear('public_holiday_start_date', $yearFilter)
                    ->orWhereYear('public_holiday_end_date', $yearFilter);
            })
            ->orderBy('public_holiday_start_date', 'desc')
            ->paginate(10)
            ->onEachSide(1)
            ->withQueryString();

        $statuses = Ref::where('cat', 'HOLIDAY_STATUS')->orderBy('sort')->pluck('descr', 'code');
        $years = ContentPublicHoliday::selectRaw('YEAR(public_holiday_start_date) as year')
            ->whereNotNull('public_holiday_start_date')
            ->distinct()
            ->orderBy('year', 'desc')
            ->pluck('year');

        return view('backend.module.contentPublicHoliday.index', [
            'holidays' => $holidays,
            'statuses' => $statuses,
            'years' => $years,
            'search' => $search,
            'statusFilter' => $statusFilter,
            'yearFilter' => $yearFilter,
        ]);
    }

    public function create()
    {
        $statuses = Ref::where('cat', 'HOLIDAY_STATUS')->orderBy('sort')->pluck('descr', 'code');

        return view('backend.module.contentPublicHoliday.create', [
            'statuses' => $statuses,
        ]);
    }

    public function store(ContentPublicHolidayRequest $request)
    {
        ContentPublicHoliday::create([
            'public_holiday_title' => $request->public_holiday_title,
            'public_holiday_start_date' => $request->public_holiday_start_date,
            'public_holiday_end_date' => $request->public_holiday_end_date,
            'public_holiday_status' => $request->public_holiday_status,
            'created_by' => auth()->id(),
            'updated_by' => auth()->id(),
        ]);

        flash()->success('Public holiday created successfully!');

        return redirect()->route('content-public-holiday.index');
    }

    public function edit($id)
    {
        $holiday = ContentPublicHoliday::findOrFail($id);
        $statuses = Ref::where('cat', 'HOLIDAY_STATUS')->orderBy('sort')->pluck('descr', 'code');

        return view('backend.module.contentPublicHoliday.edit', [
            'holiday' => $holiday,
            'statuses' => $statuses,
        ]);
    }

    public function update(ContentPublicHolidayRequest $request, $id)
    {
        $holiday = ContentPublicHoliday::findOrFail($id);

        $holiday->update([
            'public_holiday_title' => $request->public_holiday_title,
            'public_holiday_start_date' => $request->public_holiday_start_date,
            'public_holiday_end_date' => $request->public_holiday_end_date,
            'public_holiday_status' => $request->public_holiday_status,
            'updated_by' => auth()->id(),
        ]);

        flash()->success('Public holiday updated successfully!');

        return redirect()->route('content-public-holiday.index');
    }

    public function destroy($id)
    {
        $holiday = ContentPublicHoliday::findOrFail($id);
        $holiday->delete();

        flash()->success('Public holiday deleted successfully.');

        return redirect()->route('content-public-holiday.index');
    }
}