PIREP tests working, using minutes to track flight hours instead of seconds

This commit is contained in:
Nabeel Shahzad
2017-12-13 10:56:26 -06:00
parent 86c727ba55
commit 55250b8789
13 changed files with 124 additions and 156 deletions

View File

@@ -21,6 +21,11 @@ class Utils extends Facade
return $key;
}
public static function minutesToTimeParts($minutes): array
{
return self::secondsToTimeParts(self::minutesToSeconds($minutes));
}
/**
* Convert seconds to an array of hours, minutes, seconds
* @param $seconds
@@ -47,7 +52,7 @@ class Utils extends Facade
* @param bool $incl_sec
* @return string
*/
public static function secondsToTime($seconds, $incl_sec=false): string
public static function secondsToTimeString($seconds, $incl_sec=false): string
{
$hms = self::secondsToTimeParts($seconds);
$format = $hms['h'].'h '.$hms['m'].'m';
@@ -58,6 +63,44 @@ class Utils extends Facade
return $format;
}
/**
* @param $minutes
* @return float|int
*/
public static function minutesToSeconds($minutes)
{
return $minutes * 60;
}
/**
* Convert the seconds to minutes and then round it up
* @param $seconds
* @return float|int
*/
public static function secondsToMinutes($seconds)
{
return ceil($seconds/60);
}
/**
* Convert hours to minutes. Pretty complex
* @param $minutes
* @return float|int
*/
public static function minutesToHours($minutes)
{
return $minutes/60;
}
/**
* @param $hours
* @return float|int
*/
public static function hoursToMinutes($hours)
{
return $hours * 60;
}
/**
* Bitwise operator for setting days of week to integer field
* @param int $datefield initial datefield

View File

@@ -109,6 +109,9 @@ class PirepController extends BaseController
$input = $request->all();
$pirep = $this->pirepRepo->create($input);
$pirep->flight_time = ((int) Utils::hoursToMinutes($request['hours']))
+ ((int) $request['minutes']);
Flash::success('Pirep saved successfully.');
return redirect(route('admin.pireps.index'));
}
@@ -145,7 +148,7 @@ class PirepController extends BaseController
return redirect(route('admin.pireps.index'));
}
$hms = Utils::secondsToTimeParts($pirep->flight_time);
$hms = Utils::minutesToTimeParts($pirep->flight_time);
$pirep->hours = $hms['h'];
$pirep->minutes = $hms['m'];
@@ -167,8 +170,8 @@ class PirepController extends BaseController
{
$pirep = $this->pirepRepo->findWithoutFail($id);
$pirep->flight_time = ((int)$request['hours'] * 60 * 60)
+ ((int)$request['minutes'] * 60);
$pirep->flight_time = ((int) Utils::hoursToMinutes($request['hours']))
+ ((int) $request['minutes']);
if (empty($pirep)) {
Flash::error('Pirep not found');

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Frontend;
use App\Facades\Utils;
use App\Repositories\Criteria\WhereCriteria;
use App\Services\PIREPService;
use Illuminate\Support\Facades\Auth;
@@ -77,8 +78,8 @@ class PirepController extends Controller
// Any special fields
$pirep->pilot()->associate(Auth::user());
$pirep->flight_time = ((int)$pirep_fields['hours'] * 60 * 60)
+ ((int)$pirep_fields['minutes'] * 60);
$pirep->flight_time = ((int) Utils::hoursToMinutes($request['hours']))
+ ((int) $request['minutes']);
// The custom fields from the form
$custom_fields = [];

View File

@@ -47,6 +47,7 @@ class Pirep extends Model
* @var array
*/
protected $casts = [
'id' => 'string',
'flight_time' => 'integer',
'level' => 'integer',
'fuel_used' => 'integer',

View File

@@ -38,7 +38,7 @@ class PIREPService extends BaseService
*
* @return Pirep
*/
public function create(Pirep &$pirep, array $field_values): Pirep
public function create(Pirep $pirep, array $field_values=[]): Pirep
{
if($field_values === null) {
$field_values = [];
@@ -85,7 +85,7 @@ class PIREPService extends BaseService
* @param int $new_status
* @return Pirep
*/
public function changeStatus(Pirep &$pirep, int $new_status): Pirep
public function changeStatus(Pirep $pirep, int $new_status): Pirep
{
Log::info('PIREP ' . $pirep->id . ' status change from '.$pirep->status.' to ' . $new_status);
@@ -127,7 +127,7 @@ class PIREPService extends BaseService
* @param Pirep $pirep
* @return Pirep
*/
public function accept(Pirep &$pirep): Pirep
public function accept(Pirep $pirep): Pirep
{
# moving from a REJECTED state to ACCEPTED, reconcile statuses
if ($pirep->status === config('enums.pirep_status.ACCEPTED')) {
@@ -137,7 +137,7 @@ class PIREPService extends BaseService
$ft = $pirep->flight_time;
$pilot = $pirep->pilot;
$this->pilotSvc->adjustFlightHours($pilot, $ft);
$this->pilotSvc->adjustFlightTime($pilot, $ft);
$this->pilotSvc->adjustFlightCount($pilot, +1);
$this->pilotSvc->calculatePilotRank($pilot);
$pirep->pilot->refresh();
@@ -160,7 +160,7 @@ class PIREPService extends BaseService
* @param Pirep $pirep
* @return Pirep
*/
public function reject(Pirep &$pirep): Pirep
public function reject(Pirep $pirep): Pirep
{
# If this was previously ACCEPTED, then reconcile the flight hours
# that have already been counted, etc
@@ -168,7 +168,7 @@ class PIREPService extends BaseService
$pilot = $pirep->pilot;
$ft = $pirep->flight_time * -1;
$this->pilotSvc->adjustFlightHours($pilot, $ft);
$this->pilotSvc->adjustFlightTime($pilot, $ft);
$this->pilotSvc->adjustFlightCount($pilot, -1);
$this->pilotSvc->calculatePilotRank($pilot);
$pirep->pilot->refresh();

View File

@@ -27,10 +27,10 @@ class UserService extends BaseService
return $user;
}
public function adjustFlightHours(User $user, int $hours): User
public function adjustFlightTime(User $user, int $minutes): User
{
$user->refresh();
$user->flight_time += $hours;
$user->flight_time += $minutes;
$user->save();
event(new UserStateChanged($user));
@@ -41,15 +41,10 @@ class UserService extends BaseService
public function calculatePilotRank(User $user): User
{
$user->refresh();
$pilot_hours = $user->flight_time / 3600;
$pilot_hours = Utils::minutesToHours($user->flight_time);
# TODO: Cache
$ranks = Cache::remember(
config('cache.keys.RANKS_PILOT_LIST.key'),
config('cache.keys.RANKS_PILOT_LIST.time'),
function () {
return Rank::where('auto_promote', true)->orderBy('hours', 'asc')->get();
});
$ranks = Rank::where('auto_promote', true)->orderBy('hours', 'asc')->get();
foreach ($ranks as $rank) {
if($rank->hours > $pilot_hours) {