/** * Start the creation of a new balance payment * Details get posted into this method * @param $userId * @throws \BB\Exceptions\AuthenticationException * @throws \BB\Exceptions\FormValidationException * @throws \BB\Exceptions\NotImplementedException */ public function store($userId) { $user = User::findWithPermission($userId); $this->bbCredit->setUserId($user->id); $requestData = \Request::only(['reason', 'amount', 'return_path', 'ref']); $amount = $requestData['amount'] * 1 / 100; $reason = $requestData['reason']; $returnPath = $requestData['return_path']; $ref = $requestData['ref']; //Can the users balance go below 0 $minimumBalance = $this->bbCredit->acceptableNegativeBalance($reason); //What is the users balance $userBalance = $this->bbCredit->getBalance(); //With this payment will the users balance go to low? if ($userBalance - $amount < $minimumBalance) { if (\Request::wantsJson()) { return \Response::json(['error' => 'You don\'t have the money for this'], 400); } \Notification::error("You don't have the money for this"); return \Redirect::to($returnPath); } //Everything looks gooc, create the payment $this->paymentRepository->recordPayment($reason, $userId, 'balance', '', $amount, 'paid', 0, $ref); //Update the users cached balance $this->bbCredit->recalculate(); if (\Request::wantsJson()) { return \Response::json(['message' => 'Payment made']); } \Notification::success("Payment made"); return \Redirect::to($returnPath); }
/** * Remove cash from the users balance * * @param $userId * @return mixed * @throws \BB\Exceptions\AuthenticationException * @throws \BB\Exceptions\InvalidDataException */ public function destroy($userId) { $user = User::findWithPermission($userId); $this->bbCredit->setUserId($userId); $amount = \Request::get('amount'); $returnPath = \Request::get('return_path'); $ref = \Request::get('ref'); $minimumBalance = $this->bbCredit->acceptableNegativeBalance('withdrawal'); if ($user->cash_balance + $minimumBalance * 100 < $amount * 100) { \Notification::error("Not enough money"); return \Redirect::to($returnPath); } $this->paymentRepository->recordPayment('withdrawal', $userId, 'balance', '', $amount, 'paid', 0, $ref); $this->bbCredit->recalculate(); \Notification::success("Payment recorded"); return \Redirect::to($returnPath); }
/** * Handle the event. * * @param MemberBalanceChanged $event * @return void */ public function handle(MemberBalanceChanged $event) { $this->memberCreditService->setUserId($event->userId); $this->memberCreditService->recalculate(); }