549 lines
19 KiB
JavaScript
549 lines
19 KiB
JavaScript
$(document).ready(function () {
|
|
$(document).on("click", ".btn-cancel2", function () {
|
|
$('#MainModal').modal('toggle');
|
|
});
|
|
|
|
$(".money").each(function () {
|
|
new Cleave('.money', {
|
|
numeral: true,
|
|
numeralThousandsGroupStyle: 'thousand'
|
|
});
|
|
});
|
|
|
|
$(".dateTime").each(function () {
|
|
new Cleave(this, {
|
|
time: true,
|
|
timePattern: ['h', 'm']
|
|
});
|
|
});
|
|
|
|
$(".dateTimeIrregular").each(function () {
|
|
new Cleave(this, {
|
|
time: true,
|
|
timePattern: ['h', 'm']
|
|
});
|
|
});
|
|
|
|
$("#organized").on("click", function () {
|
|
$('#step_workTimeOption').show();
|
|
$('#step_workTimeOptionIrregular').hide();
|
|
|
|
if ($('#step_workTimeOption').is(':visible')) {
|
|
$('.dateTime').each(function () {
|
|
if ($(this).val() === '') {
|
|
var currentCount = $('.groupBox').length;
|
|
updateAddButtonText(currentCount);
|
|
}
|
|
});
|
|
}
|
|
|
|
$('input[name="Command.IrregularShift.WorkshopIrregularShifts"]').prop('checked', false);
|
|
$('#irregularShiftsDateTime').addClass('disable');
|
|
$('.dateTimeIrregular').val('');
|
|
});
|
|
|
|
$("#disorganized").on("click", function () {
|
|
$('#step_workTimeOption').hide();
|
|
$('#step_workTimeOptionIrregular').show();
|
|
});
|
|
|
|
if (IsRegularWorkshop) {
|
|
$("#organized").prop('checked', true);
|
|
$("#disorganized").prop('checked', false);
|
|
$('#step_workTimeOption').show();
|
|
$('#step_workTimeOptionIrregular').hide();
|
|
|
|
// این مرحله هنگام چک کردن تعداد نوبت هستش
|
|
updateAddButtonText(indexShiftViewModel);
|
|
} else {
|
|
$("#organized").prop('checked', false);
|
|
$("#disorganized").prop('checked', true);
|
|
$('#step_workTimeOption').hide();
|
|
$('#step_workTimeOptionIrregular').show();
|
|
if ($("#hour").val() === "0" && $("#min").val() === "00") {
|
|
$('#computeTimeText').text('');
|
|
} else {
|
|
$('#computeTimeText').text($("#hour").val() + ' ساعت ' + $("#min").val() + ' دقیقه ');
|
|
}
|
|
|
|
updateIrregularButton();
|
|
}
|
|
|
|
|
|
|
|
$('input[name="Command.IrregularShift.WorkshopIrregularShifts"]').on('change', function () {
|
|
if ($('input[name="Command.IrregularShift.WorkshopIrregularShifts"]:checked').length > 0) {
|
|
$('#irregularShiftsDateTime').removeClass('disable');
|
|
$('#irregularShiftsStartDateTime').focus();
|
|
} else {
|
|
$('#irregularShiftsDateTime').addClass('disable');
|
|
}
|
|
|
|
$('.dateTimeIrregular').val('');
|
|
|
|
updateIrregularButton();
|
|
});
|
|
|
|
$('#BreakTime, #BreakTimeFirst').on('change', function () {
|
|
|
|
$('#BreakTime, #BreakTimeFirst').not(this).prop('checked', false);
|
|
|
|
var currentCount = $('.groupBox').length;
|
|
if (currentCount >= 2) {
|
|
showAlert('به دلیل داشتن 2 یا 3 نوبت، امکان فعال سازی ساعت استراحت ندارید', $(this));
|
|
$(this).prop('checked', false);
|
|
$("#hour").val("0");
|
|
$("#min").val("00");
|
|
$('#computeTimeText').text('');
|
|
$('#computeTime').addClass('disable');
|
|
return false;
|
|
}
|
|
|
|
if ($('#BreakTime').is(':Checked')) {
|
|
$("#hour").val("0");
|
|
$("#min").val("00");
|
|
$('#computeTimeText').text('');
|
|
$('#computeTime').removeClass('disable');
|
|
$("#TimeOnly").val('');
|
|
} else {
|
|
$("#hour").val("0");
|
|
$("#min").val("00");
|
|
$('#computeTimeText').text('');
|
|
$('#computeTime').addClass('disable');
|
|
$("#TimeOnly").val('');
|
|
}
|
|
});
|
|
|
|
$('select[name="selectCheckBreakTime"]').on('change', function () {
|
|
if (parseInt($("#hour").val(), 10) === 3) {
|
|
$("#min").val("00");
|
|
}
|
|
$('#computeTimeText').text($("#hour").val() + ' ساعت ' + $("#min").val() + ' دقیقه ');
|
|
|
|
$("#TimeOnly").val($("#hour").val() + ':' + $("#min").val());
|
|
});
|
|
|
|
|
|
|
|
$(".btnAddTimeWork").on("click", function () {
|
|
var currentCount = $('.groupBox').length;
|
|
var $inputs = $('.dateTime');
|
|
var allFilled = true;
|
|
|
|
if ($("#BreakTime").is(':Checked') && parseInt($("#hour").val(), 10) === 3) {
|
|
showAlert('به دلیل داشتن 3 ساعت استراحت، بیشتر از نوبت اول نمیتوانید ایجاد نمائید.', $(this));
|
|
return false;
|
|
}
|
|
|
|
$inputs.each(function () {
|
|
if ($(this).val() === '') {
|
|
allFilled = false;
|
|
showAlert('ابتدا ساعت شروع و پایان را وارد نمائید.', $(this));
|
|
}
|
|
});
|
|
|
|
if (!allFilled) {
|
|
return false;
|
|
}
|
|
|
|
if (currentCount >= 1) {
|
|
$('#BreakTime').prop('checked', false);
|
|
$('#BreakTimeFirst').prop('checked', false);
|
|
$('#computeTimeText').text('');
|
|
$("#hour").val("0");
|
|
$("#min").val("00");
|
|
$('#computeTime').addClass('disable');
|
|
} else {
|
|
$('#computeTime').removeClass('disable');
|
|
}
|
|
|
|
|
|
if (currentCount < 3) {
|
|
var namePlacement = "";
|
|
var namePlacementPersian = "";
|
|
|
|
switch (currentCount + 1) {
|
|
case 2:
|
|
namePlacement = "Second";
|
|
namePlacementPersian = "دوم";
|
|
break;
|
|
case 3:
|
|
namePlacement = "Third";
|
|
namePlacementPersian = "سوم";
|
|
break;
|
|
default:
|
|
}
|
|
|
|
var timeWorkHtml = `
|
|
<div class="groupBox timeWork">
|
|
<div class="row align-items-center justify-content-between">
|
|
<div class="col-3 d-flex align-items-center">
|
|
<input type="hidden" name="Command.ShiftViewModel[${currentCount}].Placement" value="${namePlacement}" />
|
|
<div class="timeWorkTitle">نوبت ${namePlacementPersian}</div>
|
|
</div>
|
|
<div class="col-4 d-flex align-items-center">
|
|
<div class="timeWorkTitle">از</div>
|
|
<input type="text" class="form-control text-center dateTime" name="Command.ShiftViewModel[${currentCount}].StartTime" placeholder="00:00" style="direction: ltr;" />
|
|
</div>
|
|
<div class="col-4 d-flex align-items-center">
|
|
<div class="timeWorkTitle">الی</div>
|
|
<input type="text" class="form-control text-center dateTime" name="Command.ShiftViewModel[${currentCount}].EndTime" placeholder="00:00" style="direction: ltr;" />
|
|
</div>
|
|
<div class="col-1 d-flex align-items-center justify-content-end">
|
|
<button type="button" class="btnRemoveTimeWork">
|
|
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<circle cx="11" cy="11" r="8.25" stroke="white"/>
|
|
<path d="M6.875 11H15.125" stroke="white"/>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>`;
|
|
|
|
$('#appendChildTimeWorkHtml').append(timeWorkHtml);
|
|
|
|
new Cleave(`input[name="Command.ShiftViewModel[${currentCount}].StartTime"]`, {
|
|
time: true,
|
|
timePattern: ['h', 'm']
|
|
});
|
|
|
|
new Cleave(`input[name="Command.ShiftViewModel[${currentCount}].EndTime"]`, {
|
|
time: true,
|
|
timePattern: ['h', 'm']
|
|
});
|
|
|
|
updateAddButtonText(currentCount + 1);
|
|
|
|
if (currentCount + 1 === 3) {
|
|
$(".btnAddTimeWork").hide();
|
|
}
|
|
|
|
// Update Remove button enable/disable state
|
|
updateRemoveButtons();
|
|
}
|
|
});
|
|
|
|
$(document).on("click", ".btnRemoveTimeWork", function () {
|
|
$(this).closest(".groupBox").remove();
|
|
var currentCount = $('.groupBox').length;
|
|
|
|
updateAddButtonText(currentCount);
|
|
|
|
if (currentCount < 3) {
|
|
$(".btnAddTimeWork").show();
|
|
}
|
|
|
|
// Update Remove button enable/disable state
|
|
updateRemoveButtons();
|
|
});
|
|
});
|
|
|
|
|
|
function updateRemoveButtons() {
|
|
$(".btnRemoveTimeWork").addClass("disable");
|
|
$(".btnRemoveTimeWork").last().removeClass("disable");
|
|
}
|
|
|
|
|
|
updateAddButtonText(indexShiftViewModel);
|
|
function updateAddButtonText(currentCount) {
|
|
if (currentCount === 1) {
|
|
$('.btnAppendChildTimeWork').text('افزودن نوبت دوم');
|
|
} else if (currentCount === 2) {
|
|
$('.btnAppendChildTimeWork').text('افزودن نوبت سوم');
|
|
}
|
|
|
|
let allFilled = true;
|
|
$('.dateTime').each(function () {
|
|
const value = $(this).val().trim();
|
|
if (value === "" || !timeValidCheck(value)) {
|
|
allFilled = false;
|
|
return false; // Break the loop
|
|
}
|
|
});
|
|
|
|
if (allFilled) {
|
|
$('.btn-register').removeClass('disable');
|
|
} else {
|
|
$('.btn-register').addClass('disable');
|
|
}
|
|
}
|
|
|
|
function updateIrregularButton() {
|
|
let allFilled = true;
|
|
$('.dateTimeIrregular').each(function () {
|
|
const value = $(this).val().trim();
|
|
if (value === "" || !timeValidCheck(value)) {
|
|
allFilled = false;
|
|
return false;
|
|
}
|
|
});
|
|
|
|
if (allFilled) {
|
|
$('.btn-register').removeClass('disable');
|
|
} else {
|
|
$('.btn-register').addClass('disable');
|
|
}
|
|
}
|
|
|
|
//******************** برای نوشتن تاریخ ********************
|
|
|
|
//$(document).on('input', ".dateTime", function () {
|
|
// var value = $(this).val();
|
|
// $(this).val(convertPersianNumbersToEnglish(value)).mask("00:00");
|
|
//});
|
|
|
|
$(document).on('keyup', ".dateTime", function () {
|
|
let $input = $(this);
|
|
let value = $input.val();
|
|
let lengthValue = value.length;
|
|
let currentCount = $('.groupBox').length;
|
|
|
|
if (lengthValue >= 5) {
|
|
if (!timeValidCheck(value)) {
|
|
showAlert('ساعت را به درستی وارد نمائید', $input);
|
|
updateAddButtonText(currentCount);
|
|
} else {
|
|
clearAlert($input);
|
|
// validateAllTimes();
|
|
updateAddButtonText(currentCount);
|
|
|
|
//focusNextTimeInput($input);
|
|
}
|
|
} else {
|
|
updateAddButtonText(currentCount);
|
|
}
|
|
});
|
|
|
|
$(document).on("keyup", ".dateTimeIrregular", function () {
|
|
let $input = $(this);
|
|
let value = $input.val();
|
|
let lengthValue = value.length;
|
|
|
|
if (lengthValue >= 5) {
|
|
if (!timeValidCheck(value)) {
|
|
showAlert('ساعت را به درستی وارد نمائید', $input);
|
|
} else {
|
|
clearAlert($input);
|
|
}
|
|
}
|
|
updateIrregularButton();
|
|
});
|
|
|
|
$(document).on("keyup", "#irregularShiftsStartDateTime", function () {
|
|
let $input = $(this);
|
|
let value = $input.val();
|
|
|
|
let timeRegex = /^([01]\d|2[0-3]):([0-5]\d)$/;
|
|
if (!timeRegex.test(value)) {
|
|
$("#irregularShiftsEndDateTime").val("");
|
|
return;
|
|
}
|
|
|
|
let [hours, minutes] = value.split(":").map(Number);
|
|
|
|
let hoursToAdd = 0;
|
|
if ($("#TwelveTwentyFour").is(":checked")) {
|
|
hoursToAdd = 12;
|
|
} else if ($("#TwentyFourTwentyFour").is(":checked")) {
|
|
hoursToAdd = 24;
|
|
} else if ($("#TwelveThirtySix").is(":checked")) {
|
|
hoursToAdd = 12;
|
|
} else if ($("#TwentyFourFortyEight").is(":checked")) {
|
|
hoursToAdd = 24;
|
|
}
|
|
|
|
let endHours = (hours + hoursToAdd) % 24;
|
|
let endTime = `${endHours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
|
|
|
|
let maxHours = hours + 12;
|
|
if (endHours > maxHours) {
|
|
$("#irregularShiftsEndDateTime").val("");
|
|
return;
|
|
}
|
|
|
|
$("#irregularShiftsEndDateTime").val(endTime);
|
|
|
|
updateIrregularButton();
|
|
});
|
|
|
|
$(document).on("keyup", "#irregularShiftsEndDateTime", function () {
|
|
if ($("#TwelveTwentyFour").is(":checked") || $("#TwelveThirtySix").is(":checked")) {
|
|
let $input = $(this);
|
|
let value = $input.val();
|
|
|
|
let timeRegex = /^([01]\d|2[0-3]):([0-5]\d)$/;
|
|
if (!timeRegex.test(value)) {
|
|
$('.btn-register').addClass('disable');
|
|
showAlert('بیشتر از 12 ساعت را نمی توانید وارد نمائید', $input);
|
|
return;
|
|
}
|
|
|
|
let [endHours, endMinutes] = value.split(":").map(Number);
|
|
|
|
let startValue = $("#irregularShiftsStartDateTime").val();
|
|
if (!timeRegex.test(startValue)) {
|
|
$('.btn-register').addClass('disable');
|
|
showAlert('بیشتر از 12 ساعت را نمی توانید وارد نمائید', $input);
|
|
return;
|
|
}
|
|
|
|
let [startHours, startMinutes] = startValue.split(":").map(Number);
|
|
let startTotalMinutes = startHours * 60 + startMinutes;
|
|
let endTotalMinutes = endHours * 60 + endMinutes;
|
|
|
|
let maxRangeInMinutes = 0;
|
|
if ($("#TwelveTwentyFour").is(":checked") || $("#TwelveThirtySix").is(":checked")) {
|
|
maxRangeInMinutes = 12 * 60;
|
|
}
|
|
//else if ($("#TwentyFourTwentyFour").is(":checked") || $("#TwentyFourFortyEight").is(":checked")) {
|
|
// maxRangeInMinutes = 24 * 60;
|
|
//}
|
|
|
|
let maxEndTotalMinutes = (startTotalMinutes + maxRangeInMinutes) % (24 * 60); // Wrap around 24 hours
|
|
|
|
let isValid = false;
|
|
if (startTotalMinutes <= maxEndTotalMinutes) {
|
|
isValid = endTotalMinutes >= startTotalMinutes && endTotalMinutes <= maxEndTotalMinutes;
|
|
} else {
|
|
isValid = endTotalMinutes >= startTotalMinutes || endTotalMinutes <= maxEndTotalMinutes;
|
|
}
|
|
|
|
if (!isValid) {
|
|
$('.btn-register').addClass('disable');
|
|
showAlert('بیشتر از 12 ساعت را نمی توانید وارد نمائید', $input);
|
|
return;
|
|
}
|
|
|
|
$('.btn-register').removeClass('disable');
|
|
updateIrregularButton();
|
|
}
|
|
});
|
|
|
|
function showAlert(message, inputElement) {
|
|
inputElement.addClass("errored");
|
|
$('.alert-msg').show().find('p').text(message);
|
|
setTimeout(function () {
|
|
clearAlert(inputElement);
|
|
}, 3500);
|
|
}
|
|
|
|
function clearAlert(inputElement) {
|
|
inputElement.removeClass("errored");
|
|
$('.alert-msg').hide().find('p').text('');
|
|
}
|
|
|
|
function timeValidCheck(value) {
|
|
const timePattern = /^([01]\d|2[0-3]):([0-5]\d)$/; // Validates HH:mm format
|
|
return timePattern.test(value);
|
|
}
|
|
|
|
//function validateAllTimes() {
|
|
// let timeRanges = [];
|
|
|
|
// $(".groupBox").each(function () {
|
|
// let startTime = $(this).find('input[name*="StartTime"]').val();
|
|
// let endTime = $(this).find('input[name*="EndTime"]').val();
|
|
|
|
// if (startTime.length === 5 && endTime.length === 5) {
|
|
// let startParts = startTime.split(':');
|
|
// let endParts = endTime.split(':');
|
|
// let startInMinutes = parseInt(startParts[0]) * 60 + parseInt(startParts[1]);
|
|
// let endInMinutes = parseInt(endParts[0]) * 60 + parseInt(endParts[1]);
|
|
// timeRanges.push({ start: startInMinutes, end: endInMinutes });
|
|
// }
|
|
// });
|
|
|
|
// // Check for conflicts and order
|
|
// for (let i = 0; i < timeRanges.length; i++) {
|
|
// for (let j = 0; j < i; j++) {
|
|
// if (timeRanges[i].start >= timeRanges[i].end) {
|
|
// showAlert('زمان شروع باید قبل از زمان پایان باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]'));
|
|
// return;
|
|
// }
|
|
|
|
// // Check for overlap with previous entries
|
|
// if (timeRanges[i].start < timeRanges[j].end && timeRanges[i].end > timeRanges[j].start) {
|
|
// showAlert('زمانها نباید تداخل داشته باشند', $(".groupBox").eq(i).find('input[name*="StartTime"]'));
|
|
// return;
|
|
// }
|
|
// // Check if the current start time is before the previous start time
|
|
// if (i > 0 && timeRanges[i].start < timeRanges[i - 1].start) {
|
|
// showAlert('ساعت جدید نباید کوچکتر از ساعتهای قبلی باشد', $(".groupBox").eq(i).find('input[name*="StartTime"]'));
|
|
// return;
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
//function focusNextTimeInput(currentInput) {
|
|
// var inputs = $(".dateTime");
|
|
// var currentIndex = inputs.index(currentInput);
|
|
|
|
// if (currentIndex !== -1 && currentIndex < inputs.length - 1) {
|
|
// $(inputs[currentIndex + 1]).focus();
|
|
// }
|
|
//}
|
|
|
|
//******************** برای نوشتن تاریخ ********************
|
|
|
|
function ajaxEditEmployeeSaveData() {
|
|
if ($('#BreakTime').prop('checked')) {
|
|
if ($('#hour').val() === "0" && $('#min').val() === "00") {
|
|
showAlert('لطفا ساعت یا دقیقه استراحت را مشخص نمایید', $('#hour, #min'));
|
|
return;
|
|
}
|
|
}
|
|
|
|
var data = $('#edit-employee-form').serializeArray();
|
|
var hasBreakTime = "false";
|
|
if ($('#BreakTime').prop('checked')) {
|
|
hasBreakTime = $("#BreakTime").prop("checked") ? "true" : "false";
|
|
} else if ($('#BreakTimeFirst').prop('checked')) {
|
|
hasBreakTime = $("#BreakTimeFirst").prop("checked") ? "true" : "false";
|
|
}
|
|
//var hasBreakTime = $("#BreakTime").prop("checked") ? "true" : "false";
|
|
var breakTimeValue = $("#TimeOnly").val();
|
|
|
|
data.push({ name: 'Command.BreakTime.HasBreakTimeValue', value: hasBreakTime });
|
|
data.push({ name: 'Command.BreakTime.BreakTimeValue', value: breakTimeValue });
|
|
|
|
var requestData = $.param(data);
|
|
|
|
|
|
|
|
$.ajax({
|
|
async: false,
|
|
dataType: 'json',
|
|
type: 'POST',
|
|
url: ajaxPostChangeEditEmployee,
|
|
headers: { "RequestVerificationToken": antiForgeryToken },
|
|
data: requestData,
|
|
success: function (response) {
|
|
if (response.success) {
|
|
isShiftChangedGlobal = true;
|
|
|
|
$('.alert-success-msg').show();
|
|
$('.alert-success-msg p').text(response.message);
|
|
setTimeout(function () {
|
|
$('.alert-success-msg').hide();
|
|
$('.alert-success-msg p').text('');
|
|
$('#btn-register').addClass('disable');
|
|
$('#MainModal').modal('hide');
|
|
loadDataAjax();
|
|
}, 2000);
|
|
} else {
|
|
$('.alert-msg').show();
|
|
$('.alert-msg p').text(response.message);
|
|
setTimeout(function () {
|
|
$('.alert-msg').hide();
|
|
$('.alert-msg p').text('');
|
|
}, 3500);
|
|
}
|
|
},
|
|
error: function (err) {
|
|
console.log(err);
|
|
}
|
|
});
|
|
}
|