diff --git a/src/components/pages/report/finance/FinanceTabs.tsx b/src/components/pages/report/finance/FinanceTabs.tsx
index 0990065a..aaaae985 100644
--- a/src/components/pages/report/finance/FinanceTabs.tsx
+++ b/src/components/pages/report/finance/FinanceTabs.tsx
@@ -2,7 +2,7 @@
import Tabs from '@/components/Tabs';
import CustomerPaymentTab from '@/components/pages/report/finance/tab/CustomerPaymentTab';
-import DebtSupplier from '@/components/pages/report/finance/tab/DebtSupplier';
+import DebtSupplierTab from '@/components/pages/report/finance/tab/DebtSupplierTab';
const FinanceTabs = () => {
const tabs = [
@@ -16,7 +16,7 @@ const FinanceTabs = () => {
id: '2',
label: 'Rekapitulasi Hutang Ke Supplier',
- content: ,
+ content: ,
},
];
diff --git a/src/components/pages/report/finance/tab/DebtSupplier.tsx b/src/components/pages/report/finance/tab/DebtSupplierTab.tsx
similarity index 82%
rename from src/components/pages/report/finance/tab/DebtSupplier.tsx
rename to src/components/pages/report/finance/tab/DebtSupplierTab.tsx
index a7ccdd62..f3e82b1a 100644
--- a/src/components/pages/report/finance/tab/DebtSupplier.tsx
+++ b/src/components/pages/report/finance/tab/DebtSupplierTab.tsx
@@ -22,6 +22,7 @@ import { ColumnDef } from '@tanstack/react-table';
import { useCallback, useMemo, useState } from 'react';
import toast from 'react-hot-toast';
import useSWR from 'swr';
+import Pagination from '@/components/Pagination';
const DebtSupplierTab = () => {
// ===== STATE MANAGEMENT =====
@@ -87,37 +88,37 @@ const DebtSupplierTab = () => {
}, [filterModal, filterStartDate, filterEndDate]);
// ===== DATA FETCHING =====
- // const { data: debtSupplier, isLoading } = useSWR(
- // isSubmitted
- // ? () => {
- // const params = {
- // supplier_id:
- // filterSupplier.length > 0
- // ? filterSupplier.map((v) => String(v.value)).join(',')
- // : undefined,
- // filter_by: 'do_date' as const,
- // start_date: filterStartDate || undefined,
- // end_date: filterEndDate || undefined,
- // page: currentPage,
- // limit: pageSize,
- // };
+ const { data: debtSupplier, isLoading } = useSWR(
+ isSubmitted
+ ? () => {
+ const params = {
+ supplier_id:
+ filterSupplier.length > 0
+ ? filterSupplier.map((v) => String(v.value)).join(',')
+ : undefined,
+ filter_by: 'do_date' as const,
+ start_date: filterStartDate || undefined,
+ end_date: filterEndDate || undefined,
+ page: currentPage,
+ limit: pageSize,
+ };
- // return ['debt-supplier-report', params];
- // }
- // : null,
- // ([, params]) =>
- // FinanceApi.getDebtSupplierReport(
- // params.supplier_id,
- // params.filter_by,
- // params.start_date,
- // params.end_date,
- // params.page,
- // params.limit
- // )
- // );
- const { data: debtSupplier, isLoading } = useSWR(FinanceApi.basePath, () =>
- FinanceApi.getDebtSupplierReport()
+ return ['debt-supplier-report', params];
+ }
+ : null,
+ ([, params]) =>
+ FinanceApi.getDebtSupplierReport(
+ params.supplier_id,
+ params.filter_by,
+ params.start_date,
+ params.end_date,
+ params.page,
+ params.limit
+ )
);
+ // const { data: debtSupplier, isLoading } = useSWR(FinanceApi.basePath, () =>
+ // FinanceApi.getDebtSupplierReport()
+ // );
const data: DebtSupplier[] = useMemo(
() =>
@@ -391,7 +392,7 @@ const DebtSupplierTab = () => {
<>
@@ -421,7 +422,7 @@ const DebtSupplierTab = () => {
- {/* {!isSubmitted ? (
+ {!isSubmitted ? (
Silakan klik tombol Filter untuk mengatur filter dan menampilkan
data.
@@ -434,44 +435,59 @@ const DebtSupplierTab = () => {
Tidak ada data yang dapat ditampilkan...
- ) : ( */}
- {data.map((supplierReport) => {
- return (
-
- 0}
- className={{
- containerClassName: 'w-full',
- tableWrapperClassName: 'overflow-x-auto mt-4',
- tableClassName: 'w-full table-auto text-sm',
- headerRowClassName: 'border-b border-b-gray-200 bg-gray-50',
- headerColumnClassName:
- 'px-4 py-3 text-xs font-semibold text-gray-700 text-left border border-gray-200',
- bodyRowClassName:
- 'hover:bg-gray-50 transition-colors border-b border-l border-r border-b-gray-200 border-l-gray-200 border-r-gray-200',
- bodyColumnClassName:
- 'px-4 py-3 text-xs text-gray-900 whitespace-nowrap',
- tableFooterClassName:
- 'bg-gray-100 font-semibold border border-gray-200',
- footerRowClassName: 'border-t-2 border-gray-300',
- footerColumnClassName:
- 'px-4 py-3 text-xs text-gray-900 whitespace-nowrap',
- paginationClassName: 'hidden',
- }}
- />
-
- );
- })}
+ ) : (
+ data.map((supplierReport) => {
+ return (
+
+ 0}
+ className={{
+ containerClassName: 'w-full',
+ tableWrapperClassName: 'overflow-x-auto mt-4',
+ tableClassName: 'w-full table-auto text-sm',
+ headerRowClassName: 'border-b border-b-gray-200 bg-gray-50',
+ headerColumnClassName:
+ 'px-4 py-3 text-xs font-semibold text-gray-700 text-left border border-gray-200',
+ bodyRowClassName:
+ 'hover:bg-gray-50 transition-colors border-b border-l border-r border-b-gray-200 border-l-gray-200 border-r-gray-200',
+ bodyColumnClassName:
+ 'px-4 py-3 text-xs text-gray-900 whitespace-nowrap',
+ tableFooterClassName:
+ 'bg-gray-100 font-semibold border border-gray-200',
+ footerRowClassName: 'border-t-2 border-gray-300',
+ footerColumnClassName:
+ 'px-4 py-3 text-xs text-gray-900 whitespace-nowrap',
+ paginationClassName: 'hidden',
+ }}
+ />
+
+ );
+ })
+ )}
+ {meta && data.length > 0 && (
+
+ )}
{/* Filter Modal */}
{
label='Filter Berdasarkan'
placeholder='Pilih Filter Berdasarkan'
options={dataTypeOptions}
- value={dataTypeOptions[0]}
+ value={filterDataType}
onChange={(val) => {
setFilterDataType(val ? (val as OptionType) : undefined);
}}
- isDisabled={true}
className={{ wrapper: 'w-full' }}
/>
diff --git a/src/config/route-permission.ts b/src/config/route-permission.ts
index 10a66f8c..5b230a43 100644
--- a/src/config/route-permission.ts
+++ b/src/config/route-permission.ts
@@ -117,7 +117,10 @@ export const ROUTE_PERMISSIONS: Record = {
'/report/expense/': ['lti.repport.expense.list'],
'/report/marketing/': ['lti.repport.delivery.list'],
'/report/production-result/': ['lti.repport.production_result.list'],
- '/report/finance/': ['lti.repport.finance.list'],
+ '/report/finance/': [
+ 'lti.repport.finance.list',
+ 'lti.repport.debtsupplier.list',
+ ],
// Inventory
'/inventory/adjustment/': ['lti.inventory.list'],
diff --git a/src/dummy/report/debt.supllier.dummy.json b/src/dummy/report/debt.supllier.dummy.json
deleted file mode 100644
index a8c85e36..00000000
--- a/src/dummy/report/debt.supllier.dummy.json
+++ /dev/null
@@ -1,168 +0,0 @@
-[
- {
- "supplier": {
- "id": 1,
- "name": "INDOVETRACO MAKMUR ABADI (IMA)"
- },
- "rows": [
- {
- "pr_number": "PR-MBU-02145",
- "po_number": "PO-MBU-02145",
- "pr_date": "2025-11-03",
- "po_date": "2025-11-05",
- "aging": 68,
- "area": {
- "id": 101,
- "name": "Banten 1"
- },
- "warehouse": {
- "id": 201,
- "name": "Gudang Area Banten"
- },
- "due_date": "2025-12-03",
- "due_status": "Sudah Jatuh Tempo",
- "total_price": 8658000,
- "payment_price": 0,
- "debt_price": -8658000,
- "status": "Belum Lunas",
- "travel_number": "-"
- }
- ],
- "total": {
- "aging": 68,
- "total_price": 8658000,
- "payment_price": 0,
- "debt_price": -8658000
- }
- },
- {
- "supplier": {
- "id": 2,
- "name": "MANDIRI BERLIAN UNGGAS (MANBU)"
- },
- "rows": [
- {
- "pr_number": "PR-MBU-01980",
- "po_number": "PO-MBU-01980",
- "pr_date": "2025-08-20",
- "po_date": "2025-09-18",
- "aging": 143,
- "area": {
- "id": 101,
- "name": "Banten 1"
- },
- "warehouse": {
- "id": 202,
- "name": "GUDANG CIANGSANA 5 (P16)"
- },
- "due_date": "2025-08-21",
- "due_status": "Sudah Jatuh Tempo",
- "total_price": 266700000,
- "payment_price": 0,
- "debt_price": -267245000,
- "status": "Belum Lunas",
- "travel_number": "-"
- },
- {
- "pr_number": "PR-MBU-01981",
- "po_number": "PO-MBU-01981",
- "pr_date": "2025-08-21",
- "po_date": "2025-09-18",
- "aging": 142,
- "area": {
- "id": 102,
- "name": "Priangan Timur 2"
- },
- "warehouse": {
- "id": 203,
- "name": "GUDANG SINGAPARNA 1 P.7"
- },
- "due_date": "2025-08-22",
- "due_status": "Sudah Jatuh Tempo",
- "total_price": 157480000,
- "payment_price": 0,
- "debt_price": -424725000,
- "status": "Belum Lunas",
- "travel_number": "-"
- }
- ],
- "total": {
- "aging": 143,
- "total_price": 424180000,
- "payment_price": 0,
- "debt_price": -692465000
- }
- },
- {
- "supplier": {
- "id": 3,
- "name": "SUMBER PROTEIN JAYA"
- },
- "rows": [
- {
- "pr_number": "PR-SPJ-00551",
- "po_number": "PO-SPJ-00551",
- "pr_date": "2025-12-01",
- "po_date": "2025-12-02",
- "aging": 39,
- "area": {
- "id": 103,
- "name": "Jawa Tengah"
- },
- "warehouse": {
- "id": 204,
- "name": "Gudang Solo"
- },
- "due_date": "2026-01-01",
- "due_status": "Mendekati Jatuh Tempo",
- "total_price": 45000000,
- "payment_price": 15000000,
- "debt_price": -30000000,
- "status": "Belum Lunas",
- "travel_number": "SJ-001/XII"
- }
- ],
- "total": {
- "aging": 39,
- "total_price": 45000000,
- "payment_price": 15000000,
- "debt_price": -30000000
- }
- },
- {
- "supplier": {
- "id": 4,
- "name": "CHAROEN POKPHAND INDONESIA"
- },
- "rows": [
- {
- "pr_number": "PR-CPI-0992",
- "po_number": "PO-CPI-0992",
- "pr_date": "2025-11-15",
- "po_date": "2025-11-16",
- "aging": 56,
- "area": {
- "id": 104,
- "name": "Jawa Timur"
- },
- "warehouse": {
- "id": 205,
- "name": "Gudang Surabaya"
- },
- "due_date": "2025-12-15",
- "due_status": "Sudah Jatuh Tempo",
- "total_price": 125000000,
- "payment_price": 0,
- "debt_price": -125000000,
- "status": "Belum Lunas",
- "travel_number": "-"
- }
- ],
- "total": {
- "aging": 56,
- "total_price": 125000000,
- "payment_price": 0,
- "debt_price": -125000000
- }
- }
-]
diff --git a/src/dummy/report/debt.supllier.dummy.ts b/src/dummy/report/debt.supllier.dummy.ts
deleted file mode 100644
index 63b87aef..00000000
--- a/src/dummy/report/debt.supllier.dummy.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Dummy data for DebtSupplier[]
- * Generated from: debt.supllier.dummy.json
- *
- * This file is auto-generated. Do not edit manually.
- */
-
-import { DebtSupplier } from '../../types/api/report/debt-supplier';
-import { BaseApiResponse } from '@/types/api/api-general';
-import dummyData from './debt.supllier.dummy.json';
-
-/**
- * Get dummy DebtSupplier[] data
- * @returns Promise with BaseApiResponse containing DebtSupplier[]
- */
-export async function getDebtSupllierDummy(): Promise<
- BaseApiResponse
-> {
- return new Promise((resolve) => {
- setTimeout(() => {
- resolve({
- code: 200,
- status: 'success',
- message: 'Data retrieved successfully',
- meta: {
- total_pages: 1,
- page: 1,
- limit: 10,
- total_results: dummyData.length,
- },
- data: dummyData as unknown as DebtSupplier[],
- });
- }, 500);
- });
-}
diff --git a/src/services/api/report/finance-report.ts b/src/services/api/report/finance-report.ts
index 5dfb78bb..1789565f 100644
--- a/src/services/api/report/finance-report.ts
+++ b/src/services/api/report/finance-report.ts
@@ -1,4 +1,3 @@
-import { getDebtSupllierDummy } from '@/dummy/report/debt.supllier.dummy';
import { BaseApiService } from '@/services/api/base';
import { BaseApiResponse } from '@/types/api/api-general';
import { CustomerPaymentReport } from '@/types/api/report/customer-payment';
@@ -47,7 +46,6 @@ export class FinanceApiService extends BaseApiService<
page?: number,
limit?: number
): Promise | undefined> {
- return (await getDebtSupllierDummy()) as BaseApiResponse;
return await this.customRequest>(
`debt-supplier`,
{
@@ -66,7 +64,3 @@ export class FinanceApiService extends BaseApiService<
}
export const FinanceApi = new FinanceApiService('reports');
-
-// export const FinanceApi = new FinanceApiService(
-// 'http://localhost:4010/api/reports/finance'
-// );