forked from Yara724/api
Fixed car components
This commit is contained in:
@@ -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 }));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user