%PDF- %PDF-
Direktori : /home/opti/workflow/src/views/employee/ |
Current File : /home/opti/workflow/src/views/employee/createEmployee.ejs |
<% include ../partials/header %> <!-- ////////////////////////////////////////////////////////////////////////////--> <% include ../partials/sidebar %> <!-- <link rel="stylesheet" type="text/css" href="/app-assets/ekko-lightbox/dist/ekko-lightbox.css"> --> <link rel="stylesheet" type="text/css" href="/app-assets/vendors/css/forms/icheck/icheck.css"> <link rel="stylesheet" type="text/css" href="/app-assets/vendors/css/forms/icheck/custom.css"> <link rel="stylesheet" type="text/css" href="/app-assets/css/plugins/forms/checkboxes-radios.css"> <style> .modal-header .close { padding: 1rem; margin: -1rem -1rem -1rem; } .modal-header { background-color:#2196F3; } /* .dataTables_filter, .dataTables_info { display: none; } */ </style> <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">Jobs</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="/hr">Human Resources</a> </li> <li class="breadcrumb-item active">Jobs </li> </ol> </div> </div> </div> <!-- Breadcrumb ends--> <!-- <div class="text-center"> <a class="quick-btn text-red" href="/accounts/payments/create" > <i class="la la-plus fa-2x"></i> <span>New Payment</span> </a> </div> --> <%- format_messages(messages) %> <section > <form method="POST" action="/hr/employee/add" enctype="multipart/form-data" id="form"> <input type="hidden" name="_csrf" value="<%= _csrfToken %>"> <div id="accordionWrap2" role="tablist" aria-multiselectable="true"> <div class="card collapse-icon accordion-icon-rotate" > <div id="heading4" class="card-header"> <a data-toggle="collapse" data-parent="#accordionWrap2" href="#accordion4" aria-expanded="false" aria-controls="accordion" class="card-title lead collapsed">Job Detail<i class="la ft-chevrons-down"></i></a> </div> <div id="accordion4" role="tabpanel" aria-labelledby="heading4" class="collapse show" style=""> <div class="card-content"> <div class="card-body"> <div class="row"> <div class="col-md-4"> <label for="gender">Job Category</label> <select class="custom-select" name="jobCategoryId" id="jobCategoryId" > <option >Select Job Category</option> <% jobCategories.forEach( category =>{ %> <option value="<%= category.id %>"><%= 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="contractStart" 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="contractEnd" id="contractEnd" placeholder="Contract End Date"> </div> </div> </div> </div> </div> <div id="heading5" class="card-header"> <a data-toggle="collapse" data-parent="#accordionWrap2" href="#accordion5" aria-expanded="false" aria-controls="accordion" class="card-title lead collapsed">Salary<i class="la ft-chevrons-down"></i></a> </div> <div id="accordion5" role="tabpanel" aria-labelledby="heading5" class="collapse " style=""> <div class="card-content"> <div class="card-body"> <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 %>"><%= 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="">--</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" >--</div> </div> <div class="col-md-4"> <label for="dob">Maximum Salary</label> <div name="maxSalary" id="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 => { %> <% 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" oninput="calculateSalary()" min="0.00"> </td> <td> </td> </tr> <% }) %> </tbody> </table> </div> </div> </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> <div style="display: flex; justify-content: center;"> <button class="btn btn-success btn-min-width mr-1 mb-1" type="submit">Save</button> </div> </div> </div> </form> </section> </div> </div> </div> <!-- ////////////////////////////////////////////////////////////////////////////--> <input type="hidden" id="_csrf" name="_csrf" value="<%= _csrfToken %>"> <!-- /////////// --> <% include ../partials/footer %> <script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script> <script> var salaryComponents ; ///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("--"); $("._currencyLabel").html(""); } else{ payGrade = $(`#grade${payGradeId}`).data('grade'); $("#currency").html("NGN - Nigeria"); // $("#minSalary").html(numeral(payGrade.minSalary).format('0,0.00')); $("#minSalary").html(payGrade.minSalary); $("#maxSalary").html(payGrade.maxSalary); $("._currencyLabel").html("N"); } calculateSalary(); }) $("#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 // console.log(salaryComponents) $(document).ready(function(){ $('#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) } }) }) </script>