feat(FE-365): create Marketing Report API Service

This commit is contained in:
ValdiANS
2025-12-18 16:18:11 +07:00
parent 86cef78a12
commit cf41fbfdaf
@@ -0,0 +1,75 @@
import * as XLSX from 'xlsx';
import toast from 'react-hot-toast';
import { BaseApiService } from '@/services/api/base';
import { httpClient, httpClientFetcher } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
import { DailyMarketingReport } from '@/types/api/report/marketing';
import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
import { formatDate, sleep } from '@/lib/helper';
export class MarketingReportApiService extends BaseApiService<
DailyMarketingReport,
unknown,
unknown
> {
constructor(basePath: string = '/reports/marketings/daily-marketing') {
super(basePath);
}
async getAllDailyMarketingFetcher(
endpoint: string
): Promise<BaseApiResponse<DailyMarketingReport>> {
return await httpClientFetcher<BaseApiResponse<DailyMarketingReport>>(
endpoint
);
}
async exportDailyMarketingToExcel(initialQueryString: string) {
const params = new URLSearchParams(initialQueryString);
params.set('limit', '9999999');
const queryString = `?${params.toString()}`;
try {
const dailyMarketingsReport = await httpClientFetcher<
BaseApiResponse<DailyMarketingReport>
>(`${this.basePath}${queryString}`);
if (isResponseError(dailyMarketingsReport)) {
toast.error('Gagal melakukan export penjualan harian! Coba lagi.');
return;
}
const rows = dailyMarketingsReport.data.rows;
const formattedRows = [];
for (let i = 0; i < rows.length; i++) {
formattedRows.push({
...rows[i],
created_user: rows[i].created_user.name,
created_at: formatDate(rows[i].created_at, 'YYYY-MM-DD'),
updated_at: formatDate(rows[i].updated_at, 'YYYY-MM-DD'),
warehouse: rows[i].warehouse.name,
customer: rows[i].customer.name,
product: rows[i].product.name,
});
}
const ws = XLSX.utils.json_to_sheet(formattedRows);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'laporan-penjualan-harian');
// triggers download in browser
XLSX.writeFile(wb, 'laporan-penjualan-harian.xlsx');
} catch (error) {
toast.error('Gagal melakukan export penjualan harian! Coba lagi.');
}
}
}
export const MarketingReportApi = new MarketingReportApiService(
'/reports/marketings/daily-marketing'
);