diff --git a/src/services/api/report/finance-report.ts b/src/services/api/report/finance-report.ts index 95a85b85..e5ec9b64 100644 --- a/src/services/api/report/finance-report.ts +++ b/src/services/api/report/finance-report.ts @@ -1,6 +1,9 @@ import { BaseApiService } from '@/services/api/base'; import { BaseApiResponse } from '@/types/api/api-general'; import { CustomerPaymentReport } from '@/types/api/report/customer-payment'; +import { httpClient } from '@/services/http/client'; +import { formatDate } from '@/lib/helper'; +import { BalanceMonitoringRow } from '@/types/api/report/balance-monitoring'; export class FinanceApiService extends BaseApiService< CustomerPaymentReport, @@ -11,6 +14,256 @@ export class FinanceApiService extends BaseApiService< super(basePath); } + async getBalanceMonitoringReport(params: { + start_date?: string; + end_date?: string; + customer_id?: string; + sales_id?: string; + sort_by?: string; + sort_order?: string; + page?: number; + limit?: number; + }): Promise | undefined> { + // TODO: Remove dummy data when BE is ready + const dummyRows: BalanceMonitoringRow[] = [ + { + customer_id: 1, + customer_name: 'PT Maju Bersama', + saldo_awal: 12500000, + penjualan_ayam_ekor: 450, + penjualan_ayam_kg: 1125.5, + penjualan_ayam_nominal: 22510000, + penjualan_telur_kuantitas: 300, + penjualan_telur_kg: 900, + penjualan_telur_nominal: 4500000, + penjualan_trading: 3000000, + pembayaran: 30000000, + aging: 15, + aging_rata_rata: 12, + saldo_akhir: 12510000, + }, + { + customer_id: 2, + customer_name: 'CV Sumber Rezeki', + saldo_awal: 8750000, + penjualan_ayam_ekor: 320, + penjualan_ayam_kg: 800, + penjualan_ayam_nominal: 16000000, + penjualan_telur_kuantitas: 150, + penjualan_telur_kg: 450, + penjualan_telur_nominal: 2250000, + penjualan_trading: 0, + pembayaran: 20000000, + aging: 7, + aging_rata_rata: 8, + saldo_akhir: 7000000, + }, + { + customer_id: 3, + customer_name: 'UD Karya Mandiri', + saldo_awal: 5000000, + penjualan_ayam_ekor: 600, + penjualan_ayam_kg: 1500, + penjualan_ayam_nominal: 30000000, + penjualan_telur_kuantitas: 0, + penjualan_telur_kg: 0, + penjualan_telur_nominal: 0, + penjualan_trading: 1500000, + pembayaran: 25000000, + aging: 30, + aging_rata_rata: 22, + saldo_akhir: 11500000, + }, + { + customer_id: 4, + customer_name: 'PT Sejahtera Abadi', + saldo_awal: 20000000, + penjualan_ayam_ekor: 100, + penjualan_ayam_kg: 250, + penjualan_ayam_nominal: 5000000, + penjualan_telur_kuantitas: 500, + penjualan_telur_kg: 1500, + penjualan_telur_nominal: 7500000, + penjualan_trading: 2000000, + pembayaran: 40000000, + aging: 45, + aging_rata_rata: 38, + saldo_akhir: -5500000, + }, + { + customer_id: 5, + customer_name: 'CV Berkah Jaya', + saldo_awal: 3200000, + penjualan_ayam_ekor: 200, + penjualan_ayam_kg: 500, + penjualan_ayam_nominal: 10000000, + penjualan_telur_kuantitas: 200, + penjualan_telur_kg: 600, + penjualan_telur_nominal: 3000000, + penjualan_trading: 500000, + pembayaran: 15000000, + aging: 10, + aging_rata_rata: 9, + saldo_akhir: 1700000, + }, + { + customer_id: 6, + customer_name: 'PT Harapan Makmur', + saldo_awal: 17000000, + penjualan_ayam_ekor: 780, + penjualan_ayam_kg: 1950, + penjualan_ayam_nominal: 39000000, + penjualan_telur_kuantitas: 400, + penjualan_telur_kg: 1200, + penjualan_telur_nominal: 6000000, + penjualan_trading: 4500000, + pembayaran: 50000000, + aging: 20, + aging_rata_rata: 17, + saldo_akhir: 16500000, + }, + { + customer_id: 7, + customer_name: 'UD Rejeki Lancar', + saldo_awal: 2000000, + penjualan_ayam_ekor: 50, + penjualan_ayam_kg: 125, + penjualan_ayam_nominal: 2500000, + penjualan_telur_kuantitas: 80, + penjualan_telur_kg: 240, + penjualan_telur_nominal: 1200000, + penjualan_trading: 0, + pembayaran: 5000000, + aging: 5, + aging_rata_rata: 6, + saldo_akhir: 700000, + }, + { + customer_id: 8, + customer_name: 'CV Putra Unggul', + saldo_awal: 9500000, + penjualan_ayam_ekor: 410, + penjualan_ayam_kg: 1025, + penjualan_ayam_nominal: 20500000, + penjualan_telur_kuantitas: 250, + penjualan_telur_kg: 750, + penjualan_telur_nominal: 3750000, + penjualan_trading: 1000000, + pembayaran: 28000000, + aging: 18, + aging_rata_rata: 15, + saldo_akhir: 6750000, + }, + { + customer_id: 9, + customer_name: 'PT Duta Poultry', + saldo_awal: 35000000, + penjualan_ayam_ekor: 1200, + penjualan_ayam_kg: 3000, + penjualan_ayam_nominal: 60000000, + penjualan_telur_kuantitas: 800, + penjualan_telur_kg: 2400, + penjualan_telur_nominal: 12000000, + penjualan_trading: 8000000, + pembayaran: 70000000, + aging: 60, + aging_rata_rata: 50, + saldo_akhir: -15000000, + }, + { + customer_id: 10, + customer_name: 'UD Sari Ayam', + saldo_awal: 6800000, + penjualan_ayam_ekor: 350, + penjualan_ayam_kg: 875, + penjualan_ayam_nominal: 17500000, + penjualan_telur_kuantitas: 0, + penjualan_telur_kg: 0, + penjualan_telur_nominal: 0, + penjualan_trading: 2500000, + pembayaran: 22000000, + aging: 12, + aging_rata_rata: 11, + saldo_akhir: 4800000, + }, + { + customer_id: 11, + customer_name: 'CV Nusa Ternak', + saldo_awal: 14200000, + penjualan_ayam_ekor: 530, + penjualan_ayam_kg: 1325, + penjualan_ayam_nominal: 26500000, + penjualan_telur_kuantitas: 350, + penjualan_telur_kg: 1050, + penjualan_telur_nominal: 5250000, + penjualan_trading: 3500000, + pembayaran: 35000000, + aging: 25, + aging_rata_rata: 20, + saldo_akhir: 14450000, + }, + { + customer_id: 12, + customer_name: 'PT Agro Sentosa', + saldo_awal: 4100000, + penjualan_ayam_ekor: 180, + penjualan_ayam_kg: 450, + penjualan_ayam_nominal: 9000000, + penjualan_telur_kuantitas: 120, + penjualan_telur_kg: 360, + penjualan_telur_nominal: 1800000, + penjualan_trading: 750000, + pembayaran: 12000000, + aging: 8, + aging_rata_rata: 9, + saldo_akhir: 3650000, + }, + ]; + + const page = Number(params.page) || 1; + const limit = Number(params.limit) || 10; + + return { + status: 'success', + message: 'Data retrieved successfully', + data: dummyRows, + meta: { + page, + limit, + total_results: dummyRows.length, + total_pages: 1, + }, + } as BaseApiResponse; + + // return await this.customRequest>( + // 'balance-monitoring', + // { method: 'GET', params } + // ); + } + + async exportBalanceMonitoringToPDF(initialQueryString: string) { + const params = new URLSearchParams(initialQueryString); + params.set('export', 'pdf'); + params.set('page', '1'); + params.set('limit', '99999999999'); + + const res = await httpClient( + `${this.basePath}/balance-monitoring?${params.toString()}`, + { method: 'GET', responseType: 'blob' } + ); + + const url = window.URL.createObjectURL(new Blob([res])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute( + 'download', + `monitoring-saldo-${formatDate(Date.now(), 'DD-MM-YYYY')}.pdf` + ); + document.body.appendChild(link); + link.click(); + link.remove(); + } + async getCustomerPaymentReport( customer_ids?: string, // TODO: Uncomment when BE is ready