diff --git a/app/Classes/Modules/Transactions/ControllersLogic/ListWalletTransactionsLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/ListWalletTransactionsLogic.php index 1ae97d45..0b70b484 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/ListWalletTransactionsLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/ListWalletTransactionsLogic.php @@ -5,8 +5,12 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Transactions\Services\ListsTransactions; +use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\TransactionType; use App\Http\Resources\BookingResource; use App\Http\Resources\WalletTransactionResource ; +use App\Models\Transaction; +use App\Models\Wallet; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -39,6 +43,24 @@ class ListWalletTransactionsLogic extends AbstractControllerLogic $query = $this->listsTransactions->execute($this->listsTransactions->deserializeFilters($request->input('filters'))); + if (str_contains($request->input('filters'), "owner_id") && $query->count() > 0) { + $currentWalletBalance = Wallet::find($query->first()->owner_id)->amount; + $incoming = Transaction::where('owner_type', $query->first()->owner_type) + ->where('owner_id', $query->first()->owner_id) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->whereIn('type', [TransactionType::TOP_UP, TransactionType::CREDIT_NOTE]) + ->where('id', '>', $query->first()->id) + ->sum('amount'); + $outgoing = Transaction::where('owner_type', $query->first()->owner_type) + ->where('owner_id', $query->first()->owner_id) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->whereIn('type', [TransactionType::PAYMENT, TransactionType::DEBIT_NOTE]) + ->where('id', '>', $query->first()->id) + ->sum('amount'); + $runningBalanceInReverse = $currentWalletBalance - $incoming + $outgoing; + $request['running_balance'] = $runningBalanceInReverse; + } + return $this->collectionResponse(WalletTransactionResource::collection($query)); } diff --git a/app/Http/Resources/WalletResource.php b/app/Http/Resources/WalletResource.php index 4fa484ad..d1c6b941 100644 --- a/app/Http/Resources/WalletResource.php +++ b/app/Http/Resources/WalletResource.php @@ -21,7 +21,7 @@ class WalletResource extends JsonResource 'currency_id' => $this->currency_id, 'amount' => (double) $this->amount, 'company_id' => (int) $this->owner->id, - 'transactions' => $this->whenLoaded('transactions', WalletTransactionResource::collection($this->transactions()->whereIn('status', [2, 3])->orderBy('id', 'DESC')->get()), []), + // 'transactions' => $this->whenLoaded('transactions', WalletTransactionResource::collection($this->transactions()->whereIn('status', [2, 3])->orderBy('id', 'DESC')->get()), []), 'top_up_records' => $this->whenLoaded('transactions', WalletTransactionResource::collection($this->transactions()->whereNotIn('status', [0])->where('type', TransactionType::TOP_UP)->orderBy('id', 'DESC')->get()), []), ]; } diff --git a/app/Http/Resources/WalletTransactionResource.php b/app/Http/Resources/WalletTransactionResource.php index a0e1a930..ef3091fa 100644 --- a/app/Http/Resources/WalletTransactionResource.php +++ b/app/Http/Resources/WalletTransactionResource.php @@ -20,12 +20,15 @@ class WalletTransactionResource extends JsonResource public function toArray($request) { $description = ''; + $current_running_balance = $request['running_balance']; switch((int) $this->type){ case 5: $description = (double) $this->amount.' Credit Top up'; + $request['running_balance'] = bcsub($request['running_balance'], $this->amount, 5); break; case 9: $description = 'Credit Voucher for '.$this->payment_reference; + $request['running_balance'] = bcsub($request['running_balance'], $this->amount, 5); break; case 1: $booking = Transaction::where('payment_reference', $this->bill_no)->first()->owner; @@ -35,11 +38,13 @@ class WalletTransactionResource extends JsonResource break; } + $request['running_balance'] = bcadd($request['running_balance'], $this->amount, 5); $marking = $booking->marking; $description = 'Payment For booking refs.'.''.$marking.''; break; case 11: $description = 'Debit Voucher for '.$this->payment_reference; + $request['running_balance'] = bcadd($request['running_balance'], $this->amount, 5); break; } @@ -53,6 +58,7 @@ class WalletTransactionResource extends JsonResource 'payment_method' => (float) $this->payment_method, 'issuer_name' => $this->issuerCompany->name, 'amount' => (double) $this->amount, + 'running_balance' => (double) $current_running_balance, 'service_charge' => (double) $this->service_charge, 'tax' => (double) $this->tax, 'status' => (int) $this->status, diff --git a/resources/assets/vue/components/wallets/elements/CustomerTransactionComponent.vue b/resources/assets/vue/components/wallets/elements/CustomerTransactionComponent.vue index 4d25f91b..a453a4d8 100644 --- a/resources/assets/vue/components/wallets/elements/CustomerTransactionComponent.vue +++ b/resources/assets/vue/components/wallets/elements/CustomerTransactionComponent.vue @@ -1,7 +1,7 @@ diff --git a/resources/assets/vue/components/wallets/elements/CustomerTransactionSectionComponent.vue b/resources/assets/vue/components/wallets/elements/CustomerTransactionSectionComponent.vue index 706bc95a..f0f37429 100644 --- a/resources/assets/vue/components/wallets/elements/CustomerTransactionSectionComponent.vue +++ b/resources/assets/vue/components/wallets/elements/CustomerTransactionSectionComponent.vue @@ -16,10 +16,10 @@
- +
- +
@@ -70,6 +70,10 @@ export default { id: { type: Number, required: true + }, + wallet_id: { + type: Number, + required: true } }, data(){ diff --git a/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue b/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue new file mode 100644 index 00000000..bf9864e1 --- /dev/null +++ b/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue @@ -0,0 +1,35 @@ + + \ No newline at end of file diff --git a/resources/views/pages/wallet/transactions.blade.php b/resources/views/pages/wallet/transactions.blade.php index ce31dec6..af89c443 100644 --- a/resources/views/pages/wallet/transactions.blade.php +++ b/resources/views/pages/wallet/transactions.blade.php @@ -1,5 +1,5 @@
- +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 4c4fc328..093de5ff 100644 --- a/routes/web.php +++ b/routes/web.php @@ -227,8 +227,10 @@ Route::get('/fix_bills', function () { })->name('products.random'); Route::get('/wallet/{marking}/details', function ($marking) { - $id = \App\Models\Company::where('reference', '=', $marking)->first()->id; - return view('pages.wallet.index', ['id' => $id]); + $company = \App\Models\Company::where('reference', '=', $marking)->first(); + $id = $company->id; + $wallet_id = $company->wallets()->first()->id; + return view('pages.wallet.index', ['id' => $id, 'wallet_id' => $wallet_id]); })->name('wallet.details'); Route::get('/wallet/{marking}/{is_precise}/export', 'Exports\ExportCustomersWalletTransactionToExcelController@export')->name('wallet.details-export');