diff --git a/src/app/Http/Controllers/API/V4/WalletsController.php b/src/app/Http/Controllers/API/V4/WalletsController.php --- a/src/app/Http/Controllers/API/V4/WalletsController.php +++ b/src/app/Http/Controllers/API/V4/WalletsController.php @@ -115,21 +115,42 @@ return $this->errorResponse(403); } + $pageSize = 10; + $page = intval(request()->input('page')) ?: 1; + $hasMore = false; + $result = $wallet->payments() - ->selectRaw('distinct date_format(updated_at, "%Y-%m") as ident') + ->selectRaw('date_format(updated_at, "%Y-%m") as ident, sum(amount) as total') ->where('status', Payment::STATUS_PAID) ->where('amount', '<>', 0) ->orderBy('ident', 'desc') + ->groupBy('ident') + ->limit($pageSize + 1) + ->offset($pageSize * ($page - 1)) ->get() - ->whereNotIn('ident', [date('Y-m')]) // exclude current month - ->pluck('ident'); + ->whereNotIn('ident', [date('Y-m')]); // exclude current month + + + if (count($result) > $pageSize) { + $result->pop(); + $hasMore = true; + } + + $result = $result->map(function ($item) use ($wallet) { + $entry = [ + 'period' => $item->ident, + 'amount' => $item->total, + 'currency' => $wallet->currency + ]; + return $entry; + }); return response()->json([ 'status' => 'success', 'list' => $result, 'count' => count($result), - 'hasMore' => false, - 'page' => 1, + 'hasMore' => $hasMore, + 'page' => $page, ]); } diff --git a/src/resources/vue/Wallet.vue b/src/resources/vue/Wallet.vue --- a/src/resources/vue/Wallet.vue +++ b/src/resources/vue/Wallet.vue @@ -46,20 +46,7 @@
-
-

- {{ $t('wallet.receipts-hint') }} -

-
- - {{ $t('btn.download') }} -
-

- {{ $t('wallet.receipts-none') }} -

-
+
@@ -154,6 +141,7 @@ import ModalDialog from './Widgets/ModalDialog' import TransactionLog from './Widgets/TransactionLog' import PaymentLog from './Widgets/PaymentLog' + import ReceiptList from './Widgets/ReceiptList' import { downloadFile, paymentCheckout } from '../js/utils' import { library } from '@fortawesome/fontawesome-svg-core' @@ -170,7 +158,8 @@ components: { ModalDialog, TransactionLog, - PaymentLog + PaymentLog, + ReceiptList }, data() { return { @@ -182,6 +171,7 @@ receipts: [], loadTransactions: false, loadPayments: false, + loadReceipts: true, showPendingPayments: false, wallet: {}, walletId: null, @@ -242,6 +232,7 @@ this.$refs.tabs.clickHandler('history', () => { this.loadTransactions = true }) this.$refs.tabs.clickHandler('payments', () => { this.loadPayments = true }) + this.$refs.tabs.clickHandler('receipts', () => { this.loadReceipts = true }) }, methods: { loadMandate() { @@ -375,10 +366,6 @@ this.$refs.paymentDialog.show() }, - receiptDownload() { - const receipt = $('#receipt-id').val() - downloadFile('/api/v4/wallets/' + this.walletId + '/receipts/' + receipt) - } } } diff --git a/src/resources/vue/Widgets/ReceiptList.vue b/src/resources/vue/Widgets/ReceiptList.vue new file mode 100644 --- /dev/null +++ b/src/resources/vue/Widgets/ReceiptList.vue @@ -0,0 +1,69 @@ + + + +