diff --git a/src/claim-request-management/claim-request-management.service.ts b/src/claim-request-management/claim-request-management.service.ts index c751ba3..625cfbc 100644 --- a/src/claim-request-management/claim-request-management.service.ts +++ b/src/claim-request-management/claim-request-management.service.ts @@ -4216,24 +4216,28 @@ export class ClaimRequestManagementService { throw new ForbiddenException('Only the claim owner can view capture requirements'); } - // Helper to get part labels + // Build car-type aware outer-parts lookup (complete source: static catalog) + const selectedCarType = claimCase.vehicle?.carType as ClaimVehicleTypeV2 | undefined; + const catalogForType = + selectedCarType && OUTER_PARTS_BY_CAR_TYPE[selectedCarType] + ? OUTER_PARTS_BY_CAR_TYPE[selectedCarType] + : this.getOuterPartsCatalogV2(); + const catalogByKey = new Map(); + for (const item of catalogForType) { + if (!catalogByKey.has(item.key)) catalogByKey.set(item.key, item); + } + const getPartLabel = (key: string): { fa: string; en: string } => { - const labels = { - hood: { fa: 'کاپوت', en: 'Hood' }, - trunk: { fa: 'صندوق عقب', en: 'Trunk' }, - roof: { fa: 'سقف', en: 'Roof' }, - front_right_door: { fa: 'درب جلو راست', en: 'Front Right Door' }, - front_left_door: { fa: 'درب جلو چپ', en: 'Front Left Door' }, - rear_right_door: { fa: 'درب عقب راست', en: 'Rear Right Door' }, - rear_left_door: { fa: 'درب عقب چپ', en: 'Rear Left Door' }, - front_bumper: { fa: 'سپر جلو', en: 'Front Bumper' }, - rear_bumper: { fa: 'سپر عقب', en: 'Rear Bumper' }, - front_right_fender: { fa: 'گلگیر جلو راست', en: 'Front Right Fender' }, - front_left_fender: { fa: 'گلگیر جلو چپ', en: 'Front Left Fender' }, - rear_right_fender: { fa: 'گلگیر عقب راست', en: 'Rear Right Fender' }, - rear_left_fender: { fa: 'گلگیر عقب چپ', en: 'Rear Left Fender' }, - }; - return labels[key] || { fa: key, en: key }; + const catalogItem = catalogByKey.get(key); + if (catalogItem) { + const en = key + .replace(/([a-z])([A-Z])/g, "$1 $2") + .replace(/_/g, " ") + .trim() + .replace(/\b\w/g, (c) => c.toUpperCase()); + return { fa: catalogItem.titleFa, en }; + } + return { fa: key, en: key }; }; // Required documents: CAR_BODY needs 7 (damaged + green card); THIRD_PARTY needs 13 (add guilty_*) @@ -4287,11 +4291,40 @@ export class ClaimRequestManagementService { // Damaged parts from selected parts const selectedParts = claimCase.damage?.selectedParts || []; + const selectedOuterParts = Array.isArray(claimCase.damage?.selectedOuterParts) + ? claimCase.damage.selectedOuterParts + : []; + const selectedOuterPartByKey = new Map< + string, + { id?: number; side?: string } + >( + selectedOuterParts.map((p) => [ + p.key, + { + id: p.id, + side: p.side, + }, + ]), + ); + const damagedParts = selectedParts.map(partKey => { const label = getPartLabel(partKey); + const selectedMeta = selectedOuterPartByKey.get(partKey); + const catalogMeta = catalogByKey.get(partKey); + const side = selectedMeta?.side ?? catalogMeta?.side; + const sideFaMap: Record = { + left: "چپ", + right: "راست", + front: "جلو", + back: "عقب", + top: "بالا", + }; + const sideFa = side ? sideFaMap[side] : undefined; return { + id: selectedMeta?.id ?? catalogMeta?.id, key: partKey, - label_fa: label.fa, + side, + label_fa: sideFa ? `${label.fa} (${sideFa})` : label.fa, label_en: label.en, captured: !!hasCapture(claimCase.media?.damagedParts as any, partKey), };