diff --git a/frontend/src/pages/Dashboard/AcceptModal.tsx b/frontend/src/pages/Dashboard/AcceptModal.tsx index f937a27..b2af9dc 100644 --- a/frontend/src/pages/Dashboard/AcceptModal.tsx +++ b/frontend/src/pages/Dashboard/AcceptModal.tsx @@ -24,7 +24,6 @@ import { import { MilestoneRow } from "../../components/MilestoneRow"; import { FileList } from "../../components/FileList"; import { JalaliDatePicker } from "../../components/JalaliDatePicker"; -import { MultiSelectCombobox } from "../../components/MultiSelectCombobox"; interface CardDraft { domId: string; @@ -54,7 +53,7 @@ export function AcceptModal({ quoteId, onClose }: AcceptModalProps) { const [removedItems, setRemovedItems] = useState>(new Set()); const [assignments, setAssignments] = useState>({}); // تخصیص هر قلم به پروژه‌ها (نام‌ها) - const [itemProjectsSel, setItemProjectsSel] = useState>({}); + const [itemProjectsSel, setItemProjectsSel] = useState>({}); // تاریخ و زمان پذیرش — پیش‌فرض الان const [acceptDate, setAcceptDate] = useState(() => new Date().toISOString()); const [ready, setReady] = useState(false); @@ -72,17 +71,15 @@ export function AcceptModal({ quoteId, onClose }: AcceptModalProps) { }); setRemovedItems(rem); setAssignments({}); - // پروژه‌های هر قلم — از تخصیص‌های قبلی، وگرنه پروژه‌های سطح پیشنهاد - const projSel: Record = {}; + // پروژه‌ی هر قلم — تخصیصِ تکی: از تخصیص قبلی قلم، وگرنه اولین پروژه‌ی پیشنهاد + const projSel: Record = {}; q.line_items.forEach((li) => { const names = (li.projects || []).map((p) => p.name).filter(Boolean); projSel[li.id] = names.length - ? names + ? names[0] : q.projects && q.projects.length - ? [...q.projects] - : q.project - ? [q.project] - : []; + ? q.projects[0] + : q.project || ""; }); setItemProjectsSel(projSel); setReady(true); @@ -221,14 +218,14 @@ export function AcceptModal({ quoteId, onClose }: AcceptModalProps) { if (t.status === "accepted" && !usedIds.has(t.id)) t.status = "offered"; }); - // پروژه‌های هر قلم + همگام‌سازی پروژه‌های سطح پیشنهاد + // پروژه‌ی هر قلم (تکی) + همگام‌سازی پروژه‌های سطح پیشنهاد const projUnion = new Set(); next.line_items.forEach((li) => { if (li.rejected) return; - const names = itemProjectsSel[li.id]; - if (names === undefined) return; - li.projects = names.map((n) => ({ id: "", name: n })); - li.projects.forEach((p) => projUnion.add(p.name)); + const name = itemProjectsSel[li.id]; + if (name === undefined) return; + li.projects = name ? [{ id: "", name }] : []; + if (name) projUnion.add(name); }); next.projects = [...projUnion]; next.project = next.projects[0] || ""; @@ -342,11 +339,11 @@ export function AcceptModal({ quoteId, onClose }: AcceptModalProps) { - {/* تخصیص قلم‌ها به پروژه‌ها */} + {/* تخصیص قلم‌ها به پروژه */}
-
تخصیص قلم‌ها به پروژه‌ها:
+
پروژه‌ی هر قلم:
- برای هر متریال مشخص کنید به کدام پروژه (ها) تعلق می‌گیرد. + برای هر متریال فقط یک پروژه انتخاب می‌شود — مثل شرایط پرداخت.
{allItems @@ -365,12 +362,28 @@ export function AcceptModal({ quoteId, onClose }: AcceptModalProps) { {fmtNum(li.quantity)} {li.unit}
- setItemProjectsSel((s) => ({ ...s, [li.id]: names }))} - options={projectOptions} - placeholder="انتخاب پروژه..." - /> + {projectOptions.length ? ( + + ) : ( +
پروژه‌ای ثبت نشده است.
+ )}
); })}