- {allItems
- .filter((li) => !removedItems.has(li.id))
- .map((li) => {
- const m = materialById(materials, li.material_id);
- return (
-
-
-
- {formatMaterialTitle(m)}
-
-
- {fmtNum(li.quantity)} {li.unit}
-
-
- {projectOptions.length ? (
+ {/* بخش ۲: تخصیص اقلام */}
+
+ ۲. تخصیص اقلام به شرایط پرداخت
+
+ قلمی که میخرید را تیک بزنید؛ قلمی که نمیخرید را بدون تیک رها کنید تا از معامله حذف شود.
+
+
+ {allItems.map((li) => {
+ const removed = removedItems.has(li.id);
+ const m = materialById(materials, li.material_id);
+ return (
+
+
{
+ const next = new Set(removedItems);
+ if (e.target.checked) next.delete(li.id);
+ else next.add(li.id);
+ setRemovedItems(next);
+ }}
+ />
+
+
+ {formatMaterialTitle(m)}
+
+
+ {fmtNum(li.quantity)} {li.unit} × {groupCommas(li.unit_price, true)}
+
+
+
- ) : (
-
پروژهای ثبت نشده است.
- )}
+
+ );
+ })}
+ {active.length === 0 && (
+
+ ⚠️ همهی قلمها رد شدهاند — حداقل یک قلم را تیک بزنید.
- );
- })}
+ )}
+
+
+
+ {/* بخش ۳: تخصیص اقلام به پروژه */}
+
+ ۳. تخصیص اقلام به پروژهها
+
+ برای هر متریال خریداری شده، میتوانید پروژه مربوط به آن را مشخص کنید.
+
+
+ {allItems
+ .filter((li) => !removedItems.has(li.id))
+ .map((li) => {
+ const m = materialById(materials, li.material_id);
+ return (
+
+
+
+ {formatMaterialTitle(m)}
+
+
+ {fmtNum(li.quantity)} {li.unit}
+
+
+ {projectOptions.length ? (
+
+ ) : (
+
پروژهای در سیستم ثبت نشده است.
+ )}
+
+ );
+ })}
+
+
+
+ {/* بخش ۴: فاکتورها، پیشفاکتورها و تاریخ */}
+
+
+
فاکتورهای اصلی
+ api.files.upload(q.id, "invoice", f)}
+ onDelete={(a) =>
+ a.id &&
+ void api.files.remove(q.id, "invoice", a.id).catch((err) =>
+ toast.error(err instanceof Error ? err.message : "حذف فاکتور ناموفق بود"),
+ )
+ }
+ urlOf={(a) => (a.id ? api.files.downloadUrl(q.id, "invoice", a.id) : null)}
+ />
+
+
+
+
+
+
پیشفاکتورها
+ api.files.upload(q.id, "proforma", f)}
+ onDelete={(a) =>
+ a.id &&
+ void api.files.remove(q.id, "proforma", a.id).catch((err) =>
+ toast.error(err instanceof Error ? err.message : "حذف پیشفاکتور ناموفق بود"),
+ )
+ }
+ urlOf={(a) => (a.id ? api.files.downloadUrl(q.id, "proforma", a.id) : null)}
+ label="افزودن پیشفاکتور"
+ />
+
+
+
+
+
+
+
+
+
+