-
This commit is contained in:
parent
1d02b87c1d
commit
de191e7943
@ -1,10 +1,47 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using PSTW_CentralSystem.Areas.OTcalculate.Models;
|
||||||
|
using PSTW_CentralSystem.DBContext;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PSTW_CentralSystem.Areas.OTcalculate.Controllers
|
namespace PSTW_CentralSystem.Areas.OTcalculate.Controllers
|
||||||
{
|
{
|
||||||
[Area("OTcalculate")]
|
[Area("OTcalculate")]
|
||||||
public class HrDashboardController : Controller
|
public class HrDashboardController : Controller
|
||||||
{
|
{
|
||||||
|
private readonly CentralSystemContext _context;
|
||||||
|
|
||||||
|
public HrDashboardController(CentralSystemContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IActionResult> GetRateList()
|
||||||
|
{
|
||||||
|
var users = await _context.Users
|
||||||
|
.Where(u => u.Id != 1 && u.Id != 2)
|
||||||
|
.Include(u => u.Department)
|
||||||
|
.Select(u => new RateModel
|
||||||
|
{
|
||||||
|
Id = u.Id.ToString(),
|
||||||
|
FullName = u.FullName,
|
||||||
|
departmentId = u.departmentId,
|
||||||
|
DepartmentName = u.Department != null ? u.Department.DepartmentName : "N/A"
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
return Json(users);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Rate()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult OtApproval()
|
public IActionResult OtApproval()
|
||||||
{
|
{
|
||||||
return View();
|
return View();
|
||||||
@ -15,11 +52,6 @@ namespace PSTW_CentralSystem.Areas.OTcalculate.Controllers
|
|||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult Rate()
|
|
||||||
{
|
|
||||||
return View();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IActionResult Calendar()
|
public IActionResult Calendar()
|
||||||
{
|
{
|
||||||
return View();
|
return View();
|
||||||
|
|||||||
6
Areas/OTcalculate/Models/CalendarModel.cs
Normal file
6
Areas/OTcalculate/Models/CalendarModel.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace PSTW_CentralSystem.Areas.OTcalculate.Models
|
||||||
|
{
|
||||||
|
public class CalendarModel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,6 +6,17 @@ namespace PSTW_CentralSystem.Areas.OTcalculate.Models
|
|||||||
{
|
{
|
||||||
public class RateModel
|
public class RateModel
|
||||||
{
|
{
|
||||||
|
[Key]
|
||||||
|
public required string Id { get; set; }
|
||||||
|
|
||||||
|
public required string FullName { get; set; }
|
||||||
|
|
||||||
|
public int? departmentId { get; set; }
|
||||||
|
|
||||||
|
[ForeignKey("departmentId")]
|
||||||
|
public virtual DepartmentModel? Department { get; set; }
|
||||||
|
|
||||||
|
public string? DepartmentName { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,129 @@
|
|||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
}
|
}
|
||||||
|
|
||||||
<div id="OTregister">
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
<div class="row card">
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-6 col-md-6 col-lg-3">
|
||||||
|
<div class="card card-hover">
|
||||||
|
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Rate">
|
||||||
|
<div class="box bg-success text-center">
|
||||||
|
<h1 class="font-light text-white">
|
||||||
|
<i class="mdi mdi-currency-usd"></i>
|
||||||
|
</h1>
|
||||||
|
<h6 class="text-white">Rate</h6>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-6 col-md-6 col-lg-3">
|
||||||
|
<div class="card card-hover">
|
||||||
|
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Calendar">
|
||||||
|
<div class="box bg-purple text-center">
|
||||||
|
<h1 class="font-light text-white">
|
||||||
|
<i class="mdi mdi-calendar"></i>
|
||||||
|
</h1>
|
||||||
|
<h6 class="text-white">Calendar</h6>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="calendarApp">
|
||||||
|
<div class="row">
|
||||||
|
@* Holiday *@
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-purple text-white">
|
||||||
|
<h4 class="text-center">UPDATE HOLIDAY</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<label>Date:</label>
|
||||||
|
<input type="date" v-model="holidayDate" class="form-control">
|
||||||
|
|
||||||
|
<label>State:</label>
|
||||||
|
<div class="form-group">
|
||||||
|
<div v-for="state in states" class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" :id="state" :value="state" v-model="selectedStates">
|
||||||
|
<label class="form-check-label" :for="state">{{ state }}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label>Holiday:</label>
|
||||||
|
<input type="text" v-model="holidayName" class="form-control" placeholder="Enter Holiday Name">
|
||||||
|
|
||||||
|
<div class="mt-3 text-right">
|
||||||
|
<button class="btn btn-danger" >Clear</button>
|
||||||
|
<button class="btn btn-success" >Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@* Weekend *@
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-purple text-white">
|
||||||
|
<h4 class="text-center">UPDATE WEEKEND</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<label>State:</label>
|
||||||
|
<div class="form-group">
|
||||||
|
<div v-for="state in states" class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" :id="'weekend_' + state" :value="state" v-model="selectedWeekendStates">
|
||||||
|
<label class="form-check-label" :for="'weekend_' + state">{{ state }}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label>Days:</label>
|
||||||
|
<select v-model="selectedWeekend" class="form-control">
|
||||||
|
<option>Friday & Saturday</option>
|
||||||
|
<option>Saturday & Sunday</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<div class="mt-3 text-right">
|
||||||
|
<button class="btn btn-danger" >Clear</button>
|
||||||
|
<button class="btn btn-success" >Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@* Updated Data*@
|
||||||
|
<div class="row mt-4">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<p>Name:</p>
|
<h4>Holiday Updates</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<ul class="mt-3">
|
||||||
|
<li v-for="holiday in holidays">
|
||||||
|
<strong>{{ holiday.Date }}</strong>: {{ holiday.HolidayName }} ({{ holiday.States.join(', ') }})
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h4>Weekend Updates</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<ul>
|
||||||
|
<li v-for="weekend in weekends">
|
||||||
|
<strong>{{ weekend.States.join(', ') }}</strong>: {{ weekend.WeekendDays }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -1,9 +1,13 @@
|
|||||||
@{
|
@model List<PSTW_CentralSystem.Areas.OTcalculate.Models.RateModel>
|
||||||
|
|
||||||
|
@{
|
||||||
ViewData["Title"] = "Rate Update";
|
ViewData["Title"] = "Rate Update";
|
||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
}
|
}
|
||||||
|
|
||||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
<div class="col-6 col-md-6 col-lg-3">
|
<div class="col-6 col-md-6 col-lg-3">
|
||||||
<div class="card card-hover">
|
<div class="card card-hover">
|
||||||
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Rate">
|
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Rate">
|
||||||
@ -29,6 +33,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div id="rateUpdate" class="card m-1">
|
<div id="rateUpdate" class="card m-1">
|
||||||
@ -56,21 +63,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@* User Table Rate *@
|
||||||
|
<div id="app">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-lg-12">
|
<div class="col-md-12 col-lg-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="col-md-12 col-lg-12">
|
<div class="col-md-12 col-lg-12">
|
||||||
<div>
|
<div>
|
||||||
<table class="table table-bordered table-hover table-striped no-wrap align-middle" id="userDatatable" style="width:100%;border-style: solid; border-width: 1px"></table>
|
<table class="table table-bordered table-hover table-striped no-wrap align-middle" id="rateTable" style="width:100%;border-style: solid; border-width: 1px"></table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -79,12 +87,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
@{
|
@{
|
||||||
await Html.RenderPartialAsync("_ValidationScriptsPartial");
|
await Html.RenderPartialAsync("_ValidationScriptsPartial");
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
app.mount('#app');
|
app.mount('#app');
|
||||||
});
|
});
|
||||||
@ -92,238 +100,49 @@
|
|||||||
const app = Vue.createApp({
|
const app = Vue.createApp({
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
userList: null,
|
rateList: [],
|
||||||
roleList: null,
|
|
||||||
selectedModule: null,
|
|
||||||
selectedRole: [],
|
|
||||||
userDatatable: null,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchUsers();
|
this.fetchRates();
|
||||||
this.fetchRoles();
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async fetchUsers() {
|
async fetchRates() {
|
||||||
fetch('/AdminAPI/GetUserList', {
|
try {
|
||||||
method: 'POST'
|
let response = await fetch('/OTcalculate/HrDashboard/GetRateList', { method: 'GET' });
|
||||||
})
|
let data = await response.json();
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
this.rateList = data.length ? data : [];
|
||||||
this.userList = data.userInfo.length ? data.userInfo : [];
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
if (this.userDatatable != null) {
|
if (this.rateTable) {
|
||||||
this.userDatatable.clear().destroy();
|
this.rateTable.clear().destroy();
|
||||||
}
|
}
|
||||||
this.initiateTable();
|
this.initiateTable();
|
||||||
});
|
});
|
||||||
})
|
} catch (error) {
|
||||||
.catch(error => {
|
console.error('Error fetching rates:', error);
|
||||||
console.error('There was a problem with the fetch operation:', error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
async fetchRoles() {
|
|
||||||
fetch('/RoleAPI/GetRoleList', {
|
|
||||||
method: 'POST'
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
this.roleList = data.length ? data : [];
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('There was a problem with the fetch operation:', error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
editUser(user) {
|
|
||||||
// Check if the user ID exists
|
|
||||||
if (module.settingId) {
|
|
||||||
// Redirect the user to the edit user page
|
|
||||||
window.location.href = 'ModuleSetting/' + module.settingId;
|
|
||||||
} else {
|
|
||||||
console.error('Module ID not found');
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deleteUser(user) {
|
|
||||||
this.selectedModule = module; // Set selected user
|
|
||||||
$('#confirm-dialog').modal('show'); // Show the modal
|
|
||||||
|
|
||||||
// console.log(this.selectedModule);
|
|
||||||
},
|
|
||||||
confirmDelete(user) {
|
|
||||||
fetch(`/ModuleAPI/DeleteModule/${module.settingId}`, {
|
|
||||||
method: 'POST'
|
|
||||||
})
|
|
||||||
.then(response => {
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error('Failed to delete module');
|
|
||||||
}
|
|
||||||
// Remove the deleted user from the userData array
|
|
||||||
const index = this.moduleData.findIndex(u => u.settingId === module.settingId);
|
|
||||||
if (index !== -1) {
|
|
||||||
alert("Module deleted successfully");
|
|
||||||
this.moduleData.splice(index, 1);
|
|
||||||
}
|
|
||||||
this.hideModal(); // Hide the modal after deletion
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Failed to delete module with status:', error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
hideModal() {
|
|
||||||
$('#confirm-dialog').modal('hide');
|
|
||||||
},
|
|
||||||
async initiateTable() {
|
async initiateTable() {
|
||||||
self = this;
|
self = this;
|
||||||
this.userDatatable = $('#userDatatable').DataTable({
|
this.rateTable = $('#rateTable').DataTable({
|
||||||
"data": self.userList,
|
"data": self.rateList,
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
"title": "Email",
|
"title": "Full Name",
|
||||||
"data": "email",
|
"data": "fullName",
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Company Name",
|
|
||||||
"data": "company",
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Department",
|
"title": "Department",
|
||||||
"data": "department",
|
"data": "departmentName",
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Role",
|
|
||||||
"data": "role",
|
|
||||||
"render": function (data, type, row, meta) {
|
|
||||||
if (data.length > 0) {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
else if(row.company == null && row.department == null) {
|
|
||||||
var thisCol = `
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6">
|
|
||||||
<select class="form-select role-select" data-id="${row.id}" disabled>
|
|
||||||
<option value="" selected disabled>Select Role</option>
|
|
||||||
${self.roleList && self.roleList.map(role => `<option value="${role.name}">${role.name}</option>`).join('')}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<button type="button" class="btn btn-primary update-btn" data-id="${row.id}" disabled>Update</button>
|
|
||||||
</div>
|
|
||||||
</div>`
|
|
||||||
return thisCol;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var thisCol = `
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6">
|
|
||||||
<select class="form-select role-select" data-id="${row.id}">
|
|
||||||
<option value="" selected disabled>Select Role</option>
|
|
||||||
${self.roleList && self.roleList.map(role => `<option value="${role.name}">${role.name}</option>`).join('')}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<button type="button" class="btn btn-primary update-btn" data-id="${row.id}">Update</button>
|
|
||||||
</div>
|
|
||||||
</div>`
|
|
||||||
return thisCol;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Info Status",
|
|
||||||
"data": "status",
|
|
||||||
"render": function (data, type, row, meta) {
|
|
||||||
return data == 1 ? `Info Complete`: `Info Incomplete`;
|
|
||||||
},
|
|
||||||
"createdCell": function (td, cellData, rowData, row, col) {
|
|
||||||
// Add text-danger or text-success class to the <td>
|
|
||||||
if (cellData == 1) {
|
|
||||||
$(td).addClass('text-success');
|
|
||||||
} else {
|
|
||||||
$(td).addClass('text-danger');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "User Details",
|
|
||||||
"data": "id",
|
|
||||||
"render": function (data, type, row, meta) {
|
|
||||||
if (!row.role.includes("SuperAdmin") && !row.role.includes("SystemAdmin")) {
|
|
||||||
var detailsButton = `<button type="button" class="btn btn-danger details-btn" data-id="${data}">Details</button>`;
|
|
||||||
return detailsButton;
|
|
||||||
} else {
|
|
||||||
return ""; // Return empty string if role is "SuperAdmin" or "SystemAdmin"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Delete",
|
|
||||||
"data": "id",
|
|
||||||
"render": function (data, type, row, meta) {
|
|
||||||
if (!row.role.includes("SuperAdmin") && !row.role.includes("SystemAdmin")) {
|
|
||||||
var deleteButton = `<button type="button" class="btn btn-danger delete-btn" data-id="${data}">Delete</button>`;
|
|
||||||
return deleteButton;
|
|
||||||
} else {
|
|
||||||
return ""; // Return empty string if role is "SuperAdmin" or "SystemAdmin"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
responsive: true,
|
responsive: true,
|
||||||
order: [[5, 'asc']],
|
order: [[0, 'asc']],
|
||||||
})
|
|
||||||
|
|
||||||
// Attach click event listener to the button
|
|
||||||
$('#userDatatable tbody').on('change', '.role-select', function () {
|
|
||||||
const userId = $(this).data('id');
|
|
||||||
const role = $(this).val();
|
|
||||||
self.selectedRole[userId] = role;
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
// Attach click event listener to the update button
|
}
|
||||||
$('#userDatatable tbody').on('click', '.update-btn', function () {
|
|
||||||
const userId = $(this).data('id');
|
|
||||||
const thisUserRole = self.selectedRole[userId];
|
|
||||||
self.updateInfo(thisUserRole, userId);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Attach click event listener to the delete button
|
|
||||||
$('#itemDatatable tbody').on('click', '.delete-btn', function () {
|
|
||||||
const itemId = $(this).data('id');
|
|
||||||
self.deleteItem(itemId);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.loading = false;
|
|
||||||
},
|
|
||||||
async updateInfo(thisUserRole, thisUserId) {
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const response = await fetch(`/AdminAPI/UpdateUserStatusAndRole/${thisUserId}`, {
|
|
||||||
method: 'PATCH',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify(thisUserRole)
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error('Failed to update role');
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Role updated successfully');
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
console.error('Failed to update role:', error);
|
|
||||||
}
|
|
||||||
|
|
||||||
// console.log("User ID:" + thisUserId + " Role:" + thisUserRole);
|
|
||||||
|
|
||||||
//How to reload the table with new data from this.userList
|
|
||||||
|
|
||||||
this.fetchUsers();
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
<div class="col-6 col-md-6 col-lg-3">
|
<div class="col-6 col-md-6 col-lg-3">
|
||||||
<div class="card card-hover">
|
<div class="card card-hover">
|
||||||
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Rate">
|
<a asp-area="OTcalculate" asp-controller="HrDashboard" asp-action="Rate">
|
||||||
@ -29,6 +31,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div id="dateUpdate" class="card m-1">
|
<div id="dateUpdate" class="card m-1">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user