fix(crm): mesghal by metal, jalali fit, scoped group filters

This commit is contained in:
2026-10-24 22:25:27 +03:30
parent f8128ebe3a
commit 48815852fc
8 changed files with 202 additions and 27 deletions
+46 -3
View File
@@ -130,6 +130,34 @@ export function invoiceMetalCounts(rows: Record<string, unknown>[]): {
return { gold, silver };
}
/**
* فلزهای وزنی سند برای برچسب مثقال — ردیف‌های صرفاً مالی (وزن ۰) نادیده گرفته می‌شوند
* چون Jens_Felez آن‌ها اغلب طلا (۰) است.
*/
export function invoiceMesghalMetals(rows: Record<string, unknown>[]): {
gold: boolean;
silver: boolean;
} {
let gold = false;
let silver = false;
for (const r of rows) {
if (numOrZero(r.Vazn) === 0 && numOrZero(r.TabdilVazn) === 0) continue;
const m = invoiceRowMetal(r);
if (m === 'gold') gold = true;
else if (m === 'silver') silver = true;
}
return { gold, silver };
}
/** برچسب‌های خط خالی مثقال برای نوشتن دستی روی فاکتور */
export function invoiceMesghalLabels(rows: Record<string, unknown>[]): string[] {
const { gold, silver } = invoiceMesghalMetals(rows);
const labels: string[] = [];
if (gold) labels.push('قیمت یک مثقال طلا:');
if (silver) labels.push('قیمت یک مثقال نقره خام:');
return labels;
}
/**
* عنوان ستون وزن تبدیلی — در ته‌حساب معمولاً نقره به ۹۲۵ و طلا به ۷۵۰ تبدیل می‌شود.
* سند مخلوط → «وزن تبدیلی».
@@ -285,8 +313,17 @@ export function printTahesabInvoicePdf(opts: {
: '—';
const codeFa =
moshtariCode != null ? toFaDigits(String(moshtariCode)) : '—';
// ته‌حساب قیمت مثقال نقرهٔ خامِ لحظهٔ ثبت را در سند برنمی‌گرداند؛ خط خالی برای نوشتن دستی
const mesghalHtml = `<div class="mesghal-box"><span class="ib-k">قیمت یک مثقال نقره خام:</span><span class="mesghal-blank"></span></div>`;
// ته‌حساب قیمت مثقال لحظهٔ ثبت را برنمی‌گرداند؛ خط خالی برای نوشتن دستی (بر اساس فلز سند)
const mesghalLabels = invoiceMesghalLabels(group.rows);
const mesghalHtml =
mesghalLabels.length > 0
? `<div class="mesghal-box">${mesghalLabels
.map(
(label) =>
`<div class="mesghal-line"><span class="ib-k">${escapeHtml(label)}</span><span class="mesghal-blank"></span></div>`,
)
.join('')}</div>`
: `<div class="mesghal-box"></div>`;
const accountHtml = `<div class="account-box">
<div class="acc-line">
<span class="acc-title">حساب قبل:</span>
@@ -553,11 +590,17 @@ export function printTahesabInvoicePdf(opts: {
border-radius: 10px;
background: transparent;
padding: 8px 12px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 8px;
min-height: 2.5rem;
}
.mesghal-line {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
min-height: 2.5rem;
}
.mesghal-blank {
flex: 1;