82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
import { useEffect, useMemo, useState } from 'react';
|
|
import { getChecklist } from '../../services/api/consolidations';
|
|
import { message, Modal, Table, TableColumnsType } from 'antd';
|
|
import { ChecklistBackendShape, type IVersionCard } from '../../types/consolidations/version_members';
|
|
import { DownloadOutlined } from '@ant-design/icons';
|
|
import { buildChecklistColumns, getMarksItems } from './checklist_utils';
|
|
// import { useMe } from '../../auth/useMe';
|
|
|
|
type ChecklistProps = {
|
|
open: boolean;
|
|
onDownload: () => void;
|
|
consolidationData: IVersionCard;
|
|
onClose: () => void;
|
|
};
|
|
|
|
export default function ChecklistModal({ open, onDownload, consolidationData, onClose }: ChecklistProps) {
|
|
const [checklistData, setChecklistData] = useState<ChecklistBackendShape | null>(null);
|
|
|
|
const displayedData = useMemo(() => {
|
|
if (!checklistData) return;
|
|
const result = [];
|
|
for (const row of checklistData.rows) {
|
|
const rowObj = {
|
|
name: row.legal_entity_name,
|
|
inn: row.legal_entity_inn,
|
|
ofr: 'MISSING',
|
|
balance: 'MISSING',
|
|
};
|
|
for (const cell of row.cells) {
|
|
if (cell.document_type === 'OSV') {
|
|
const code = cell.account;
|
|
const key = `osv_${code}`;
|
|
rowObj[key] = cell.status;
|
|
} else if (cell.document_type === 'BALANCE') {
|
|
rowObj.balance = cell.status;
|
|
} else if (cell.document_type === 'OFR') {
|
|
rowObj.ofr = cell.status;
|
|
}
|
|
}
|
|
result.push(rowObj);
|
|
}
|
|
return result;
|
|
}, [checklistData]);
|
|
const columns: TableColumnsType = useMemo(() => {
|
|
if (!checklistData) return [];
|
|
return buildChecklistColumns(checklistData);
|
|
}, [checklistData]);
|
|
|
|
useEffect(() => {
|
|
async function fetchChecklist() {
|
|
if (!consolidationData.id || !open) return;
|
|
try {
|
|
const res = await getChecklist(consolidationData.id);
|
|
setChecklistData(res);
|
|
} catch (e) {
|
|
message.error(e.message);
|
|
}
|
|
}
|
|
fetchChecklist();
|
|
}, [open, consolidationData.id]);
|
|
return (
|
|
<Modal
|
|
width='100%'
|
|
open={open}
|
|
cancelText='Отмена'
|
|
onCancel={onClose}
|
|
title='Чеклист'
|
|
destroyOnHidden
|
|
onOk={() => {
|
|
onDownload();
|
|
onClose();
|
|
}}
|
|
okText='Скачать чек-лист'
|
|
okButtonProps={{ icon: <DownloadOutlined /> }}>
|
|
<div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
{getMarksItems()}
|
|
<Table columns={columns} dataSource={displayedData} pagination={false} />
|
|
</div>
|
|
</Modal>
|
|
);
|
|
}
|