Socke, Time and leave adjustment update
This commit is contained in:
parent
7ac50fe720
commit
15f0f3d782
|
|
@ -42,54 +42,54 @@ async function closePreviousSession(vaId, lastLog) {
|
||||||
});
|
});
|
||||||
|
|
||||||
// console.log(`Created logout log: ${logoutLog._id}`);
|
// console.log(`Created logout log: ${logoutLog._id}`);
|
||||||
// try {
|
try {
|
||||||
// const salesforceUrl = `${process.env.SF_DOCTRACKER_API_URL}services/apexrest/docva/api/va-project-log`;
|
const salesforceUrl = `${process.env.SF_DOCTRACKER_API_URL}services/apexrest/docva/api/va-project-log`;
|
||||||
// const sfDataSync = {
|
const sfDataSync = {
|
||||||
// "_id": logoutLog._id,
|
"_id": logoutLog._id,
|
||||||
// "loggedType": "LOGOUT",
|
"loggedType": "LOGOUT",
|
||||||
// "vaId": vaId,
|
"vaId": vaId,
|
||||||
// "vaEmail": lastLog.vaEmail,
|
"vaEmail": lastLog.vaEmail,
|
||||||
// "projectId": lastLog.projectId,
|
"projectId": lastLog.projectId,
|
||||||
// "time": logoutLog.time,
|
"time": logoutLog.time,
|
||||||
// }
|
}
|
||||||
|
|
||||||
// const response = await fetch(salesforceUrl, {
|
const response = await fetch(salesforceUrl, {
|
||||||
// method: 'POST',
|
method: 'POST',
|
||||||
// headers: {
|
headers: {
|
||||||
// 'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
// // Add any required headers for Salesforce authentication
|
// Add any required headers for Salesforce authentication
|
||||||
// // 'Authorization': 'Bearer ' + process.env.SF_ACCESS_TOKEN
|
// 'Authorization': 'Bearer ' + process.env.SF_ACCESS_TOKEN
|
||||||
// },
|
},
|
||||||
// body: JSON.stringify(sfDataSync)
|
body: JSON.stringify(sfDataSync)
|
||||||
// });
|
});
|
||||||
|
|
||||||
// if (!response.ok) {
|
if (!response.ok) {
|
||||||
// const errorText = await response.text();
|
const errorText = await response.text();
|
||||||
// throw new Error(`Salesforce API responded with status ${response.status}: ${errorText}`);
|
throw new Error(`Salesforce API responded with status ${response.status}: ${errorText}`);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// const result = await response.json();
|
const result = await response.json();
|
||||||
// // console.log("✅ Successfully synced VA data to Salesforce:", result);
|
// console.log("✅ Successfully synced VA data to Salesforce:", result);
|
||||||
|
|
||||||
// return {
|
return {
|
||||||
// closedWorkTracks: openWorkTracks.length,
|
|
||||||
// logoutLogId: logoutLog._id,
|
|
||||||
// SyncSalesforce: result
|
|
||||||
// };
|
|
||||||
// } catch (error) {
|
|
||||||
// console.error("Failed to sync with Salesforce:", error.message);
|
|
||||||
// console.log(error)
|
|
||||||
|
|
||||||
// // Create a custom error to distinguish Salesforce errors
|
|
||||||
// const salesforceError = new Error(`Salesforce sync failed: ${error.message}`);
|
|
||||||
// salesforceError.isSalesforceError = true;
|
|
||||||
// throw salesforceError;
|
|
||||||
// }
|
|
||||||
|
|
||||||
return {
|
|
||||||
closedWorkTracks: openWorkTracks.length,
|
closedWorkTracks: openWorkTracks.length,
|
||||||
logoutLogId: logoutLog._id,
|
logoutLogId: logoutLog._id,
|
||||||
|
SyncSalesforce: result
|
||||||
};
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to sync with Salesforce:", error.message);
|
||||||
|
console.log(error)
|
||||||
|
|
||||||
|
// Create a custom error to distinguish Salesforce errors
|
||||||
|
const salesforceError = new Error(`Salesforce sync failed: ${error.message}`);
|
||||||
|
salesforceError.isSalesforceError = true;
|
||||||
|
throw salesforceError;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return {
|
||||||
|
// closedWorkTracks: openWorkTracks.length,
|
||||||
|
// logoutLogId: logoutLog._id,
|
||||||
|
// };
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error closing previous session:", error);
|
console.error("Error closing previous session:", error);
|
||||||
|
|
|
||||||
|
|
@ -366,7 +366,7 @@ async function va_project_log_callback(req, res) {
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
// console.log("✅ Successfully synced VA data to Salesforce:", result);
|
// console.log("✅ Successfully synced VA data to Salesforce:", result);
|
||||||
|
|
||||||
res.status(201).json({
|
return res.status(201).json({
|
||||||
success: true,
|
success: true,
|
||||||
message: `${type} Successfully`,
|
message: `${type} Successfully`,
|
||||||
logId: createdLog._id,
|
logId: createdLog._id,
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ vaRoutes.delete("/profile/:id", va_remove_function); // VA delete Callback
|
||||||
// timesheet adjustment routes
|
// timesheet adjustment routes
|
||||||
vaRoutes.get("/timesheet/summary/:projectId/:date/:vaId?", authValidator, va_timesheet_summary_function); // Get Timesheet Adjustment for VA on specific project and date
|
vaRoutes.get("/timesheet/summary/:projectId/:date/:vaId?", authValidator, va_timesheet_summary_function); // Get Timesheet Adjustment for VA on specific project and date
|
||||||
vaRoutes.post("/timesheet/adjustment/request", authValidator, va_timesheet_adjustment_function); // Timesheet Adjustment for VA
|
vaRoutes.post("/timesheet/adjustment/request", authValidator, va_timesheet_adjustment_function); // Timesheet Adjustment for VA
|
||||||
// vaRoutes.get("/timesheet/adjustments/list/:status?/:projectId?/:vaId?", get_adjustment_requests_list); // show all adjustment list to approve and reject
|
vaRoutes.get("/timesheet/adjustments/list/:projectId?/:vaId?/:status?", get_adjustment_requests_list); // show all adjustment list to approve and reject
|
||||||
vaRoutes.patch("/timesheet/adjustments/:adjustmentId", va_timesheet_manage_adjustment_request);
|
vaRoutes.patch("/timesheet/adjustments/:adjustmentId", va_timesheet_manage_adjustment_request);
|
||||||
|
|
||||||
// Leaves routes
|
// Leaves routes
|
||||||
|
|
@ -84,9 +84,6 @@ vaRoutes.get("/log/project/:projectId/:from?/:to?", authValidator, va_log_callba
|
||||||
vaRoutes.get("/payrollSchedule", authValidator, va_payroll_schedule_function); // VA Payroll Schedule
|
vaRoutes.get("/payrollSchedule", authValidator, va_payroll_schedule_function); // VA Payroll Schedule
|
||||||
vaRoutes.get("/paySlip/:vaId", authValidator, va_payslip_data_function); // VA Payslip
|
vaRoutes.get("/paySlip/:vaId", authValidator, va_payslip_data_function); // VA Payslip
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
vaRoutes.get("/:userName", va_username_callback); // VA Username Callback
|
vaRoutes.get("/:userName", va_username_callback); // VA Username Callback
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,8 @@ io.use(async (socket, next) => {
|
||||||
if (clientUser) {
|
if (clientUser) {
|
||||||
socket.data.role = "client";
|
socket.data.role = "client";
|
||||||
socket.data.clientId = clientUser._id.toString();
|
socket.data.clientId = clientUser._id.toString();
|
||||||
|
socket.data.vaId = vaId.toString();
|
||||||
|
socket.data.projectId = projectId;
|
||||||
|
|
||||||
// Get all VA IDs assigned to this client
|
// Get all VA IDs assigned to this client
|
||||||
socket.data.allowedVAs = clientData.vaAssigned.map((va) => va.toString());
|
socket.data.allowedVAs = clientData.vaAssigned.map((va) => va.toString());
|
||||||
|
|
@ -319,7 +321,7 @@ io.on("connection", (socket) => {
|
||||||
console.log("User connected:", socket.id);
|
console.log("User connected:", socket.id);
|
||||||
|
|
||||||
// Register role and ID (client or VA)
|
// Register role and ID (client or VA)
|
||||||
socket.on("register", async ({ role, id }) => {
|
socket.on("register", async ({ role, id, projectId = null, clientId = null }) => {
|
||||||
if (role === "va") {
|
if (role === "va") {
|
||||||
socket.data.role = "va";
|
socket.data.role = "va";
|
||||||
socket.data.vaId = id;
|
socket.data.vaId = id;
|
||||||
|
|
@ -328,23 +330,35 @@ io.on("connection", (socket) => {
|
||||||
|
|
||||||
if (role === "client") {
|
if (role === "client") {
|
||||||
socket.data.role = "client";
|
socket.data.role = "client";
|
||||||
socket.data.clientId = id;
|
socket.data.clientId = clientId;
|
||||||
|
|
||||||
// 🧩 Get allowed VAs for this client
|
// 🧩 Get allowed VAs for this client
|
||||||
const client = await ClientModel.findById(id)
|
const client = await ClientModel.findById(clientId);
|
||||||
.populate("projectIds") // to access their projects
|
|
||||||
.populate("vaIds"); // optional if you track directly
|
|
||||||
|
|
||||||
// Collect all VA IDs from their projects
|
const a = JSON.stringify(client);
|
||||||
const projectVAIds = new Set();
|
console.log(a, "client data for allowed VAs");
|
||||||
for (const project of client.projectIds) {
|
if (client.projectIds.length !== 0 && client.projectIds.includes(projectId)) {
|
||||||
const populated = await ProjectModel.findById(project._id).populate("vaAssigned");
|
const projectVAIds = new Set();
|
||||||
|
|
||||||
|
const populated = await ProjectModel.findById(projectId).populate("vaAssigned");
|
||||||
populated.vaAssigned.forEach((va) => projectVAIds.add(va._id.toString()));
|
populated.vaAssigned.forEach((va) => projectVAIds.add(va._id.toString()));
|
||||||
|
|
||||||
|
socket.data.allowedVAs = Array.from(projectVAIds);
|
||||||
|
console.log(`Client ${clientId} can view VAs:`, socket.data.allowedVAs);
|
||||||
|
|
||||||
|
io.to(vaSocketRespectToClient.get(`${clientId}-${id}-${projectId}-va`)).emit("startSendAppsDetails", { projId: projectId });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store allowed VA IDs in socket memory
|
// Collect all VA IDs from their projects
|
||||||
socket.data.allowedVAs = Array.from(projectVAIds);
|
// const projectVAIds = new Set();
|
||||||
console.log(`Client ${id} can view VAs:`, socket.data.allowedVAs);
|
// for (const project of client.projectIds) {
|
||||||
|
// const populated = await ProjectModel.findById(project._id).populate("vaAssigned");
|
||||||
|
// populated.vaAssigned.forEach((va) => projectVAIds.add(va._id.toString()));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Store allowed VA IDs in socket memory
|
||||||
|
// socket.data.allowedVAs = Array.from(projectVAIds);
|
||||||
|
// console.log(`Client ${clientId} can view VAs:`, socket.data.allowedVAs);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -444,7 +458,6 @@ io.on("connection", (socket) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const vaId = vaUser._id.toString();
|
const vaId = vaUser._id.toString();
|
||||||
console.log("🟢 Received Apps from VA:", vaId);
|
|
||||||
|
|
||||||
// Broadcast image only to allowed clients
|
// Broadcast image only to allowed clients
|
||||||
for (let [_, clientSocket] of io.sockets.sockets) {
|
for (let [_, clientSocket] of io.sockets.sockets) {
|
||||||
|
|
@ -475,11 +488,12 @@ io.on("connection", (socket) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (vaSocketId) {
|
if (vaSocketId) {
|
||||||
io.to(vaSocketId).emit("stopSendAppsDetails");
|
// io.to(vaSocketId).emit("stopSendAppsDetails");
|
||||||
|
io.to(vaSocketRespectToClient.get(`${clientId}-${vaId}-${projectId}-va`)).emit("stopSendAppsDetails", { projId: projectId });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("❌ Client disconnected");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue