From 81d2aa1acba1be5e82407dda88c75ff27404e350 Mon Sep 17 00:00:00 2001 From: shahrzad011 Date: Mon, 17 Aug 2026 19:50:38 +0330 Subject: [PATCH] fix: update flight management --- .../Controllers/admin/FlightController.php | 125 ++-- app/Models/Flight.php | 200 +++++-- .../views/admin/flights/create.blade.php | 539 ++++++++++++++++- resources/views/admin/flights/edit.blade.php | 541 +++++++++++++++++- resources/views/admin/flights/index.blade.php | 537 ++++++++++++++++- resources/views/admin/flights/show.blade.php | 73 ++- resources/views/flights/index.blade.php | 3 - 7 files changed, 1888 insertions(+), 130 deletions(-) diff --git a/app/Http/Controllers/admin/FlightController.php b/app/Http/Controllers/admin/FlightController.php index 223cf27..3a56067 100644 --- a/app/Http/Controllers/admin/FlightController.php +++ b/app/Http/Controllers/admin/FlightController.php @@ -4,6 +4,12 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; + + +use App\Http\Requests\FlightStoreRequest; +use App\Http\Requests\FlightUpdateRequest; +use App\Models\Flight; +use App\Models\TravelType; use Illuminate\Http\Request; class FlightController extends Controller @@ -13,103 +19,100 @@ class FlightController extends Controller */ public function index() { - return 'Flights index'; - } + abort_unless(auth('admin')->user()?->canManageFlights('view'), 403); + $flights = Flight::query() + ->with('travelType') + ->latest() + ->when(request('q'), function ($query, $q) { + $query->where(function ($query) use ($q) { + $query->where('flight_number', 'like', "%{$q}%") + ->orWhere('airline_name', 'like', "%{$q}%") + ->orWhere('origin', 'like', "%{$q}%") + ->orWhere('destination', 'like', "%{$q}%"); + }); + }) + ->when(request('status') !== null, function ($query) { + $query->where('status', request('status')); + }) + ->paginate(10) + ->withQueryString(); + + $travelTypes = TravelType::where('status', 1)->get(); + + return view('admin.flights.index', compact('flights', 'travelTypes')); + } /** * نمایش فرم ایجاد پرواز */ public function create() { - return 'Flights create'; - } + abort_unless(auth('admin')->user()?->canManageFlights('create'), 403); + $travelTypes = TravelType::where('status', 1)->get(); + + return view('admin.flights.create', compact('travelTypes')); + } /** * ذخیره پرواز جدید */ - public function store(Request $request) + public function store(FlightStoreRequest $request) { - // - } + abort_unless(auth('admin')->user()?->canManageFlights('create'), 403); + Flight::create($request->validated()); + + return redirect()->route('admin.flights.index') + ->with('success', 'پرواز با موفقیت ثبت شد.'); + } /** * نمایش جزئیات یک پرواز */ - public function show($flight) + public function show(Flight $flight) { - return 'Flights show'; - } + abort_unless(auth('admin')->user()?->canManageFlights('view'), 403); + return view('admin.flights.show', compact('flight')); + } /** * نمایش فرم ویرایش پرواز */ - public function edit($flight) + public function edit(Flight $flight) { - return 'Flights edit'; - } + abort_unless(auth('admin')->user()?->canManageFlights('update'), 403); + $travelTypes = TravelType::where('status', 1)->get(); + + return view('admin.flights.edit', compact('flight', 'travelTypes')); + } /** * بروزرسانی پرواز */ - public function update(Request $request, $flight) + public function update(FlightUpdateRequest $request, Flight $flight) { - // - } + abort_unless(auth('admin')->user()?->canManageFlights('update'), 403); + $flight->update($request->validated()); + + return redirect()->route('admin.flights.index') + ->with('success', 'پرواز با موفقیت به‌روزرسانی شد.'); + } /** * حذف پرواز */ - public function destroy($flight) + public function destroy(Flight $flight) { - // + abort_unless(auth('admin')->user()?->canManageFlights('delete'), 403); + + $flight->delete(); + + return redirect()->route('admin.flights.index') + ->with('success', 'پرواز با موفقیت حذف شد.'); } } -// -//namespace App\Http\Controllers\Admin; -// -//use App\Http\Controllers\Controller; -//use Illuminate\Http\Request; -// -//class FlightController extends Controller -//{ -// public function index() -// { -// return 'Flights index'; -// } -// -// public function create() -// { -// return 'Flights create'; -// } -// -// public function store() -// { -// // -// } -// -// public function show($flight) -// { -// return 'Flights show'; -// } -// -// public function edit($flight) -// { -// return 'Flights edit'; -// } -// -// public function update($flight) -// { -// // -// } -// -// public function destroy($flight) -// { -// // -// } -//} diff --git a/app/Models/Flight.php b/app/Models/Flight.php index d8143ed..e2a0462 100644 --- a/app/Models/Flight.php +++ b/app/Models/Flight.php @@ -1,5 +1,6 @@ 'int', - 'departure_date' => 'datetime', - 'departure_time' => 'datetime', - 'arrival_date' => 'datetime', - 'arrival_time' => 'datetime', - 'price' => 'float', - 'capacity' => 'int', - 'status' => 'int' - ]; + protected $casts = [ + 'travel_type_id' => 'int', + 'departure_date' => 'date', + 'arrival_date' => 'date', + 'departure_time' => 'datetime', + 'arrival_time' => 'datetime', + 'price' => 'decimal:2', + 'capacity' => 'int', + 'status' => 'int', + ]; - protected $fillable = [ - 'travel_type_id', - 'flight_number', - 'airline_name', - 'origin', - 'destination', - 'departure_date', - 'departure_time', - 'arrival_date', - 'arrival_time', - 'duration', - 'price', - 'capacity', - 'status' - ]; + protected $fillable = [ + 'travel_type_id', + 'flight_number', + 'airline_name', + 'origin', + 'destination', + 'departure_date', + 'departure_time', + 'arrival_date', + 'arrival_time', + 'duration', + 'price', + 'capacity', + 'status', + ]; - public function tours() - { - return $this->belongsToMany(Tour::class, 'tour_flights') - ->withPivot('id') - ->withTimestamps(); - } + /* ------------------------- روابط (Relations) ------------------------- */ + + /** + * نوع سفر (داخلی/خارجی/چارتر) مرتبط با این پرواز + */ + public function travelType() + { + return $this->belongsTo(TravelType::class); + } + + /** + * تورهای مرتبط با این پرواز + */ + public function tours() + { + return $this->belongsToMany(Tour::class, 'tour_flights') + ->withPivot('id') + ->withTimestamps(); + } + + /* --------------------------- Helper ها ------------------------------ */ + + public function statusLabel(): string + { + return $this->status == 1 ? 'فعال' : 'غیرفعال'; + } + + public function isActive(): bool + { + return (int)$this->status === 1; + } + + /** + * اسکوپ برای پروازهای فعال + */ + public function scopeActive($query) + { + return $query->where('status', 1); + } + + public function getRouteKeyName(): string + { + return 'id'; + } } + +// +///** +// * Created by Reliese Model. +// */ +// +//namespace App\Models; +// +//use Carbon\Carbon; +//use Illuminate\Database\Eloquent\Collection; +//use Illuminate\Database\Eloquent\Model; +// +///** +// * Class Flight +// * +// * @property int $id +// * @property int $travel_type_id +// * @property string $flight_number +// * @property string $airline_name +// * @property string $origin +// * @property string $destination +// * @property Carbon $departure_date +// * @property Carbon $departure_time +// * @property Carbon $arrival_date +// * @property Carbon $arrival_time +// * @property string $duration +// * @property float $price +// * @property int $capacity +// * @property int $status +// * @property Carbon $created_at +// * @property Carbon $updated_at +// * +// * @property Collection|Tour[] $tours +// * +// * @package App\Models +// */ +//class Flight extends Model +//{ +// protected $table = 'flights'; +// public static $snakeAttributes = false; +// +// protected $casts = [ +// 'travel_type_id' => 'int', +// 'departure_date' => 'datetime', +// 'departure_time' => 'datetime', +// 'arrival_date' => 'datetime', +// 'arrival_time' => 'datetime', +// 'price' => 'float', +// 'capacity' => 'int', +// 'status' => 'int' +// ]; +// +// protected $fillable = [ +// 'travel_type_id', +// 'flight_number', +// 'airline_name', +// 'origin', +// 'destination', +// 'departure_date', +// 'departure_time', +// 'arrival_date', +// 'arrival_time', +// 'duration', +// 'price', +// 'capacity', +// 'status' +// ]; +// +// public function tours() +// { +// return $this->belongsToMany(Tour::class, 'tour_flights') +// ->withPivot('id') +// ->withTimestamps(); +// } +//} diff --git a/resources/views/admin/flights/create.blade.php b/resources/views/admin/flights/create.blade.php index d6d106d..7d4ea5b 100644 --- a/resources/views/admin/flights/create.blade.php +++ b/resources/views/admin/flights/create.blade.php @@ -1,3 +1,536 @@ -
- -
+@extends('admin.layouts.app') + +@section('title', 'ثبت پرواز جدید') + +@section('breadcrumb') + +
+ +

+ ثبت پرواز جدید +

+ + + +
+ +@endsection + + +@section('content') + +
+ + {{-- پیام خطاهای کلی --}} + @if($errors->any()) + +
+ + + لطفاً خطاهای زیر را بررسی کنید: + + +
    + + @foreach($errors->all() as $error) + +
  • + {{ $error }} +
  • + + @endforeach + +
+ +
+ + @endif + + +
+ +
+ +
+ +
+ +
+ +
+ اطلاعات پرواز +
+ +

+ اطلاعات کامل پرواز را وارد کنید. +

+ +
+ +
+ + +
+ +
+ + @csrf + + + {{-- نوع سفر --}} +
+ +
+ + + + + + @error('travel_type_id') +
+ {{ $message }} +
+ @enderror + +
+ + + {{-- شماره پرواز --}} +
+ + + + + + @error('flight_number') +
+ {{ $message }} +
+ @enderror + +
+ + + {{-- ایرلاین --}} +
+ + + + + + @error('airline_name') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + + {{-- مسیر --}} +
+ +
+ + + + + + @error('origin') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('destination') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + + {{-- زمان حرکت --}} +
+ زمان حرکت +
+ +
+ +
+ + + + + + + تاریخ را به صورت شمسی وارد کنید. + + + @error('departure_date') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('departure_time') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + + {{-- زمان رسیدن --}} +
+ زمان رسیدن +
+ +
+ +
+ + + + + + + تاریخ را به صورت شمسی وارد کنید. + + + @error('arrival_date') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('arrival_time') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + + {{-- اطلاعات تجاری --}} +
+ اطلاعات تجاری و ظرفیت +
+ +
+ +
+ + + + + + @error('duration') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('price') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('capacity') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + + {{-- وضعیت --}} +
+ +
+ + + + + + @error('status') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + + {{-- دکمه ها --}} +
+ + + انصراف + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +@endsection diff --git a/resources/views/admin/flights/edit.blade.php b/resources/views/admin/flights/edit.blade.php index ffc641a..88951b7 100644 --- a/resources/views/admin/flights/edit.blade.php +++ b/resources/views/admin/flights/edit.blade.php @@ -1,3 +1,538 @@ -
- -
+@extends('admin.layouts.app') + +@section('title', 'ویرایش پرواز') + +@section('breadcrumb') + +
+ +

+ ویرایش پرواز +

+ + + +
+ +@endsection + + +@section('content') + +
+ + @if($errors->any()) + +
+ + + لطفاً خطاهای زیر را بررسی کنید: + + +
    + + @foreach($errors->all() as $error) + +
  • + {{ $error }} +
  • + + @endforeach + +
+ +
+ + @endif + + +
+ +
+ +
+ +
+ +
+ +
+ ویرایش پرواز +
+ +

+ + پرواز + {{ $flight->flight_number }} + + را ویرایش می‌کنید. + +

+ +
+ +
+ + +
+ +
+ + @csrf + @method('PUT') + + + {{-- نوع سفر --}} +
+ +
+ + + + + + @error('travel_type_id') +
+ {{ $message }} +
+ @enderror + +
+ + + {{-- شماره پرواز --}} +
+ + + + + + @error('flight_number') +
+ {{ $message }} +
+ @enderror + +
+ + + {{-- ایرلاین --}} +
+ + + + + + @error('airline_name') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + + {{-- مسیر --}} +
+ +
+ + + + + + @error('origin') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('destination') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + +
+ زمان حرکت +
+ +
+ +
+ + + + + + @error('departure_date') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('departure_time') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ زمان رسیدن +
+ +
+ +
+ + + + + + @error('arrival_date') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('arrival_time') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + +
+ اطلاعات تجاری و ظرفیت +
+ +
+ +
+ + + + + + @error('duration') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('price') +
+ {{ $message }} +
+ @enderror + +
+ + +
+ + + + + + @error('capacity') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + + {{-- وضعیت --}} +
+ +
+ + + + + + @error('status') +
+ {{ $message }} +
+ @enderror + +
+ +
+ + +
+ + + + +
+ + + انصراف + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +@endsection diff --git a/resources/views/admin/flights/index.blade.php b/resources/views/admin/flights/index.blade.php index ffc641a..f7497b3 100644 --- a/resources/views/admin/flights/index.blade.php +++ b/resources/views/admin/flights/index.blade.php @@ -1,3 +1,534 @@ -
- -
+@extends('admin.layouts.app') + +@section('title', 'مدیریت پروازها') + +@section('breadcrumb') + +
+ +

+ مدیریت پروازها +

+ + + +
+ +@endsection + + +@section('content') + +
+ + {{-- عنوان و عملیات --}} +
+ +
+ +
+ +
+ +
+ +
+ +
+ مدیریت پروازها +
+ +

+ لیست پروازهای ثبت شده در سیستم +

+ +
+ + +
+ + @if(auth('admin')->user()?->canManageFlights('create')) + + + + + + پرواز جدید + + + + @endif + +
+ +
+ +
+ +
+ +
+ +
+ + + {{-- جستجو و فیلتر --}} +
+ +
+ +
+ +
+ +
+ +
+ + {{-- جستجو --}} +
+ + + + + +
+ + + {{-- وضعیت --}} +
+ + + + + +
+ + + {{-- جستجو --}} +
+ + + +
+ + + {{-- پاک کردن --}} + + +
+ +
+ +
+ +
+ +
+ +
+ + + {{-- جدول پروازها --}} +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @forelse($flights as $flight) + + + + {{-- شناسه --}} + + + + {{-- شماره پرواز --}} + + + + {{-- نوع سفر --}} + + + + {{-- ایرلاین --}} + + + + {{-- مسیر --}} + + + + {{-- تاریخ حرکت --}} + + + + {{-- قیمت --}} + + + + {{-- وضعیت --}} + + + + {{-- عملیات --}} + + + + + @empty + + + + + + + + @endforelse + + + +
+ # + + شماره پرواز + + نوع سفر + + ایرلاین + + مسیر + + تاریخ حرکت + + قیمت + + وضعیت + + عملیات +
+ {{ $flight->id }} + + + + {{ $flight->flight_number }} + + + + + @if($flight->travelType) + + + {{ $flight->travelType->title }} + + + @else + + + — + + + @endif + + + {{ $flight->airline_name }} + + + + {{ $flight->origin }} + + + + ← + + + + {{ $flight->destination }} + + + + + @if($flight->departure_date) + + + + {{ $flight->departure_date + ->toJalali() + ->format('Y/m/d') }} + + + + @else + + + — + + + @endif + + + @if($flight->departure_time) + +
+ + + + {{ $flight->departure_time->format('H:i') }} + + + + @endif + +
+ + + + {{ number_format($flight->price) }} + + + + + تومان + + + + + @if((int) $flight->status === 1) + + + فعال + + + @else + + + غیرفعال + + + @endif + + + +
+ + {{-- مشاهده --}} + @if(auth('admin')->user()?->canManageFlights('view')) + + + + + + مشاهده + + + + @endif + + + {{-- ویرایش --}} + @if(auth('admin')->user()?->canManageFlights('update')) + + + + + + ویرایش + + + + @endif + + + {{-- حذف --}} + @if(auth('admin')->user()?->canManageFlights('delete')) + +
+ + @csrf + + @method('DELETE') + + + +
+ + @endif + +
+ +
+ +
+ + + +
+ پروازی برای نمایش وجود ندارد. +
+ +
+ +
+ +
+ +
+ + + {{-- Pagination --}} + @if($flights->hasPages()) + + + + @endif + +
+ +
+ +
+ +
+ +@endsection + diff --git a/resources/views/admin/flights/show.blade.php b/resources/views/admin/flights/show.blade.php index c510322..2d57583 100644 --- a/resources/views/admin/flights/show.blade.php +++ b/resources/views/admin/flights/show.blade.php @@ -1,3 +1,70 @@ -
- -
+@extends('admin.layouts.app') + +@section('title', 'جزئیات پرواز') + +@section('content') +
+
+
+
+
جزئیات پرواز {{ $flight->flight_number }}
+ +
+
+
+
شماره پرواز
+
{{ $flight->flight_number }}
+ +
نوع سفر
+
{{ $flight->travelType?->title ?? '—' }}
+ +
ایرلاین
+
{{ $flight->airline_name }}
+ +
مبدأ
+
{{ $flight->origin }}
+ +
مقصد
+
{{ $flight->destination }}
+ +
تاریخ و ساعت حرکت
+
+ {{ $flight->departure_date->toJalali()->format('Y/m/d') }} — + {{ $flight->departure_time->format('H:i') }} +
+ +
تاریخ و ساعت رسیدن
+
+ {{ $flight->arrival_date->toJalali()->format('Y/m/d') }} — + {{ $flight->arrival_time->format('H:i') }} +
+ +
مدت پرواز
+
{{ $flight->duration }}
+ +
قیمت
+
{{ number_format($flight->price) }} تومان
+ +
ظرفیت
+
{{ $flight->capacity }} نفر
+ +
وضعیت
+
+ @if($flight->status == 1) + فعال + @else + غیرفعال + @endif +
+
+
+
+
+
+@endsection + diff --git a/resources/views/flights/index.blade.php b/resources/views/flights/index.blade.php index 9d6f483..e69de29 100644 --- a/resources/views/flights/index.blade.php +++ b/resources/views/flights/index.blade.php @@ -1,3 +0,0 @@ -
- -