Compare commits

..

No commits in common. "8cdc91354ae1bdb39e85460cd61d8fc7b7f9faa9" and "5162f6553cac1200a66b7a55c99b5a67a0b56fda" have entirely different histories.

3 changed files with 7 additions and 24 deletions

View File

@ -229,15 +229,12 @@ export function DealerCompletionDocumentsModal({
const hasPhotos = activityPhotos.length > 0; const hasPhotos = activityPhotos.length > 0;
const hasDescription = completionDescription.trim().length > 0; const hasDescription = completionDescription.trim().length > 0;
const hasValidExpenseItems = expenseItems.length > 0 &&
expenseItems.every(item => item.description.trim() !== '' && item.amount >= 0);
const hasHSNSACErrors = isNonGst ? false : expenseItems.some(item => { const hasHSNSACErrors = isNonGst ? false : expenseItems.some(item => {
const { isValid } = validateHSNSAC(item.hsnCode, item.isService); const { isValid } = validateHSNSAC(item.hsnCode, item.isService);
return !isValid; return !isValid;
}); });
return hasCompletionDate && hasDocuments && hasPhotos && hasDescription && hasValidExpenseItems && !hasHSNSACErrors; return hasCompletionDate && hasDocuments && hasPhotos && hasDescription && !hasHSNSACErrors;
}, [activityCompletionDate, completionDocuments, activityPhotos, completionDescription, isNonGst, expenseItems]); }, [activityCompletionDate, completionDocuments, activityPhotos, completionDescription, isNonGst, expenseItems]);
// Get today's date in YYYY-MM-DD format for max date // Get today's date in YYYY-MM-DD format for max date
@ -1361,9 +1358,9 @@ export function DealerCompletionDocumentsModal({
<div className="bg-amber-50 border border-amber-200 rounded-lg p-3 sm:p-4 flex items-start gap-2 sm:gap-3"> <div className="bg-amber-50 border border-amber-200 rounded-lg p-3 sm:p-4 flex items-start gap-2 sm:gap-3">
<CircleAlert className="w-4 h-4 sm:w-5 sm:h-5 text-amber-600 flex-shrink-0 mt-0.5" /> <CircleAlert className="w-4 h-4 sm:w-5 sm:h-5 text-amber-600 flex-shrink-0 mt-0.5" />
<div className="text-xs sm:text-sm text-amber-800"> <div className="text-xs sm:text-sm text-amber-800">
<p className="font-semibold mb-1">Missing or Invalid Information</p> <p className="font-semibold mb-1">Missing Required Information</p>
<p> <p>
Please ensure completion date, documents/photos, description, and expense details (non-negative amounts and descriptions) are provided before submitting. Please ensure completion date, at least one document/photo, and description are provided before submitting.
</p> </p>
</div> </div>
</div> </div>

View File

@ -65,8 +65,7 @@ export function Form16SubmissionResult() {
return ( return (
<RequestSubmissionSuccess <RequestSubmissionSuccess
status={result.status} status={result.status}
requestId={result.requestId} requestId={result.requestNumber ?? result.requestId}
requestDisplayId={result.requestNumber ?? result.requestId}
creditNoteNumber={result.creditNoteNumber} creditNoteNumber={result.creditNoteNumber}
message={result.message} message={result.message}
onComplete={onComplete} onComplete={onComplete}

View File

@ -13,10 +13,7 @@ export type SubmissionResultStatus = 'success' | 'mismatch' | 'duplicate' | 'err
interface RequestSubmissionSuccessProps { interface RequestSubmissionSuccessProps {
/** 'success' = matched & credit note; 'mismatch' = value mismatch; 'duplicate' = already submitted; 'error' = request received / processing */ /** 'success' = matched & credit note; 'mismatch' = value mismatch; 'duplicate' = already submitted; 'error' = request received / processing */
status: SubmissionResultStatus; status: SubmissionResultStatus;
/** Internal UUID requestId (used for API actions like contact-admin). */
requestId: string; requestId: string;
/** Human-readable request number shown in UI. */
requestDisplayId?: string;
creditNoteNumber?: string | null; creditNoteNumber?: string | null;
/** Optional message (e.g. from API or error) */ /** Optional message (e.g. from API or error) */
message?: string | null; message?: string | null;
@ -29,7 +26,6 @@ interface RequestSubmissionSuccessProps {
export function RequestSubmissionSuccess({ export function RequestSubmissionSuccess({
status, status,
requestId, requestId,
requestDisplayId,
creditNoteNumber, creditNoteNumber,
message, message,
onComplete, onComplete,
@ -39,16 +35,6 @@ export function RequestSubmissionSuccess({
const isSuccess = status === 'success'; const isSuccess = status === 'success';
const isMismatch = status === 'mismatch'; const isMismatch = status === 'mismatch';
const isMissing26AsMismatch = isMismatch && (message || '').toLowerCase().includes('26as') && (message || '').toLowerCase().includes('no 26as'); const isMissing26AsMismatch = isMismatch && (message || '').toLowerCase().includes('26as') && (message || '').toLowerCase().includes('no 26as');
const mismatchSummary = (() => {
const m = (message || '').toLowerCase();
if (m.includes('no 26as')) return '26AS data is not uploaded for this TAN / FY / Quarter.';
if (m.includes('amount mismatch')) return 'TDS amount in Form 16A does not match 26AS amount.';
if (m.includes('tan')) return 'TAN details in Form 16A do not match 26AS records.';
if (m.includes('pan')) return 'PAN details in Form 16A do not match 26AS records.';
if (m.includes('quarter')) return 'Quarter in Form 16A does not match 26AS records.';
if (m.includes('financial year') || m.includes('fy')) return 'Financial year in Form 16A does not match 26AS records.';
return 'Form 16A details do not match with 26AS data.';
})();
const onContactAdmin = async () => { const onContactAdmin = async () => {
try { try {
@ -179,7 +165,8 @@ export function RequestSubmissionSuccess({
Resubmit the form carefully. Resubmit the form carefully.
</p> </p>
<p className="text-gray-600 text-sm mt-1"> <p className="text-gray-600 text-sm mt-1">
{mismatchSummary} Please verify the certificate and resubmit with correct details. Form 16A details did not match with 26AS data. Please verify the certificate and
resubmit with correct details.
</p> </p>
{message && ( {message && (
<div className="mt-3 p-3 bg-amber-50 border border-amber-200 rounded-md"> <div className="mt-3 p-3 bg-amber-50 border border-amber-200 rounded-md">
@ -223,7 +210,7 @@ export function RequestSubmissionSuccess({
}`} }`}
> >
<p className={`text-sm mb-1 ${isDuplicate ? 'text-red-700' : 'text-gray-600'}`}>Request ID</p> <p className={`text-sm mb-1 ${isDuplicate ? 'text-red-700' : 'text-gray-600'}`}>Request ID</p>
<p className={`font-mono tracking-wide ${isDuplicate ? 'text-red-800 font-semibold' : 'text-gray-900'}`}>{requestDisplayId || requestId || '—'}</p> <p className={`font-mono tracking-wide ${isDuplicate ? 'text-red-800 font-semibold' : 'text-gray-900'}`}>{requestId || '—'}</p>
{isSuccess && creditNoteNumber && ( {isSuccess && creditNoteNumber && (
<> <>
<p className="text-sm text-gray-600 mt-3 mb-1">Credit Note Number</p> <p className="text-sm text-gray-600 mt-3 mb-1">Credit Note Number</p>