From ce629c6d1b59c0a65ff46915fb099b58387bdbdc Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 15 Nov 2024 10:59:52 +0530 Subject: [PATCH] [UPDT] LEAVE : Multi company functionalites updations in all models and fixes --- leave/models.py | 13 +- leave/static/holiday/action.js | 422 ------------------ leave/templates/leave/assign_view.html | 328 -------------- leave/templates/leave/restrict/restrict.html | 4 + .../leave/restrict/restrict_form.html | 8 + .../leave/restrict/restrict_update_form.html | 8 + 6 files changed, 31 insertions(+), 752 deletions(-) delete mode 100644 leave/static/holiday/action.js delete mode 100644 leave/templates/leave/assign_view.html diff --git a/leave/models.py b/leave/models.py index e4509651e..1addfcb61 100644 --- a/leave/models.py +++ b/leave/models.py @@ -693,11 +693,12 @@ class LeaveRequest(HorillaModel): conditions = None if work_info.exists(): department_id = self.employee_id.employee_work_info.department_id + emp_comp_id = self.employee_id.employee_work_info.company_id requested_days = self.requested_days applicable_condition = False - if department_id != None: + if department_id != None and emp_comp_id != None: conditions = MultipleApprovalCondition.objects.filter( - department=department_id + department=department_id, company_id=emp_comp_id ).order_by("condition_value") if conditions != None: for condition in conditions: @@ -1075,6 +1076,14 @@ class RestrictLeave(HorillaModel): description = models.TextField( null=True, verbose_name=_("Description"), max_length=255 ) + company_id = models.ForeignKey( + Company, + null=True, + blank=True, + on_delete=models.CASCADE, + verbose_name=_("Company"), + ) + objects = HorillaCompanyManager(related_company_field="company_id") def __str__(self) -> str: return f"{self.title}" diff --git a/leave/static/holiday/action.js b/leave/static/holiday/action.js deleted file mode 100644 index 4506bc91d..000000000 --- a/leave/static/holiday/action.js +++ /dev/null @@ -1,422 +0,0 @@ -var rowMessages = { - ar: " تم الاختيار", - de: " Ausgewählt", - es: " Seleccionado", - en: " Selected", - fr: " Sélectionné", -}; - -var deleteHolidayMessages = { - ar: "هل تريد حقًا حذف جميع العطل المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten Feiertage löschen?", - es: "¿Realmente quieres eliminar todas las vacaciones seleccionadas?", - en: "Do you really want to delete all the selected holidays?", - fr: "Voulez-vous vraiment supprimer toutes les vacances sélectionnées?", -}; - -var no_rows_deleteMessages = { - ar: "لم تتم تحديد صفوف لحذف العطلات.", - de: "Es wurden keine Zeilen zum Löschen von Feiertagen ausgewählt.", - es: "No se han seleccionado filas para eliminar las vacaciones.", - en: "No rows are selected for deleting holidays.", - fr: "Aucune ligne n'a été sélectionnée pour supprimer les vacances.", -}; -var downloadMessages = { - ar: "هل ترغب في تنزيل القالب؟", - de: "Möchten Sie die Vorlage herunterladen?", - es: "¿Quieres descargar la plantilla?", - en: "Do you want to download the template?", - fr: "Voulez-vous télécharger le modèle ?", -}; - -function createHolidayHxValue() { - var pd = $(".oh-pagination").attr("data-pd"); - var hxValue = JSON.stringify(pd); - $("#holidayCreateButton").attr("hx-vals", `{"pd":${hxValue}}`); -} - -tickHolidayCheckboxes(); -function makeHolidayListUnique(list) { - return Array.from(new Set(list)); -} - -function getCurrentLanguageCode(callback) { - var languageCode = $("#main-section-data").attr("data-lang"); - var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; - if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); - } else { - $.ajax({ - type: "GET", - url: "/employee/get-language-code/", - success: function (response) { - var ajaxLanguageCode = response.language_code; - $("#main-section-data").attr("data-lang", ajaxLanguageCode); - callback( - allowedLanguageCodes.includes(ajaxLanguageCode) - ? ajaxLanguageCode - : "en" - ); - }, - error: function () { - callback("en"); - }, - }); - } -} - -function tickHolidayCheckboxes() { - var ids = JSON.parse($("#selectedHolidays").attr("data-ids") || "[]"); - uniqueIds = makeHolidayListUnique(ids); - toggleHighlight(uniqueIds); - click = $("#selectedHolidays").attr("data-clicked"); - if (click === "1") { - $(".all-holidays").prop("checked", true); - } - uniqueIds.forEach(function (id) { - $("#" + id).prop("checked", true); - }); - var selectedCount = uniqueIds.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; - if (selectedCount > 0) { - $("#unselectAllHolidays").css("display", "inline-flex"); - $("#exportHolidays").css("display", "inline-flex"); - $("#selectedShowHolidays").css("display", "inline-flex"); - $("#selectedShowHolidays").text(selectedCount + " -" + message); - } else { - $("#unselectAllHolidays").css("display", "none "); - $("#selectedShowHolidays").css("display", "none"); - $("#exportHolidays").css("display", "none"); - } - }); -} - -function addingHolidayIds() { - var ids = JSON.parse($("#selectedHolidays").attr("data-ids") || "[]"); - var selectedCount = 0; - - $(".all-holidays-row").each(function () { - if ($(this).is(":checked")) { - ids.push(this.id); - } else { - var index = ids.indexOf(this.id); - if (index > -1) { - ids.splice(index, 1); - $(".all-holidays").prop("checked", false); - } - } - }); - - ids = makeHolidayListUnique(ids); - toggleHighlight(ids); - selectedCount = ids.length; - - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; - $("#selectedHolidays").attr("data-ids", JSON.stringify(ids)); - if (selectedCount === 0) { - $("#selectedShowHolidays").css("display", "none"); - $("#exportHolidays").css("display", "none"); - $('#unselectAllHolidays').css("display", "none"); - } else { - $("#unselectAllHolidays").css("display", "inline-flex"); - $("#exportHolidays").css("display", "inline-flex"); - $("#selectedShowHolidays").css("display", "inline-flex"); - $("#selectedShowHolidays").text(selectedCount + " - " + message); - } - }); -} - -function selectAllHolidays() { - $("#selectedHolidays").attr("data-clicked", 1); - $("#selectedShowHolidays").removeAttr("style"); - var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); - - if (savedFilters && savedFilters["filterData"] !== null) { - var filter = savedFilters["filterData"]; - $.ajax({ - url: "/leave/holiday-select-filter", - data: { page: "all", filter: JSON.stringify(filter) }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; - - if (Array.isArray(employeeIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", employeeIds); - } - - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", true); - } - $("#selectedHolidays").attr("data-ids", JSON.stringify(employeeIds)); - - count = makeHolidayListUnique(employeeIds); - tickHolidayCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } else { - $.ajax({ - url: "/leave/holiday-select", - data: { page: "all" }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; - if (Array.isArray(employeeIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", employeeIds); - } - - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", true); - } - var previousIds = $("#selectedHolidays").attr("data-ids"); - $("#selectedHolidays").attr( - "data-ids", - JSON.stringify( - Array.from(new Set([...employeeIds, ...JSON.parse(previousIds)])) - ) - ); - count = makeHolidayListUnique(employeeIds); - tickHolidayCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } -} - -function unselectAllHolidays() { - $("#selectedHolidays").attr("data-clicked", 0); - $.ajax({ - url: "/leave/holiday-select", - data: { page: "all", filter: "{}" }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; - - if (Array.isArray(employeeIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", employeeIds); - } - - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", false); - $(".all-holidays").prop("checked", false); - } - var ids = JSON.parse($("#selectedHolidays").attr("data-ids") || "[]"); - var uniqueIds = makeListUnique(ids); - toggleHighlight(uniqueIds); - $("#selectedHolidays").attr("data-ids", JSON.stringify([])); - - count = []; - tickHolidayCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); -} - -function exportHolidays() { - var currentDate = new Date().toISOString().slice(0, 10); - var language_code = null; - getCurrentLanguageCode(function (code) { - language_code = code; - var confirmMessage = excelMessages[language_code]; - ids = []; - ids = JSON.parse($("#selectedHolidays").attr("data-ids")); - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "/leave/holiday-info-export", - data: { - ids: JSON.stringify(ids), - }, - dataType: "binary", - xhrFields: { - responseType: "blob", - }, - success: function (response) { - const file = new Blob([response], { - type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - }); - const url = URL.createObjectURL(file); - const link = document.createElement("a"); - link.href = url; - link.download = "holiday_leaves" + currentDate + ".xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } - }); - }); -} - -$("#bulkHolidaysDelete").click(function (e) { - e.preventDefault(); - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteHolidayMessages[languageCode]; - var textMessage = no_rows_deleteMessages[languageCode]; - ids = []; - ids.push($("#selectedHolidays").attr("data-ids")); - ids = JSON.parse($("#selectedHolidays").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "error", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - ids = []; - ids.push($("#selectedHolidays").attr("data-ids")); - ids = JSON.parse($("#selectedHolidays").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/leave/holidays-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); - } - }); - } - }); -}); - -$("#holidaysInfoImport").click(function (e) { - e.preventDefault(); - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = downloadMessages[languageCode]; - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "holidays-excel-template", - dataType: "binary", - xhrFields: { - responseType: "blob", - }, - success: function (response) { - const file = new Blob([response], { - type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - }); - const url = URL.createObjectURL(file); - const link = document.createElement("a"); - link.href = url; - link.download = "holiday_excel.xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } - }); - }); -}); - -$("#holidaysImportForm").submit(function (e) { - e.preventDefault(); - - // Create a FormData object to send the file - $("#uploadContainer").css("display", "none"); - $("#uploading").css("display", "block"); - var formData = new FormData(this); - - fetch("/leave/holidays-info-import", { - method: "POST", - dataType: "binary", - body: formData, - processData: false, - contentType: false, - headers: { - // Include the CSRF token in the headers - "X-CSRFToken": "{{ csrf_token }}", - }, - xhrFields: { - responseType: "blob", - }, - }) - .then((response) => { - if (response.ok) { - return response.blob(); // Use response.blob() to get the binary data - } else { - // Handle errors, e.g., show an error message - } - }) - .then((blob) => { - if (blob) { - // Create a Blob from the binary data - const file = new Blob([blob], { - type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - }); - const url = URL.createObjectURL(file); - const link = document.createElement("a"); - link.href = url; - link.download = "HolidayImportError.xlsx"; - document.body.appendChild(link); - link.click(); - window.location.href = "/leave/holiday-view"; - } else { - window.location.reload(); - } - }) - .catch((error) => {}); -}); diff --git a/leave/templates/leave/assign_view.html b/leave/templates/leave/assign_view.html deleted file mode 100644 index ccd63f188..000000000 --- a/leave/templates/leave/assign_view.html +++ /dev/null @@ -1,328 +0,0 @@ -{% extends 'index.html' %} {% block content %} {% load static %} {% load i18n %} -{% if messages %} -
- {% for message in messages %} -
-
- {{ message }} -
-
- {% endfor %} -
-{% endif %} - - - - - -
-
-

- {% trans "All Assigned Leaves" %} -

- - - -
-
- {% if available_leaves %} -
- - -
-
-
- - {% include "leave/leave_assign/assigned_leaves_filter.html" %} -
- {% endif %} -
- - -
-
-
- -
-
-
-
-
- -
- {% if available_leaves %} - {% include 'leave/leave_assign/assigned_leave.html'%} - {% else %} -
-
- -

- {% trans "There are no leave assigned at the moment." %} -

-
-
- {% endif %} -
- - - - - - - - - - - -{% endblock %} diff --git a/leave/templates/leave/restrict/restrict.html b/leave/templates/leave/restrict/restrict.html index 58fb4797f..23f643b89 100644 --- a/leave/templates/leave/restrict/restrict.html +++ b/leave/templates/leave/restrict/restrict.html @@ -63,6 +63,7 @@ {% trans "Leave Types" %}
{% trans "Description" %}
+
{% trans "Company" %}
{% if perms.leave.change_restrictleave or perms.leave.delete_restrictleave %}
{% trans "Actions" %}
{% endif %} @@ -114,6 +115,9 @@
{{day.description}}
+
+ {{day.company_id}} +
{% if perms.leave.change_restrictleave or perms.leave.delete_restrictleave %}
diff --git a/leave/templates/leave/restrict/restrict_form.html b/leave/templates/leave/restrict/restrict_form.html index 4b9180f14..bec65e489 100644 --- a/leave/templates/leave/restrict/restrict_form.html +++ b/leave/templates/leave/restrict/restrict_form.html @@ -88,6 +88,14 @@ {{form.description}} {{form.description.errors}} +
+
+
+ + {{form.company_id}} {{form.company_id.errors}} +
+
+