File: /home/cafsindia/hrms_cafsinfotech_in/application/views/invalid_punch_request/manage.php
<?php
$this->load->view("partial/header");
$page_name = ucwords(str_replace("_"," ",$controller_name));
$prime_id = "prime_".$controller_name."_id";
/* PAGE TITLE AND BUTTONS- START */
$breadcrumb = "";
if($link_li_line){
$breadcrumb .= "<li class='dropdown'>
<a class='btn btn-xs btn-primary dropdown-toggle' type='button' id='dropdownMenu2' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
<i class='fa fa-plus-circle' aria-hidden='true'></i> Quick Links
</a>
<ul class='dropdown-menu dropdown-menu-left' aria-labelledby='dropdownMenu2'>
$link_li_line
</ul>
</li>";
}
$breadcrumb .="<li><a href='$site_url#Home'>Home</a></li>
<li><a href='".site_url($controller_name)."#$controller_name'>$page_name</a></li>
<li class='active'>List</li>";
?>
<style>
.tab-content{
overflow:hidden !important;
max-height: 10000px !important;
}
.custom-td {
min-width: 100px;
}
td.dataTables_empty {
height:40px !important;
padding: 20px;
text-align: center;
}
.card-body {
padding: 0px 20px;
}
#track_list th, #track_list td ,#details_list th, #details_list td {
text-align: center;
}
.btn-link {
text-decoration: none;
color: #007bff;
cursor: pointer;
}
#details_list >tbody>tr>td ,#track_list >tbody>tr>td {
padding:0px !important;
}
/* Reason color*/
span[name='reason'] {
/* color: #d9534f; */
font-weight: bold;
}
.btn-submit {
margin-right:30px;
float:right;
padding: 4px ;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.btn-submit:hover {
background-color: #870000;
}
form input[readonly] {
background-color: transparent !important;
border: none !important;
}
.bootstrap-datetimepicker-widget {
position: sticky !important;
top: auto !important;
}
.glyphicon-chevron-left, .glyphicon-chevron-right {
color: #FFFFFF !important;
}
</style>
<!-- MODULE TITLE !!! -->
<div class='row title_content'>
<div class='col-md-2 col-xs-4'>
<h1 class='page_txt' style="overflow: visible !important;"><?php echo $page_name;?></h1>
</div>
<div class='col-md-10 col-xs-8'>
<ol class="breadcrumb">
<?php echo $breadcrumb; ?>
</ol>
</div>
</div>
<div id="toolbar" class="form-inline">
<div class="col-md-12">
<?php //echo form_open("$controller_name/invalid_punch_log",array('id'=>'invalid_punch_form')); ?>
<!-- START DATE -->
<div class="form-group">
<?php
echo form_label('Start Date', 'start_date', array('class' => 'required'));
echo form_input(array('name' => 'start_date', 'id' => 'start_date', 'class' => 'form-control input-sm datepicker','placeholder' => 'Start Date'));
?>
</div>
<!-- END DATE -->
<div class="form-group">
<?php
echo form_label('End Date', 'end_date', array('class' => 'required'));
echo form_input(array('name' => 'end_date', 'id' => 'end_date', 'class' => 'form-control input-sm datepicker','placeholder' => 'End Date'));
?>
</div>
</div>
</div>
<div class="row" >
<div class="col-md-12 loader-container">
<div class="loader" style="text-align:center">
<span style="color:#CC3366;font-size:large"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Processing...</span>
</div>
</div>
<div class='col-md-12' id='table_div' style='display: none;'>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#request_punch"> Request punch </a></li>
<li><a data-toggle="tab" href="#track_status"> Request Status </a></li>
</ul>
<div class="tab-content">
<div id = "request_punch" class = "tab-pane fade in active" >
<div class='col-md-12' style='margin:10px;' id="rslt_info"></div>
</div>
<div id = "track_status" class = "tab-pane fade">
<div class='col-md-12' style='margin:10px;' id="track_info"></div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$(".datepicker").datetimepicker({format: 'DD-MM-YYYY'});
//CALLBACK FUNCTION
tos_posting_mon_day("4");
// return false;
$("#start_date,#end_date").on("dp.change",function(){
request_punch();
});
});
//Funtion onload for table display.
function request_punch(){
var start_date = $("#start_date").val();
var end_date = $("#end_date").val();
$('.loader').show();
if(start_date && end_date){
//Encryption
var key = '<?php echo $key; ?>';
var data = {start_date: start_date, end_date: end_date};
var encData = encrypt(key,data);
$.ajax({
type: 'POST',
url: '<?php echo site_url("$this->control_name/request_punch");?>',
data:encData,
contentType: 'text/plain',
success: function (response){
$('.loader').hide();
var rslt = JSON.parse(response);
if(rslt.success){
$('#table_div').show();
$("#rslt_info").html(rslt.table_content);
$("#track_info").html(rslt.track_content);
$(".datetimepicker").datetimepicker({ format: 'DD-MM-YYYY HH:mm:ss' });
$('#details_list').DataTable({
"processing": true,
"autoWidth" : false,
"columnDefs": [
{ "width": "50%", "targets": 5 }
],
language: {
lengthMenu: "<span style='margin-top:8px;margin-left:10px;'>Display</span> _MENU_ <span style='margin-top:8px;'>Records</span>",
searchPlaceholder: "Search records",
search: "",
},
});
$('#track_list').DataTable({
"processing": true,
"autoWidth" : false,
"columnDefs": [
{ "width": "35%", "targets": 7 }
],
language: {
lengthMenu: "<span style='margin-top:8px;margin-left:10px;'>Display</span> _MENU_ <span style='margin-top:8px;'>Records</span>",
searchPlaceholder: "Search records",
search: "",
},
});
}
$('#details_list').DataTable().draw();
$('#track_list').DataTable().draw();
$('input[type=search]').addClass('form-control input-sm select2');
$("select[name='table_length']").addClass('form-control input-sm');
},
complete: function(){
$('.loader').hide();
}
});
}else{
toastr.error("Please choose all the fields.!");
}
}
function submitForm(user_id, row, shift_date, validation_ids, entry_from, entry_to) {
var form_id = 'formData_' + row;
var form = $('#' + form_id);
var submit = $('#submit_' + row);
var previous_out_punch;
//FIRST INPUNCH SHOULD BE GREATER THAN ENTRY FROM DATE.
$.validator.addMethod("first_inpunch", function(value, element, entry_from){
var in_punch = moment(value, 'DD-MM-YYYY HH:mm:ss', true);
var first_inpunch = moment(entry_from, 'DD-MM-YYYY HH:mm:ss', true);
return (in_punch.isSameOrAfter(first_inpunch));
}, "First Inpunch should be Greater than " + entry_from + ".");
//FINAL OUTPUNCH SHOULD BE LESS THAN ENTRY TO DATE.
$.validator.addMethod("final_outpunch", function(value, element, entry_to){
var in_punch = moment(entry_to, 'DD-MM-YYYY HH:mm:ss', true);
var final_outpunch = moment(value, 'DD-MM-YYYY HH:mm:ss', true);
return (final_outpunch.isSameOrBefore(in_punch));
}, "Final outpunch should be lesser than " + entry_to + ".");
//CURRENT INPUNCH SHOULD BE GREATER THAN PREVIOUS OUTPUNCH STARTS.
$.validator.addMethod("inpunch_validation", function(value, element) {
var in_id = $(element).attr('id').split('_')[2];
var out_id = null;
// Find the previous out_id corresponding to the current in_id
for(var i = 1; i < validation_ids.length; i++){
if(validation_ids[i] === in_id){
out_id = validation_ids[i - 1];
break;
}
}
if(out_id){
var out_punch_str = $('#out_punch_' + out_id).val();
if(out_punch_str){
var in_punch = moment(value, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(out_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var diff_sec = in_punch.diff(out_punch, 'seconds');
return in_punch.isAfter(out_punch) && diff_sec > '2';
}
}
return true;
}, "In Punch should be greater than previous Out Punch - Minimum 2 seconds.");
//CURRENT OUTPUNCH SHOULD BE LESSER THAN NEXT INPUNCH STARTS.
$.validator.addMethod("outpunch_validation", function(value, element) {
var out_id = $(element).attr('id').split('_')[2];
var in_id = null;
validation_ids.forEach((id, index) => {
if(id === out_id && index < validation_ids.length - 1){
in_id = validation_ids[index + 1];
}
});
if(in_id){
var in_punch_str = $('#in_punch_' + in_id).val();
if(in_punch_str){
var in_punch = moment(in_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(value, 'DD-MM-YYYY HH:mm:ss', true);
var diff_sec = out_punch.diff(in_punch, 'seconds');
return out_punch.isBefore(in_punch) && diff_sec < '2';
}
}
return true;
}, "Out Punch Should be Less than Next In Punch - Minimum 2 seconds.");
//VALIDATE THE FORM.
var firstInpunchAdded = false;
var finalOutpunchAdded = false;
var rules = {};
validation_ids.forEach(function (curr_validation_id, index){
rules['in_punch_' + curr_validation_id] = {
required : true,
inpunches : curr_validation_id,
inpunch_prev : curr_validation_id,
inpunch_validation : curr_validation_id
};
if(!firstInpunchAdded && index === 0){
rules['in_punch_' + curr_validation_id].first_inpunch = entry_from
firstInpunchAdded = true;
}
rules['out_punch_' + curr_validation_id] = {
required : true,
outpunches : curr_validation_id,
outpunch_next : curr_validation_id,
outpunch_validation : curr_validation_id,
};
if(!finalOutpunchAdded && index === (validation_ids.length - 1)){
rules['out_punch_' + curr_validation_id].final_outpunch = entry_to
finalOutpunchAdded = true;
}
rules['remarks_' + curr_validation_id] = {
required : true
};
});
form.validate({
rules: rules,
errorPlacement: function (error, element) {
error.insertAfter(element);
},
});
if(form.valid()){
var formData = form.serializeArray();
$(submit).html("<i class='fa fa-spinner fa-spin'></i> Processing...").attr('disabled', 'disabled');
//Encryption
var key = '<?php echo $key; ?>';
var data = {user_id: user_id, row: row, shift_date: shift_date, formData: formData};
var encData = encrypt(key,data);
$.ajax({
type: 'POST',
url : '<?php echo site_url("$this->control_name/request_entry"); ?>',
data:encData,
contentType: 'text/plain',
success: function (response){
var rslt = JSON.parse(response);
$(submit).attr('disabled', false).html("Submit");
if(rslt.success){
$("#track_info").html(rslt.track_content);
toastr.success(rslt.message);
$('#row_' + rslt.row_id).remove();
request_punch();
$('#track_list').DataTable({
"autoWidth": false,
"columnDefs": [
{ "width": "50%", "targets": 8 }
],
language: {
lengthMenu: "<span style='margin-top:8px;margin-left:10px;'>Display</span> _MENU_ <span style='margin-top:8px;'>Records</span>",
searchPlaceholder: "Search records",
search: "",
},
});
}else{
toastr.error(rslt.message);
}
}
});
}
}
//TOS SETTING BASED DAY START AND END GET AND LAST PAYROLL MONTH BASED MIN DATE GET
function tos_posting_mon_day(entry_parameter,min_max_date_set){
if(entry_parameter){
var send_url = '<?php echo site_url("$controller_name/tos_posting_mon_day");?>'
//Encryption
var key = '<?php echo $key; ?>';
var data = {entry_parameter:entry_parameter};
var encData = encrypt(key,data);
$.ajax({
type: 'POST',
url: send_url,
data:encData,
contentType: 'text/plain',
success: function(data){
var rslt = JSON.parse(data);
var min_date = '';
if(rslt.success){
$('#start_date').val(rslt.min_date);
$('#end_date').val(rslt.max_date);
request_punch();
}
}
});
}
}
//collapseToggle for request punch.
function toggleAccordion(index){
$('[id^=collapseOne]').collapse('hide');
$(`#collapseOne${index}`).collapse('show');
}
//collapseToggle for request status.
function statusAccordion(index){
$('[id^=statusCollapse]').collapse('hide');
$(`#statusCollapse${index}`).collapse('show');
}
// Check if in_punch is greater than out_punch.
$.validator.addMethod("inpunches", function (value, element, params) {
var in_punch_str = $('#in_punch_' + params).val();
var out_punch_str = $('#out_punch_' + params).val();
var in_punch = moment(in_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(out_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
return !(in_punch.isValid() && out_punch.isValid() && in_punch.diff(out_punch) >= 0);
}, "In punch should be lesser than out punch.");
// check if in_punch is greater than out_punch.
$.validator.addMethod("outpunches", function (value, element, params) {
var in_punch_str = $('#in_punch_' + params).val();
var out_punch_str = $('#out_punch_' + params).val();
var in_punch = moment(in_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(out_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
return !(in_punch.isValid() && out_punch.isValid() && in_punch.diff(out_punch) >= 0);
}, "Out Punch should be Greater than In Punch.");
// check if in punch is the same day or the previous day.
$.validator.addMethod("inpunch_prev", function (value, element, params) {
var in_punch_str = $('#in_punch_' + params).val();
var out_punch_str = $('#out_punch_' + params).val();
var in_punch = moment(in_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(out_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
return (in_punch.isSame(out_punch, 'day') || in_punch.isSame(out_punch.clone().subtract(1, 'day'),'day'));
}, "In Punch should be the same day of outpunch or the previous day.");
// check if in punch is the same day or the next day.
$.validator.addMethod("outpunch_next", function (value, element, params) {
var in_punch_str = $('#in_punch_' + params).val();
var out_punch_str = $('#out_punch_' + params).val();
var in_punch = moment(in_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
var out_punch = moment(out_punch_str, 'DD-MM-YYYY HH:mm:ss', true);
return (out_punch.isSame(in_punch, 'day') || out_punch.isSame(in_punch.clone().add(1, 'day'),'day'));
}, "Out Punch should be the same day of inpunch or the next day.");
</script>
<?php $this->load->view("partial/footer"); ?>