diff --git a/app/Services/Finance/PirepFinanceService.php b/app/Services/Finance/PirepFinanceService.php index 788caa0c..ccdf44f1 100644 --- a/app/Services/Finance/PirepFinanceService.php +++ b/app/Services/Finance/PirepFinanceService.php @@ -152,6 +152,8 @@ class PirepFinanceService extends Service public function payFuelCosts(Pirep $pirep): void { $ap = $pirep->dpt_airport; + // Get Airport Fuel Cost or revert back to settings + $fuel_cost = $ap->fuel_jeta_cost ?? setting('airports.default_jet_a_fuel_cost'); if (setting('pireps.advanced_fuel', false)) { $ac = $pirep->aircraft; // Reading second row by skip(1) to reach the previous accepted pirep. Current pirep is at the first row @@ -173,15 +175,15 @@ class PirepFinanceService extends Service $fuel_amount = $pirep->fuel_used; } - $debit = Money::createFromAmount($fuel_amount * $ap->fuel_jeta_cost); - Log::info('Finance: Fuel cost, (fuel='.$fuel_amount.', cost='.$ap->fuel_jeta_cost.') D=' + $debit = Money::createFromAmount($fuel_amount * $fuel_cost); + Log::info('Finance: Fuel cost, (fuel='.$fuel_amount.', cost='.$fuel_cost.') D=' .$debit->getAmount()); $this->financeSvc->debitFromJournal( $pirep->airline->journal, $debit, $pirep, - 'Fuel Cost ('.$ap->fuel_jeta_cost.'/'.config('phpvms.internal_units.fuel').')', + 'Fuel Cost ('.$fuel_cost.'/'.config('phpvms.internal_units.fuel').')', 'Fuel', 'fuel' ); @@ -415,14 +417,26 @@ class PirepFinanceService extends Service */ public function payGroundHandlingForPirep(Pirep $pirep): void { - $ground_handling_cost = $this->getGroundHandlingCost($pirep); - Log::info('Finance: PIREP: '.$pirep->id.'; ground handling: '.$ground_handling_cost); + $ground_handling_cost = $this->getGroundHandlingCost($pirep, $pirep->dpt_airport); + Log::info('Finance: PIREP: '.$pirep->id.'; dpt ground handling: '.$ground_handling_cost); $this->financeSvc->debitFromJournal( $pirep->airline->journal, Money::createFromAmount($ground_handling_cost), $pirep, + 'Ground Handling (Departure)', 'Ground Handling', + 'ground_handling' + ); + + $ground_handling_cost = $this->getGroundHandlingCost($pirep, $pirep->arr_airport); + Log::info('Finance: PIREP: '.$pirep->id.'; arrival ground handling: '.$ground_handling_cost); + + $this->financeSvc->debitFromJournal( + $pirep->airline->journal, + Money::createFromAmount($ground_handling_cost), + $pirep, + 'Ground Handling (Departure)', 'Ground Handling', 'ground_handling' ); @@ -525,23 +539,21 @@ class PirepFinanceService extends Service * Return the costs for the ground handling, with the multiplier * being applied from the subfleet * - * @param Pirep $pirep + * @param Pirep $pirep + * @param Airport $airport * * @return float|null */ - public function getGroundHandlingCost(Pirep $pirep) + public function getGroundHandlingCost(Pirep $pirep, Airport $airport): ?float { - if (filled($pirep->aircraft->subfleet->ground_handling_multiplier)) { - // force into percent mode - $multiplier = $pirep->aircraft->subfleet->ground_handling_multiplier.'%'; - - return Math::applyAmountOrPercent( - $pirep->arr_airport->ground_handling_cost, - $multiplier - ); + $gh_cost = $airport->ground_handling_cost ?? setting('airports.default_ground_handling_cost'); + if (!filled($pirep->aircraft->subfleet->ground_handling_multiplier)) { + return $gh_cost; } - return $pirep->arr_airport->ground_handling_cost; + // force into percent mode + $multiplier = $pirep->aircraft->subfleet->ground_handling_multiplier.'%'; + return Math::applyAmountOrPercent($gh_cost, $multiplier); } /** diff --git a/tests/FinanceTest.php b/tests/FinanceTest.php index 5cf4fd16..deb64574 100644 --- a/tests/FinanceTest.php +++ b/tests/FinanceTest.php @@ -900,7 +900,7 @@ class FinanceTest extends TestCase // $this->assertCount(9, $transactions['transactions']); $this->assertEquals(3020, $transactions['credits']->getValue()); - $this->assertEquals(2040, $transactions['debits']->getValue()); + $this->assertEquals(2050.0, $transactions['debits']->getValue()); // Check that all the different transaction types are there // test by the different groups that exist @@ -910,7 +910,7 @@ class FinanceTest extends TestCase 'expense' => 1, 'subfleet' => 2, 'fare' => 3, - 'ground_handling' => 1, + 'ground_handling' => 2, 'pilot_pay' => 2, // debit on the airline, credit to the pilot ]; @@ -956,7 +956,7 @@ class FinanceTest extends TestCase // $this->assertCount(9, $transactions['transactions']); $this->assertEquals(3020, $transactions['credits']->getValue()); - $this->assertEquals(2040, $transactions['debits']->getValue()); + $this->assertEquals(2050.0, $transactions['debits']->getValue()); // Check that all the different transaction types are there // test by the different groups that exist @@ -966,7 +966,7 @@ class FinanceTest extends TestCase 'expense' => 1, 'subfleet' => 2, 'fare' => 3, - 'ground_handling' => 1, + 'ground_handling' => 2, 'pilot_pay' => 2, // debit on the airline, credit to the pilot ]; @@ -995,7 +995,7 @@ class FinanceTest extends TestCase $transactions = $journalRepo->getAllForObject($pirep2); $this->assertEquals(3020, $transactions['credits']->getValue()); - $this->assertEquals(2140, $transactions['debits']->getValue()); + $this->assertEquals(2150.0, $transactions['debits']->getValue()); // Check that all the different transaction types are there // test by the different groups that exist @@ -1005,7 +1005,7 @@ class FinanceTest extends TestCase 'expense' => 2, 'subfleet' => 2, 'fare' => 3, - 'ground_handling' => 1, + 'ground_handling' => 2, 'pilot_pay' => 2, // debit on the airline, credit to the pilot ];