flow integrated at cetrtain extent douments mapping , assigns mapping done documents application constrain removed
103 lines
3.7 KiB
TypeScript
103 lines
3.7 KiB
TypeScript
import db from './src/database/models/index.js';
|
|
import { RELOCATION_STAGES } from './src/common/config/constants.js';
|
|
|
|
const { RelocationRequest, Outlet, User, District, Region, Zone } = db;
|
|
|
|
async function run() {
|
|
try {
|
|
console.log('--- Relocation Workflow Verification ---');
|
|
|
|
// 1. Find a test outlet
|
|
const outlet = await Outlet.findOne({
|
|
include: [
|
|
{
|
|
model: District,
|
|
as: 'district',
|
|
include: [
|
|
{ model: Region, as: 'region' },
|
|
{ model: Zone, as: 'zone' }
|
|
]
|
|
}
|
|
]
|
|
});
|
|
|
|
if (!outlet || !outlet.district) {
|
|
console.log('No outlet with district found to test.');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Testing with Outlet: ${outlet.code}, District: ${outlet.district.name}`);
|
|
|
|
// Create a mock user if needed (the dealer)
|
|
const dealer = await User.findOne({ where: { roleCode: 'Dealer' } });
|
|
if (!dealer) {
|
|
console.log('No dealer found for testing.');
|
|
process.exit(1);
|
|
}
|
|
|
|
const { submitRequest } = await import('./src/modules/self-service/relocation.controller.js');
|
|
|
|
// We'll mock the Request/Response if we wanted to call the controller directly,
|
|
// but here we just want to verify if the evaluator logic would work.
|
|
|
|
// Let's just manually run the assignRelocationEvaluators logic (internal)
|
|
// Actually, I'll just check if the Controller's getRequestById would return participants correctly.
|
|
|
|
// Let's create a relocation request directly to test
|
|
const request = await RelocationRequest.create({
|
|
requestId: 'TEST-REL-' + Date.now(),
|
|
outletId: outlet.id,
|
|
dealerId: dealer.id,
|
|
relocationType: 'Within City',
|
|
newAddress: 'New Test Address',
|
|
newCity: 'Test City',
|
|
newState: 'Test State',
|
|
reason: 'Testing workflow assignment',
|
|
currentStage: RELOCATION_STAGES.ASM_REVIEW,
|
|
status: 'Pending ASM Review',
|
|
progressPercentage: 10,
|
|
documents: [],
|
|
timeline: []
|
|
});
|
|
|
|
console.log(`Created Test Request: ${request.requestId}`);
|
|
|
|
// Now call the logic that calculates participants (similar to getRequestById)
|
|
// We'll just look at the DB for now to see if DD Head and NBH (dual) would be assigned.
|
|
|
|
// Check DD Head
|
|
const ddHead = await User.findOne({ where: { roleCode: 'DD Head', status: 'active' } });
|
|
console.log(`DD Head found in DB: ${ddHead ? ddHead.fullName : 'NO'}`);
|
|
|
|
// Check NBH
|
|
const nbh = await User.findOne({ where: { roleCode: 'NBH', status: 'active' } });
|
|
console.log(`NBH found in DB: ${nbh ? nbh.fullName : 'NO'}`);
|
|
|
|
// Verify Evaluator Assignment Logic (Re-running a piece of it)
|
|
const evaluators = [];
|
|
evaluators.push({ id: outlet.district.asmId, role: 'ASM', stage: RELOCATION_STAGES.ASM_REVIEW });
|
|
evaluators.push({ id: ddHead?.id, role: 'DD Head', stage: RELOCATION_STAGES.DD_HEAD_APPROVAL });
|
|
evaluators.push({ id: nbh?.id, role: 'NBH', stage: RELOCATION_STAGES.NBH_APPROVAL });
|
|
evaluators.push({ id: nbh?.id, role: 'NBH', stage: RELOCATION_STAGES.NBH_CLEARANCE });
|
|
|
|
console.log('Expected Evaluators for this request:');
|
|
evaluators.forEach(e => console.log(`- Role: ${e.role}, Stage: ${e.stage}, ID: ${e.id}`));
|
|
|
|
// Check for success: All must have IDs
|
|
const missing = evaluators.filter(e => !e.id);
|
|
if (missing.length > 0) {
|
|
console.warn('WARNING: Missing some evaluators in the DB. Ensure they are seeded!');
|
|
missing.forEach(m => console.log(` Missing: ${m.role}`));
|
|
} else {
|
|
console.log('SUCCESS: All hierarchy and national evaluators identified.');
|
|
}
|
|
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error(error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
run();
|