Changeset View
Changeset View
Standalone View
Standalone View
src/app/Observers/EntitlementObserver.php
<?php | <?php | ||||
namespace App\Observers; | namespace App\Observers; | ||||
use App\Entitlement; | use App\Entitlement; | ||||
use Carbon\Carbon; | |||||
/** | /** | ||||
* This is an observer for the Entitlement model definition. | * This is an observer for the Entitlement model definition. | ||||
*/ | */ | ||||
class EntitlementObserver | class EntitlementObserver | ||||
{ | { | ||||
/** | /** | ||||
* Handle the "creating" event on an Entitlement. | * Handle the "creating" event on an Entitlement. | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | public function creating(Entitlement $entitlement) | ||||
} | } | ||||
$result = $sku->handler_class::preReq($entitlement, $owner); | $result = $sku->handler_class::preReq($entitlement, $owner); | ||||
if (!$result) { | if (!$result) { | ||||
return false; | return false; | ||||
} | } | ||||
// TODO: Handle the first free unit here? | // log the creation of this entitlement with the anticipation of billing it to a wallet. | ||||
\App\Changelog::create( | |||||
[ | |||||
'wallet_id' => $entitlement->wallet_id, | |||||
'sku_id' => $entitlement->sku_id, | |||||
'action' => 'creating', | |||||
'cost' => $entitlement->cost | |||||
] | |||||
); | |||||
} | |||||
// TODO: Execute the Sku handler class or function? | public function deleting(Entitlement $entitlement) | ||||
{ | |||||
// credit the wallet with any remainder of time available on the entitlement deleted, if | |||||
// eligible. | |||||
$sku = \App\Sku::find($entitlement->sku_id); | |||||
$wallet->debit($sku->cost); | // Get the latest possible changelog entry. | ||||
$changelog = \App\Changelog::where( | |||||
[ | |||||
'wallet_id' => $entitlement->wallet_id, | |||||
'sku_id' => $entitlement->sku_id, | |||||
'cost' => $entitlement->cost | |||||
] | |||||
)->latest()->first(); | |||||
if (!$changelog) { | |||||
return true; | |||||
} | |||||
$dateStart = $changelog->created_at; | |||||
$dateEnd = Carbon::now(); | |||||
$deltaDays = $dateStart->diffInDays($dateEnd); | |||||
if ($deltaDays <= 14) { | |||||
// log changelog refunding in its entirety | |||||
$leftover = $entitlement->cost; | |||||
} else { | |||||
// take cost per month, times number of months per year, divide by number of days per | |||||
// year, multiple by number of days | |||||
$leftover = $entitlement->cost * 12 / 365 * $deltaDays; | |||||
} | |||||
\App\Changelog::create( | |||||
[ | |||||
'wallet_id' => $entitlement->wallet_id, | |||||
'sku_id' => $entitlement->sku_id, | |||||
'action' => 'deleting', | |||||
'cost' => -1 * $leftover | |||||
] | |||||
); | |||||
} | } | ||||
} | } |