From 711ebed656096cac4bc047f2aa89c97feff14052 Mon Sep 17 00:00:00 2001
From: kmiola <kmiola@ethz.ch>
Date: Sat, 16 Nov 2024 13:26:33 +0000
Subject: [PATCH] creditpayments, reimbursements, billy, in one list, filter
 works

---
 src/pages/CreditPaymentsList.tsx | 36 ++++++++++++++++++++++++++++----
 1 file changed, 32 insertions(+), 4 deletions(-)

diff --git a/src/pages/CreditPaymentsList.tsx b/src/pages/CreditPaymentsList.tsx
index 28e0926..4d3f94c 100644
--- a/src/pages/CreditPaymentsList.tsx
+++ b/src/pages/CreditPaymentsList.tsx
@@ -1,7 +1,7 @@
 import React, { useState, useEffect } from 'react';
 import { Container, CircularProgress, Typography, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Alert, TextField, FormControl, InputLabel, Select, MenuItem } from '@mui/material';
-import { creditPaymentsReadCreditPayments, reimbursementsReadReimbursements, client, ledgersReadLedgers, kstsReadKsts } from '../client/services.gen';
-import { CreditPaymentPublic_Output, CreditPaymentsList, ReimbursementsList, ReimbursementPublic_Output, LedgerPublic, KstPublic } from '../client/types.gen';
+import { billsReadBills, creditPaymentsReadCreditPayments, reimbursementsReadReimbursements, client, ledgersReadLedgers, kstsReadKsts } from '../client/services.gen';
+import { BillsList, BillPublic_Output, CreditPaymentPublic_Output, CreditPaymentsList, ReimbursementsList, ReimbursementPublic_Output, LedgerPublic, KstPublic } from '../client/types.gen';
 import { SelectChangeEvent } from '@mui/material/Select';
 
 // Set the base URL and headers for the client
@@ -15,6 +15,7 @@ client.setConfig({
 export default function CreditPaymentsPage() {
   const [creditPayments, setCreditPayments] = useState<CreditPaymentPublic_Output[]>([]);
   const [reimbursements, setReimbursements] = useState<ReimbursementPublic_Output[]>([]);
+  const [bills, setBills] = useState<BillPublic_Output[]>([]);
   const [originalPayments, setOriginalPayments] = useState([]);
   const [filteredPayments, setFilteredPayments] = useState<any[]>([]);
   const [ledgerItems, setLedgerItems] = useState<LedgerPublic[]>([]);
@@ -32,6 +33,28 @@ export default function CreditPaymentsPage() {
     amount: '',
   });
 
+  const fetchBills = async () => {
+    setLoading(true);
+    setError(null);
+
+    try {
+      const response = await billsReadBills();
+      if (typeof response.data !== 'object' || !('items' in response.data)) {
+        console.error('Unexpected response format:', response.data);
+        setError('Received unexpected response format from the server.');
+        return;
+      }
+
+      const billsList = response.data as BillsList;
+      setBills(billsList.items);
+    } catch (err) {
+      console.error('Error fetching credit payments:', err);
+      setError('Error fetching credit payments');
+    } finally {
+      setLoading(false);
+    }
+  };
+
   const fetchCreditPayments = async () => {
     setLoading(true);
     setError(null);
@@ -122,6 +145,10 @@ export default function CreditPaymentsPage() {
 
   const mergeData = () => {
     const merged = [
+      ...bills.map(item => ({
+        ...item,
+        type: 'bill',
+      })),
       ...creditPayments.map(item => ({
         ...item,
         type: 'Credit Payment',
@@ -157,6 +184,7 @@ export default function CreditPaymentsPage() {
   };
 
   useEffect(() => {
+    fetchBills();
     fetchCreditPayments();
     fetchReimbursements();
     fetchLedgers();
@@ -164,10 +192,10 @@ export default function CreditPaymentsPage() {
   }, []);
 
   useEffect(() => {
-    if (creditPayments.length > 0 && reimbursements.length > 0) {
+    if (bills.length > 0 && creditPayments.length > 0 && reimbursements.length > 0) {
       mergeData();
     }
-  }, [creditPayments, reimbursements]);
+  }, [bills, creditPayments, reimbursements]);
 
   useEffect(() => {
     applyFilters();
-- 
GitLab