%PDF- %PDF-
| Direktori : /home/opti/workflow/src/views/employee/ |
| Current File : /home/opti/workflow/src/views/employee/view.ejs |
<% include ../partials/header %>
<!-- ////////////////////////////////////////////////////////////////////////////-->
<% include ../partials/sidebar %>
<div class="app-content content">
<div class="content-wrapper">
<div class="content-header row">
</div>
<div class="content-body">
<!-- Breadcrumb starts-->
<div class="content-header-left col-md-6 col-12 mb-2">
<h3 class="content-header-title"><%= (employee.firstName !== null ? employee.firstName : '') + ' ' + ' ' + (employee.lastName !== null ? employee.lastName : '') %></h3>
<div class="row breadcrumbs-top">
<div class="breadcrumb-wrapper col-12">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Dashboard</a>
</li>
<li class="breadcrumb-item"><a href="/employee/all">Employees</a>
</li>
<li class="breadcrumb-item active">Employee Details
</li>
</ol>
</div>
</div>
</div>
<!-- Breadcrumb ends-->
<%- format_messages(messages) %>
<section id="dom">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<!-- <h4 class="card-title">DOM / jQuery events</h4> -->
<a class="heading-elements-toggle"><i class="la la-ellipsis-v font-medium-3"></i></a>
<div class="heading-elements">
<ul class="list-inline mb-0">
<li>
<span class="dropdown">
<button id="" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" class="btn btn-primary btn-sm dropdown-toggle dropdown-menu-right"><i class="icon icon-pencil"></i></button>
<span aria-labelledby="btnSearchDrop1" class="dropdown-menu mt-1 dropdown-menu-right">
<!-- <a data-toggle="modal" data-target="#editEmployeeDetail" class="dropdown-item"><i class="icon icon-pencil"></i>Edit Personal Detail</a> -->
<a data-toggle="modal" data-target="#editJobDetail" class="dropdown-item"><i class="icon icon-pencil"></i>Edit Job Detail</a>
<a data-toggle="modal" data-target="#editSalaryDetail" class="dropdown-item"><i class="icon icon-pencil"></i>Edit Salary Detail</a>
</span>
</span>
</li>
<li><a data-action="expand"><i class="ft-maximize"></i></a></li>
</ul>
</div>
</div>
<div class="card-content collapse show">
<div class="card-body card-dashboard">
<div class="card-content">
<div class="card-body">
<ul class="nav nav-tabs nav-top-border no-hover-bg">
<li class="nav-item ">
<a class="nav-link active" id="base-tabPersonal" data-toggle="tab" aria-controls="tabPersonal" href="#tabPersonal" aria-expanded="true">Personal Details</a>
</li>
<li class="nav-item">
<a class="nav-link" id="base-tabJob" data-toggle="tab" aria-controls="tabJob" href="#tabJob" aria-expanded="false">Job Details</a>
</li>
<li class="nav-item">
<a class="nav-link " id="base-tabSalary" data-toggle="tab" aria-controls="tabSalary" href="#tabSalary" aria-expanded="false">Salary Details</a>
</li>
<!-- <li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li> -->
</ul>
<div class="tab-content px-1 pt-1">
<div role="tabpanel" class="tab-pane active" id="tabPersonal" aria-expanded="true" aria-labelledby="base-tabPersonal">
<div class="row" style="justify-content: center;">
<div class="col-12">
<div class="text-center">
<div class="card-body">
<img src="/assets/images/users/<%= employee.image %>" style="min-width: 150px; max-width: 150px; min-height: 150px; background-color: #999;" class="rounded-circle height-150" alt="Card image">
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 col-12">
<div class="card box-shadow-1">
<div class="text-center">
<div class="card-body">
<h4 class="card-title"><%= (employee.firstName !== null ? employee.firstName : '') + ' ' + (employee.middleName !== null ? employee.middleName : '') + ' ' + (employee.lastName !== null ? employee.lastName : '') %></h4>
<% if(employee.grade){%>
<h6 class="card-subtitle text-muted"><%= employee.grade.title %></h6>
<% }else { %>
<h6 class="card-subtitle text-muted">No grade</h6>
<% } %>
<% if(employee.branch){%>
<h5 class="card-text">Branch: <%= employee.branch.name %></h5>
<% }else { %>
<h5 class="card-text">No branch</h5>
<% } %>
<h5 class="card-text">Email: <%= employee.email %></h5>
<h5 class="card-text">Phone: <%= employee.phone %></h5>
<h5 class="card-text" style="text-transform: capitalize;">Gender: <%= employee.gender %></h5>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="text-center ">
<a href="#" class="btn btn-social-icon mr-1 mb-1 btn-outline-facebook col-12">
<span class="la la-facebook"></span>
</a>
<a href="#" class="btn btn-social-icon mr-1 mb-1 btn-outline-twitter">
<span class="la la-twitter"></span>
</a>
<a href="#" class="btn btn-social-icon mb-1 btn-outline-linkedin">
<span class="la la-linkedin font-medium-4"></span>
</a>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="tabJob" aria-labelledby="base-tabJob">
<div class="row">
<% if(employee.employeeJob){ %>
<table class="table">
<tbody>
<tr>
<td>
<label for="gender">Job Category</label><br/>
<strong> <%= employee.employeeJob.jobTitle.category.title %></strong>
</td>
<td>
<label for="gender">Job Title</label><br/>
<strong> <%= employee.employeeJob.jobTitle.title %></strong>
</td>
<td>
<label for="gender">Employment Status</label><br/>
<strong> <%= employee.employeeJob.employmentStatus.title %></strong>
</td>
</tr>
<tr>
<td>
<label for="gender">Work Shift</label><br/>
<strong> <%= employee.employeeJob.workShift.title %></strong>
</td>
<td>
<label for="dob">Date of Employment</label><br/>
<strong> <%= moment(employee.employeeJob.dateOfEmployment).format("MMM Do YYYY") %></strong>
</td>
<td>
<label for="dob">Permanent on</label><br/>
<strong> <%= moment(employee.employeeJob.dateOfPermanency).format("MMM Do YYYY") %></strong>
</td>
</tr>
<tr>
<td>
<label for="dob">Contract Starts</label><br/>
<strong> <%= employee.employeeJob.contractStarts ? moment(employee.employeeJob.contractStarts).format("MMM Do YYYY") : "--" %></strong>
</td>
<td>
<label for="dob">Contract Ends</label><br/>
<strong> <%= employee.employeeJob.contractEnds ? moment(employee.employeeJob.contractEnds).format("MMM Do YYYY") : "--" %></strong>
</td>
<td>
</td>
</tr>
</tbody>
</table>
<% } else { %>
No Job Record
<% } %>
</div>
</div>
<div class="tab-pane " id="tabSalary" aria-labelledby="base-tabSalary">
<% if(employee.salary){ %>
<div class="row">
<div class="col-md-4">
<label for="gender">Pay Grade</label><br/>
<strong><%= employee.salary.payGrade.title %></strong>
</div>
<div class="col-md-4">
<label for="dob">Currency</label><br/>
<strong> NGN - Nigeria <%= /*employee.salary.payGrade.currency */%></strong>
</div>
<div class="col-md-4">
<label for="dob">Annual Payment</label><br/>
<strong> <%= numeral(employee.salary.annualPayment).format('0,0.00') %></strong>
</div>
<!-- <input type="hidden" name="salaryComponents" id="components" class="form-control"> -->
<div class="col-12"><br> <p></p>Salary Component</div>
<% type = "Earning" %>
<div class="col-md-6" >
<table class="table">
<thead>
<th> Earning</th>
<th> Amount/Percentage</th>
<!-- <th> </th> -->
</thead>
<tbody >
<% employee.salary.components.forEach( component => { %>
<% if(type != component.component.type){ %>
<% type = component.component.type %>
</tbody>
</table>
</div>
<div class="col-md-6">
<table class="table" >
<thead>
<th> <%= component.component.type %></th>
<th> Amount/Percentage</th>
<!-- <th></th> -->
</thead>
<tbody >
<% } %>
<tr>
<td ><%= component.component.title %></td>
<td >
<%= component.component.valueType %>
<br/><strong>
<% if(component.component.valueType == "Amount"){ %>
<%= numeral(component.value).format('0,0.00') %>
<% } else { %>
<%= component.value %>
<% } %>
</strong>
</td>
<!-- <td> </td> -->
</tr>
<% }) %>
</tbody>
</table>
</div>
</div>
<% } else { %>
No Job Record
<% } %>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- DOM - jQuery events table -->
</div>
</div>
</div>
<input type="hidden" name="_csrf" value="<%= _csrfToken %>" id="_csrf">
<div class="modal fade text-left" id="editSalaryDetail" tabindex="-1" role="dialog" aria-labelledby="myModalLabel35" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header" style="background-color:#1E9FF2;">
<h3 class="modal-title" id="myModalLabel35"> Edit Employee's Salary </h3>
</div>
<div class="modal-body">
<form action="/hr/jobs/employee/salary-edit" method="POST" enctype="multipart/form-data" id="form">
<input type="hidden" name="_csrf" readonly value="<%= _csrfToken %>" >
<input type="hidden" name="salaryId" readonly value="<%= employee.salary ? employee.salary.id : null %>" >
<input type="hidden" name="userId" readonly value="<%= employee.id %>" >
<div class="row">
<div class="col-md-4">
<label for="gender">Pay Grade</label>
<select class="custom-select" name="payGradeId" id="payGradeId" >
<option >Select Pay Grade</option>
<% payGrades.forEach( grade =>{ %>
<option data-grade="<%= JSON.stringify(grade) %>" value="<%= grade.id %>" id="grade<%= grade.id %>" <% if(employee.salary){ if(grade.id == employee.salary.payGrade.id ){ %> selected <% } }%> ><%= grade.title %> </option>
<% }) %>
</select>
</div>
<div class="row col-md-8 col-sm-12 col-lg-8">
<div class="col-md-4">
<label for="dob">Currency</label>
<div name="currency" id="currency" class=""><%= employee.salary ? "NGN - Nigeria" : "--" %></div>
<input type="hidden" name="currencyId" value="1" class="">
</div>
<div class="col-md-4">
<label for="dob">Minimum Salary</label>
<div name="minSalary" id="minSalary" ><%= employee.salary ? employee.salary.payGrade.minSalary : "--" %></div>
</div>
<div class="col-md-4">
<label for="dob">Maximum Salary</label>
<div name="maxSalary" id="maxSalary" ><%= employee.salary ? employee.salary.payGrade.maxSalary : "--" %></div>
</div>
</div>
<input type="hidden" name="salaryComponents" id="components" class="form-control">
<div class="col-12"><br> <p></p>Salary Component</div>
<% type = "Earning" %>
<div class="col-md-6" >
<table class="table">
<thead>
<th> Earning</th>
<th> Amount/Percentage</th>
<th> </th>
</thead>
<tbody >
<% salaryComponents.forEach( (component, index) => { %>
<% if(type != component.type){ %>
<% type = component.type %>
</tbody>
</table>
</div>
<div class="col-md-6">
<table class="table" >
<thead>
<th> <%= component.type %></th>
<th> Amount/Percentage</th>
</thead>
<tbody >
<% } %>
<tr>
<td ><%= component.title %></td>
<td >
<%= component.valueType %>
<input type="number" id="components<%= component.id %>" class="form-control components" value="<%= employee.salary.components[index] ? employee.salary.components[index].value : '' %>" oninput="calculateSalary()" min="0.00">
</td>
<td> </td>
</tr>
<% }) %>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-md-7 col-sm-12 text-center text-md-left">
</div>
<div class="col-md-5 col-sm-12">
<p class="lead">Total </p>
<div class="table-responsive">
<table class="table">
<tbody>
<tr>
<td>Total Earning</td>
<td class="text-right"><span class="_currencyLabel"></span><span id="totalEarning">0.00</span></td>
</tr>
<tr>
<td>Total Deduction</td>
<td class="text-right"><span class="_currencyLabel"></span><span id="totalDeduction">0.00</span></td>
</tr>
<tr>
<td>Annual Payment</td>
<td class=" text-right"><span class="_currencyLabel"></span><span id="annualPayment">0.00</span></td>
</tr>
<tr class="bg-grey bg-lighten-4">
<td class="text-bold-800">Monthly Payment</td>
<td class="text-bold-800 text-right pink"><span class="_currencyLabel"></span><span class="balanceDue" id="monthlyPayment">0.00</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div style="display: flex; justify-content: center;">
<button class="btn btn-success btn-min-width mr-1 mb-1" type="submit">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal fade text-left" id="editJobDetail" tabindex="-1" role="dialog" aria-labelledby="myModalLabel35" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header" style="background-color:#1E9FF2;">
<h3 class="modal-title" id="myModalLabel3"> Edit Employee Salary </h3>
</div>
<div class="modal-body">
<form action="/hr/jobs/employee/job-edit" method="POST" enctype="multipart/form-data">
<input type="hidden" name="_csrf" readonly value="<%= _csrfToken %>" >
<input type="hidden" name="jobId" readonly value="<%= employee.employeeJob ? employee.employeeJob.id : null %>" >
<input type="hidden" name="userId" readonly value="<%= employee.id %>" >
<div class="row">
<div class="col-md-4">
<label for="gender">Job Category</label>
<select class="custom-select" name="jobCategoryId" id="jobCategoryId" required >
<option >Select Job Category</option>
<% categories.forEach( category =>{ %>
<option value="<%= category.id %>" <% if(employee.employeeJob){ if(category.id == employee.employeeJob.jobTitle.category.id){ %> selected <% } } %>)><%= category.title %> </option>
<% }) %>
</select>
</div>
<div class="col-md-4">
<label for="gender">Job Title</label>
<select class="custom-select" name="jobTitleId" id="jobTitleId" required>
</select>
</div>
<div class="col-md-4">
<label for="gender">Employment Status</label>
<select class="custom-select" name="employmentStatusId" id="employmentStatusId" >
<% employmentStatuses.forEach( status =>{ %>
<option value="<%= status.id %>"><%= status.title %> </option>
<% }) %>
</select>
</div>
<div class="col-md-4">
<label for="gender">Work Shift</label>
<select class="custom-select" name="workShiftId" id="workShiftId" >
<% workShifts.forEach( shift =>{ %>
<option value="<%= shift.id %>"><%= shift.title %> </option>
<% }) %>
</select>
</div>
<div class="col-md-4">
<label for="dob">Date of Employment</label>
<input type="date" class="form-control " name="dateOfEmployment" id="doEmployment" placeholder="Date of Employment">
</div>
<div class="col-md-4">
<label for="dob">Permanent on</label>
<input type="date" class="form-control " name="dateOfPermanency" id="dateOfPermanency" placeholder="Date of Permanency">
</div>
<div class="col-md-4">
<label for="dob">Contract Starts</label>
<input type="date" class="form-control " name="contractStarts" id="contractStart" placeholder="Contract Effective Date">
</div>
<div class="col-md-4">
<label for="dob">Contract Ends</label>
<input type="date" class="form-control " name="contractEnds" id="contractEnd" placeholder="Contract End Date">
</div>
</div>
<div style="display: flex; justify-content: center;">
<button class="btn btn-success btn-min-width mr-1 mb-1" type="submit">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- ////////////////////////////////////////////////////////////////////////////-->
<% include ../partials/footer %>
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script>
<script>
var salaryComponents ;
$('table.employees').DataTable();
$(document).ready(function() {
// var jobCategoryId = $("#jobCategoryId").val();
$("#jobCategoryId").trigger('change');
$('#spinnerContainer').addClass('show');
$.ajax({
type: "POST", // Post / Get method
url: "/hr/jobs/get-salaryComponents", //Where form data is sent on submission
dataType: "text", // Data type, HTML, json etc.
data: {_csrf: "<%= _csrfToken %>" }, //Form variables
success: function (response) {
$('#spinnerContainer').removeClass('show');
response = JSON.parse(response);
// console.log(response.jobTitles)
if(response.status == "success"){
salaryComponents = response.salaryComponents;
// $("#jobTitleId").append("<option >Select Job Title</option>");
// jobTitles.forEach(job => {
// $("#jobTitleId").append(`<option value="${job.id}">${job.title}</option>`);
// });
}
else{
// toastr.error(response.msg, '', {"showMethod": "slideDown", "hideMethod": "slideUp", timeOut: 3000});
}
},
error:function (error){
$('#spinnerContainer').removeClass('show');
alert(error.message)
}
})
calculateSalary();
});
///same script exist in employee/view
$("#jobCategoryId").on('change', (event)=>{
$('#spinnerContainer').addClass('show');
$("#jobTitleId").html('');
var jobCategoryId = $("#jobCategoryId").val();
$.ajax({
type: "POST", // Post / Get method
url: "/hr/jobs/get-jobTitles", //Where form data is sent on submission
dataType: "text", // Data type, HTML, json etc.
data: {_csrf: "<%= _csrfToken %>", jobCategoryId }, //Form variables
success: function (response) {
$('#spinnerContainer').removeClass('show');
response = JSON.parse(response);
// console.log(response.jobTitles)
if(response.status == "success"){
var jobTitles = response.jobTitles;
$("#jobTitleId").append("<option >Select Job Title</option>");
jobTitles.forEach(job => {
$("#jobTitleId").append(`<option value="${job.id}">${job.title}</option>`);
});
}
else{
toastr.error(response.msg, '', {"showMethod": "slideDown", "hideMethod": "slideUp", timeOut: 3000});
}
},
error:function (error){
$('#spinnerContainer').removeClass('show');
alert(error.message)
}
})
})
$("#payGradeId").on('change', (event)=>{
// $('#spinnerContainer').addClass('show');
// $("#jobTitleId").html('');
var payGradeId = $("#payGradeId").val();
if(isNaN(payGradeId)){
$("#currency").html("--");
$("#minSalary").html('--');
$("#maxSalary").html("--");
}
else{
payGrade = $(`#grade${payGradeId}`).data('grade');
$("#currency").html("NGN - Nigeria");
$("#minSalary").html(payGrade.minSalary);
$("#maxSalary").html(payGrade.maxSalary);
}
})
$("#form").on('submit', event =>{
var components = []
$('.components').each( (index, component) =>{
components.push($(component).val());
// console.log(component)
})
$("#components").val(JSON.stringify(components));
// console.log($("#components").val())
// event.preventDefault();
})
function calculateSalary(){
var earnings = 0, deduction = 0, annualPayment = 0, monthlySalary = 0;
var basicSalary = parseFloat($(`#components${salaryComponents[0].id}`).val())
if(isNaN(basicSalary)){
console.log(basicSalary, "NAN")
return;
}
salaryComponents.forEach((component, index)=>{
var componentValue = parseFloat($(`#components${component.id}`).val());
if(!isNaN(componentValue)){ // console.log(componentValue);
if(component.type == "Earning"){
if(component.valueType == "Amount"){
earnings += componentValue;
}
else{
//its percentage
earnings += (componentValue * basicSalary)/100;
}
}
else{
//its deduction
if(component.valueType == "Amount"){
deduction += componentValue;
}
else{
//its percentage
deduction += (componentValue * basicSalary)/100;
}
}
}
})
annualPayment = parseFloat(earnings - deduction);
monthlySalary = parseFloat(annualPayment / 12)
// console.log(monthlySalary,annualPayment,earnings,deduction);
$("#annualPayment").html(numeral(annualPayment).format('0,0.000'))
$("#monthlyPayment").html(numeral(monthlySalary).format('0,0.000'))
$("#totalEarning").html(numeral(earnings).format('0,0.000'))
$("#totalDeduction").html(numeral(deduction).format('0,0.000'))
}
///script in employee/view ends here
</script>