From ab1e64c87b32b9be64e3460b95ab94162713233d Mon Sep 17 00:00:00 2001 From: SepehrYahyaee <7heycallmegray@gmail.com> Date: Mon, 3 Aug 2026 19:00:29 +0330 Subject: [PATCH] Fixed car components --- .../claim-request-management.service.ts | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/claim-request-management/claim-request-management.service.ts b/src/claim-request-management/claim-request-management.service.ts index 1ce24f3..4a0dc27 100644 --- a/src/claim-request-management/claim-request-management.service.ts +++ b/src/claim-request-management/claim-request-management.service.ts @@ -18,7 +18,6 @@ import { basename, resolve } from "node:path"; import FormData = require("form-data"); import { AiService } from "src/ai/ai.service"; import { buildFileLink, resolveStoredFileUrl } from "src/helpers/urlCreator"; -import { jalaliToGregorianDate } from "src/helpers/date-jalali"; import { RequestManagementDbService } from "src/request-management/entities/db-service/request-management.db.service"; import { ReqBlameStatus } from "src/Types&Enums/blame-request-management/status.enum"; import { ReqClaimStatus } from "src/Types&Enums/claim-request-management/status.enum"; @@ -245,6 +244,32 @@ interface FanavaranAttachmentCandidate { submittedFileId?: unknown; } +/** + * Returns today's Jalali date as a packed integer YYYYMMDD for cheap comparison. + * Uses the browser/Node `fa-IR` locale which is available everywhere Node runs. + */ +function jalaliDateToInt(d: Date): number { + const parts = d + .toLocaleDateString("fa-IR", { year: "numeric", month: "2-digit", day: "2-digit" }) + .split("/") + .map((p) => parseInt(p.replace(/[۰-۹]/g, (c) => String(c.charCodeAt(0) - 0x06f0)), 10)); + return parts[0] * 10000 + parts[1] * 100 + parts[2]; +} + +/** + * Parses a Jalali date string in "YYYY/MM/DD" or "YYYY-MM-DD" form to the same + * packed integer YYYYMMDD. Returns null when the string cannot be parsed. + */ +function jalaliStringToInt(raw: string): number | null { + const m = raw.match(/(\d{4})[\/\-](\d{1,2})[\/\-](\d{1,2})/); + if (!m) return null; + const y = parseInt(m[1], 10); + const mo = parseInt(m[2], 10); + const d = parseInt(m[3], 10); + if (!y || !mo || !d) return null; + return y * 10000 + mo * 100 + d; +} + const FANAVARAN_ACCIDENT_LOCATION_ADDRESS = "استان تهران شهر تهران"; const FANAVARAN_DEFAULT_ACCIDENT_CAUSE_ID = 6; const FANAVARAN_DEFAULT_ACCIDENT_LEVEL = 5456; @@ -578,8 +603,9 @@ export class ClaimRequestManagementService { async getOuterPartsCatalogV2(): Promise { const clientKey = resolveFanavaranClientKey(); const rows = await this.getFanavaranLookupRows(clientKey, "car-components"); - const today = new Date(); - today.setHours(0, 0, 0, 0); + // Build today's Jalali date as a comparable integer (YYYYMMDD) so we can + // filter expired rows without any Jalali→Gregorian conversion risk. + const todayJalaliInt = jalaliDateToInt(new Date()); return rows .filter( (r): r is { Id: number; Caption: string } => @@ -591,9 +617,9 @@ export class ClaimRequestManagementService { .filter((r) => { const toDate = (r as any).ToDate; if (!toDate) return true; - const gregorian = jalaliToGregorianDate(String(toDate)); - if (!gregorian) return true; - return new Date(gregorian) >= today; + const toDateInt = jalaliStringToInt(String(toDate)); + if (toDateInt === null) return true; + return toDateInt >= todayJalaliInt; }) .map((r) => ({ id: r.Id, label_fa: r.Caption })); }