1
0
Fork 0
forked from Simnation/Main
Main/resources/[jobs]/[mdt]/myEmergency/html/js/modules/Employees.js
2025-08-14 13:21:51 +02:00

244 lines
No EOL
7.5 KiB
JavaScript

class Employees{
constructor(){
this.name = "employees";
}
static allowEdit(){
return userrights.has("employees.edit");
}
static allowAddNew(){
return false;
}
static allowSuspend(){
return userrights.has("employees.suspend")
}
static allowViewEmployeeEntries(){
return userrights.has("employeesentries.view")
}
static allowEditEmployeeEntries(){
return userrights.has("employeesentries.edit")
}
static allowDeleteEmployeeEntries(){
return userrights.has("employeesentries.delete")
}
static allowFinishEmployeeEntries(){
return userrights.has("employeesentries.finish")
}
static allowViewUserTrainings(){
return userrights.has("trainingsemployees.view")
}
static GetExtraForView(data){
let retval = {
top:"",
bottom:""
}
let suspendedText = getTranslation("suspend");
let suspended_new = 1;
if(data.extraData.is_suspended !== undefined && data.extraData.is_suspended.length > 0 && data.extraData.is_suspended[0].is_suspended == true){
suspendedText = getTranslation("unsuspend");
suspended_new = 0;
}
let buttons = ``;
if(this.allowSuspend()){
buttons += `<button type="button" class="btn btn-sm
btn-warning" onclick="changeDataInColumn('employees','is_suspended','${data.id}','${suspended_new}')">${suspendedText}</button>`;
//buttons += `<button type="button" class="btn btn-sm btn-warning" onclick="EmployeeSuspend('employees','${data.id}','${suspended_new}')">${suspendedText}</button>`;
}
if(this.allowEditEmployeeEntries()){
buttons += `<button type="button" class="btn btn-sm btn-primary" onclick="loadPage('employeesentry.add',-1,'false',{data:{employee_id:'${data.id}'}})">${getTranslation("fileentry.add")}</button>`;
}
if(this.allowViewUserTrainings()){
buttons += `<button type="button" class="btn btn-sm btn-primary" onclick="loadPage('employeestraining.dataload','${data.id}')">${getTranslation("employeestraining.dataload")}</button>`;
}
retval.bottom += `
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 pt-6">
${buttons}
</div>
`;
if(this.allowViewEmployeeEntries() && data.extraData.file_entries !== undefined){
let entryTypes = System.getEmployeeEntryTypes();
retval.bottom += `
<div class="collapse collapse-arrow border border-base-300 bg-base-100 rounded-box mt-4">
<input type="checkbox" />
<div class="collapse-title text-xl font-medium">
${getTranslation("employees_file")}
</div>
<div class="collapse-content">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-6">`;
for(let i=0;i<data.extraData.file_entries.length;i++){
let row = data.extraData.file_entries[i];
let bgColor = entryTypes[row.type_of_entry].color ?? "ghost";
let type_name = entryTypes[row.type_of_entry].name ?? "";
let badges = ``;
badges += `<div class="badge badge-${bgColor} gap-2">${type_name}</div>`;
if(row.closed){
badges += `<div class="badge badge-success gap-2">${getTranslation("entry_finished")}</div>`;
}
let buttons = ``;
if(!row.closed && this.allowFinishEmployeeEntries()){
buttons += `<button onclick="changeDataInColumn('employeesentry', 'closed', '${row.id}', 1)" class="btn btn-sm btn-primary">${getTranslation("finish_file_entry")}</button>`;
}
if(this.allowDeleteEmployeeEntries()){
buttons += `<button onclick="Form.openDeleteModal('${row.id}','employeesentry')" class="btn btn-sm btn-error">${getTranslation("delete")}</button>`;
}
let temp = `
<div class="card w-full bg-neutral text-neutral-content">
<div class="card-body">
<h2 class="card-title uppercase font-bold">${System.buildEmployeeName(row.creator)} - ${System.formatTimestamp(row.creationdate)}</h2>
<h2 class="card-title uppercase font-bold">${badges}</h2>
<p class="border border-current rounded-xl p-1 break-all">${row.content.replace(/\n/g,"<br>")}</p>
<p></p>
<div class="card-actions justify-start">
${buttons}
</div>
</div>
</div>
`;
if( i % 2 === 0){
temp += `<div></div>`
}
else{
temp = `<div></div>` + temp
}
retval.bottom += temp;
}
retval.bottom += `
</div>
</div>
</div>`;
}
return retval;
}
static GetEdit(data={}){
let serviceno = null;
if(data !== null){
if(data.extraData.serviceno !== undefined && data.extraData.serviceno !== null && data.extraData.serviceno.length > 0){
serviceno = data.extraData.serviceno[0].serviceno ?? System.getServiceNo(data.identifier ?? data.citizenid)
}
else{
serviceno = System.getServiceNo(data.identifier ?? data.citizenid);
}
}
return {
"serviceno": {
"val" : serviceno ?? ""
,"type" : "text"
,isRow:true
,hideInEdit:false
},
"firstname": {
"val" : data.firstname ?? System.getFirstName(data.charinfo ?? "")
,"type" : "text"
,hideInEdit:true
},
"lastname": {
"val" : data.lastname ?? System.getLastName(data.charinfo ?? "")
,"type" : "text"
,"mandatory":true
,hideInEdit:true
}
,"rank": {
"val" : data.job_grade ?? System.getJobGrade(data.job)
,"type" : "dropdown"
,"mandatory":true
,isRow:true
,options:System.getRankOptions()
,hideInEdit:true
}
}
}
static GetColumns(){
return ["serviceno","name","rank_name","state","id"]
}
static TableDataCreate(row, key){
if(key == "id"){
return `
<td>
${Form.getViewButtonIcon(row[key], this.name + ".view")}
${Form.getEditButtonIcon(row[key], this.name + ".edit", this.allowEdit())}
</td>`;
}
else if(key == "serviceno"){
return `
<td>
${row[key] ?? System.getServiceNo(row.id)}
</td>`;
}
else if(key == "name"){
return `
<td>
${System.buildEmployeeName(row[key])}
</td>`;
}
else if(key == "state"){
if(row[key] != ""){
return `
<td>
<div class="badge badge-warning font-bold">${getTranslation("state_" + row[key])}</div>
</td>`;
}
else{
return `<td></td>`
}
}
else if(key == "rank_name"){
let grade = -9999
try {
if(typeof JSON.parse(row[key]) == "number"){
grade = row[key]
}
}
catch (e) {
grade = row[key]
}
if(grade == -9999){
grade = System.getJobGrade(row[key]);
}
return `
<td>
${System.getLabelByRank(grade)}
</td>
`;
}
else {
return `<td>${row[key]}</td>`;
}
}
}