dealer made to validate with common principle code
This commit is contained in:
parent
67d73878c9
commit
3769dc9dc0
@ -208,6 +208,8 @@ export function ClaimManagementWizard({ onBack, onSubmit }: ClaimManagementWizar
|
|||||||
city: result['re city'] || result.city || '',
|
city: result['re city'] || result.city || '',
|
||||||
state: result['re state code'] || result.state || '',
|
state: result['re state code'] || result.state || '',
|
||||||
isLoggedIn: true, // We'll verify this in the next step
|
isLoggedIn: true, // We'll verify this in the next step
|
||||||
|
parentCode: result.parentcode || null,
|
||||||
|
itemGroup: result['item group'] || null,
|
||||||
};
|
};
|
||||||
setDealerSearchResults([mappedDealer]);
|
setDealerSearchResults([mappedDealer]);
|
||||||
} else {
|
} else {
|
||||||
@ -589,11 +591,20 @@ export function ClaimManagementWizard({ onBack, onSubmit }: ClaimManagementWizar
|
|||||||
<SelectTrigger className="mt-2 !h-12 data-[size=default]:!h-12" id="activityType">
|
<SelectTrigger className="mt-2 !h-12 data-[size=default]:!h-12" id="activityType">
|
||||||
<SelectValue placeholder={loadingActivityTypes ? "Loading activity types..." : "Select activity type"} />
|
<SelectValue placeholder={loadingActivityTypes ? "Loading activity types..." : "Select activity type"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent className="max-h-80">
|
||||||
{activityTypes.length > 0 ? (
|
{activityTypes.length > 0 ? (
|
||||||
activityTypes.map((type) => (
|
activityTypes.map((type) => (
|
||||||
<SelectItem key={type.activityTypeId} value={type.title}>
|
<SelectItem key={type.activityTypeId} value={type.title} className="focus:bg-blue-600 focus:text-white group">
|
||||||
|
<div className="flex flex-col py-0.5">
|
||||||
|
<span className="font-medium text-[13px] leading-[1.1] text-gray-900 group-focus:text-white">
|
||||||
{type.title}
|
{type.title}
|
||||||
|
</span>
|
||||||
|
<div className="flex items-center gap-1 text-[9px] text-gray-500 group-focus:text-blue-100 uppercase font-bold tracking-wider leading-none mt-0.5">
|
||||||
|
{type.creditPostingOn && <span>{type.creditPostingOn}</span>}
|
||||||
|
{type.creditPostingOn && type.taxationType && <span className="opacity-40 select-none">•</span>}
|
||||||
|
{type.taxationType && <span>{type.taxationType}</span>}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
@ -662,19 +673,22 @@ export function ClaimManagementWizard({ onBack, onSubmit }: ClaimManagementWizar
|
|||||||
<div className="font-medium text-gray-900">
|
<div className="font-medium text-gray-900">
|
||||||
{dealer.dealerName || dealer.displayName}
|
{dealer.dealerName || dealer.displayName}
|
||||||
</div>
|
</div>
|
||||||
<div className="text-xs text-gray-600">
|
<div className="text-[10px] text-gray-600 mt-0.5 font-medium flex items-center gap-1.5">
|
||||||
<span className="font-mono">{dealer.dealerCode}</span>
|
<span className="font-mono">{dealer.dealerCode}</span>
|
||||||
{dealer.email && (
|
{dealer.email && (
|
||||||
<>
|
<>
|
||||||
<span className="mx-1">•</span>
|
<span className="opacity-40">•</span>
|
||||||
<span>{dealer.email}</span>
|
<span>{dealer.email}</span>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{dealer.city && dealer.state && (
|
<div className="text-[10px] text-gray-500 mt-0.5">
|
||||||
<div className="text-xs text-gray-500">
|
|
||||||
{dealer.city}, {dealer.state}
|
{dealer.city}, {dealer.state}
|
||||||
</div>
|
</div>
|
||||||
|
{dealer.itemGroup && (
|
||||||
|
<div className="text-[9px] text-blue-600 font-bold uppercase tracking-wider mt-0.5">
|
||||||
|
{dealer.itemGroup}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="ml-2 flex-shrink-0">
|
<div className="ml-2 flex-shrink-0">
|
||||||
|
|||||||
@ -47,6 +47,7 @@ interface CostBreakdownItem {
|
|||||||
amount: number;
|
amount: number;
|
||||||
gstAmt?: number;
|
gstAmt?: number;
|
||||||
totalAmt?: number;
|
totalAmt?: number;
|
||||||
|
hsnCode?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface RoleBasedVisibility {
|
interface RoleBasedVisibility {
|
||||||
@ -320,12 +321,32 @@ export function ProcessDetailsCard({
|
|||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5 pt-1">
|
<div className="space-y-1.5 pt-1">
|
||||||
{estimatedBudgetBreakdown.map((item, index) => (
|
{estimatedBudgetBreakdown.map((item, index) => (
|
||||||
<div key={index} className="flex justify-between items-center text-[10px] sm:text-xs">
|
<div key={index} className="space-y-0.5 pb-1.5 last:pb-0">
|
||||||
<div className="text-gray-700 truncate mr-2" title={item.description}>{item.description}</div>
|
<div className="flex justify-between items-center text-[10px] sm:text-xs">
|
||||||
<span className="font-medium text-gray-900 whitespace-nowrap">
|
<div className="text-gray-700 truncate mr-2 font-medium" title={item.description}>
|
||||||
|
{item.description}
|
||||||
|
</div>
|
||||||
|
<span className="font-bold text-gray-900 whitespace-nowrap">
|
||||||
{formatCurrency(item.totalAmt ?? (item.amount + (item.gstAmt ?? 0)))}
|
{formatCurrency(item.totalAmt ?? (item.amount + (item.gstAmt ?? 0)))}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
{(item.gstAmt ?? 0) > 0 && (
|
||||||
|
<div className="flex justify-between items-center text-[9px] text-gray-500 pl-2 italic">
|
||||||
|
<div className="flex gap-2">
|
||||||
|
<span>Base: {formatCurrency(item.amount)}</span>
|
||||||
|
<span>GST: {formatCurrency(item.gstAmt)}</span>
|
||||||
|
</div>
|
||||||
|
{item.hsnCode && (
|
||||||
|
<span>HSN/SAC: {item.hsnCode}</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{!(item.gstAmt ?? 0) && item.hsnCode && (
|
||||||
|
<div className="text-[9px] text-gray-500 pl-2 italic">
|
||||||
|
HSN/SAC: {item.hsnCode}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
))}
|
))}
|
||||||
<div className="pt-2 border-t border-amber-200 flex justify-between items-center">
|
<div className="pt-2 border-t border-amber-200 flex justify-between items-center">
|
||||||
<span className="font-semibold text-gray-900 text-xs">Total</span>
|
<span className="font-semibold text-gray-900 text-xs">Total</span>
|
||||||
@ -348,12 +369,32 @@ export function ProcessDetailsCard({
|
|||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5 pt-1">
|
<div className="space-y-1.5 pt-1">
|
||||||
{closedExpensesBreakdown.map((item, index) => (
|
{closedExpensesBreakdown.map((item, index) => (
|
||||||
<div key={index} className="flex justify-between items-center text-[10px] sm:text-xs">
|
<div key={index} className="space-y-0.5 pb-1.5 last:pb-0">
|
||||||
<div className="text-gray-700 truncate mr-2" title={item.description}>{item.description}</div>
|
<div className="flex justify-between items-center text-[10px] sm:text-xs">
|
||||||
<span className="font-medium text-gray-900 whitespace-nowrap">
|
<div className="text-gray-700 truncate mr-2 font-medium" title={item.description}>
|
||||||
|
{item.description}
|
||||||
|
</div>
|
||||||
|
<span className="font-bold text-gray-900 whitespace-nowrap">
|
||||||
{formatCurrency(item.totalAmt ?? (item.amount + (item.gstAmt ?? 0)))}
|
{formatCurrency(item.totalAmt ?? (item.amount + (item.gstAmt ?? 0)))}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
{(item.gstAmt ?? 0) > 0 && (
|
||||||
|
<div className="flex justify-between items-center text-[9px] text-gray-500 pl-2 italic">
|
||||||
|
<div className="flex gap-2">
|
||||||
|
<span>Base: {formatCurrency(item.amount)}</span>
|
||||||
|
<span>GST: {formatCurrency(item.gstAmt)}</span>
|
||||||
|
</div>
|
||||||
|
{item.hsnCode && (
|
||||||
|
<span>HSN/SAC: {item.hsnCode}</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{!(item.gstAmt ?? 0) && item.hsnCode && (
|
||||||
|
<div className="text-[9px] text-gray-500 pl-2 italic">
|
||||||
|
HSN/SAC: {item.hsnCode}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
))}
|
))}
|
||||||
<div className="pt-2 border-t border-indigo-200 flex justify-between items-center">
|
<div className="pt-2 border-t border-indigo-200 flex justify-between items-center">
|
||||||
<span className="font-semibold text-gray-900 text-xs">Total</span>
|
<span className="font-semibold text-gray-900 text-xs">Total</span>
|
||||||
|
|||||||
@ -27,6 +27,7 @@ export interface DealerInfo {
|
|||||||
dealerPrincipalName?: string | null;
|
dealerPrincipalName?: string | null;
|
||||||
dealerPrincipalEmailId?: string | null;
|
dealerPrincipalEmailId?: string | null;
|
||||||
itemGroup?: string | null;
|
itemGroup?: string | null;
|
||||||
|
parentCode?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -36,6 +36,7 @@ export interface ClaimManagementRequest {
|
|||||||
sgstAmt?: number;
|
sgstAmt?: number;
|
||||||
igstAmt?: number;
|
igstAmt?: number;
|
||||||
totalAmt?: number;
|
totalAmt?: number;
|
||||||
|
hsnCode?: string;
|
||||||
}>;
|
}>;
|
||||||
description?: string;
|
description?: string;
|
||||||
};
|
};
|
||||||
@ -61,6 +62,7 @@ export interface ClaimManagementRequest {
|
|||||||
sgstAmt?: number;
|
sgstAmt?: number;
|
||||||
igstAmt?: number;
|
igstAmt?: number;
|
||||||
totalAmt?: number;
|
totalAmt?: number;
|
||||||
|
hsnCode?: string;
|
||||||
}>;
|
}>;
|
||||||
totalEstimatedBudget: number;
|
totalEstimatedBudget: number;
|
||||||
timelineMode?: 'date' | 'days';
|
timelineMode?: 'date' | 'days';
|
||||||
@ -184,7 +186,8 @@ export function mapToClaimManagementRequest(
|
|||||||
cgstAmt: exp.cgstAmt ?? exp.cgst_amt,
|
cgstAmt: exp.cgstAmt ?? exp.cgst_amt,
|
||||||
sgstAmt: exp.sgstAmt ?? exp.sgst_amt,
|
sgstAmt: exp.sgstAmt ?? exp.sgst_amt,
|
||||||
igstAmt: exp.igstAmt ?? exp.igst_amt,
|
igstAmt: exp.igstAmt ?? exp.igst_amt,
|
||||||
totalAmt: exp.totalAmt ?? exp.total_amt
|
totalAmt: exp.totalAmt ?? exp.total_amt,
|
||||||
|
hsnCode: exp.hsnCode || exp.hsn_code || exp.hsnCd || exp.hsn_cd || ''
|
||||||
}))
|
}))
|
||||||
: (completionDetails?.closedExpenses ||
|
: (completionDetails?.closedExpenses ||
|
||||||
completionDetails?.closed_expenses ||
|
completionDetails?.closed_expenses ||
|
||||||
@ -260,7 +263,8 @@ export function mapToClaimManagementRequest(
|
|||||||
cgstAmt: Number(item.cgstAmt ?? item.cgst_amt ?? 0),
|
cgstAmt: Number(item.cgstAmt ?? item.cgst_amt ?? 0),
|
||||||
sgstAmt: Number(item.sgstAmt ?? item.sgst_amt ?? 0),
|
sgstAmt: Number(item.sgstAmt ?? item.sgst_amt ?? 0),
|
||||||
igstAmt: Number(item.igstAmt ?? item.igst_amt ?? 0),
|
igstAmt: Number(item.igstAmt ?? item.igst_amt ?? 0),
|
||||||
totalAmt: Number(item.totalAmt ?? item.total_amt ?? 0)
|
totalAmt: Number(item.totalAmt ?? item.total_amt ?? 0),
|
||||||
|
hsnCode: item.hsnCode || item.hsn_code || ''
|
||||||
}))
|
}))
|
||||||
: Array.isArray(proposalDetails.costBreakup || proposalDetails.cost_breakup)
|
: Array.isArray(proposalDetails.costBreakup || proposalDetails.cost_breakup)
|
||||||
? (proposalDetails.costBreakup || proposalDetails.cost_breakup).map((item: any) => ({
|
? (proposalDetails.costBreakup || proposalDetails.cost_breakup).map((item: any) => ({
|
||||||
@ -271,7 +275,8 @@ export function mapToClaimManagementRequest(
|
|||||||
cgstAmt: item.cgstAmt ?? item.cgst_amt,
|
cgstAmt: item.cgstAmt ?? item.cgst_amt,
|
||||||
sgstAmt: item.sgstAmt ?? item.sgst_amt,
|
sgstAmt: item.sgstAmt ?? item.sgst_amt,
|
||||||
igstAmt: item.igstAmt ?? item.igst_amt,
|
igstAmt: item.igstAmt ?? item.igst_amt,
|
||||||
totalAmt: item.totalAmt ?? item.total_amt
|
totalAmt: item.totalAmt ?? item.total_amt,
|
||||||
|
hsnCode: item.hsnCode || item.hsn_code || ''
|
||||||
}))
|
}))
|
||||||
: [],
|
: [],
|
||||||
totalEstimatedBudget: proposalDetails.totalEstimatedBudget || proposalDetails.total_estimated_budget || 0,
|
totalEstimatedBudget: proposalDetails.totalEstimatedBudget || proposalDetails.total_estimated_budget || 0,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user