Fix flight duplicate detection in add/edit/import; fix active checkbox

This commit is contained in:
Nabeel Shahzad
2018-04-25 11:53:32 -05:00
parent fb6d5a6a0a
commit 531e86f5e7
7 changed files with 117 additions and 34 deletions

View File

@@ -166,21 +166,9 @@ class FlightController extends Controller
{
$input = $request->all();
# See if flight number exists with the route code/leg
$where = [
'flight_number' => $input['flight_number'],
];
if (filled($input['route_code'])) {
$where['route_code'] = $input['route_code'];
}
if (filled($input['route_leg'])) {
$where['route_leg'] = $input['route_leg'];
}
$flights = $this->flightRepo->findWhere($where);
if ($flights->count() > 0) {
// Create a temporary flight so we can validate
$flight = new Flight($input);
if ($this->flightSvc->isFlightDuplicate($flight)) {
Flash::error('Duplicate flight with same number/code/leg found, please change to proceed');
return redirect()->back()->withInput($request->all());
}
@@ -270,22 +258,11 @@ class FlightController extends Controller
$input = $request->all();
# See if flight number exists with the route code/leg
$where = [
['id', '<>', $id],
'flight_number' => $input['flight_number'],
];
# apply the updates here temporarily, don't save
# the repo->update() call will actually do it
$flight->fill($input);
if (filled($input['route_code'])) {
$where['route_code'] = $input['route_code'];
}
if (filled($input['route_leg'])) {
$where['route_leg'] = $input['route_leg'];
}
$flights = $this->flightRepo->findWhere($where);
if ($flights->count() > 0) {
if($this->flightSvc->isFlightDuplicate($flight)) {
Flash::error('Duplicate flight with same number/code/leg found, please change to proceed');
return redirect()->back()->withInput($request->all());
}

View File

@@ -47,7 +47,7 @@ class ImportExport
/**
* Get the airline from the ICAO. Create it if it doesn't exist
* @param $code
* @return \Illuminate\Database\Eloquent\Model
* @return Airline
*/
public function getAirline($code)
{

View File

@@ -14,6 +14,7 @@ use PhpUnitsOfMeasure\Exception\NonStringUnitName;
/**
* @property string id
* @property Airline airline
* @property integer airline_id
* @property mixed flight_number
* @property mixed route_code
* @property mixed route_leg

View File

@@ -100,6 +100,43 @@ class FlightService extends Service
return $flight;
}
/**
* Check if this flight has a duplicate already
* @param Flight $flight
* @return bool
*/
public function isFlightDuplicate(Flight $flight)
{
$where = [
['id', '<>', $flight->id],
'airline_id' => $flight->airline_id,
'flight_number' => $flight->flight_number,
];
$found_flights = $this->flightRepo->findWhere($where);
if($found_flights->count() === 0) {
return false;
}
// Find within all the flights with the same flight number
// Return any flights that have the same route code and leg
// If this list is > 0, then this has a duplicate
$found_flights = $found_flights->filter(function($value, $key) use ($flight) {
if($flight->route_code === $value->route_code
&& $flight->route_leg === $value->route_leg) {
return true;
}
return false;
});
if($found_flights->count() === 0) {
return false;
}
return true;
}
/**
* Delete a flight, and all the user bids, etc associated with it
* @param Flight $flight

View File

@@ -75,6 +75,19 @@ class FlightImporter extends ImportExport
// Get the airline ID from the ICAO code
$airline = $this->getAirline($row['airline']);
// Check if the imported flight is a duplicate
$temp_flight = new Flight([
'airline_id' => $airline->id,
'flight_number' => $row['flight_number'],
'route_code' => $row['route_code'],
'route_leg' => $row['route_leg'],
]);
if($this->flightSvc->isFlightDuplicate($temp_flight)) {
$this->errorLog('Error in row '.$index.': Duplicate flight number detected');
return false;
}
// Try to find this flight
$flight = Flight::firstOrNew([
'airline_id' => $airline->id,