procurement: add create and submit action

This commit is contained in:
lizerk 2026-05-22 14:04:47 +03:00
parent 2cd2263083
commit c4fd4cf032
2 changed files with 31 additions and 5 deletions

View File

@ -287,6 +287,7 @@ export default function ProcurementPage() {
handleLoadMore,
handleReject,
handleSave,
handleSaveAndSubmit,
handleStart,
handleSubmit,
isFinal,
@ -1160,11 +1161,26 @@ export default function ProcurementPage() {
<Modal isOpen={isModalOpen} onClose={closeModal} title={modalMode === "create" ? "Новая заявка на закупку" : "Редактировать заявку"} size="lg" footer={
<div className="flex flex-wrap items-center justify-end gap-2">
<button type="button" onClick={closeModal} className="app-action-secondary rounded-lg px-3 py-2 text-sm font-medium">Отмена</button>
<button type="button" onClick={handleSave} disabled={busyKey === "save"} className="app-action-primary rounded-lg px-3 py-2 text-sm font-medium disabled:opacity-60">
<button
type="button"
onClick={handleSave}
disabled={busyKey === "save" || busyKey === "save-submit"}
className={`${modalMode === "create" && form.requireApproval ? "app-action-secondary" : "app-action-primary"} rounded-lg px-3 py-2 text-sm font-medium disabled:opacity-60`}
>
{modalMode === "create"
? form.requireApproval ? "Создать черновик" : "Создать и направить в отдел"
: "Сохранить"}
</button>
{modalMode === "create" && form.requireApproval ? (
<button
type="button"
onClick={handleSaveAndSubmit}
disabled={busyKey === "save" || busyKey === "save-submit"}
className="app-action-primary rounded-lg px-3 py-2 text-sm font-medium disabled:opacity-60"
>
Отправить на согласование
</button>
) : null}
</div>
}>

View File

@ -426,9 +426,9 @@ export function useProcurementPage(user: User | null) {
return detail;
}, []);
const handleSave = useCallback(async () => {
const saveRequest = useCallback(async (submitAfterCreate = false) => {
try {
setBusyKey("save");
setBusyKey(submitAfterCreate ? "save-submit" : "save");
setActionError(null);
if (!form.title.trim()) {
@ -483,8 +483,13 @@ export function useProcurementPage(user: User | null) {
};
if (modalMode === "create") {
await apiClient.createProcurementRequest(payload);
setActionSuccess(form.requireApproval ? "Заявка создана (черновик)." : "Заявка направлена в отдел.");
const created = await apiClient.createProcurementRequest(payload) as ProcurementRequest;
if (submitAfterCreate && form.requireApproval && created.id) {
await apiClient.submitProcurementRequest(created.id);
setActionSuccess("Заявка создана и отправлена на согласование.");
} else {
setActionSuccess(form.requireApproval ? "Заявка создана (черновик)." : "Заявка направлена в отдел.");
}
setCreateOpen(false);
} else if (editingId) {
await apiClient.updateProcurementRequest(editingId, {
@ -506,6 +511,10 @@ export function useProcurementPage(user: User | null) {
}
}, [editingId, form, loadPage1, modalMode, resetForm]);
const handleSave = useCallback(() => saveRequest(false), [saveRequest]);
const handleSaveAndSubmit = useCallback(() => saveRequest(true), [saveRequest]);
const doAction = useCallback(async (key: string, action: () => Promise<unknown>, id: number, successMessage: string) => {
try {
setBusyKey(key);
@ -792,6 +801,7 @@ export function useProcurementPage(user: User | null) {
modalMode,
isModalOpen,
handleSave,
handleSaveAndSubmit,
handleLoadMore,
toggleExpand,
toggleComments,