import type { TableColumnsType } from 'antd'; import { Table } from 'antd'; import React from 'react'; interface DataType { key: React.Key; subSidiaries: string; extractionDate: string; snOrImeiNumber: number; invoiceNumber: number; totalImages: number; successfulNumber: number; successfulPercentage: number; badNumber: number; badPercentage: number; snImeiAAR: number; // AAR: Average Accuracy Rate purchaseDateAAR: number; retailerNameAAR: number; snImeiAPT: number; // APT: Average Processing Time invoiceAPT: number; snImeiTC: number; // TC: transaction count invoiceTC: number; } const columns: TableColumnsType = [ { title: 'Subs', dataIndex: 'subSidiaries', key: 'subSidiaries', width: '100px', render: (_, record) => { if (record.subSidiaries === '+') return ''; return String(record.subSidiaries).toUpperCase(); }, filters: [ { text: 'ALL', value: 'ALL' }, { text: 'SEAU', value: 'SEAU' }, { text: 'SESP', value: 'SESP' }, { text: 'SME', value: 'SME' }, { text: 'SEPCO', value: 'SEPCO' }, { text: 'TSE', value: 'TSE' }, { text: 'SEIN', value: 'SEIN' }, ], filterMode: 'menu', onFilter: (value: string, record) => record.subSidiaries.includes(String(value).toUpperCase()), }, { title: 'OCR extraction date', dataIndex: 'extractionDate', key: 'extractionDate', width: '130px', render: (_, record) => { if (record.extractionDate.includes('Subtotal')) return ( {record.extractionDate} ); return record.extractionDate; }, filters: [{ text: 'Subtotal', value: 'Subtotal' }], filterMode: 'menu', onFilter: (value: string, record) => record.extractionDate.includes(value), }, { title: 'OCR Images', children: [ { title: 'SN/IMEI', dataIndex: 'snOrImeiNumber', key: 'snOrImeiNumber', width: '50px', }, { title: 'Invoice', dataIndex: 'invoiceNumber', key: 'invoiceNumber', width: '50px', }, ], }, { title: 'Total Images', dataIndex: 'totalImages', key: 'totalImages', width: '130px', }, { title: 'Image Quality', children: [ { title: 'Successful', dataIndex: 'successfulNumber', key: 'successfulNumber', width: '50px', }, { title: '% Successful', dataIndex: 'successfulPercentage', key: 'successfulPercentage', width: '120px', render: (_, record) => { return {(record.successfulPercentage * 100)?.toFixed(2)}; }, }, { title: 'Bad', dataIndex: 'badNumber', key: 'badNumber', width: '30px', }, { title: '% Bad', dataIndex: 'badPercentage', key: 'badPercentage', width: '60px', render: (_, record) => { const isAbnormal = record.badPercentage * 100 > 10; return ( {(record.badPercentage * 100)?.toFixed(2)} ); }, }, ], }, { title: 'Average accuracy rate (%) \n(※ character-based)', children: [ { title: 'IMEI / Serial no.', dataIndex: 'snImeiAAR', key: 'snImeiAAR', width: '130px', render: (_, record) => { const isAbnormal = record.snImeiAAR * 100 < 98; return ( {(record.snImeiAAR * 100)?.toFixed(2)} ); }, }, { title: 'Purchase date', dataIndex: 'purchaseDateAAR', key: 'purchaseDateAAR', width: '130px', render: (_, record) => { const isAbnormal = record.purchaseDateAAR * 100 < 98; return ( {(record.purchaseDateAAR * 100).toFixed(2)} ); }, }, { title: 'Retailer name', dataIndex: 'retailerNameAAR', key: 'retailerNameAAR', width: '130px', render: (_, record) => { const isAbnormal = record.retailerNameAAR * 100 < 98; return ( {(record.retailerNameAAR * 100)?.toFixed(2)} ); }, }, ], }, { title: 'Average Processing Time', children: [ { title: 'SN/IMEI', dataIndex: 'snImeiAPT', key: 'snImeiAPT', render: (_, record) => { const isAbnormal = record.snImeiAPT > 2; return ( {record?.snImeiAPT?.toFixed(2)} ); }, }, { title: 'Invoice', dataIndex: 'invoiceAPT', key: 'invoiceAPT', render: (_, record) => { const isAbnormal = record.invoiceAPT > 2; return ( {record?.invoiceAPT?.toFixed(2)} ); }, }, ], }, { title: 'Usage (Transaction Count)', children: [ { title: 'SN/IMEI', dataIndex: 'snImeiTC', key: 'snImeiTC', }, { title: 'Invoice', dataIndex: 'invoiceTC', key: 'invoiceTC', }, ], }, ]; interface ReportOverViewTableProps { isLoading: boolean; data: any; } const ReportOverViewTable: React.FC = ({ isLoading, data, }) => { const overviewDataResponse = data as any; const dataSubsRows = overviewDataResponse?.overview_data.map( (item, index) => { return { key: index, subSidiaries: item.subs, extractionDate: item.extraction_date, snOrImeiNumber: item.num_imei, invoiceNumber: item.num_invoice, totalImages: item.total_images, successfulNumber: item.images_quality.successful, successfulPercentage: item.images_quality.successful_percent, badNumber: item.images_quality.bad, badPercentage: item.images_quality.bad_percent, snImeiAAR: item.average_accuracy_rate.imei, purchaseDateAAR: item.average_accuracy_rate.purchase_date, retailerNameAAR: item.average_accuracy_rate.retailer_name, snImeiAPT: item.average_processing_time.imei, invoiceAPT: item.average_processing_time.invoice, snImeiTC: item.usage.imei, invoiceTC: item.usage.invoice, }; }, ); return (
); }; export default ReportOverViewTable;