fix: hide unlinked old activities from current work

Imported follow-ups with no person, company, or deal stayed on the board because only linked prior records were archived.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-15 13:02:01 +03:30
co-authored by Cursor
parent 6bff9d2888
commit 582733e2ea
4 changed files with 21 additions and 1 deletions
+7
View File
@@ -305,6 +305,13 @@ export class BillingService {
SELECT 1 FROM "Deal" AS d2
WHERE d2."id" = a."dealId" AND d2."importSource" = 'didar'
)
OR (
a."personId" IS NULL
AND a."companyId" IS NULL
AND a."dealId" IS NULL
AND a."dueAt" IS NOT NULL
AND a."dueAt" < ${cutoff}
)
)
)
)
+7
View File
@@ -34,6 +34,7 @@ function stillOpenAhead(now: Date): Prisma.ActivityWhereInput {
* فعالیت قبلی است اگر منبعش didar باشد،
* یا قبل از روشن شدن ماژول ساخته شده و به شخص/شرکت/معاملهٔ قبلی وصل باشد.
* معاملهٔ غیرقبلی مانع نمی‌شود؛ شخص قبلی (حتی اگر بعداً منبعش عوض شده) کافی است.
* فعالیت بدون شخص و شرکت و معامله هم اگر موعدش قبل از همان لحظه باشد قبلی است.
*/
function historicalActivity(cutoff: Date): Prisma.ActivityWhereInput {
return {
@@ -52,6 +53,12 @@ function historicalActivity(cutoff: Date): Prisma.ActivityWhereInput {
},
{ company: { importSource: PRIOR_IMPORT_SOURCE } },
{ deal: { importSource: PRIOR_IMPORT_SOURCE } },
{
personId: null,
companyId: null,
dealId: null,
dueAt: { lt: cutoff },
},
],
},
],
+6
View File
@@ -61,6 +61,12 @@ describe('بایگانی اطلاعات قبل', () => {
OR: [{ importSource: 'didar' }, { previousImportSource: 'didar' }],
},
});
assert.deepEqual(linked.OR[3], {
personId: null,
companyId: null,
dealId: null,
dueAt: { lt: cutoff.toISOString() },
});
assert.deepEqual(current.OR[1], { status: 'open', dueAt: { gt: now.toISOString() } });
const archive = JSON.parse(JSON.stringify(activityPriorWhere('archive', now, cutoff))) as {