Added save functionality
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Aircraft;
|
||||
use App\Models\Airline;
|
||||
use App\Models\Airport;
|
||||
use App\Models\ImportedFlight;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -43,6 +45,64 @@ class FlightImportController extends Controller
|
||||
return str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . $minutes;
|
||||
}
|
||||
|
||||
public function getPossibleAircraft(string $aircraftQuery) {
|
||||
preg_match('/\((\w+)\)/', $aircraftQuery, $matches);
|
||||
$designator = $matches[1] ?? null;
|
||||
|
||||
if(!$designator){
|
||||
$aircraft = [];
|
||||
} else {
|
||||
|
||||
$aircraft = Aircraft::when($designator, fn($query) => $query->where('designator', 'ilike', $designator))
|
||||
->orderBy('model_full_name')
|
||||
->limit(10)
|
||||
->get(['id', 'manufacturer_code', 'model_full_name', 'designator'])
|
||||
->map(fn($a) => [
|
||||
'value' => $a->id,
|
||||
'title' => "{$a->manufacturer_code} {$a->model_full_name} ({$a->designator})",
|
||||
])
|
||||
->values()
|
||||
->toArray();
|
||||
}
|
||||
|
||||
return $aircraft;
|
||||
}
|
||||
|
||||
public function getPossibleAirports(string $airportQuery) {
|
||||
preg_match('/\((\w{3})\/(\w{4})\)/', $airportQuery, $matches);
|
||||
$iata = $matches[1] ?? null;
|
||||
$icao = $matches[2] ?? null;
|
||||
|
||||
if (!$iata && !$icao) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$airports = Airport::with('region.country')
|
||||
->where(function ($q) use ($iata, $icao) {
|
||||
$q->where('iata_code', 'ilike', $iata)
|
||||
->orWhere('icao_code', 'ilike', $icao);
|
||||
})
|
||||
->orderByRaw("
|
||||
CASE
|
||||
WHEN iata_code = ? AND icao_code = ? THEN 0
|
||||
WHEN iata_code = ? THEN 1
|
||||
WHEN icao_code = ? THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
", [$iata, $icao, $iata, $icao])
|
||||
->limit(10)
|
||||
->get(['id', 'name', 'municipality', 'iata_code', 'icao_code', 'region_id'])
|
||||
->map(fn($a) => [
|
||||
'value' => $a->id,
|
||||
'title' => "{$a->name} ({$a->iata_code}/{$a->icao_code})",
|
||||
'country_code' => strtolower($a?->region->country->code ?? ''),
|
||||
])
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
return $airports;
|
||||
}
|
||||
|
||||
public function getPossibleAirlines(string $airlineQuery) {
|
||||
preg_match('/\((\w{2,3})\/(\w{3,4})\)/', $airlineQuery, $matches);
|
||||
$iata = $matches[1] ?? null;
|
||||
@@ -72,10 +132,8 @@ class FlightImportController extends Controller
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
return [
|
||||
'airline_options' => $airlines,
|
||||
'raw_airline' => $airlineQuery,
|
||||
];
|
||||
|
||||
return $airlines;
|
||||
}
|
||||
|
||||
public function reconcile(Request $request)
|
||||
@@ -119,9 +177,40 @@ class FlightImportController extends Controller
|
||||
'flight_class' => $flightToReconcile->flight_class ?? '',
|
||||
'seat_type' => $flightToReconcile->seat_type ?? '',
|
||||
'flight_reason' => $flightToReconcile->flight_reason ?? '',
|
||||
'airline_options' => $this->getPossibleAirlines($flightToReconcile->airline ?? '')['airline_options'],
|
||||
'airline_options' => $this->getPossibleAirlines($flightToReconcile->airline ?? ''),
|
||||
'to_options' => $this->getPossibleAirports($flightToReconcile->to ?? ''),
|
||||
'from_options' => $this->getPossibleAirports($flightToReconcile->from ?? ''),
|
||||
'aircraft_options' => $this->getPossibleAircraft($flightToReconcile->aircraft ?? ''),
|
||||
];
|
||||
}
|
||||
|
||||
public function save(Request $request){
|
||||
$validated = $request->validate([
|
||||
'date' => 'required|date',
|
||||
'flight_number' => 'required|string',
|
||||
'from_id' => 'required|integer|exists:airports,id',
|
||||
'to_id' => 'required|integer|exists:airports,id',
|
||||
'dep_time' => 'nullable|date_format:H:i',
|
||||
'arr_time' => 'nullable|date_format:H:i',
|
||||
'duration' => 'nullable|date_format:H:i',
|
||||
'airline_id' => 'nullable|integer|exists:airlines,id',
|
||||
'aircraft_id' => 'nullable|integer|exists:aircraft,id',
|
||||
'registration' => 'nullable|string',
|
||||
'seat_number' => 'nullable|string',
|
||||
'seat_type_id' => 'nullable|integer',
|
||||
'flight_class_id' => 'nullable|integer',
|
||||
'flight_reason_id' => 'nullable|integer',
|
||||
'note' => 'nullable|string',
|
||||
],[
|
||||
'from_id.required' => 'Please select a departure airport.',
|
||||
'to_id.required' => 'Please select an arrival airport.',
|
||||
'dep_time.date_format' => 'Departure time must be in HH:MM format, i.e: 01:25',
|
||||
'arr_time.date_format' => 'Arrival time must be in HH:MM format, i.e: 12:25',
|
||||
'duration.date_format' => 'Must be in HH:MM format, e.g: 03:37',
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Aircraft;
|
||||
use App\Models\Airline;
|
||||
use App\Models\Airport;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SearchController extends Controller
|
||||
{
|
||||
public function airlines(){
|
||||
$q = request('q', '');
|
||||
|
||||
return Airline::orderByDesc('active')
|
||||
->where(function ($query) use ($q) {
|
||||
$query->where('name', 'ilike', "%{$q}%")
|
||||
->orWhere('IATA_code', 'ilike', "%{$q}%")
|
||||
->orWhere('ICAO_code', 'ilike', "%{$q}%");
|
||||
})
|
||||
->limit(15)
|
||||
->get(['id', 'name', 'IATA_code', 'ICAO_code', 'logo'])
|
||||
->map(fn($a) => [
|
||||
'value' => $a->id,
|
||||
'title' => "{$a->name} ({$a->IATA_code}/{$a->ICAO_code})",
|
||||
])
|
||||
->values();
|
||||
}
|
||||
|
||||
public function aircraft()
|
||||
{
|
||||
$q = request('q', '');
|
||||
|
||||
return Aircraft::where('designator', 'ilike', "%{$q}%")
|
||||
->orWhereRaw("CONCAT(manufacturer_code, ' ', model_full_name) ilike ?", ["%{$q}%"])
|
||||
->limit(15)
|
||||
->get(['id', 'manufacturer_code', 'model_full_name', 'designator'])
|
||||
->map(fn($a) => [
|
||||
'value' => $a->id,
|
||||
'title' => "{$a->manufacturer_code} {$a->model_full_name} ({$a->designator})",
|
||||
])
|
||||
->values();
|
||||
}
|
||||
|
||||
public function airports()
|
||||
{
|
||||
$q = request('q', '');
|
||||
$len = strlen($q);
|
||||
|
||||
if ($len < 3) return [];
|
||||
|
||||
return Airport::with('region.country')
|
||||
->when($len === 3, fn($query) => $query->where('iata_code', 'ilike', $q))
|
||||
->when($len >= 4, fn($query) => $query->where(function ($sub) use ($q, $len) {
|
||||
$sub->when($len === 4, fn($s) => $s->where('icao_code', 'ilike', $q))
|
||||
->orWhere('name', 'ilike', "%{$q}%")
|
||||
->orWhere('municipality', 'ilike', "%{$q}%");
|
||||
})->orderByRaw("
|
||||
CASE
|
||||
WHEN icao_code = ? THEN 0
|
||||
WHEN iata_code = ? THEN 1
|
||||
ELSE 2
|
||||
END
|
||||
", [$q, $q]))
|
||||
->limit(15)
|
||||
->get(['id', 'name', 'municipality', 'iata_code', 'icao_code', 'region_id'])
|
||||
->map(fn($a) => [
|
||||
'value' => $a->id,
|
||||
'title' => "{$a->name} ({$a->iata_code}/{$a->icao_code})",
|
||||
'country_code' => strtolower($a->region->country->code),
|
||||
])
|
||||
->values();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user