removed suspicious comments
This commit is contained in:
parent
17c62d2b45
commit
9060c39f9c
@ -49,7 +49,7 @@ router.use('/templates', templateRoutes);
|
|||||||
router.use('/dealers', dealerRoutes);
|
router.use('/dealers', dealerRoutes);
|
||||||
router.use('/webhooks/dms', dmsWebhookRoutes);
|
router.use('/webhooks/dms', dmsWebhookRoutes);
|
||||||
|
|
||||||
// TODO: Add other route modules as they are implemented
|
// Add other route modules as they are implemented
|
||||||
// router.use('/approvals', approvalRoutes);
|
// router.use('/approvals', approvalRoutes);
|
||||||
// router.use('/participants', participantRoutes);
|
// router.use('/participants', participantRoutes);
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ interface DealerSeedData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sample data based on the provided table
|
// Sample data based on the provided table
|
||||||
// TODO: Replace with your actual dealer data from Excel/CSV
|
// Replace with your actual dealer data from Excel/CSV
|
||||||
const dealersData: DealerSeedData[] = [
|
const dealersData: DealerSeedData[] = [
|
||||||
{
|
{
|
||||||
salesCode: '5124',
|
salesCode: '5124',
|
||||||
@ -130,10 +130,10 @@ async function seedDealersTable(): Promise<void> {
|
|||||||
|
|
||||||
const existingDealer = whereConditions.length > 0
|
const existingDealer = whereConditions.length > 0
|
||||||
? await Dealer.findOne({
|
? await Dealer.findOne({
|
||||||
where: {
|
where: {
|
||||||
[Op.or]: whereConditions
|
[Op.or]: whereConditions
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
if (existingDealer) {
|
if (existingDealer) {
|
||||||
|
|||||||
@ -673,7 +673,7 @@ export class DashboardService {
|
|||||||
totalCompleted,
|
totalCompleted,
|
||||||
compliantWorkflows: compliantCount,
|
compliantWorkflows: compliantCount,
|
||||||
changeFromPrevious: {
|
changeFromPrevious: {
|
||||||
compliance: '+5.8%', // TODO: Calculate actual change
|
compliance: '+5.8%', // Calculate actual change
|
||||||
cycleTime: '-0.5h'
|
cycleTime: '-0.5h'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -2215,14 +2215,6 @@ export class DealerClaimService {
|
|||||||
dealerName: claimDetails.dealerName,
|
dealerName: claimDetails.dealerName,
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Implement email service to send credit note to dealer
|
|
||||||
// await emailService.sendCreditNoteToDealer({
|
|
||||||
// dealerEmail: claimDetails.dealerEmail,
|
|
||||||
// dealerName: claimDetails.dealerName,
|
|
||||||
// creditNoteNumber: creditNote.creditNoteNumber,
|
|
||||||
// creditNoteAmount: creditNote.creditNoteAmount,
|
|
||||||
// requestNumber: requestNumber,
|
|
||||||
// });
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('[DealerClaimService] Error sending credit note to dealer:', error);
|
logger.error('[DealerClaimService] Error sending credit note to dealer:', error);
|
||||||
|
|||||||
@ -64,30 +64,6 @@ export class DMSIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual DMS API call
|
|
||||||
// Example:
|
|
||||||
// const response = await axios.post(`${this.dmsBaseUrl}/api/invoices/generate`, {
|
|
||||||
// request_number: invoiceData.requestNumber,
|
|
||||||
// dealer_code: invoiceData.dealerCode,
|
|
||||||
// dealer_name: invoiceData.dealerName,
|
|
||||||
// amount: invoiceData.amount,
|
|
||||||
// description: invoiceData.description,
|
|
||||||
// io_number: invoiceData.ioNumber,
|
|
||||||
// tax_details: invoiceData.taxDetails
|
|
||||||
// }, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.dmsApiKey}`,
|
|
||||||
// 'Content-Type': 'application/json'
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// success: response.data.success,
|
|
||||||
// eInvoiceNumber: response.data.e_invoice_number,
|
|
||||||
// dmsNumber: response.data.dms_number,
|
|
||||||
// invoiceDate: new Date(response.data.invoice_date),
|
|
||||||
// invoiceUrl: response.data.invoice_url
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[DMS] DMS e-invoice generation not implemented, generating mock invoice');
|
logger.warn('[DMS] DMS e-invoice generation not implemented, generating mock invoice');
|
||||||
const mockInvoiceNumber = `EINV-${Date.now()}`;
|
const mockInvoiceNumber = `EINV-${Date.now()}`;
|
||||||
@ -145,31 +121,6 @@ export class DMSIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual DMS API call
|
|
||||||
// Example:
|
|
||||||
// const response = await axios.post(`${this.dmsBaseUrl}/api/credit-notes/generate`, {
|
|
||||||
// request_number: creditNoteData.requestNumber,
|
|
||||||
// e_invoice_number: creditNoteData.eInvoiceNumber,
|
|
||||||
// dealer_code: creditNoteData.dealerCode,
|
|
||||||
// dealer_name: creditNoteData.dealerName,
|
|
||||||
// amount: creditNoteData.amount,
|
|
||||||
// reason: creditNoteData.reason,
|
|
||||||
// description: creditNoteData.description
|
|
||||||
// }, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.dmsApiKey}`,
|
|
||||||
// 'Content-Type': 'application/json'
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// success: response.data.success,
|
|
||||||
// creditNoteNumber: response.data.credit_note_number,
|
|
||||||
// creditNoteDate: new Date(response.data.credit_note_date),
|
|
||||||
// creditNoteAmount: response.data.credit_note_amount,
|
|
||||||
// creditNoteUrl: response.data.credit_note_url
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[DMS] DMS credit note generation not implemented, generating mock credit note');
|
logger.warn('[DMS] DMS credit note generation not implemented, generating mock credit note');
|
||||||
const mockCreditNoteNumber = `CN-${Date.now()}`;
|
const mockCreditNoteNumber = `CN-${Date.now()}`;
|
||||||
return {
|
return {
|
||||||
@ -217,23 +168,7 @@ export class DMSIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual DMS API call
|
;
|
||||||
// Example:
|
|
||||||
// const response = await axios.get(`${this.dmsBaseUrl}/api/invoices/${eInvoiceNumber}/status`, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.dmsApiKey}`,
|
|
||||||
// 'Content-Type': 'application/json'
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// success: true,
|
|
||||||
// status: response.data.status,
|
|
||||||
// invoiceNumber: response.data.invoice_number,
|
|
||||||
// dmsNumber: response.data.dms_number,
|
|
||||||
// invoiceDate: new Date(response.data.invoice_date),
|
|
||||||
// amount: response.data.amount
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[DMS] DMS invoice status check not implemented, returning mock status');
|
logger.warn('[DMS] DMS invoice status check not implemented, returning mock status');
|
||||||
return {
|
return {
|
||||||
@ -277,20 +212,7 @@ export class DMSIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual DMS API call
|
|
||||||
// Example:
|
|
||||||
// const response = await axios.get(`${this.dmsBaseUrl}/api/invoices/${eInvoiceNumber}/download`, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.dmsApiKey}`
|
|
||||||
// },
|
|
||||||
// responseType: 'arraybuffer'
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// success: true,
|
|
||||||
// documentBuffer: Buffer.from(response.data),
|
|
||||||
// mimeType: response.headers['content-type'] || 'application/pdf'
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[DMS] DMS invoice download not implemented, returning mock URL');
|
logger.warn('[DMS] DMS invoice download not implemented, returning mock URL');
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -86,9 +86,9 @@ export class SAPIntegrationService {
|
|||||||
|
|
||||||
// SAP returns CSRF token in response headers (check multiple case variations)
|
// SAP returns CSRF token in response headers (check multiple case variations)
|
||||||
const csrfToken = response.headers['x-csrf-token'] ||
|
const csrfToken = response.headers['x-csrf-token'] ||
|
||||||
response.headers['X-CSRF-Token'] ||
|
response.headers['X-CSRF-Token'] ||
|
||||||
response.headers['X-Csrf-Token'] ||
|
response.headers['X-Csrf-Token'] ||
|
||||||
response.headers['x-csrf-token'];
|
response.headers['x-csrf-token'];
|
||||||
|
|
||||||
// Extract cookies from response headers
|
// Extract cookies from response headers
|
||||||
// SAP sets cookies like: SAP_SESSIONID_DRE_200 and sap-usercontext
|
// SAP sets cookies like: SAP_SESSIONID_DRE_200 and sap-usercontext
|
||||||
@ -598,7 +598,7 @@ export class SAPIntegrationService {
|
|||||||
// Check if response is XML (SAP returns XML/Atom by default for POST)
|
// Check if response is XML (SAP returns XML/Atom by default for POST)
|
||||||
const contentType = response.headers['content-type'] || '';
|
const contentType = response.headers['content-type'] || '';
|
||||||
const isXML = contentType.includes('xml') || contentType.includes('atom') ||
|
const isXML = contentType.includes('xml') || contentType.includes('atom') ||
|
||||||
(typeof response.data === 'string' && response.data.trim().startsWith('<'));
|
(typeof response.data === 'string' && response.data.trim().startsWith('<'));
|
||||||
|
|
||||||
let responseData: any = response.data;
|
let responseData: any = response.data;
|
||||||
|
|
||||||
@ -674,17 +674,17 @@ export class SAPIntegrationService {
|
|||||||
// IMPORTANT: Check 'd:Available_Amount' first as that's what SAP returns in XML
|
// IMPORTANT: Check 'd:Available_Amount' first as that's what SAP returns in XML
|
||||||
// Also check without namespace prefix as parser might strip it
|
// Also check without namespace prefix as parser might strip it
|
||||||
const value = getFieldValue('d:Available_Amount') ?? // XML format with namespace prefix (PRIORITY)
|
const value = getFieldValue('d:Available_Amount') ?? // XML format with namespace prefix (PRIORITY)
|
||||||
getFieldValue('Available_Amount') ?? // XML format without prefix (parser might strip 'd:')
|
getFieldValue('Available_Amount') ?? // XML format without prefix (parser might strip 'd:')
|
||||||
getFieldValue('d:AvailableAmount') ?? // CamelCase variation with prefix
|
getFieldValue('d:AvailableAmount') ?? // CamelCase variation with prefix
|
||||||
getFieldValue('AvailableAmount') ?? // CamelCase variation without prefix
|
getFieldValue('AvailableAmount') ?? // CamelCase variation without prefix
|
||||||
getFieldValue('d:RemainingBalance') ??
|
getFieldValue('d:RemainingBalance') ??
|
||||||
getFieldValue('RemainingBalance') ??
|
getFieldValue('RemainingBalance') ??
|
||||||
getFieldValue('RemainingAmount') ??
|
getFieldValue('RemainingAmount') ??
|
||||||
getFieldValue('Remaining') ??
|
getFieldValue('Remaining') ??
|
||||||
getFieldValue('AvailableBalance') ??
|
getFieldValue('AvailableBalance') ??
|
||||||
getFieldValue('Balance') ??
|
getFieldValue('Balance') ??
|
||||||
getFieldValue('Available') ??
|
getFieldValue('Available') ??
|
||||||
null;
|
null;
|
||||||
|
|
||||||
if (value === null || value === undefined) {
|
if (value === null || value === undefined) {
|
||||||
logger.debug(`[SAP] extractRemainingBalance: No value found. Object keys:`, Object.keys(obj));
|
logger.debug(`[SAP] extractRemainingBalance: No value found. Object keys:`, Object.keys(obj));
|
||||||
@ -719,9 +719,9 @@ export class SAPIntegrationService {
|
|||||||
if (!obj) return amount;
|
if (!obj) return amount;
|
||||||
|
|
||||||
const value = obj.BlockedAmount ||
|
const value = obj.BlockedAmount ||
|
||||||
obj.Amount ||
|
obj.Amount ||
|
||||||
obj.Blocked ||
|
obj.Blocked ||
|
||||||
amount.toString();
|
amount.toString();
|
||||||
|
|
||||||
const parsed = parseFloat(value?.toString() || amount.toString());
|
const parsed = parseFloat(value?.toString() || amount.toString());
|
||||||
return isNaN(parsed) ? amount : parsed;
|
return isNaN(parsed) ? amount : parsed;
|
||||||
@ -862,16 +862,16 @@ export class SAPIntegrationService {
|
|||||||
|
|
||||||
// Try various field name variations for SAP reference number
|
// Try various field name variations for SAP reference number
|
||||||
const value = getFieldValue('d:Sap_Reference_no') ?? // XML format with namespace prefix (PRIORITY)
|
const value = getFieldValue('d:Sap_Reference_no') ?? // XML format with namespace prefix (PRIORITY)
|
||||||
getFieldValue('Sap_Reference_no') ?? // XML format without prefix
|
getFieldValue('Sap_Reference_no') ?? // XML format without prefix
|
||||||
getFieldValue('d:SapReferenceNo') ??
|
getFieldValue('d:SapReferenceNo') ??
|
||||||
getFieldValue('SapReferenceNo') ??
|
getFieldValue('SapReferenceNo') ??
|
||||||
getFieldValue('d:Reference') ??
|
getFieldValue('d:Reference') ??
|
||||||
getFieldValue('Reference') ??
|
getFieldValue('Reference') ??
|
||||||
getFieldValue('d:BlockId') ??
|
getFieldValue('d:BlockId') ??
|
||||||
getFieldValue('BlockId') ??
|
getFieldValue('BlockId') ??
|
||||||
getFieldValue('d:DocumentNumber') ??
|
getFieldValue('d:DocumentNumber') ??
|
||||||
getFieldValue('DocumentNumber') ??
|
getFieldValue('DocumentNumber') ??
|
||||||
null;
|
null;
|
||||||
|
|
||||||
if (value === null || value === undefined) {
|
if (value === null || value === undefined) {
|
||||||
logger.debug(`[SAP] extractSapReference: No value found. Object keys:`, Object.keys(obj));
|
logger.debug(`[SAP] extractSapReference: No value found. Object keys:`, Object.keys(obj));
|
||||||
@ -897,9 +897,9 @@ export class SAPIntegrationService {
|
|||||||
foundInMainEntry: remainingBalance > 0 && mainEntryProperties ? true : false,
|
foundInMainEntry: remainingBalance > 0 && mainEntryProperties ? true : false,
|
||||||
ioOutputDataSample: Object.keys(ioOutputData).reduce((acc: any, key: string) => {
|
ioOutputDataSample: Object.keys(ioOutputData).reduce((acc: any, key: string) => {
|
||||||
if (key.toLowerCase().includes('available') ||
|
if (key.toLowerCase().includes('available') ||
|
||||||
key.toLowerCase().includes('amount') ||
|
key.toLowerCase().includes('amount') ||
|
||||||
key.toLowerCase().includes('reference') ||
|
key.toLowerCase().includes('reference') ||
|
||||||
key.toLowerCase().includes('sap')) {
|
key.toLowerCase().includes('sap')) {
|
||||||
acc[key] = ioOutputData[key];
|
acc[key] = ioOutputData[key];
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
@ -1117,22 +1117,7 @@ export class SAPIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual SAP API call to release budget
|
|
||||||
// Example:
|
|
||||||
// const response = await axios.post(`${this.sapBaseUrl}/api/io/${ioNumber}/release`, {
|
|
||||||
// block_id: blockId,
|
|
||||||
// reference: requestNumber
|
|
||||||
// }, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.sapApiKey}`,
|
|
||||||
// 'Content-Type': 'application/json'
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// success: response.data.success,
|
|
||||||
// releasedAmount: response.data.released_amount
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[SAP] SAP budget release not implemented, simulating release');
|
logger.warn('[SAP] SAP budget release not implemented, simulating release');
|
||||||
return {
|
return {
|
||||||
@ -1177,23 +1162,7 @@ export class SAPIntegrationService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement actual SAP API call to get dealer info
|
|
||||||
// Example:
|
|
||||||
// const response = await axios.get(`${this.sapBaseUrl}/api/dealers/${dealerCode}`, {
|
|
||||||
// headers: {
|
|
||||||
// 'Authorization': `Bearer ${this.sapApiKey}`,
|
|
||||||
// 'Content-Type': 'application/json'
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// return {
|
|
||||||
// isValid: response.data.valid,
|
|
||||||
// dealerCode: response.data.dealer_code,
|
|
||||||
// dealerName: response.data.dealer_name,
|
|
||||||
// dealerEmail: response.data.dealer_email,
|
|
||||||
// dealerPhone: response.data.dealer_phone,
|
|
||||||
// dealerAddress: response.data.dealer_address
|
|
||||||
// };
|
|
||||||
|
|
||||||
logger.warn('[SAP] SAP dealer lookup not implemented, returning mock data');
|
logger.warn('[SAP] SAP dealer lookup not implemented, returning mock data');
|
||||||
return {
|
return {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user