'Debit into Company Wallet', 'message' => 'You have successfully debit company wallet' ]; } /** @var FetchesWallet */ private $fetchesWallet; /** @var GeneratesTransactionBillNumber */ private $generatesTransactionBillNumber; /** @var CreatesTransaction */ private $createsTransaction; /** @var UpdatesWallet */ private $updatesWallet; /** * CreateWalletLogic constructor. * @param FetchesWallet $fetchesWallet * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber * @param CreatesTransaction $createsTransaction * @param UpdatesWallet $updatesWallet */ public function __construct( FetchesWallet $fetchesWallet, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, UpdatesWallet $updatesWallet ) { $this->fetchesWallet = $fetchesWallet; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; $this->createsTransaction = $createsTransaction; $this->updatesWallet = $updatesWallet; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { $wallet = $this->fetchesWallet->execute(['id' => $request->input('wallet_id')]); $billNumber = $this->generatesTransactionBillNumber->execute('DEBIT-NOTE-'); $transaction_object = new TransactionObject( $billNumber, TransactionType::DEBIT_NOTE, 1, $wallet->company->id, 1, PaymentMethodType::WALLET, $request->input('amount'), $request->input('amount'), 1, 1, 1, 0, 0, null, ApprovalStatus::PENDING_SUBMISSION, [] ); $transaction = $this->createsTransaction->execute($wallet, $transaction_object); $updateWalletAmount = $wallet->amount - $transaction->amount; $walletOject = new WalletObject($wallet->company->id, $wallet->currency_id, $wallet->code, $updateWalletAmount); $wallet = $this->updatesWallet->execute($wallet, $walletOject); return $this->resourceResponse(new WalletResource($wallet)); } }