Fix for Fuel and Ground Handling Costs (#1050)
* Fix for Fuel and Ground Handling Costs PR aims to fix issue #1048 and implements the feature request #1049 If no fuel cost is defined for departure airport, settings / airport fuel price will be used. If no ground handling cost is defined for airports, settings / airport ground handling cost will be used. Ground handling prices of both departure and arrival airport will be used for calculations. * Resolve conflict with latest dev PR will still fail checks due to double ground handling fares and will work on it to have two records at transactions for dep/arr * Remove Double GH Costs / Fix The Bug Only Removed double GH costs for now, pr aims only fixing the current issue (general settings not being read for fuel and ground handling costs) * Add departure and arrival airports to ground handling * Style fix * Fix tests Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com> Co-authored-by: Nabeel Shahzad <nabeel@nabeel.sh>
This commit is contained in:
parent
63eef59060
commit
1d83b85d8b
@ -152,6 +152,8 @@ class PirepFinanceService extends Service
|
|||||||
public function payFuelCosts(Pirep $pirep): void
|
public function payFuelCosts(Pirep $pirep): void
|
||||||
{
|
{
|
||||||
$ap = $pirep->dpt_airport;
|
$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)) {
|
if (setting('pireps.advanced_fuel', false)) {
|
||||||
$ac = $pirep->aircraft;
|
$ac = $pirep->aircraft;
|
||||||
// Reading second row by skip(1) to reach the previous accepted pirep. Current pirep is at the first row
|
// 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;
|
$fuel_amount = $pirep->fuel_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
$debit = Money::createFromAmount($fuel_amount * $ap->fuel_jeta_cost);
|
$debit = Money::createFromAmount($fuel_amount * $fuel_cost);
|
||||||
Log::info('Finance: Fuel cost, (fuel='.$fuel_amount.', cost='.$ap->fuel_jeta_cost.') D='
|
Log::info('Finance: Fuel cost, (fuel='.$fuel_amount.', cost='.$fuel_cost.') D='
|
||||||
.$debit->getAmount());
|
.$debit->getAmount());
|
||||||
|
|
||||||
$this->financeSvc->debitFromJournal(
|
$this->financeSvc->debitFromJournal(
|
||||||
$pirep->airline->journal,
|
$pirep->airline->journal,
|
||||||
$debit,
|
$debit,
|
||||||
$pirep,
|
$pirep,
|
||||||
'Fuel Cost ('.$ap->fuel_jeta_cost.'/'.config('phpvms.internal_units.fuel').')',
|
'Fuel Cost ('.$fuel_cost.'/'.config('phpvms.internal_units.fuel').')',
|
||||||
'Fuel',
|
'Fuel',
|
||||||
'fuel'
|
'fuel'
|
||||||
);
|
);
|
||||||
@ -415,14 +417,26 @@ class PirepFinanceService extends Service
|
|||||||
*/
|
*/
|
||||||
public function payGroundHandlingForPirep(Pirep $pirep): void
|
public function payGroundHandlingForPirep(Pirep $pirep): void
|
||||||
{
|
{
|
||||||
$ground_handling_cost = $this->getGroundHandlingCost($pirep);
|
$ground_handling_cost = $this->getGroundHandlingCost($pirep, $pirep->dpt_airport);
|
||||||
Log::info('Finance: PIREP: '.$pirep->id.'; ground handling: '.$ground_handling_cost);
|
Log::info('Finance: PIREP: '.$pirep->id.'; dpt ground handling: '.$ground_handling_cost);
|
||||||
|
|
||||||
$this->financeSvc->debitFromJournal(
|
$this->financeSvc->debitFromJournal(
|
||||||
$pirep->airline->journal,
|
$pirep->airline->journal,
|
||||||
Money::createFromAmount($ground_handling_cost),
|
Money::createFromAmount($ground_handling_cost),
|
||||||
$pirep,
|
$pirep,
|
||||||
|
'Ground Handling (Departure)',
|
||||||
'Ground Handling',
|
'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',
|
||||||
'ground_handling'
|
'ground_handling'
|
||||||
);
|
);
|
||||||
@ -525,23 +539,21 @@ class PirepFinanceService extends Service
|
|||||||
* Return the costs for the ground handling, with the multiplier
|
* Return the costs for the ground handling, with the multiplier
|
||||||
* being applied from the subfleet
|
* being applied from the subfleet
|
||||||
*
|
*
|
||||||
* @param Pirep $pirep
|
* @param Pirep $pirep
|
||||||
|
* @param Airport $airport
|
||||||
*
|
*
|
||||||
* @return float|null
|
* @return float|null
|
||||||
*/
|
*/
|
||||||
public function getGroundHandlingCost(Pirep $pirep)
|
public function getGroundHandlingCost(Pirep $pirep, Airport $airport): ?float
|
||||||
{
|
{
|
||||||
if (filled($pirep->aircraft->subfleet->ground_handling_multiplier)) {
|
$gh_cost = $airport->ground_handling_cost ?? setting('airports.default_ground_handling_cost');
|
||||||
// force into percent mode
|
if (!filled($pirep->aircraft->subfleet->ground_handling_multiplier)) {
|
||||||
$multiplier = $pirep->aircraft->subfleet->ground_handling_multiplier.'%';
|
return $gh_cost;
|
||||||
|
|
||||||
return Math::applyAmountOrPercent(
|
|
||||||
$pirep->arr_airport->ground_handling_cost,
|
|
||||||
$multiplier
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $pirep->arr_airport->ground_handling_cost;
|
// force into percent mode
|
||||||
|
$multiplier = $pirep->aircraft->subfleet->ground_handling_multiplier.'%';
|
||||||
|
return Math::applyAmountOrPercent($gh_cost, $multiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -900,7 +900,7 @@ class FinanceTest extends TestCase
|
|||||||
|
|
||||||
// $this->assertCount(9, $transactions['transactions']);
|
// $this->assertCount(9, $transactions['transactions']);
|
||||||
$this->assertEquals(3020, $transactions['credits']->getValue());
|
$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
|
// Check that all the different transaction types are there
|
||||||
// test by the different groups that exist
|
// test by the different groups that exist
|
||||||
@ -910,7 +910,7 @@ class FinanceTest extends TestCase
|
|||||||
'expense' => 1,
|
'expense' => 1,
|
||||||
'subfleet' => 2,
|
'subfleet' => 2,
|
||||||
'fare' => 3,
|
'fare' => 3,
|
||||||
'ground_handling' => 1,
|
'ground_handling' => 2,
|
||||||
'pilot_pay' => 2, // debit on the airline, credit to the pilot
|
'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->assertCount(9, $transactions['transactions']);
|
||||||
$this->assertEquals(3020, $transactions['credits']->getValue());
|
$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
|
// Check that all the different transaction types are there
|
||||||
// test by the different groups that exist
|
// test by the different groups that exist
|
||||||
@ -966,7 +966,7 @@ class FinanceTest extends TestCase
|
|||||||
'expense' => 1,
|
'expense' => 1,
|
||||||
'subfleet' => 2,
|
'subfleet' => 2,
|
||||||
'fare' => 3,
|
'fare' => 3,
|
||||||
'ground_handling' => 1,
|
'ground_handling' => 2,
|
||||||
'pilot_pay' => 2, // debit on the airline, credit to the pilot
|
'pilot_pay' => 2, // debit on the airline, credit to the pilot
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -995,7 +995,7 @@ class FinanceTest extends TestCase
|
|||||||
|
|
||||||
$transactions = $journalRepo->getAllForObject($pirep2);
|
$transactions = $journalRepo->getAllForObject($pirep2);
|
||||||
$this->assertEquals(3020, $transactions['credits']->getValue());
|
$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
|
// Check that all the different transaction types are there
|
||||||
// test by the different groups that exist
|
// test by the different groups that exist
|
||||||
@ -1005,7 +1005,7 @@ class FinanceTest extends TestCase
|
|||||||
'expense' => 2,
|
'expense' => 2,
|
||||||
'subfleet' => 2,
|
'subfleet' => 2,
|
||||||
'fare' => 3,
|
'fare' => 3,
|
||||||
'ground_handling' => 1,
|
'ground_handling' => 2,
|
||||||
'pilot_pay' => 2, // debit on the airline, credit to the pilot
|
'pilot_pay' => 2, // debit on the airline, credit to the pilot
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user