Merge pull request 'Fixed car components' (#252) from s.yahyaee/yara724-api:main into main

Reviewed-on: Yara724/api#252
This commit is contained in:
2026-08-03 19:01:01 +03:30

View File

@@ -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<OuterPartCatalogItemDto[]> {
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 }));
}