+
+
+
+
+
+
+ Export
+
+ }
+ align='end'
+ >
+
+
+
+
+
+ {/* {!isSubmitted ? (
+
+ Silakan klik tombol Filter untuk mengatur filter dan menampilkan
+ data.
+
+ ) : isLoading ? (
+
+
+
+ ) : data.length === 0 ? (
+
+ 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',
+ }}
+ />
+
+ );
+ })}
+
+
+ {/* Filter Modal */}
+
+
+ {/* Modal Header */}
+
+
+
+
Filter Data
+
+
+
+
+
+
+
{
+ setFilterStartDate(e.target.value);
+ setFilterErrors((prev) => ({ ...prev, start_date: '' }));
+ }}
+ className={{ wrapper: 'w-full' }}
+ />
+ {filterErrors.start_date && (
+
+ {filterErrors.start_date}
+
+ )}
+
+
+
+
{
+ setFilterEndDate(e.target.value);
+ setFilterErrors((prev) => ({ ...prev, end_date: '' }));
+ }}
+ className={{ wrapper: 'w-full' }}
+ />
+ {filterErrors.end_date && (
+
+ {filterErrors.end_date}
+
+ )}
+
+
+
+
+ {
+ setFilterSupplier(
+ Array.isArray(val) ? val : val ? [val] : []
+ );
+ }}
+ isLoading={isLoadingSuppliers}
+ isClearable
+ className={{ wrapper: 'w-full' }}
+ />
+
+
+
+
+
+
+
+ {/* Action Buttons */}
+
+
+
+
+
+
+ >
+ );
+};
+
+export default DebtSupplierTab;
diff --git a/src/dummy/report/debt.supllier.dummy.json b/src/dummy/report/debt.supllier.dummy.json
new file mode 100644
index 00000000..6afaa870
--- /dev/null
+++ b/src/dummy/report/debt.supllier.dummy.json
@@ -0,0 +1,168 @@
+[
+ {
+ "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
+ }
+ }
+]
\ No newline at end of file
diff --git a/src/dummy/report/debt.supllier.dummy.ts b/src/dummy/report/debt.supllier.dummy.ts
new file mode 100644
index 00000000..63b87aef
--- /dev/null
+++ b/src/dummy/report/debt.supllier.dummy.ts
@@ -0,0 +1,35 @@
+/**
+ * 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 e0acb6b0..5dfb78bb 100644
--- a/src/services/api/report/finance-report.ts
+++ b/src/services/api/report/finance-report.ts
@@ -1,6 +1,8 @@
+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';
+import { DebtSupplier } from '@/types/api/report/debt-supplier';
export class FinanceApiService extends BaseApiService<
CustomerPaymentReport,
@@ -36,6 +38,31 @@ export class FinanceApiService extends BaseApiService<
}
);
}
+
+ async getDebtSupplierReport(
+ supplier_id?: string,
+ filter_by?: 'do_date',
+ start_date?: string,
+ end_date?: string,
+ page?: number,
+ limit?: number
+ ): Promise | undefined> {
+ return (await getDebtSupllierDummy()) as BaseApiResponse;
+ return await this.customRequest>(
+ `debt-supplier`,
+ {
+ method: 'GET',
+ params: {
+ supplier_id: supplier_id,
+ filter_by: filter_by,
+ start_date: start_date,
+ end_date: end_date,
+ page: page,
+ limit: limit,
+ },
+ }
+ );
+ }
}
export const FinanceApi = new FinanceApiService('reports');
diff --git a/src/types/api/report/debt-supplier.d.ts b/src/types/api/report/debt-supplier.d.ts
new file mode 100644
index 00000000..f7342501
--- /dev/null
+++ b/src/types/api/report/debt-supplier.d.ts
@@ -0,0 +1,34 @@
+import { BaseMetadata } from '@/types/api/api-general';
+import { Area } from '@/types/api/master-data/area';
+import { Supplier } from '@/types/api/master-data/supplier';
+import { Warehouse } from '@/types/api/master-data/warehouse';
+
+export type DebtSupplier = BaseMetadata & {
+ supplier: Supplier;
+ rows: DebtRow[];
+ total: DebtTotal;
+};
+
+export type DebtRow = {
+ pr_number: string;
+ po_number: string;
+ pr_date: string;
+ po_date: string;
+ aging: number;
+ area: Area;
+ warehouse: Warehouse;
+ due_date: string;
+ due_status: string;
+ total_price: number;
+ payment_price: number;
+ debt_price: number;
+ status: string;
+ travel_number: string;
+};
+
+export type DebtTotal = {
+ aging: number;
+ total_price: number;
+ payment_price: number;
+ debt_price: number;
+};