$(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 = `
نوبت ${namePlacementPersian}
از
الی
`; $('#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); } }); }