diff --git a/src/pages/master/wallet/hooks/ManageWalletContext.tsx b/src/pages/master/wallet/hooks/ManageWalletContext.tsx index cb46e6b..15e8469 100644 --- a/src/pages/master/wallet/hooks/ManageWalletContext.tsx +++ b/src/pages/master/wallet/hooks/ManageWalletContext.tsx @@ -147,6 +147,7 @@ const ManageWalletContextProvider = ({ children }: { children: React.ReactNode } try { sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting; filter = filter.length == 0 ? {} : { 'wallets.name': { like: `%${filter[0].value?.toLowerCase()}%` } }; + const response = await GetData(`${API_URL_MASTER_DATA}/wallet/list`, { limit, page: page + 1, diff --git a/src/pages/transaction/approval-transaction/blocks/ApprovalDialog.tsx b/src/pages/transaction/approval-transaction/blocks/ApprovalDialog.tsx index da5a4b8..e983a0d 100644 --- a/src/pages/transaction/approval-transaction/blocks/ApprovalDialog.tsx +++ b/src/pages/transaction/approval-transaction/blocks/ApprovalDialog.tsx @@ -36,7 +36,6 @@ const ApprovalDialog = () => { selectedTransactionIdForApproval, } = useTransactionContext(); - const [transactionDetails, setTransactionDetails] = useState(null); const [formField, setFormField] = useState({ transaction_code: '', @@ -54,11 +53,6 @@ const ApprovalDialog = () => { async (e: React.FormEvent) => { e.preventDefault(); - if (!transactionDetails || !transactionDetails.code) { - toast.error('Transaction data not loaded yet.'); - return; - } - if (!formField.status) { toast.error('Please select a status.'); return; @@ -82,22 +76,25 @@ const ApprovalDialog = () => { if (result.isConfirmed) { // ✅ Kalau tekan YES, baru tembak API const response = await PostData(`${API_URL}/transaction/set-approval`, { - id_transaction: transactionDetails.id, + id_transaction: selectedTransactionIdForApproval, notes: formField.notes, status: formField.status, pin: formField.pin, }); + // console.log(response?.message?.error?.message,response?.status); + if (response?.status === false) { - toast.error(response?.message?.error?.message || 'Approval failed'); + // console.log(response); + toast.error(JSON.stringify(response)); return; - } + } if (response?.status) { toast.success('Success Update Approval'); const createActivity = { module: 'Approval Transaction', - description: `Change status approve for transaction => ${transactionDetails.code}`, + description: `Change status approve for transaction => ${selectedTransactionIdForApproval}`, action: 'U', }; doSaveLogActivity(createActivity); @@ -108,7 +105,7 @@ const ApprovalDialog = () => { console.log('User cancelled'); } }, - [formField, transactionDetails] + [formField] ); useEffect(() => { @@ -119,41 +116,10 @@ const ApprovalDialog = () => { status: '', pin: '' }); - setTransactionDetails(null); setAlert({ show: false, message: '' }); } }, [showApprovalDialog]); - useEffect(() => { - const fetchTransactionDetails = async () => { - if (selectedTransactionIdForApproval) { - try { - const response = await GetData( - `${API_URL}/transaction/history/detail/${selectedTransactionIdForApproval}`, - { - id: selectedTransactionIdForApproval, - } - ); - setTransactionDetails(response?.data); - } catch (error) { - console.error('Error fetching transaction', error); - } - } - }; - - if (showApprovalDialog && selectedTransactionIdForApproval) { - fetchTransactionDetails(); - } - }, [showApprovalDialog, selectedTransactionIdForApproval, GetData]); - - useEffect(() => { - if (transactionDetails) { - setFormField((prev) => ({ - ...prev, - transaction_code: transactionDetails.id ?? '', - })); - } - }, [transactionDetails]); return ( diff --git a/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx b/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx index c6a6ff6..d5b6642 100644 --- a/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx +++ b/src/pages/transaction/disbursement-saldo/TransactionDisbursement.tsx @@ -42,12 +42,35 @@ const TransactionDisbursement = () => { message: '' }); + const fetchWallets = async () => { + try { + const response = await GetData( + `${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, + {} + ); + if (response?.status === true) { + setWallets(response.data || []); + } else { + toast.warning(response?.message || 'Failed to fetch wallet data'); + } + } catch (error) { + toast.warning('Failed to fetch wallet data'); + } + }; + const fetchCustomerMsisdn = async (sorting: any, filterValue: string) => { const filter: any = - filterValue.trim().length === 0 ? {} : { msisdn: { like: `%${filterValue}%` } }; + filterValue.trim().length === 0 + ? {} + : { + or: [ + { msisdn: { like: `%${filterValue}%` } }, + { fullname: { like: `%${filterValue}%` } } + ] + }; const query: any = { - limit: 25, + limit: 100, page: 1, with_deleted: false, order_field: sorting[0].id, @@ -74,38 +97,6 @@ const TransactionDisbursement = () => { } }; - useEffect(() => { - const fetchWallets = async () => { - try { - const response = await GetData( - `${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, - {} - ); - if (response?.status === true) { - setWallets(response.data || []); - } else { - toast.warning(response?.message || 'Failed to fetch wallet data'); - } - } catch (error) { - toast.warning('Failed to fetch wallet data'); - } - }; - - fetchWallets(); - fetchCustomerMsisdn([{ id: 'msisdn', desc: false }], ''); - - const handleClickOutside = (event: any) => { - if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { - setDropdownOpen(false); - } - }; - - document.addEventListener('mousedown', handleClickOutside); - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, []); - const doPostData = async (form: typeof initialForm) => { setIsSubmitting(true); @@ -116,6 +107,7 @@ const TransactionDisbursement = () => { pin: form.pin }); if (response?.status == true) { + await fetchWallets(); toast.success('Success Request Topup'); } else { toast.error(`${response?.message?.message}`); @@ -128,6 +120,7 @@ const TransactionDisbursement = () => { } finally { setIsSubmitting(false); setShowConfirmation(false); + ResetForm(); } }; @@ -146,6 +139,12 @@ const TransactionDisbursement = () => { // TODO: Kirim ke backend atau proses lainnya }; + const ResetForm = () => { + setForm(initialForm); + setAlert({ show: false, message: '' }); + setSearchTerm(''); + }; + const handleCancelSubmit = () => { setShowConfirmation(false); }; @@ -166,6 +165,22 @@ const TransactionDisbursement = () => { setSearchTerm(msisdn); }; + useEffect(() => { + fetchWallets(); + fetchCustomerMsisdn([{ id: 'msisdn', desc: false }], ''); + + const handleClickOutside = (event: any) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { + setDropdownOpen(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + const filteredMsisdn = customerMsisdn .filter((item) => item.label.toLowerCase().includes(searchTerm.toLowerCase())) .slice(0, 10); @@ -256,10 +271,16 @@ const TransactionDisbursement = () => { * setForm({ ...form, amount: e.target.value })} + onChange={(e) => { + const value = Number(e.target.value); + if (value >= 0) { + setForm({ ...form, amount: String(value) }); + } + }} />
diff --git a/src/pages/transaction/topup/TransactionTopup.tsx b/src/pages/transaction/topup/TransactionTopup.tsx index 1b339a0..9136efa 100644 --- a/src/pages/transaction/topup/TransactionTopup.tsx +++ b/src/pages/transaction/topup/TransactionTopup.tsx @@ -34,25 +34,21 @@ const TransactionTopup = () => { const API_URL = apiConfig.transaction; const API_URL_WALLET = apiConfig.service_wallet; - useEffect(() => { - const fetchWallets = async () => { - try { - const response = await GetData( - `${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, - {} - ); - if (response?.status === true) { - setWallets(response.data || []); - } else { - toast.warning(response?.message || 'Failed to fetch wallet data'); - } - } catch (error) { - toast.warning('Failed to fetch wallet data'); + const fetchWallets = async () => { + try { + const response = await GetData( + `${API_URL_WALLET}/dashboard/balance/account/${parsedUser.customer.id}`, + {} + ); + if (response?.status === true) { + setWallets(response.data || []); + } else { + toast.warning(response?.message || 'Failed to fetch wallet data'); } - }; - - fetchWallets(); - }, []); + } catch (error) { + toast.warning('Failed to fetch wallet data'); + } + }; const doPostData = async (form: typeof initialState) => { setIsSubmitting(true); @@ -64,6 +60,7 @@ const TransactionTopup = () => { }); console.log(response); if (response?.status == true) { + await fetchWallets(); toast.success('Success Request Topup'); } else { toast.warning(`${response?.message}`); @@ -75,6 +72,7 @@ const TransactionTopup = () => { } finally { setIsSubmitting(false); setShowConfirmation(false); + ResetForm(); } }; @@ -97,6 +95,15 @@ const TransactionTopup = () => { setShowConfirmation(false); }; + const ResetForm = () => { + setForm(initialState); + setAlert({ show: false, message: '' }); + }; + + useEffect(() => { + fetchWallets(); + }, []); + return ( <> @@ -151,8 +158,14 @@ const TransactionTopup = () => { setForm({ ...form, topupAmount: e.target.value })} + onChange={(e) => { + const value = Number(e.target.value); + if (value >= 0) { + setForm({ ...form, topupAmount: String(value) }); + } + }} />
diff --git a/src/pages/transfer/transfertype/blocks/AddDialog.tsx b/src/pages/transfer/transfertype/blocks/AddDialog.tsx index 3705e6f..b71d9b7 100644 --- a/src/pages/transfer/transfertype/blocks/AddDialog.tsx +++ b/src/pages/transfer/transfertype/blocks/AddDialog.tsx @@ -82,6 +82,7 @@ const AddDialog = () => { status: '', type: '', status_approval: '', + status_kind: '', created_by: '', created_at: '' }; @@ -102,7 +103,8 @@ const AddDialog = () => { 'wallet_origin', 'wallet_destination', 'status', - 'status_approval' + 'status_approval', + 'status_kind' ]; const missingFields = requiredFields.filter( @@ -506,6 +508,35 @@ const AddDialog = () => {
+
+
+ + +
+ +
+
+
diff --git a/src/pages/transfer/transfertype/blocks/EditDialog.tsx b/src/pages/transfer/transfertype/blocks/EditDialog.tsx index f208fa3..fedac18 100644 --- a/src/pages/transfer/transfertype/blocks/EditDialog.tsx +++ b/src/pages/transfer/transfertype/blocks/EditDialog.tsx @@ -79,6 +79,7 @@ const EditDialog = () => { status: string; type: string; status_approval: string; + status_kind: string; updated_by: string; updated_at: string; permission: string[]; @@ -91,6 +92,7 @@ const EditDialog = () => { maximum_amount: 0, max_transaction_per_day: 0, status_approval: '', + status_kind: '', type: '', status: '', permission: [], @@ -132,6 +134,7 @@ const EditDialog = () => { 'wallet_destination', 'status', 'status_approval', + 'status_kind', 'type' ]; @@ -345,11 +348,13 @@ const EditDialog = () => { maximum_amount: response.data.maximum_amount, max_transaction_per_day: response.data.max_transaction_per_day, status_approval: response.data.status_approval, + status_kind: response.data.status_kind, type: response.data.type || '', status: response.data.status, permission: permissionIds })); } + // console.log(response); } catch (error) { console.error('Error fetching transaction type', error); setAlert({ @@ -640,7 +645,35 @@ const EditDialog = () => {
+
+
+ +
+ +
+
+