diff --git a/app/Http/Controllers/Admin/TourController.php b/app/Http/Controllers/Admin/TourController.php index 8d70d64..ab29a4d 100644 --- a/app/Http/Controllers/Admin/TourController.php +++ b/app/Http/Controllers/Admin/TourController.php @@ -3,46 +3,90 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; -use App\Http\Requests\Tours\TourUpdatePostRequest; +use App\Http\Requests\Admins\TourStorePostRequest; use App\Models\Airport; use App\Models\Tour; -use Hekmatinasser\Verta\Verta; -use Illuminate\Http\Request; +use Hekmatinasser\Verta\Facades\Verta; +use Illuminate\Http\RedirectResponse; +use Illuminate\View\View; class TourController extends Controller { - public function index() + public function index(): View { - $tours = Tour::with([ - 'file', 'originAirport', 'destinationAirport', 'tour_details' - ]) - ->latest() - ->paginate(10); + ])->latest()->paginate(10); return view('admin.tours.index', compact('tours')); } - public function edit(Tour $tour) + + public function create(): View { $airports = Airport::all(); + return view('admin.tours.create', compact('airports')); + } + + public function store(TourStorePostRequest $request): RedirectResponse + { + $tour = Tour::create([ + 'title' => $request->title, + 'tour_type' => $request->tour_type, + 'summary' => $request->summary, + 'description' => $request->description, + 'origin_airports_id' => $request->origin_airports_id, + 'destination_airports_id' => $request->destination_airports_id, + ]); + + $startDate = Verta::parse($request->start_date)->datetime(); + $endDate = Verta::parse($request->end_date)->datetime(); + + $tour->tour_details()->create([ + 'start_date' => $startDate, + 'end_date' => $endDate, + 'price' => $request->price, + 'capacity' => $request->capacity, + 'status' => 1, + ]); + + return redirect() + ->route('admin.tours.index') + ->with('success', 'تور با موفقیت ایجاد شد.'); + } + + public function edit(Tour $tour): View + { $tour->load([ 'tour_details', 'originAirport', - 'destinationAirport', - 'file', + 'destinationAirport' ]); - return view('admin.tours.edit', compact('tour' , 'airports')); + $airports = Airport::all(); + + $detail = $tour->tour_details->first(); + + $startDate = null; + $endDate = null; + + if ($detail) { + $startDate = verta($detail->start_date)->format('Y/m/d H:i'); + $endDate = verta($detail->end_date)->format('Y/m/d H:i'); + } + + return view('admin.tours.edit', compact( + 'tour', + 'airports', + 'detail', + 'startDate', + 'endDate' + )); } - /** - * @throws \Exception - */ - public function update(TourUpdatePostRequest $request, Tour $tour) + public function update(TourStorePostRequest $request, Tour $tour): RedirectResponse { $tour->update([ 'title' => $request->title, @@ -53,28 +97,30 @@ class TourController extends Controller 'destination_airports_id' => $request->destination_airports_id, ]); - $tourDetail = $tour->tour_details()->first(); + $startDate = Verta::parse($request->start_date)->datetime(); + $endDate = Verta::parse($request->end_date)->datetime(); - if ($tourDetail) { - - $startDate = Verta::parseFormat('Y/m/d', $request->start_date)->datetime(); - - $endDate = Verta::parseFormat('Y/m/d', $request->end_date)->datetime(); - - $tourDetail->update([ + $tour->tour_details()->updateOrCreate( + [ + 'tour_id' => $tour->id + ], + [ 'start_date' => $startDate, 'end_date' => $endDate, - ]); - } + 'price' => $request->price, + 'capacity' => $request->capacity, + 'status' => 1, + ] + ); return redirect() ->route('admin.tours.index') - ->with('success', 'تور با موفقیت بروزرسانی شد.'); + ->with('success', 'تور با موفقیت ویرایش شد.'); } - public function destroy(Tour $tour) + + public function destroy(Tour $tour): RedirectResponse { $tour->tour_details()->delete(); - $tour->delete(); return redirect() diff --git a/app/Http/Requests/Admins/TourStorePostRequest.php b/app/Http/Requests/Admins/TourStorePostRequest.php new file mode 100644 index 0000000..7e5882e --- /dev/null +++ b/app/Http/Requests/Admins/TourStorePostRequest.php @@ -0,0 +1,68 @@ + [ + 'required', + 'string', + 'max:255', + ], + 'tour_type' => [ + 'required', + 'string', + 'max:255', + ], + 'origin_airports_id' => [ + 'required', + 'integer', + 'exists:airports,id', + ], + 'destination_airports_id' => [ + 'required', + 'integer', + 'exists:airports,id', + 'different:origin_airports_id', + ], + 'start_date' => [ + 'required', + ], + 'end_date' => [ + 'required', + ], + 'price' => [ + 'required', + 'integer', + 'min:0', + ], + 'capacity' => [ + 'required', + 'integer', + 'min:1', + ], + 'status' => [ + 'nullable', + 'integer', + ], + 'summary' => [ + 'required', + 'string', + ], + 'description' => [ + 'required', + 'string', + ], + ]; + } +} diff --git a/app/Models/Tour.php b/app/Models/Tour.php index 98b9c2c..d1a56c7 100644 --- a/app/Models/Tour.php +++ b/app/Models/Tour.php @@ -47,14 +47,20 @@ class Tour extends Model ]; protected $fillable = [ - 'title', - 'file_id', - 'tour_type', - 'summary', - 'description', - 'origin_airports_id', - 'destination_airports_id' - ]; + 'title', + 'file_id', + 'tour_type', + 'summary', + 'description', + 'origin_airports_id', + 'destination_airports_id', + 'start_date', + 'end_date', + 'price', + 'capacity', + 'status', + 'tour_id' + ]; public function originAirport() { diff --git a/resources/views/admin/tours/create.blade.php b/resources/views/admin/tours/create.blade.php new file mode 100644 index 0000000..bf918e6 --- /dev/null +++ b/resources/views/admin/tours/create.blade.php @@ -0,0 +1,245 @@ +@extends('dashboard.layouts.app') + +@section('title', 'ساخت تور') + +@section('account-content') + +
+ +@endsection + +@section('scripts') + + + +@endsection diff --git a/resources/views/admin/tours/edit.blade.php b/resources/views/admin/tours/edit.blade.php index 91fd3df..b7ccc09 100644 --- a/resources/views/admin/tours/edit.blade.php +++ b/resources/views/admin/tours/edit.blade.php @@ -1,243 +1,194 @@ @extends('dashboard.layouts.app') -@section('title','ویرایش تور') +@section('title', 'ویرایش تور') @section('account-content')