mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 07:45:47 +00:00
feat(FE-365): create Marketing Report API Service
This commit is contained in:
@@ -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'
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user