438 lines
18 KiB
JavaScript
438 lines
18 KiB
JavaScript
|
||
class CheckboxNode {
|
||
constructor(id) {
|
||
this.id = id;
|
||
this.checkbox = document.getElementById(id);
|
||
this.children = [];
|
||
this.parents = [];
|
||
|
||
if (this.checkbox) {
|
||
this.checkbox.addEventListener("change", () => this.handleChange());
|
||
}
|
||
}
|
||
|
||
addChild(childNode) {
|
||
this.children.push(childNode);
|
||
childNode.parents.push(this);
|
||
}
|
||
|
||
setChecked(value) {
|
||
this.checkbox.checked = value;
|
||
}
|
||
|
||
isChecked() {
|
||
return this.checkbox.checked;
|
||
}
|
||
|
||
hasActiveParents() {
|
||
return this.parents.some(p => p.isChecked());
|
||
}
|
||
|
||
handleChange() {
|
||
if (this.isChecked()) {
|
||
// اگه تیک زد (یعنی نمیخوای انجامش بدی) → بقیه هم باید انجام نشن
|
||
this.children.forEach(child => {
|
||
if (!child.isChecked()) {
|
||
child.setChecked(true);
|
||
child.handleChange();
|
||
}
|
||
});
|
||
} else {
|
||
// اگه تیک رو برداشتی (یعنی میخوای انجامش بدی) → فقط اگه والد هنوز تیک داره، نمیتونی
|
||
this.parents.forEach(parent => {
|
||
if (parent.isChecked()) {
|
||
parent.setChecked(false);
|
||
parent.handleChange();
|
||
}
|
||
});
|
||
|
||
// حالا بچهها باید بررسی کنن که دیگه هیچ والد فعالی ندارن
|
||
this.children.forEach(child => {
|
||
if (!child.hasActiveParents() && child.isChecked()) {
|
||
child.setChecked(false);
|
||
child.handleChange();
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
$(document).ready(function () {
|
||
$('#responsive-data-table').DataTable({
|
||
"alengthMenu": [["All", 10, 50, 100, -1], ["All", 10, 50, 100, "All"]],
|
||
"order": [[0, 'asc']],
|
||
"dom": '<"row justify-content-between top-information"lf>rt<"row justify-content-between bottom-information"ip><"clear">',
|
||
"language": {
|
||
"emptyTable": "هیچ دادهای در جدول وجود ندارد",
|
||
"info": "نمایش _START_ تا _END_ از _TOTAL_ ردیف",
|
||
"infoEmpty": "نمایش 0 تا 0 از 0 ردیف",
|
||
"infoFiltered": "(فیلتر شده از _MAX_ ردیف)",
|
||
"infoThousands": ",",
|
||
"lengthMenu": "نمایش _MENU_ ردیف",
|
||
"processing": "در حال پردازش...",
|
||
"search": "جستجو:",
|
||
"zeroRecords": "رکوردی با این مشخصات پیدا نشد",
|
||
"paginate": {
|
||
"next": "بعدی",
|
||
"previous": "قبلی",
|
||
"first": "ابتدا",
|
||
"last": "انتها"
|
||
},
|
||
"aria": {
|
||
"sortAscending": ": فعال سازی نمایش به صورت صعودی",
|
||
"sortDescending": ": فعال سازی نمایش به صورت نزولی"
|
||
},
|
||
"autoFill": {
|
||
"cancel": "انصراف",
|
||
"fill": "پر کردن همه سلول ها با ساختار سیستم",
|
||
"fillHorizontal": "پر کردن سلول به صورت افقی",
|
||
"fillVertical": "پرکردن سلول به صورت عمودی"
|
||
},
|
||
"buttons": {
|
||
"collection": "مجموعه",
|
||
"colvis": "قابلیت نمایش ستون",
|
||
"colvisRestore": "بازنشانی قابلیت نمایش",
|
||
"copy": "کپی",
|
||
"copySuccess": {
|
||
"1": "یک ردیف داخل حافظه کپی شد",
|
||
"_": "%ds ردیف داخل حافظه کپی شد"
|
||
},
|
||
"copyTitle": "کپی در حافظه",
|
||
"pageLength": {
|
||
"-1": "نمایش همه ردیفها",
|
||
"_": "نمایش %d ردیف",
|
||
"1": "نمایش 1 ردیف"
|
||
},
|
||
"print": "چاپ",
|
||
"copyKeys": "برای کپی داده جدول در حافظه سیستم کلید های ctrl یا ⌘ + C را فشار دهید",
|
||
"csv": "فایل CSV",
|
||
"pdf": "فایل PDF",
|
||
"renameState": "تغییر نام",
|
||
"updateState": "به روز رسانی",
|
||
"excel": "فایل اکسل",
|
||
"createState": "ایجاد وضعیت جدول",
|
||
"removeAllStates": "حذف همه وضعیت ها",
|
||
"removeState": "حذف",
|
||
"savedStates": "وضعیت های ذخیره شده",
|
||
"stateRestore": "بازگشت به وضعیت %d"
|
||
},
|
||
"searchBuilder": {
|
||
"add": "افزودن شرط",
|
||
"button": {
|
||
"0": "جستجو ساز",
|
||
"_": "جستجوساز (%d)"
|
||
},
|
||
"clearAll": "خالی کردن همه",
|
||
"condition": "شرط",
|
||
"conditions": {
|
||
"date": {
|
||
"after": "بعد از",
|
||
"before": "بعد از",
|
||
"between": "میان",
|
||
"empty": "خالی",
|
||
"not": "نباشد",
|
||
"notBetween": "میان نباشد",
|
||
"notEmpty": "خالی نباشد",
|
||
"equals": "برابر باشد با"
|
||
},
|
||
"number": {
|
||
"between": "میان",
|
||
"empty": "خالی",
|
||
"gt": "بزرگتر از",
|
||
"gte": "برابر یا بزرگتر از",
|
||
"lt": "کمتر از",
|
||
"lte": "برابر یا کمتر از",
|
||
"not": "نباشد",
|
||
"notBetween": "میان نباشد",
|
||
"notEmpty": "خالی نباشد",
|
||
"equals": "برابر باشد با"
|
||
},
|
||
"string": {
|
||
"contains": "حاوی",
|
||
"empty": "خالی",
|
||
"endsWith": "به پایان می رسد با",
|
||
"not": "نباشد",
|
||
"notEmpty": "خالی نباشد",
|
||
"startsWith": "شروع شود با",
|
||
"notContains": "نباشد حاوی",
|
||
"notEndsWith": "پایان نیابد با",
|
||
"notStartsWith": "شروع نشود با",
|
||
"equals": "برابر باشد با"
|
||
},
|
||
"array": {
|
||
"empty": "خالی",
|
||
"contains": "حاوی",
|
||
"not": "نباشد",
|
||
"notEmpty": "خالی نباشد",
|
||
"without": "بدون",
|
||
"equals": "برابر باشد با"
|
||
}
|
||
},
|
||
"data": "اطلاعات",
|
||
"logicAnd": "و",
|
||
"logicOr": "یا",
|
||
"title": {
|
||
"0": "جستجو ساز",
|
||
"_": "جستجوساز (%d)"
|
||
},
|
||
"value": "مقدار",
|
||
"deleteTitle": "حذف شرط فیلتر",
|
||
"leftTitle": "شرط بیرونی",
|
||
"rightTitle": "شرط فرورفتگی"
|
||
},
|
||
"select": {
|
||
"cells": {
|
||
"1": "1 سلول انتخاب شد",
|
||
"_": "%d سلول انتخاب شد"
|
||
},
|
||
"columns": {
|
||
"1": "یک ستون انتخاب شد",
|
||
"_": "%d ستون انتخاب شد"
|
||
},
|
||
"rows": {
|
||
"1": "1ردیف انتخاب شد",
|
||
"_": "%d انتخاب شد"
|
||
}
|
||
},
|
||
"thousands": ",",
|
||
"searchPanes": {
|
||
"clearMessage": "همه را پاک کن",
|
||
"collapse": {
|
||
"0": "صفحه جستجو",
|
||
"_": "صفحه جستجو (٪ d)"
|
||
},
|
||
"count": "{total}",
|
||
"countFiltered": "{shown} ({total})",
|
||
"emptyPanes": "صفحه جستجو وجود ندارد",
|
||
"loadMessage": "در حال بارگیری صفحات جستجو ...",
|
||
"title": "فیلترهای فعال - %d",
|
||
"showMessage": "نمایش همه",
|
||
"collapseMessage": "بستن همه"
|
||
},
|
||
"loadingRecords": "در حال بارگذاری...",
|
||
"datetime": {
|
||
"previous": "قبلی",
|
||
"next": "بعدی",
|
||
"hours": "ساعت",
|
||
"minutes": "دقیقه",
|
||
"seconds": "ثانیه",
|
||
"amPm": [
|
||
"صبح",
|
||
"عصر"
|
||
],
|
||
"months": {
|
||
"0": "ژانویه",
|
||
"1": "فوریه",
|
||
"10": "نوامبر",
|
||
"4": "می",
|
||
"8": "سپتامبر",
|
||
"11": "دسامبر",
|
||
"3": "آوریل",
|
||
"9": "اکتبر",
|
||
"7": "اوت",
|
||
"2": "مارس",
|
||
"5": "ژوئن",
|
||
"6": "ژوئیه"
|
||
},
|
||
"unknown": "-",
|
||
"weekdays": [
|
||
"یکشنبه",
|
||
"دوشنبه",
|
||
"سهشنبه",
|
||
"چهارشنبه",
|
||
"پنجشنبه",
|
||
"جمعه",
|
||
"شنبه"
|
||
]
|
||
},
|
||
"editor": {
|
||
"close": "بستن",
|
||
"create": {
|
||
"button": "جدید",
|
||
"title": "ثبت جدید",
|
||
"submit": "ایجــاد"
|
||
},
|
||
"edit": {
|
||
"button": "ویرایش",
|
||
"title": "ویرایش",
|
||
"submit": "به روز رسانی"
|
||
},
|
||
"remove": {
|
||
"button": "حذف",
|
||
"title": "حذف",
|
||
"submit": "حذف",
|
||
"confirm": {
|
||
"_": "آیا از حذف %d خط اطمینان دارید؟",
|
||
"1": "آیا از حذف یک خط اطمینان دارید؟"
|
||
}
|
||
},
|
||
"multi": {
|
||
"restore": "واگرد",
|
||
"noMulti": "این ورودی را می توان به صورت جداگانه ویرایش کرد، اما نه بخشی از یک گروه",
|
||
"title": "مقادیر متعدد",
|
||
"info": "مقادیر متعدد"
|
||
},
|
||
"error": {
|
||
"system": "خطایی رخ داده (اطلاعات بیشتر)"
|
||
}
|
||
},
|
||
"decimal": ".",
|
||
"stateRestore": {
|
||
"creationModal": {
|
||
"button": "ایجاد",
|
||
"columns": {
|
||
"search": "جستجوی ستون",
|
||
"visible": "وضعیت نمایش ستون"
|
||
},
|
||
"name": "نام:",
|
||
"order": "مرتب سازی",
|
||
"paging": "صفحه بندی",
|
||
"search": "جستجو",
|
||
"select": "انتخاب",
|
||
"title": "ایجاد وضعیت جدید",
|
||
"toggleLabel": "شامل:",
|
||
"scroller": "موقعیت جدول (اسکرول)",
|
||
"searchBuilder": "صفحه جستجو"
|
||
},
|
||
"emptyError": "نام نمیتواند خالی باشد.",
|
||
"removeConfirm": "آیا از حذف %s مطمئنید؟",
|
||
"removeJoiner": "و",
|
||
"renameButton": "تغییر نام",
|
||
"renameLabel": "نام جدید برای $s :",
|
||
"duplicateError": "وضعیتی با این نام از پیش ذخیره شده.",
|
||
"emptyStates": "هیچ وضعیتی ذخیره نشده",
|
||
"removeError": "حذف با خطا موماجه شد",
|
||
"removeSubmit": "حذف وضعیت",
|
||
"removeTitle": "حذف وضعیت جدول",
|
||
"renameTitle": "تغییر نام وضعیت"
|
||
}
|
||
}
|
||
});
|
||
|
||
$(document).on('change', '.tableFindBtn', function () {
|
||
$(this).find(".save").prop("disabled", false);
|
||
});
|
||
|
||
//function handleCheckboxLogic1(employeeId) {
|
||
// const $createContract = $(`#FailureCreateContract_${employeeId}`);
|
||
// const $signContract = $(`#FailureSignContract_${employeeId}`);
|
||
// const $createCheckout = $(`#FailureCreateCheckout_${employeeId}`);
|
||
// const $signCheckout = $(`#FailureSignCheckout_${employeeId}`);
|
||
|
||
// const isFailureCreateContract = $createContract.is(':checked');
|
||
// const isFailureCreateCheckout = $createCheckout.is(':checked');
|
||
|
||
// if (isFailureCreateContract) {
|
||
// $signContract.prop('checked', true);
|
||
// $createCheckout.prop('checked', true);
|
||
// $signCheckout.prop('checked', true);
|
||
// } else {
|
||
// //$createCheckout.prop('checked', false);
|
||
// if (isFailureCreateCheckout) {
|
||
// $signCheckout.prop('checked', true);
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
//$('[id^="FailureCreateContract_"], [id^="FailureSignContract_"], [id^="FailureCreateCheckout_"], [id^="FailureSignCheckout_"]').on('change', function () {
|
||
// const employeeId = this.id.split('_')[1];
|
||
// handleCheckboxLogic1(employeeId);
|
||
//});
|
||
//$('[id^="FailureCreateContract_"]').each(function () {
|
||
// const employeeId = this.id.split('_')[1];
|
||
// handleCheckboxLogic1(employeeId);
|
||
//});
|
||
$('.real-checkbox').on('change', function () {
|
||
let employeeId = Number($(this).attr("data-employeeId"));
|
||
|
||
const $CreateContract = $(`#FailureCreateContract_${employeeId}`);
|
||
const $SignContract = $(`#FailureSignContract_${employeeId}`);
|
||
const $CreateCheckout = $(`#FailureCreateCheckout_${employeeId}`);
|
||
const $SignCheckout = $(`#FailureSignCheckout_${employeeId}`);
|
||
|
||
if (!$CreateContract.is(':checked')) {
|
||
$SignContract.prop('checked', false);
|
||
$CreateCheckout.prop('checked', false);
|
||
}
|
||
|
||
if (!$CreateCheckout.is(':checked')) {
|
||
$SignCheckout.prop('checked', false);
|
||
}
|
||
});
|
||
//$('[id^="FailureCreateContract_"]').each(function () {
|
||
// const employeeId = this.id.split('_')[1];
|
||
|
||
// const $notCreateContract = document.getElementById(`FailureCreateContract_${employeeId}`);
|
||
// const $notSignContract = document.getElementById(`FailureSignContract_${employeeId}`);
|
||
// const $notCreateCheckout = document.getElementById(`FailureCreateCheckout_${employeeId}`);
|
||
// const $notSignCheckout = document.getElementById(`FailureSignCheckout_${employeeId}`);
|
||
|
||
// $notCreateContract.addEventListener("change", () => handler());
|
||
// $notSignContract.addEventListener("change", () => handler());
|
||
// $notCreateCheckout.addEventListener("change", () => handler());
|
||
// $notSignCheckout.addEventListener("change", () => handler());
|
||
// //// تعریف روابط
|
||
// //$createContract.addChild($signContract);
|
||
// //$createContract.addChild($createCheckout);
|
||
// //$createCheckout.addChild($signCheckout);
|
||
|
||
// if (!$CreateContract.is(':checked')) {
|
||
// $SignContract.prop('checked', false);
|
||
// $CreateCheckout.prop('checked', false);
|
||
// }
|
||
|
||
// if (!$CreateCheckout.is(':checked')) {
|
||
// $SignCheckout.prop('checked', false);
|
||
// }
|
||
// function handler() {
|
||
// if ($notCreateContract.checked) {
|
||
// $notSignContract.checked = false;
|
||
// $notCreateCheckout.checked = false;
|
||
// $notSignCheckout.checked = false;
|
||
// }
|
||
|
||
// if ($notCreateCheckout.checked) {
|
||
// $notSignCheckout.checked = false;
|
||
// }
|
||
// }
|
||
//});
|
||
});
|
||
|
||
function save(EmployeeId) {
|
||
var command = {};
|
||
command.WorkshopId = Number($("#workshopId").val());
|
||
command.EmployeeId = Number(EmployeeId);
|
||
command.ComputeOptions = $('[data-ComputeOptions="' + EmployeeId + '"]').val();
|
||
command.BonusesOptions = $('[data-BonusesOptions="' + EmployeeId + '"]').val();
|
||
command.YearsOptions = $('[data-YearsOptions="' + EmployeeId + '"]').val();
|
||
|
||
command.CreateContract = $(`#FailureCreateContract_${EmployeeId}`).prop("checked");
|
||
command.SignContract = $(`#FailureSignContract_${EmployeeId}`).prop("checked");
|
||
command.CreateCheckout = $(`#FailureCreateCheckout_${EmployeeId}`).prop("checked");
|
||
command.SignCheckout = $(`#FailureSignCheckout_${EmployeeId}`).prop("checked");
|
||
|
||
$.ajax({
|
||
async: false,
|
||
dataType: 'json',
|
||
type: 'POST',
|
||
url: saveCreateUrl,
|
||
data: command,
|
||
headers: { "RequestVerificationToken": AntiForgeryToken },
|
||
success: function (response) {
|
||
if (response.isSuccedded) {
|
||
command = {};
|
||
console.log()
|
||
$('[data-save="' + EmployeeId + '"]').prop("disabled", true);
|
||
$.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message);
|
||
|
||
} else {
|
||
command = {};
|
||
$.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message);
|
||
|
||
}
|
||
},
|
||
failure: function (response) {
|
||
console.log(5, response);
|
||
|
||
}
|
||
});
|
||
} |