account = $account; } /** * Execute the job. * * @return void */ public function handle() { // if free plan, return if(Ninja::isSelfHost() || $this->account->isFreeHostedClient()) return; $plan_details = $account->getPlanDetails(); /* Trial user cancelling early.... */ if($plan_details['trial_active']) return; /* Is the plan Active? */ if(!$plan_details['active']) return; /* Refundable client! */ $plan_start = $plan_details['started']; $plan_expires = $plan_details['expires']; $paid = $plan_details['paid']; $term = $plan_details['term']; $refund = $this->calculateRefundAmount($paid, $plan_expires); /* Are there any edge cases? */ //@TODO process refund by refunding directly to the payment_id; } private function calculateRefundAmount($amount, $plan_expires) { $end_date = Carbon::parse($plan_expires); $now = Carbon::now(); $days_left = $now->diffInDays($end_date); $pro_rata_ratio = $days_left / 365; $pro_rata_refund = $amount * $pro_rata_ratio; return $pro_rata_refund; } }