ui5_easy_use
Version:
CLI tool for SAP ui5 and SAPUI5 projects to initialize apps, generate pages, insert form and table components, manage routing, and automate i18n bindings
243 lines (203 loc) • 10.5 kB
JavaScript
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
"use strict";
return Controller.extend("${ez5.appName}.utilities.UserService", {
constructor: function (currentController, userId) {
this.userId = userId;
this._currentController = currentController;
this.userinfoFullObj = null;
},
getUserinfoFullObj: async function () {
if (!this.userId) {
return false;
}
const mModel = this._currentController.getModel("v21");
try {
const userDetailurl = `${mModel.sServiceUrl}/User?$filter=userId eq '${this.userId}'&$expand=manager&$format=json`;
const response = await fetch(userDetailurl);
const jobData = await response.json();
return jobData.d.results[0];
} catch (error) {
console.error("Failed to fetch roles Details", error);
}
},
getUserInfo: async function () {
this.userinfoFullObj = await this.getUserinfoFullObj();
if (!this.userinfoFullObj) {
console.error("---------------- ##No User Found!!!!## ----------------");
return false;
}
this.userInfo = {
empId: this.userinfoFullObj?.userId || Number(this.userId),
userEmail: this.userinfoFullObj?.username || "Damy Data",
userLocation: this.userinfoFullObj?.city || "Damy Data",
displayName: `${this.userinfoFullObj?.displayName}` || "Damy Data",
// displayName: `${this.userinfoFullObj?.displayName}(${this.userinfoFullObj?.userId})` || "Damy Data",
position: this.userinfoFullObj?.title || "Damy Data",
grade: this.userinfoFullObj?.payGrade || "Damy Data",
division: this.userinfoFullObj?.division || "Damy Data",
department: this.userinfoFullObj?.department || "Damy Data",
city: this.userinfoFullObj?.city || "Damy Data",
managerName: this.userinfoFullObj?.manager?.displayName || "Damy Data",
managerId: this.userinfoFullObj?.manager?.userId || "Damy Data",
managerEmail: this.userinfoFullObj?.manager?.username || "Damy Data",
};
return this.userInfo;
},
getTaskDetails: function (userInfo, status, step, sendTo, sendToName) {
const isMangeerExist = Boolean(userInfo?.managerName && userInfo?.managerId);
status = (!isMangeerExist && status === "Pending") ? "Approved" : status;
const namesSendtoXForUni = this.formatSendToNames(userInfo.managerId, userInfo.managerName);
const oResourceBundle = this._currentController.getModel("i18n").getResourceBundle();
const statusTextsi18n = {
textForwardedTo: oResourceBundle.getText("ForwardedTo"),
textApprovedBy: oResourceBundle.getText("ApprovedBy"),
textRejectedBy: oResourceBundle.getText("RejectedBy"),
textReturnedBy: oResourceBundle.getText("ReturnedBy"),
textAssignedBy: oResourceBundle.getText("AssignedBy"),
textReAssignedBy: oResourceBundle.getText("ReAssignedBy"),
textWorkInProgressBy: oResourceBundle.getText("WorkInProgressBy"),
textCompletedBy: oResourceBundle.getText("CompletedBy"),
textClosedBy: oResourceBundle.getText("ClosedBy")
};
const detailsMap = {
"Pending": {
statusDisplay: isMangeerExist
? `${statusTextsi18n.textForwardedTo}: ${userInfo.managerName}(${userInfo.managerId})`
: `${statusTextsi18n.textForwardedTo}: ${sendToName}(${sendTo})`,
sendto: isMangeerExist ? userInfo.managerId : sendTo,
sendToName: isMangeerExist ? namesSendtoXForUni : sendToName,
steps: 1
},
"Approved": {
statusDisplay: `${statusTextsi18n.textApprovedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: step + 1
},
"Rejected": {
statusDisplay: `${statusTextsi18n.textForwardedTo}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: '',
sendToName: '',
steps: 100
},
"Returned": {
statusDisplay: `${statusTextsi18n.textReturnedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: 0
},
"Assigned": {
statusDisplay: `${statusTextsi18n.textAssignedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: step + 1
},
"ReAssignee": {
statusDisplay: `${statusTextsi18n.textReAssignedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: step
},
"WorkInProgress": {
statusDisplay: `${statusTextsi18n.textWorkInProgressBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: step
},
"Completed": {
statusDisplay: `${statusTextsi18n.textCompletedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: sendTo,
sendToName: sendToName,
steps: 99
},
"Closed": {
statusDisplay: `${statusTextsi18n.textClosedBy}: ${userInfo?.displayName}(${userInfo?.empId})`,
sendto: '',
sendToName: '',
steps: 100
}
};
return detailsMap[status];
},
getRequesteData: async function (obj) {
const status = obj?.status;
const status2 = obj?.status2 || status;
const sendTo = obj?.sendTo;
const sendToName = obj?.sendToName;
const step = obj?.step;
const lastActionBy = obj?.lastActionBy;
const userInfo = this.userInfo || {};
const workFlow = this.getTaskDetails(userInfo, status, step, sendTo, sendToName);
return {
Status: status == "ReAssignee" ? status2 : status, // This will be one of: Pending, Approved, Rejected, Returned, Closed
Status2: status2,
StatusDisplay: workFlow?.statusDisplay || "",
Sendto: workFlow?.sendto,
SendtoName: workFlow?.sendToName,
Steps: workFlow?.steps,
LastActionBy: status == 'WorkInProgress' ? lastActionBy : `${userInfo.displayName || "Unknown"}(${userInfo.empId || "Unknown"})`,
LastActionDate: new Date(),
AssignedDate: new Date(), // Renamed from assigned_date
EscalationId: status == 'Approved' ? obj.escalationId : "",
EscalationLevelId: obj.escalationLevelId
};
},
getRequesterData: async function () {
const userInfo = this.userInfo;
return {
RequesterId: userInfo?.empId, // Renamed from requester_id
RequesterName: userInfo?.displayName, // Renamed from requester_name
RequesterPosition: userInfo?.jobCode, // Renamed from requester_position
RequesterSection: userInfo?.department, // Renamed from requester_section
RequesterDept: userInfo?.division, // Renamed from requester_dept
RequesterLocation: userInfo?.city, // Renamed from requester_location
}
},
getUserInfoWithRequestTamp: async function (obj) {
const requesteData = await this.getRequesteData(obj?.RequesteData);
const requesterData = obj.RequesteData.status == "Pending" ? await this.getRequesterData() : obj?.RequesterData;
return {
...requesteData, ...requesterData
};
},
getRequestHistoryObj: async function (Obj) {
const userInfo = this.userInfo || {};
if (!userInfo) {
return false;
}
const ProcessedId = userInfo.empId || 'Unknown';
const ProcessedBy = userInfo.displayName || 'Unknown User';
const RequestId = Obj?.RequestId || '0000000000';
const SendtoName = Obj?.SendtoName;
const CommentZ = Obj?.Status == "Pending" ? `New Request.` : Obj?.CommentZ || "--";
const SeqId = Obj?.SeqId;
const Status = Obj?.Status;
const AdjustedStatus = Status === 'Pending' ? 'Submitted' : Status;
return {
SeqId: SeqId ? SeqId + 1 : 1,
RequestId: RequestId,
CommentZ: CommentZ,
Status: Status,
ProcessedId: ProcessedId,
ProcessedBy: ProcessedBy,
ActionDateTime: new Date(),
Action: `${AdjustedStatus} by: ${ProcessedBy}(${ProcessedId})`,
SendtoName: SendtoName,
};
},
formatSendToNames: function (sIds, sNames) {
if (!sIds || !sNames) return "";
const idArray = sIds.split(", ");
const nameArray = sNames.split(", ");
if (idArray.length !== nameArray.length) return "";
const combinedArray = nameArray.map((name, index) => {
const firstNameLastName = name.split(" ").slice(0, 2).join(" ");
return `${firstNameLastName} (${idArray[index]})`;
});
return combinedArray.join(", ");
},
});
});