89 lines
3.2 KiB
TypeScript
89 lines
3.2 KiB
TypeScript
import React, { useState, useEffect } from 'react';
|
||
import { Button, Card, Descriptions, Alert, App as AntdApp } from 'antd';
|
||
import { useGet, usePost } from '../../hooks/useApi';
|
||
|
||
interface TransferStatus {
|
||
id: number;
|
||
year: number;
|
||
completed_at: string;
|
||
status: string;
|
||
error_message?: string;
|
||
}
|
||
|
||
const YearEndManagement: React.FC = () => {
|
||
const [loading, setLoading] = useState(false);
|
||
const [lastTransfer, setLastTransfer] = useState<TransferStatus | null>(null);
|
||
const { message } = AntdApp.useApp();
|
||
// Используем `useGet` для получения статуса
|
||
const { data, error, execute: fetchStatus } = useGet<TransferStatus>('/year-end/status');
|
||
|
||
// Используем `usePost` для выполнения переноса
|
||
const { execute: transferData } = usePost('/year-end/transfer');
|
||
|
||
// Обновляем состояние, когда `data` загружено
|
||
useEffect(() => {
|
||
if (data) setLastTransfer(data);
|
||
}, [data]);
|
||
|
||
// Обработчик клика на кнопку переноса
|
||
const handleTransfer = async () => {
|
||
const currentYear = new Date().getFullYear();
|
||
const confirm = window.confirm(
|
||
`Вы уверены, что хотите выполнить перенос остатков за ${currentYear} год?`
|
||
);
|
||
|
||
if (!confirm) return;
|
||
|
||
setLoading(true);
|
||
try {
|
||
await transferData(); // Выполняем POST-запрос
|
||
message.success('Перенос остатков успешно выполнен');
|
||
fetchStatus(); // Обновляем статус
|
||
} catch {
|
||
message.error('Ошибка при переносе остатков');
|
||
} finally {
|
||
setLoading(false);
|
||
}
|
||
};
|
||
|
||
return (
|
||
<Card title="Управление переносом остатков">
|
||
<Alert
|
||
message="Внимание"
|
||
description="Перенос остатков создаст новые категории для следующего года и перенесет все товары с ненулевым количеством."
|
||
type="warning"
|
||
showIcon
|
||
style={{ marginBottom: 16 }}
|
||
/>
|
||
|
||
{error && <Alert message="Ошибка" description={error} type="error" showIcon />}
|
||
|
||
{lastTransfer && (
|
||
<Descriptions title="Последний перенос" bordered style={{ marginBottom: 16 }}>
|
||
<Descriptions.Item label="Год">{lastTransfer.year}</Descriptions.Item>
|
||
<Descriptions.Item label="Дата выполнения">
|
||
{new Date(lastTransfer.completed_at).toLocaleString()}
|
||
</Descriptions.Item>
|
||
<Descriptions.Item label="Статус">{lastTransfer.status}</Descriptions.Item>
|
||
{lastTransfer.error_message && (
|
||
<Descriptions.Item label="Ошибка">
|
||
{lastTransfer.error_message}
|
||
</Descriptions.Item>
|
||
)}
|
||
</Descriptions>
|
||
)}
|
||
|
||
<Button
|
||
type="primary"
|
||
onClick={handleTransfer}
|
||
loading={loading}
|
||
disabled={loading}
|
||
>
|
||
Выполнить перенос остатков
|
||
</Button>
|
||
</Card>
|
||
);
|
||
};
|
||
|
||
export default YearEndManagement;
|