diff --git a/frontend/src/app/procurement/page.tsx b/frontend/src/app/procurement/page.tsx index 22836d3c..0904e9fd 100644 --- a/frontend/src/app/procurement/page.tsx +++ b/frontend/src/app/procurement/page.tsx @@ -43,6 +43,7 @@ import { Modal } from "@/components/ui"; const statusMeta: Record = { draft: { label: "Черновик", cls: "app-badge" }, + waiting: { label: "Ожидает", cls: "app-feedback-warning" }, pending: { label: "На согласовании", cls: "app-feedback-warning" }, approved: { label: "Одобрено", cls: "app-feedback-success" }, in_progress: { label: "В работе", cls: "app-selected" }, @@ -147,7 +148,7 @@ function ProcurementRequestActionButtons({ const status = String(request.status || "").toLowerCase(); const isDraft = status === "draft"; const isPending = status === "pending"; - const isApproved = status === "approved"; + const canStartWork = (status === "approved" || status === "waiting") && !request.executor; const isInProgress = status === "in_progress"; const canApproveThis = Boolean(request.can_current_user_approve); @@ -207,7 +208,7 @@ function ProcurementRequestActionButtons({ ) : null} - {isApproved && !request.executor ? ( + {canStartWork ? (
- {getDeptName(req)} + Отдел: {getDeptName(req)} + {req.processing_department_name ? ( + Отдел-исполнитель: {req.processing_department_name} + ) : null} {fmt(req.created_at)} {getRequestAmount(req) && {money(getRequestAmount(req))}}
@@ -784,6 +788,11 @@ export default function ProcurementPage() { {(itemsCount > 0 || approvalsCount > 0) && (
+ {resolvedDetail.fulfillment_status_display ? ( + + {resolvedDetail.fulfillment_status_display} + + ) : null} {itemsCount > 0 && ( {itemsCount} поз. @@ -872,6 +881,10 @@ export default function ProcurementPage() { currentUserId={user?.id} request={resolvedDetail} displayUserName={displayUserName} + canProcessItems={["waiting", "in_progress"].includes(st)} + busyKey={busyKey} + onUpdateItem={handleUpdateItem} + onMarkAllReceived={handleMarkAllReceived} footer={(
- {getDeptName(selectedRequest)} + Отдел: {getDeptName(selectedRequest)} + {selectedRequest.processing_department_name ? ( + Отдел-исполнитель: {selectedRequest.processing_department_name} + ) : null} {fmt(selectedRequest.created_at)} {getRequestAmount(selectedRequest) ? ( {money(getRequestAmount(selectedRequest))} ) : null} + {selectedRequest.fulfillment_status_display ? ( + + {selectedRequest.fulfillment_status_display} + + ) : null}
@@ -978,6 +999,10 @@ export default function ProcurementPage() { currentUserId={user?.id} request={selectedRequest} displayUserName={displayUserName} + canProcessItems={["waiting", "in_progress"].includes(String(selectedRequest.status || "").toLowerCase())} + busyKey={busyKey} + onUpdateItem={handleUpdateItem} + onMarkAllReceived={handleMarkAllReceived} footer={(
}> @@ -1167,6 +1194,25 @@ export default function ProcurementPage() { />
+ + {/* Отдел + Срочность */}
+ {!form.requireApproval ? ( + ({ id: d.id, name: d.name }))} + selectedId={form.processing_department} + onSelect={(id) => setForm((f) => ({ ...f, processing_department: id }))} + /> + ) : null} + {/* ── Items ── */}
@@ -1254,6 +1310,30 @@ export default function ProcurementPage() { placeholder="Информация о поставщике (необязательно)" className="app-input w-full rounded-lg px-3 py-2 text-sm" /> +