fix: update flight management
This commit is contained in:
@@ -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)
|
||||
// {
|
||||
// //
|
||||
// }
|
||||
//}
|
||||
|
||||
+119
-27
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Created by Reliese Model.
|
||||
*/
|
||||
@@ -12,42 +13,20 @@ 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_date' => 'date',
|
||||
'arrival_date' => 'date',
|
||||
'departure_time' => 'datetime',
|
||||
'arrival_date' => 'datetime',
|
||||
'arrival_time' => 'datetime',
|
||||
'price' => 'float',
|
||||
'price' => 'decimal:2',
|
||||
'capacity' => 'int',
|
||||
'status' => 'int'
|
||||
'status' => 'int',
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
@@ -63,13 +42,126 @@ class Flight extends Model
|
||||
'duration',
|
||||
'price',
|
||||
'capacity',
|
||||
'status'
|
||||
'status',
|
||||
];
|
||||
|
||||
/* ------------------------- روابط (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();
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -1,3 +1,536 @@
|
||||
<div>
|
||||
<!-- Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less. - Maria Skłodowska-Curie -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'ثبت پرواز جدید')
|
||||
|
||||
@section('breadcrumb')
|
||||
|
||||
<div>
|
||||
|
||||
<h1 class="page-title fw-medium fs-18 mb-2">
|
||||
ثبت پرواز جدید
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ol class="breadcrumb mb-0">
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard.index') }}">
|
||||
داشبورد
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.flights.index') }}">
|
||||
مدیریت پروازها
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
ثبت پرواز
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid pt-4">
|
||||
|
||||
{{-- پیام خطاهای کلی --}}
|
||||
@if($errors->any())
|
||||
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<strong>
|
||||
لطفاً خطاهای زیر را بررسی کنید:
|
||||
</strong>
|
||||
|
||||
<ul class="mb-0 mt-2">
|
||||
|
||||
@foreach($errors->all() as $error)
|
||||
|
||||
<li>
|
||||
{{ $error }}
|
||||
</li>
|
||||
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-12">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div>
|
||||
|
||||
<h5 class="mb-1">
|
||||
اطلاعات پرواز
|
||||
</h5>
|
||||
|
||||
<p class="text-muted fs-12 mb-0">
|
||||
اطلاعات کامل پرواز را وارد کنید.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<form
|
||||
action="{{ route('admin.flights.store') }}"
|
||||
method="POST"
|
||||
>
|
||||
|
||||
@csrf
|
||||
|
||||
|
||||
{{-- نوع سفر --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نوع سفر
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="travel_type_id"
|
||||
class="form-select @error('travel_type_id') is-invalid @enderror"
|
||||
>
|
||||
|
||||
<option value="">
|
||||
انتخاب نوع سفر
|
||||
</option>
|
||||
|
||||
@foreach($travelTypes as $travelType)
|
||||
|
||||
<option
|
||||
value="{{ $travelType->id }}"
|
||||
{{ old('travel_type_id') == $travelType->id ? 'selected' : '' }}
|
||||
>
|
||||
{{ $travelType->title }}
|
||||
</option>
|
||||
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
|
||||
@error('travel_type_id')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- شماره پرواز --}}
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
شماره پرواز
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="flight_number"
|
||||
class="form-control @error('flight_number') is-invalid @enderror"
|
||||
value="{{ old('flight_number') }}"
|
||||
placeholder="مثلاً IR721"
|
||||
>
|
||||
|
||||
@error('flight_number')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- ایرلاین --}}
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نام ایرلاین
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="airline_name"
|
||||
class="form-control @error('airline_name') is-invalid @enderror"
|
||||
value="{{ old('airline_name') }}"
|
||||
placeholder="مثلاً ایران ایر"
|
||||
>
|
||||
|
||||
@error('airline_name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
{{-- مسیر --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مبدأ
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="origin"
|
||||
class="form-control @error('origin') is-invalid @enderror"
|
||||
value="{{ old('origin') }}"
|
||||
placeholder="مثلاً تهران"
|
||||
>
|
||||
|
||||
@error('origin')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مقصد
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="destination"
|
||||
class="form-control @error('destination') is-invalid @enderror"
|
||||
value="{{ old('destination') }}"
|
||||
placeholder="مثلاً استانبول"
|
||||
>
|
||||
|
||||
@error('destination')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
{{-- زمان حرکت --}}
|
||||
<h6 class="fw-semibold mb-3">
|
||||
زمان حرکت
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
تاریخ حرکت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="departure_date"
|
||||
class="form-control @error('departure_date') is-invalid @enderror"
|
||||
value="{{ old('departure_date') }}"
|
||||
placeholder="1405/05/30"
|
||||
autocomplete="off"
|
||||
>
|
||||
|
||||
<small class="text-muted">
|
||||
تاریخ را به صورت شمسی وارد کنید.
|
||||
</small>
|
||||
|
||||
@error('departure_date')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ساعت حرکت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="time"
|
||||
name="departure_time"
|
||||
class="form-control @error('departure_time') is-invalid @enderror"
|
||||
value="{{ old('departure_time') }}"
|
||||
>
|
||||
|
||||
@error('departure_time')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- زمان رسیدن --}}
|
||||
<h6 class="fw-semibold mb-3 mt-3">
|
||||
زمان رسیدن
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
تاریخ رسیدن
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="arrival_date"
|
||||
class="form-control @error('arrival_date') is-invalid @enderror"
|
||||
value="{{ old('arrival_date') }}"
|
||||
placeholder="1405/05/30"
|
||||
autocomplete="off"
|
||||
>
|
||||
|
||||
<small class="text-muted">
|
||||
تاریخ را به صورت شمسی وارد کنید.
|
||||
</small>
|
||||
|
||||
@error('arrival_date')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ساعت رسیدن
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="time"
|
||||
name="arrival_time"
|
||||
class="form-control @error('arrival_time') is-invalid @enderror"
|
||||
value="{{ old('arrival_time') }}"
|
||||
>
|
||||
|
||||
@error('arrival_time')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
{{-- اطلاعات تجاری --}}
|
||||
<h6 class="fw-semibold mb-3">
|
||||
اطلاعات تجاری و ظرفیت
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مدت پرواز
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="duration"
|
||||
class="form-control @error('duration') is-invalid @enderror"
|
||||
value="{{ old('duration') }}"
|
||||
placeholder="مثلاً 2 ساعت و 30 دقیقه"
|
||||
>
|
||||
|
||||
@error('duration')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
قیمت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
name="price"
|
||||
min="0"
|
||||
class="form-control @error('price') is-invalid @enderror"
|
||||
value="{{ old('price') }}"
|
||||
placeholder="مثلاً 8500000"
|
||||
>
|
||||
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ظرفیت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
name="capacity"
|
||||
min="1"
|
||||
class="form-control @error('capacity') is-invalid @enderror"
|
||||
value="{{ old('capacity') }}"
|
||||
placeholder="مثلاً 180"
|
||||
>
|
||||
|
||||
@error('capacity')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- وضعیت --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
وضعیت
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="status"
|
||||
class="form-select @error('status') is-invalid @enderror"
|
||||
>
|
||||
|
||||
<option
|
||||
value="1"
|
||||
{{ old('status', 1) == 1 ? 'selected' : '' }}
|
||||
>
|
||||
فعال
|
||||
</option>
|
||||
|
||||
<option
|
||||
value="0"
|
||||
{{ old('status') === '0' ? 'selected' : '' }}
|
||||
>
|
||||
غیرفعال
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
@error('status')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- دکمه ها --}}
|
||||
<div class="d-flex justify-content-end gap-2 mt-4">
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.index') }}"
|
||||
class="btn btn-light"
|
||||
>
|
||||
انصراف
|
||||
</a>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
>
|
||||
<i class="ri-save-line me-1"></i>
|
||||
ثبت پرواز
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@@ -1,3 +1,538 @@
|
||||
<div>
|
||||
<!-- He who is contented is rich. - Laozi -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'ویرایش پرواز')
|
||||
|
||||
@section('breadcrumb')
|
||||
|
||||
<div>
|
||||
|
||||
<h1 class="page-title fw-medium fs-18 mb-2">
|
||||
ویرایش پرواز
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
|
||||
<ol class="breadcrumb mb-0">
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard.index') }}">
|
||||
داشبورد
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.flights.index') }}">
|
||||
مدیریت پروازها
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
ویرایش پرواز
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid pt-4">
|
||||
|
||||
@if($errors->any())
|
||||
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<strong>
|
||||
لطفاً خطاهای زیر را بررسی کنید:
|
||||
</strong>
|
||||
|
||||
<ul class="mb-0 mt-2">
|
||||
|
||||
@foreach($errors->all() as $error)
|
||||
|
||||
<li>
|
||||
{{ $error }}
|
||||
</li>
|
||||
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-12">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div>
|
||||
|
||||
<h5 class="mb-1">
|
||||
ویرایش پرواز
|
||||
</h5>
|
||||
|
||||
<p class="text-muted fs-12 mb-0">
|
||||
|
||||
پرواز
|
||||
{{ $flight->flight_number }}
|
||||
|
||||
را ویرایش میکنید.
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<form
|
||||
action="{{ route('admin.flights.update', $flight) }}"
|
||||
method="POST"
|
||||
>
|
||||
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
|
||||
{{-- نوع سفر --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نوع سفر
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="travel_type_id"
|
||||
class="form-select @error('travel_type_id') is-invalid @enderror"
|
||||
>
|
||||
|
||||
<option value="">
|
||||
انتخاب نوع سفر
|
||||
</option>
|
||||
|
||||
@foreach($travelTypes as $travelType)
|
||||
|
||||
<option
|
||||
value="{{ $travelType->id }}"
|
||||
{{ old('travel_type_id', $flight->travel_type_id) == $travelType->id ? 'selected' : '' }}
|
||||
>
|
||||
{{ $travelType->title }}
|
||||
</option>
|
||||
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
|
||||
@error('travel_type_id')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- شماره پرواز --}}
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
شماره پرواز
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="flight_number"
|
||||
class="form-control @error('flight_number') is-invalid @enderror"
|
||||
value="{{ old('flight_number', $flight->flight_number) }}"
|
||||
>
|
||||
|
||||
@error('flight_number')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- ایرلاین --}}
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
نام ایرلاین
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="airline_name"
|
||||
class="form-control @error('airline_name') is-invalid @enderror"
|
||||
value="{{ old('airline_name', $flight->airline_name) }}"
|
||||
>
|
||||
|
||||
@error('airline_name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
{{-- مسیر --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مبدأ
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="origin"
|
||||
class="form-control @error('origin') is-invalid @enderror"
|
||||
value="{{ old('origin', $flight->origin) }}"
|
||||
>
|
||||
|
||||
@error('origin')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مقصد
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="destination"
|
||||
class="form-control @error('destination') is-invalid @enderror"
|
||||
value="{{ old('destination', $flight->destination) }}"
|
||||
>
|
||||
|
||||
@error('destination')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
<h6 class="fw-semibold mb-3">
|
||||
زمان حرکت
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
تاریخ حرکت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="departure_date"
|
||||
class="form-control @error('departure_date') is-invalid @enderror"
|
||||
value="{{ old('departure_date', $flight->departure_date?->toJalali()->format('Y/m/d')) }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
|
||||
@error('departure_date')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ساعت حرکت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="time"
|
||||
name="departure_time"
|
||||
class="form-control @error('departure_time') is-invalid @enderror"
|
||||
value="{{ old('departure_time', $flight->departure_time?->format('H:i')) }}"
|
||||
>
|
||||
|
||||
@error('departure_time')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h6 class="fw-semibold mb-3 mt-3">
|
||||
زمان رسیدن
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
تاریخ رسیدن
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="arrival_date"
|
||||
class="form-control @error('arrival_date') is-invalid @enderror"
|
||||
value="{{ old('arrival_date', $flight->arrival_date?->toJalali()->format('Y/m/d')) }}"
|
||||
autocomplete="off"
|
||||
>
|
||||
|
||||
@error('arrival_date')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ساعت رسیدن
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="time"
|
||||
name="arrival_time"
|
||||
class="form-control @error('arrival_time') is-invalid @enderror"
|
||||
value="{{ old('arrival_time', $flight->arrival_time?->format('H:i')) }}"
|
||||
>
|
||||
|
||||
@error('arrival_time')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
|
||||
<h6 class="fw-semibold mb-3">
|
||||
اطلاعات تجاری و ظرفیت
|
||||
</h6>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
مدت پرواز
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="duration"
|
||||
class="form-control @error('duration') is-invalid @enderror"
|
||||
value="{{ old('duration', $flight->duration) }}"
|
||||
>
|
||||
|
||||
@error('duration')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
قیمت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
name="price"
|
||||
min="0"
|
||||
class="form-control @error('price') is-invalid @enderror"
|
||||
value="{{ old('price', $flight->price) }}"
|
||||
>
|
||||
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
ظرفیت
|
||||
<span class="text-danger">*</span>
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
name="capacity"
|
||||
min="1"
|
||||
class="form-control @error('capacity') is-invalid @enderror"
|
||||
value="{{ old('capacity', $flight->capacity) }}"
|
||||
>
|
||||
|
||||
@error('capacity')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- وضعیت --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<label class="form-label">
|
||||
وضعیت
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="status"
|
||||
class="form-select @error('status') is-invalid @enderror"
|
||||
>
|
||||
|
||||
<option
|
||||
value="1"
|
||||
{{ old('status', $flight->status) == 1 ? 'selected' : '' }}
|
||||
>
|
||||
فعال
|
||||
</option>
|
||||
|
||||
<option
|
||||
value="0"
|
||||
{{ old('status', $flight->status) == 0 ? 'selected' : '' }}
|
||||
>
|
||||
غیرفعال
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
@error('status')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center mt-4">
|
||||
|
||||
<div>
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.show', $flight) }}"
|
||||
class="btn btn-info-light"
|
||||
>
|
||||
مشاهده جزئیات
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.index') }}"
|
||||
class="btn btn-light"
|
||||
>
|
||||
انصراف
|
||||
</a>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
>
|
||||
<i class="ri-save-line me-1"></i>
|
||||
ذخیره تغییرات
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@@ -1,3 +1,534 @@
|
||||
<div>
|
||||
<!-- He who is contented is rich. - Laozi -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'مدیریت پروازها')
|
||||
|
||||
@section('breadcrumb')
|
||||
|
||||
<div>
|
||||
|
||||
<h1 class="page-title fw-medium fs-18 mb-2">
|
||||
مدیریت پروازها
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ol class="breadcrumb mb-0">
|
||||
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('admin.dashboard.index') }}">
|
||||
داشبورد
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="breadcrumb-item active">
|
||||
مدیریت پروازها
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid pt-4">
|
||||
|
||||
{{-- عنوان و عملیات --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-12">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-body p-3">
|
||||
|
||||
<div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
|
||||
|
||||
<div>
|
||||
|
||||
<h5 class="mb-1">
|
||||
مدیریت پروازها
|
||||
</h5>
|
||||
|
||||
<p class="text-muted mb-0 fs-12">
|
||||
لیست پروازهای ثبت شده در سیستم
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
|
||||
@if(auth('admin')->user()?->canManageFlights('create'))
|
||||
|
||||
<a href="{{ route('admin.flights.create') }}"
|
||||
class="btn btn-primary">
|
||||
|
||||
<i class="fa fa-plus me-1"></i>
|
||||
|
||||
پرواز جدید
|
||||
|
||||
</a>
|
||||
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- جستجو و فیلتر --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-12">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<form
|
||||
method="GET"
|
||||
action="{{ route('admin.flights.index') }}"
|
||||
>
|
||||
|
||||
<div class="row g-3 align-items-end">
|
||||
|
||||
{{-- جستجو --}}
|
||||
<div class="col-xl-6 col-lg-5 col-md-6">
|
||||
|
||||
<label class="form-label">
|
||||
جستجوی پرواز
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="q"
|
||||
class="form-control"
|
||||
placeholder="شماره پرواز، ایرلاین، مبدأ یا مقصد..."
|
||||
value="{{ request('q') }}"
|
||||
>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- وضعیت --}}
|
||||
<div class="col-xl-2 col-lg-3 col-md-3">
|
||||
|
||||
<label class="form-label">
|
||||
وضعیت
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="status"
|
||||
class="form-select"
|
||||
>
|
||||
|
||||
<option value="">
|
||||
همه وضعیتها
|
||||
</option>
|
||||
|
||||
<option
|
||||
value="1"
|
||||
{{ request('status') === '1' ? 'selected' : '' }}
|
||||
>
|
||||
فعال
|
||||
</option>
|
||||
|
||||
<option
|
||||
value="0"
|
||||
{{ request('status') === '0' ? 'selected' : '' }}
|
||||
>
|
||||
غیرفعال
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- جستجو --}}
|
||||
<div class="col-xl-2 col-lg-2 col-md-3">
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary w-100"
|
||||
>
|
||||
|
||||
<i class="fa fa-search me-1"></i>
|
||||
|
||||
جستجو
|
||||
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- پاک کردن --}}
|
||||
<div class="col-xl-2 col-lg-2 col-md-3">
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.index') }}"
|
||||
class="btn btn-light w-100"
|
||||
>
|
||||
|
||||
<i class="fa fa-refresh me-1"></i>
|
||||
|
||||
پاک کردن
|
||||
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- جدول پروازها --}}
|
||||
<div class="row">
|
||||
|
||||
<div class="col-xl-12">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
<div class="card-body p-0">
|
||||
|
||||
<div class="table-responsive">
|
||||
|
||||
<table class="table table-hover align-middle text-nowrap mb-0">
|
||||
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
|
||||
<th>
|
||||
#
|
||||
</th>
|
||||
|
||||
<th>
|
||||
شماره پرواز
|
||||
</th>
|
||||
|
||||
<th>
|
||||
نوع سفر
|
||||
</th>
|
||||
|
||||
<th>
|
||||
ایرلاین
|
||||
</th>
|
||||
|
||||
<th>
|
||||
مسیر
|
||||
</th>
|
||||
|
||||
<th>
|
||||
تاریخ حرکت
|
||||
</th>
|
||||
|
||||
<th>
|
||||
قیمت
|
||||
</th>
|
||||
|
||||
<th>
|
||||
وضعیت
|
||||
</th>
|
||||
|
||||
<th>
|
||||
عملیات
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
|
||||
|
||||
<tbody>
|
||||
|
||||
@forelse($flights as $flight)
|
||||
|
||||
<tr>
|
||||
|
||||
{{-- شناسه --}}
|
||||
<td>
|
||||
{{ $flight->id }}
|
||||
</td>
|
||||
|
||||
|
||||
{{-- شماره پرواز --}}
|
||||
<td>
|
||||
|
||||
<span class="fw-semibold">
|
||||
{{ $flight->flight_number }}
|
||||
</span>
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- نوع سفر --}}
|
||||
<td>
|
||||
|
||||
@if($flight->travelType)
|
||||
|
||||
<span class="badge bg-primary-transparent">
|
||||
{{ $flight->travelType->title }}
|
||||
</span>
|
||||
|
||||
@else
|
||||
|
||||
<span class="text-muted">
|
||||
—
|
||||
</span>
|
||||
|
||||
@endif
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- ایرلاین --}}
|
||||
<td>
|
||||
{{ $flight->airline_name }}
|
||||
</td>
|
||||
|
||||
|
||||
{{-- مسیر --}}
|
||||
<td>
|
||||
|
||||
<span class="badge bg-primary-transparent">
|
||||
{{ $flight->origin }}
|
||||
</span>
|
||||
|
||||
<span class="mx-1 text-muted">
|
||||
←
|
||||
</span>
|
||||
|
||||
<span class="badge bg-info-transparent">
|
||||
{{ $flight->destination }}
|
||||
</span>
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- تاریخ حرکت --}}
|
||||
<td>
|
||||
|
||||
@if($flight->departure_date)
|
||||
|
||||
<span class="fw-medium">
|
||||
|
||||
{{ $flight->departure_date
|
||||
->toJalali()
|
||||
->format('Y/m/d') }}
|
||||
|
||||
</span>
|
||||
|
||||
@else
|
||||
|
||||
<span class="text-muted">
|
||||
—
|
||||
</span>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
@if($flight->departure_time)
|
||||
|
||||
<br>
|
||||
|
||||
<small class="text-muted">
|
||||
|
||||
{{ $flight->departure_time->format('H:i') }}
|
||||
|
||||
</small>
|
||||
|
||||
@endif
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- قیمت --}}
|
||||
<td>
|
||||
|
||||
<span class="fw-medium">
|
||||
|
||||
{{ number_format($flight->price) }}
|
||||
|
||||
</span>
|
||||
|
||||
<small class="text-muted">
|
||||
تومان
|
||||
</small>
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- وضعیت --}}
|
||||
<td>
|
||||
|
||||
@if((int) $flight->status === 1)
|
||||
|
||||
<span class="badge bg-success-transparent">
|
||||
فعال
|
||||
</span>
|
||||
|
||||
@else
|
||||
|
||||
<span class="badge bg-danger-transparent">
|
||||
غیرفعال
|
||||
</span>
|
||||
|
||||
@endif
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
{{-- عملیات --}}
|
||||
<td>
|
||||
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
|
||||
{{-- مشاهده --}}
|
||||
@if(auth('admin')->user()?->canManageFlights('view'))
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.show', $flight) }}"
|
||||
class="btn btn-info-light btn-sm"
|
||||
>
|
||||
|
||||
<i class="fa fa-eye me-1"></i>
|
||||
|
||||
مشاهده
|
||||
|
||||
</a>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
{{-- ویرایش --}}
|
||||
@if(auth('admin')->user()?->canManageFlights('update'))
|
||||
|
||||
<a
|
||||
href="{{ route('admin.flights.edit', $flight) }}"
|
||||
class="btn btn-warning-light btn-sm"
|
||||
>
|
||||
|
||||
<i class="fa fa-edit me-1"></i>
|
||||
|
||||
ویرایش
|
||||
|
||||
</a>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
{{-- حذف --}}
|
||||
@if(auth('admin')->user()?->canManageFlights('delete'))
|
||||
|
||||
<form
|
||||
action="{{ route('admin.flights.destroy', $flight) }}"
|
||||
method="POST"
|
||||
class="d-inline"
|
||||
onsubmit="return confirm('آیا از حذف این پرواز مطمئن هستید؟');"
|
||||
>
|
||||
|
||||
@csrf
|
||||
|
||||
@method('DELETE')
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-danger-light btn-sm"
|
||||
>
|
||||
|
||||
<i class="fa fa-trash me-1"></i>
|
||||
|
||||
حذف
|
||||
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@empty
|
||||
|
||||
<tr>
|
||||
|
||||
<td
|
||||
colspan="9"
|
||||
class="text-center py-5"
|
||||
>
|
||||
|
||||
<div class="text-muted">
|
||||
|
||||
<i class="fa fa-plane fs-2 mb-3 d-block"></i>
|
||||
|
||||
<div>
|
||||
پروازی برای نمایش وجود ندارد.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@endforelse
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{-- Pagination --}}
|
||||
@if($flights->hasPages())
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
|
||||
{{ $flights->links() }}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@@ -1,3 +1,70 @@
|
||||
<div>
|
||||
<!-- Well begun is half done. - Aristotle -->
|
||||
</div>
|
||||
@extends('admin.layouts.app')
|
||||
|
||||
@section('title', 'جزئیات پرواز')
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-lg-8 mx-auto">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">جزئیات پرواز {{ $flight->flight_number }}</h5>
|
||||
<div>
|
||||
<a href="{{ route('admin.flights.edit', $flight) }}"
|
||||
class="btn btn-sm btn-warning">ویرایش</a>
|
||||
<a href="{{ route('admin.flights.index') }}"
|
||||
class="btn btn-sm btn-secondary">بازگشت</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<dl class="row mb-0">
|
||||
<dt class="col-sm-4">شماره پرواز</dt>
|
||||
<dd class="col-sm-8">{{ $flight->flight_number }}</dd>
|
||||
|
||||
<dt class="col-sm-4">نوع سفر</dt>
|
||||
<dd class="col-sm-8">{{ $flight->travelType?->title ?? '—' }}</dd>
|
||||
|
||||
<dt class="col-sm-4">ایرلاین</dt>
|
||||
<dd class="col-sm-8">{{ $flight->airline_name }}</dd>
|
||||
|
||||
<dt class="col-sm-4">مبدأ</dt>
|
||||
<dd class="col-sm-8">{{ $flight->origin }}</dd>
|
||||
|
||||
<dt class="col-sm-4">مقصد</dt>
|
||||
<dd class="col-sm-8">{{ $flight->destination }}</dd>
|
||||
|
||||
<dt class="col-sm-4">تاریخ و ساعت حرکت</dt>
|
||||
<dd class="col-sm-8">
|
||||
{{ $flight->departure_date->toJalali()->format('Y/m/d') }} —
|
||||
{{ $flight->departure_time->format('H:i') }}
|
||||
</dd>
|
||||
|
||||
<dt class="col-sm-4">تاریخ و ساعت رسیدن</dt>
|
||||
<dd class="col-sm-8">
|
||||
{{ $flight->arrival_date->toJalali()->format('Y/m/d') }} —
|
||||
{{ $flight->arrival_time->format('H:i') }}
|
||||
</dd>
|
||||
|
||||
<dt class="col-sm-4">مدت پرواز</dt>
|
||||
<dd class="col-sm-8">{{ $flight->duration }}</dd>
|
||||
|
||||
<dt class="col-sm-4">قیمت</dt>
|
||||
<dd class="col-sm-8">{{ number_format($flight->price) }} تومان</dd>
|
||||
|
||||
<dt class="col-sm-4">ظرفیت</dt>
|
||||
<dd class="col-sm-8">{{ $flight->capacity }} نفر</dd>
|
||||
|
||||
<dt class="col-sm-4">وضعیت</dt>
|
||||
<dd class="col-sm-8">
|
||||
@if($flight->status == 1)
|
||||
<span class="badge bg-success">فعال</span>
|
||||
@else
|
||||
<span class="badge bg-secondary">غیرفعال</span>
|
||||
@endif
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<div>
|
||||
<!-- Very little is needed to make a happy life. - Marcus Aurelius -->
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user