var confirmModal = { ar: "تأكيد", de: "Bestätigen", es: "Confirmar", en: "Confirm", fr: "Confirmer", }; var cancelModal = { ar: "إلغاء", de: "Abbrechen", es: "Cancelar", en: "Cancel", fr: "Annuler", }; function getCookie(name) { let cookieValue = null; if (document.cookie && document.cookie !== "") { const cookies = document.cookie.split(";"); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].trim(); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === name + "=") { cookieValue = decodeURIComponent( cookie.substring(name.length + 1) ); break; } } } return cookieValue; } function handleSidebarToggle() { // Delay the execution slightly to allow existing toggle logic to finish setTimeout(() => { const isOpen = !$('.oh-wrapper-main').hasClass('oh-wrapper-main--closed'); localStorage.setItem('sidebarOpen', isOpen); }, 50); } function addToSelectedId(newIds, storeKey) { ids = JSON.parse($(`#${storeKey}`).attr("data-ids") || "[]"); ids = [...ids, ...newIds.map(String)]; ids = Array.from(new Set(ids)); $(`#${storeKey}`).attr("data-ids", JSON.stringify(ids)); } function togglePublicComments() { if ($('#id_disable_comments').is(':checked')) { $('#id_public_comments').prop('checked', false); $('#id_public_comments_parent_div').hide(); } else { $('#id_public_comments_parent_div').show(); } } function attendanceDateChange(selectElement) { var selectedDate = selectElement.val(); let parentForm = selectElement.parents().closest("form"); var shiftId = parentForm.find("[name=shift_id]").val(); $.ajax({ type: "post", url: "/attendance/update-date-details", data: { csrfmiddlewaretoken: getCookie("csrftoken"), attendance_date: selectedDate, shift_id: shiftId, }, success: function (response) { parentForm.find("[name=minimum_hour]").val(response.minimum_hour); }, }); } function getAssignedLeave(employeeElement) { var employeeId = employeeElement.val(); $.ajax({ type: "get", url: "/payroll/get-assigned-leaves", data: { employeeId: employeeId }, dataType: "json", success: function (response) { let rows = ""; for (let index = 0; index < response.length; index++) { const element = response[index]; rows = rows + `${element.leave_type_id__name}${element.available_days}${element.carryforward_days}`; } $("#availableTableBody").html($(rows)); let newLeaves = ""; for (let index = 0; index < response.length; index++) { const leave = response[index]; newLeaves = newLeaves + ``; } $("#id_leave_type_id").html(newLeaves); removeHighlight(); }, }); } function selectSelected(viewId, storeKey = "selectedInstances") { ids = JSON.parse($(`#${storeKey}`).attr("data-ids") || "[]"); $.each(ids, function (indexInArray, valueOfElement) { $( `${viewId} .oh-sticky-table__tbody .list-table-row[value=${valueOfElement}]` ) .prop("checked", true) .change(); $(`${viewId} tbody .list-table-row[value=${valueOfElement}]`) .prop("checked", true) .change(); }); $( `${viewId} .oh-sticky-table__tbody .list-table-row,${viewId} tbody .list-table-row` ).change(function (e) { id = $(this).val(); ids = JSON.parse($(`#${storeKey}`).attr("data-ids") || "[]"); ids = Array.from(new Set(ids)); let index = ids.indexOf(id); if (!ids.includes(id)) { ids.push(id); } else { if (!$(this).is(":checked")) { ids.splice(index, 1); } } $(`#${storeKey}`).attr("data-ids", JSON.stringify(ids)); }); if (viewId) { reloadSelectedCount($(`#count_${viewId}`), storeKey); } } // Switch General Tab function switchGeneralTab(e) { // DO NOT USE GENERAL TABS TWICE ON A SINGLE PAGE. e.preventDefault(); e.stopPropagation(); let clickedEl = e.target.closest(".oh-general__tab-link"); let targetSelector = clickedEl.dataset.target; // Remove active class from all the tabs $(".oh-general__tab-link").removeClass("oh-general__tab-link--active"); // Remove active class to the clicked tab clickedEl.classList.add("oh-general__tab-link--active"); // Hide all the general tabs $(".oh-general__tab-target").addClass("d-none"); // Show the tab with the chosen target $(`.oh-general__tab-target${targetSelector}`).removeClass("d-none"); } function toggleReimbursmentType(element) { if (element.val() == "reimbursement") { $("#objectCreateModalTarget [name=attachment]").parent().show(); $("#objectCreateModalTarget [name=attachment]").attr("required", true); $("#objectCreateModalTarget [name=leave_type_id]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=cfd_to_encash]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=ad_to_encash]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=amount]") .parent() .show() .attr("required", true); $("#objectCreateModalTarget #availableTable") .hide() .attr("required", false); $("#objectCreateModalTarget [name=bonus_to_encash]") .parent() .hide() .attr("required", false); } else if (element.val() == "leave_encashment") { $("#objectCreateModalTarget [name=attachment]").parent().hide(); $("#objectCreateModalTarget [name=attachment]").attr("required", false); $("#objectCreateModalTarget [name=leave_type_id]") .parent() .show() .attr("required", true); $("#objectCreateModalTarget [name=cfd_to_encash]") .parent() .show() .attr("required", true); $("#objectCreateModalTarget [name=ad_to_encash]") .parent() .show() .attr("required", true); $("#objectCreateModalTarget [name=amount]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget #availableTable") .show() .attr("required", true); $("#objectCreateModalTarget [name=bonus_to_encash]") .parent() .hide() .attr("required", false); // #819 $("#objectCreateModalTarget [name=employee_id]").trigger("change"); } else if (element.val() == "bonus_encashment") { $("#objectCreateModalTarget [name=attachment]").parent().hide(); $("#objectCreateModalTarget [name=attachment]").attr("required", false); $("#objectCreateModalTarget [name=leave_type_id]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=cfd_to_encash]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=ad_to_encash]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget [name=amount]") .parent() .hide() .attr("required", false); $("#objectCreateModalTarget #availableTable") .hide() .attr("required", false); $("#objectCreateModalTarget [name=bonus_to_encash]") .parent() .show() .attr("required", true); } } function reloadSelectedCount(targetElement, storeKey = "selectedInstances") { var count = JSON.parse($(`#${storeKey}`).attr("data-ids") || "[]").length; id = targetElement.attr("id"); if (id) { id = id.split("count_")[1]; } if (count) { targetElement.html(count); targetElement.parent().removeClass("d-none"); $(`#unselect_${id}, #export_${id}, #bulk_udate_${id}`).removeClass( "d-none" ); } else { targetElement.parent().addClass("d-none"); $(`#unselect_${id}, #export_${id}, #bulk_udate_${id}`).addClass( "d-none" ); } } function removeHighlight() { setTimeout(function () { $(".toggle-highlight").removeClass("toggle-highlight"); }, 200); } function removeId(element, storeKey = "selectedInstances") { id = element.val(); viewId = element.attr("data-view-id"); ids = JSON.parse($(`#${storeKey}`).attr("data-ids") || "[]"); let elementToRemove = 5; if (ids[ids.length - 1] === id) { ids.pop(); } ids = JSON.stringify(ids); $(`#${storeKey}`).attr("data-ids", ids); } function bulkStageUpdate(canIds, stageId, preStageId) { $.ajax({ type: "POST", url: "/recruitment/candidate-stage-change?bulk=True", data: { csrfmiddlewaretoken: getCookie("csrftoken"), canIds: JSON.stringify(canIds), stageId: stageId, }, success: function (response, textStatus, jqXHR) { if (jqXHR.status === 200) { $(`#stageLoad` + preStageId).click(); $(`#stageLoad` + stageId).click(); } if (response.message) { Swal.fire({ title: response.message, text: `Total vacancy is ${response.vacancy}.`, // Using template literals icon: "info", confirmButtonText: "Ok", }); } }, }); } function updateCandStage(canIds, stageId, preStageId) { $.ajax({ type: "POST", url: "/recruitment/candidate-stage-change?bulk=false", data: { csrfmiddlewaretoken: getCookie("csrftoken"), canIds: canIds, stageId: stageId, }, success: function (response, textStatus, jqXHR) { if (jqXHR.status === 200) { $(`#stageLoad` + preStageId).click(); $(`#stageLoad` + stageId).click(); } if (response.message) { Swal.fire({ title: response.message, text: `Total vacancy is ${response.vacancy}.`, // Using template literals icon: "info", confirmButtonText: "Ok", }); } }, }); } function checkSequence(element) { var preStageId = $(element).data("stage_id"); var canIds = $(element).data("cand_id"); var stageOrderJson = $(element).attr("data-stage_order"); var stageId = $(element).val(); var parsedStageOrder = JSON.parse(stageOrderJson); var stage = parsedStageOrder.find((stage) => stage.id == stageId); var preStage = parsedStageOrder.find((stage) => stage.id == preStageId); var stageOrder = parsedStageOrder.map((stage) => stage.id); if ( stageOrder.indexOf(parseInt(stageId)) != stageOrder.indexOf(parseInt(preStageId)) + 1 && stage.type != "cancelled" ) { Swal.fire({ title: "Confirm", text: `Are you sure to change the candidate from ${preStage.stage} stage to ${stage.stage} stage`, icon: "info", showCancelButton: true, confirmButtonColor: "#008000", cancelButtonColor: "#d33", confirmButtonText: "Confirm", }).then(function (result) { if (result.isConfirmed) { updateCandStage(canIds, stageId, preStageId); } }); } else { updateCandStage(canIds, stageId, preStageId); } } function reloadMessage(e) { $("#reloadMessagesButton").click(); } function htmxLoadIndicator(e) { var target = $(e).attr("hx-target"); var table = $(target).find("table"); var card = $(target).find(".oh-card__body"); var kanban = $(target).find(".oh-kanban-card"); if (table.length) { table.addClass("is-loading"); table.find("th, td").empty(); } if (card.length) { card.addClass("is-loading"); } if (kanban.length) { kanban.addClass("is-loading"); } if (!table.length && !card.length && !kanban.length) { $(target).html(`
`); } } function ajaxWithResponseHandler(event) { $(event.target).each(function () { $.each(this.attributes, function () { if (this.specified && this.name === "hx-on-htmx-after-request") { eval(this.value); } }); }); } function handleHtmxTarget(event, path, verb) { var targetElement; var hxTarget = $(event.target).attr("hx-target"); if (hxTarget) { if (hxTarget === "this") { targetElement = $(event.target); } else if (hxTarget.startsWith("closest ")) { var selector = hxTarget.replace("closest ", "").trim(); targetElement = $(event.target).closest(selector); } else if (hxTarget.startsWith("find ")) { var selector = hxTarget.replace("find ", "").trim(); targetElement = $(event.target).find(selector).first(); } else if (hxTarget === "next") { targetElement = $(event.target).next(); } else if (hxTarget.startsWith("next ")) { var selector = hxTarget.replace("next ", "").trim(); targetElement = $(event.target).nextAll(selector).first(); } else if (hxTarget === "previous") { targetElement = $(event.target).prev(); } else if (hxTarget.startsWith("previous ")) { var selector = hxTarget.replace("previous ", "").trim(); targetElement = $(event.target).prevAll(selector).first(); } else { targetElement = $(hxTarget); } hxTarget = targetElement.length ? targetElement[0] : null; } else if (path && verb) { hxTarget = event.target; } return hxTarget; } function hxConfirm(element, messageText) { Swal.fire({ html: messageText, icon: "question", showCancelButton: true, confirmButtonColor: "#008000", cancelButtonColor: "#d33", confirmButtonText: "Confirm", cancelButtonText: "Cancel", reverseButtons: true, }).then((result) => { if (result.isConfirmed) { htmx.trigger(element, 'confirmed'); } else { element.checked = false return false } }); } function handleDownloadAndRefresh(event, url) { // Use in import_popup.html file event.preventDefault(); // Create a temporary hidden iframe to trigger the download const iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = url; document.body.appendChild(iframe); // Refresh the page after a short delay setTimeout(function () { document.body.removeChild(iframe); // Clean up the iframe window.location.reload(); // Refresh the page }, 500); // Adjust the delay as needed } function toggleCommentButton(e) { const $button = $(e).closest("form").find("#commentButton"); $button.toggle($(e).val().trim() !== ""); } function updateUserPanelCount(e) { var count = $(e) .closest(".oh-sticky-table__tr") .find(".oh-user-panel").length; setTimeout(() => { var $permissionCountSpan = $(e) .closest(".oh-permission-table--toggle") .parent() .find(".oh-permission-count"); var currentText = $permissionCountSpan.text(); var firstSpaceIndex = currentText.indexOf(" "); var textAfterNumber = currentText.slice(firstSpaceIndex + 1); var newText = count + " " + textAfterNumber; $permissionCountSpan.text(newText); }, 100); } function enlargeImage(src, $element) { $(".enlargeImageContainer").empty(); var enlargeImageContainer = $element .parents() .closest("li") .find(".enlargeImageContainer"); enlargeImageContainer.empty(); style = "width:100%; height:90%; box-shadow: 0 10px 10px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.2); background:white"; var enlargedImage = $("