/** * 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); }
public function validateData() { //Verify the keyfob, device key and action //Validate the action if (!in_array($this->action, $this->deviceActions)) { throw new ValidationException('Invalid Device Action'); } //Validate the device try { $this->device = $this->equipmentRepository->findBySlug($this->deviceKey); } catch (ModelNotFoundException $e) { throw new ValidationException('Invalid Device Key'); } //Confirm the device is working if (!$this->device->working) { throw new ValidationException('Device Not Working'); } //Validate the key fob $this->keyFob = $this->lookupKeyFob($this->keyFobId); //Make sure the user is active $this->user = $this->keyFob->user()->first(); if (!$this->user || !$this->user->active) { throw new ValidationException('User Invalid'); } //Make sure the user is allowed to use the device if ($this->device->requires_induction) { //Verify the user has training if (!$this->inductionRepository->isUserTrained($this->user->id, $this->deviceKey)) { throw new ValidationException('User Not Trained'); } } //Make sure the member has enough money on their account $minimumBalance = $this->bbCredit->acceptableNegativeBalance('equipment-fee'); if ($this->user->cash_balance + $minimumBalance * 100 <= 0) { throw new ValidationException('User doesn\'t have enough credit'); } }