login in dealer validated against the prniple dealer id

This commit is contained in:
laxman h 2026-03-26 21:11:34 +05:30
parent b76aa9b322
commit d6e86ff7fd
8 changed files with 42 additions and 24 deletions

View File

@ -1 +1 @@
import{a as s}from"./index-D9FSmDLr.js";import"./radix-vendor-CLtqm-Ae.js";import"./charts-vendor-CmYZJIYl.js";import"./utils-vendor-BTBPSQfW.js";import"./ui-vendor-DgwXkk2Y.js";import"./socket-vendor-TjCxX7sJ.js";import"./redux-vendor-tbZCm13o.js";import"./router-vendor-HW_ujxKo.js";async function m(n){return(await s.post(`/conclusions/${n}/generate`)).data.data}async function f(n,t){return(await s.post(`/conclusions/${n}/finalize`,{finalRemark:t})).data.data}async function d(n){var t;try{return(await s.get(`/conclusions/${n}`)).data.data}catch(o){if(((t=o.response)==null?void 0:t.status)===404)return null;throw o}}export{f as finalizeConclusion,m as generateConclusion,d as getConclusion}; import{a as s}from"./index-B4PRp9Lp.js";import"./radix-vendor-CLtqm-Ae.js";import"./charts-vendor-CmYZJIYl.js";import"./utils-vendor-BTBPSQfW.js";import"./ui-vendor-DgwXkk2Y.js";import"./socket-vendor-TjCxX7sJ.js";import"./redux-vendor-tbZCm13o.js";import"./router-vendor-HW_ujxKo.js";async function m(n){return(await s.post(`/conclusions/${n}/generate`)).data.data}async function f(n,t){return(await s.post(`/conclusions/${n}/finalize`,{finalRemark:t})).data.data}async function d(n){var t;try{return(await s.get(`/conclusions/${n}`)).data.data}catch(o){if(((t=o.response)==null?void 0:t.status)===404)return null;throw o}}export{f as finalizeConclusion,m as generateConclusion,d as getConclusion};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@
<!-- Preload essential fonts and icons --> <!-- Preload essential fonts and icons -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<script type="module" crossorigin src="/assets/index-D9FSmDLr.js"></script> <script type="module" crossorigin src="/assets/index-B4PRp9Lp.js"></script>
<link rel="modulepreload" crossorigin href="/assets/charts-vendor-CmYZJIYl.js"> <link rel="modulepreload" crossorigin href="/assets/charts-vendor-CmYZJIYl.js">
<link rel="modulepreload" crossorigin href="/assets/radix-vendor-CLtqm-Ae.js"> <link rel="modulepreload" crossorigin href="/assets/radix-vendor-CLtqm-Ae.js">
<link rel="modulepreload" crossorigin href="/assets/utils-vendor-BTBPSQfW.js"> <link rel="modulepreload" crossorigin href="/assets/utils-vendor-BTBPSQfW.js">
@ -21,7 +21,7 @@
<link rel="modulepreload" crossorigin href="/assets/socket-vendor-TjCxX7sJ.js"> <link rel="modulepreload" crossorigin href="/assets/socket-vendor-TjCxX7sJ.js">
<link rel="modulepreload" crossorigin href="/assets/redux-vendor-tbZCm13o.js"> <link rel="modulepreload" crossorigin href="/assets/redux-vendor-tbZCm13o.js">
<link rel="modulepreload" crossorigin href="/assets/router-vendor-HW_ujxKo.js"> <link rel="modulepreload" crossorigin href="/assets/router-vendor-HW_ujxKo.js">
<link rel="stylesheet" crossorigin href="/assets/index-qC8Q4GZ7.css"> <link rel="stylesheet" crossorigin href="/assets/index-BNFD-0wA.css">
</head> </head>
<body> <body>

View File

@ -33,6 +33,7 @@ export interface DealerInfo {
gstin?: string | null; gstin?: string | null;
pincode?: string | null; pincode?: string | null;
itemGroup?: string | null; itemGroup?: string | null;
parentCode?: string | null;
} }
/** /**
@ -112,6 +113,7 @@ export async function getAllDealers(searchTerm?: string, limit: number = 10): Pr
gstin: dealer.gst || null, gstin: dealer.gst || null,
pincode: dealer.showroomPincode || null, pincode: dealer.showroomPincode || null,
itemGroup: null, // Local dealer table doesn't have item group yet itemGroup: null, // Local dealer table doesn't have item group yet
parentCode: null,
}; };
}); });
} catch (error) { } catch (error) {
@ -138,9 +140,13 @@ export async function getDealerByCode(dealerCode: string): Promise<DealerInfo |
} }
// 2. Try to find in User table directly (Validation logic) // 2. Try to find in User table directly (Validation logic)
// One dealer can have multiple codes but they share one parentCode.
// If externalData has a parentcode, we check if there's a user record for that parentcode.
const userLookupCode = externalData?.parentcode || dealerCode;
const user = await User.findOne({ const user = await User.findOne({
where: { where: {
employeeNumber: dealerCode, employeeNumber: userLookupCode,
jobTitle: 'Dealer', jobTitle: 'Dealer',
isActive: true isActive: true
}, },
@ -149,11 +155,12 @@ export async function getDealerByCode(dealerCode: string): Promise<DealerInfo |
if (user) { if (user) {
logger.info(`[DealerService] Dealer found in User table: ${dealerCode}`); logger.info(`[DealerService] Dealer found in User table: ${dealerCode}`);
logger.info(`[DealerService] Dealer mapping found via code ${userLookupCode}: ${dealerCode}`);
return { return {
dealerId: user.userId, dealerId: user.userId,
userId: user.userId, userId: user.userId,
email: user.email, email: user.email,
dealerCode: user.employeeNumber || dealerCode, dealerCode: dealerCode, // Return the originally requested code
dealerName: externalData?.['dealer name'] || user.displayName || '', dealerName: externalData?.['dealer name'] || user.displayName || '',
displayName: user.displayName || '', displayName: user.displayName || '',
phone: externalData?.['dealer phone'] || (user as any).mobilePhone || user.phone || undefined, phone: externalData?.['dealer phone'] || (user as any).mobilePhone || user.phone || undefined,
@ -165,6 +172,7 @@ export async function getDealerByCode(dealerCode: string): Promise<DealerInfo |
state: externalData?.['re state code'] || null, state: externalData?.['re state code'] || null,
pincode: externalData?.pincode || null, pincode: externalData?.pincode || null,
itemGroup: externalData?.['item group'] || null, itemGroup: externalData?.['item group'] || null,
parentCode: externalData?.parentcode || null,
}; };
} }
@ -193,6 +201,7 @@ export async function getDealerByCode(dealerCode: string): Promise<DealerInfo |
state: externalData['re state code'], state: externalData['re state code'],
pincode: externalData.pincode, pincode: externalData.pincode,
itemGroup: externalData['item group'] || null, itemGroup: externalData['item group'] || null,
parentCode: externalData.parentcode || null,
}; };
} }
logger.warn(`[DealerService] Dealer not found in any source: ${dealerCode}`); logger.warn(`[DealerService] Dealer not found in any source: ${dealerCode}`);
@ -222,6 +231,7 @@ export async function getDealerByCode(dealerCode: string): Promise<DealerInfo |
gstin: externalData?.gstin || dealer.gst || null, gstin: externalData?.gstin || dealer.gst || null,
pincode: externalData?.pincode || dealer.showroomPincode || null, pincode: externalData?.pincode || dealer.showroomPincode || null,
itemGroup: externalData?.['item group'] || null, itemGroup: externalData?.['item group'] || null,
parentCode: externalData?.parentcode || null,
}; };
} catch (error) { } catch (error) {
logger.error('[DealerService] Error fetching dealer by code:', error); logger.error('[DealerService] Error fetching dealer by code:', error);
@ -284,6 +294,7 @@ export async function getDealerByEmail(email: string): Promise<DealerInfo | null
gstin: dealer.gst || null, gstin: dealer.gst || null,
pincode: dealer.showroomPincode || null, pincode: dealer.showroomPincode || null,
itemGroup: null, itemGroup: null,
parentCode: null,
}; };
} catch (error) { } catch (error) {
logger.error('[DealerService] Error fetching dealer by email:', error); logger.error('[DealerService] Error fetching dealer by email:', error);

View File

@ -126,8 +126,13 @@ export class DealerClaimService {
// 2. Map and validate dealer user // 2. Map and validate dealer user
const dealerCode = claimData.dealerCode; const dealerCode = claimData.dealerCode;
logger.info(`[DealerClaimService] Validating dealer for code: ${claimData.dealerCode}`); logger.info(`[DealerClaimService] Resolving dealer mapping for code: ${dealerCode}`);
const dealerUser = await validateDealerUser(claimData.dealerCode); // Fetch dealer info (this handles external lookup and resolves parentCode)
const dealerInfo = await findDealerLocally(dealerCode);
const userLookupCode = dealerInfo?.parentCode || dealerCode;
logger.info(`[DealerClaimService] Validating dealer user for lookup code: ${userLookupCode}`);
const dealerUser = await validateDealerUser(userLookupCode);
// Validate Dealer Item Group against Activity Credit Posting // Validate Dealer Item Group against Activity Credit Posting
const activityType = await ActivityType.findOne({ where: { title: claimData.activityType } }); const activityType = await ActivityType.findOne({ where: { title: claimData.activityType } });

View File

@ -16,6 +16,7 @@ export interface ExternalDealerResponse {
pincode: string | null; pincode: string | null;
'dealer email': string | null; 'dealer email': string | null;
'dealer phone': string | null; 'dealer phone': string | null;
parentcode?: string | null;
} }
export class DealerExternalService { export class DealerExternalService {
@ -76,7 +77,8 @@ export class DealerExternalService {
'store address': data['store address'] || null, 'store address': data['store address'] || null,
pincode: data.pincode || null, pincode: data.pincode || null,
'dealer email': data['dealer email'] || null, 'dealer email': data['dealer email'] || null,
'dealer phone': data['dealer phone'] || null 'dealer phone': data['dealer phone'] || null,
parentcode: data.parentcode || null
}; };
} catch (error) { } catch (error) {