diff --git a/asset/cbv/asset_batch_no.py b/asset/cbv/asset_batch_no.py index 7d3b2135b..b7bd59f2d 100644 --- a/asset/cbv/asset_batch_no.py +++ b/asset/cbv/asset_batch_no.py @@ -40,19 +40,20 @@ class AssetBatchNoListView(HorillaListView): list view for batch number """ - model = AssetLot - filter_class = AssetBatchNoFilter - columns = [ - "lot_number", - "lot_description", - (_("Assets"), "assets_column"), - ] - def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("asset-batch-list") self.view_id = "AssetBatchList" + model = AssetLot + filter_class = AssetBatchNoFilter + + columns = [ + (_("Batch Number"), "lot_number"), + (_("Description"), "lot_description"), + (_("Assets"), "assets_column"), + ] + header_attrs = { "action": """ style = "width:180px !important" @@ -138,8 +139,46 @@ class AssetBatchDetailView(HorillaDetailedView): detail view of the page """ - title = _("Details") - header = False + def get_context_data(self, **kwargs: Any): + """ + Return context data with the title set to the contract's name. + """ + + context = super().get_context_data(**kwargs) + lot_number = context["assetlot"].lot_number + context["title"] = "Asset Batch:" + lot_number + return context + model = AssetLot - body = ["lot_number", (_("Asset"), "assets_column"), "lot_description"] - action_method = "detail_actions" + header = False + + cols = {"assets_column": 12, "lot_description": 12, "lot_number": 12} + body = { + (_("Assets"), "assets_column"), + (_("Description"), "lot_description"), + (_("Batch Number"), "lot_number"), + } + + actions = [ + { + "action": _("Edit"), + "icon": "create-outline", + "attrs": """ + class="oh-btn oh-btn--info w-100" + hx-get='{get_update_url}?instance_ids={ordered_ids}' + hx-target="#genericModalBody" + data-toggle="oh-modal-toggle" + data-target="#genericModal" + """, + }, + { + "action": _("Delete"), + "icon": "trash-outline", + "attrs": """ + class="oh-btn oh-btn--danger w-100" + hx-confirm="Do you want to delete this batch number?" + hx-post="{get_delete_url}?instance_ids={ordered_ids}" + hx-target="#AssetBatchList" + """, + }, + ] diff --git a/asset/cbv/asset_category.py b/asset/cbv/asset_category.py index 32b222a80..d3079cb18 100644 --- a/asset/cbv/asset_category.py +++ b/asset/cbv/asset_category.py @@ -214,43 +214,12 @@ class AssetCategoryNav(HorillaNavView): def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("asset-category-view-search-filter") - self.actions = [] - if self.request.user.has_perm("add_assetcategory"): - self.create_attrs = f""" - data-toggle="oh-modal-toggle" - data-target="#genericModal" - hx-get="{reverse('asset-category-creation')}" - hx-target="#genericModalBody" - """ - if self.request.user.has_perm("add_assetcategory"): - self.actions.append( - { - "action": _("Import"), - "attrs": f""" - onclick="getAssetImportTemplate();" - data-toggle="oh-modal-toggle" - data-target="#objectCreateModal" - hx-get="{reverse('asset-import')}" - hx-target="#objectCreateModalTarget" - style="cursor: pointer;" - """, - }, - ) - - if self.request.user.has_perm("view_asset"): - self.actions.append( - { - "action": _("Export"), - "attrs": f""" + self.create_attrs = f""" data-toggle="oh-modal-toggle" - data-target="#objectCreateModal" - hx-get="{reverse('asset-export-excel')}" - hx-target="#objectCreateModalTarget" - style="cursor: pointer;" - """, - } - ) - + data-target="#genericModal" + hx-get="{reverse('asset-category-creation')}" + hx-target="#genericModalBody" + """ # if self.request.user.has_perm( # "attendance.add_attendanceovertime" # ) or is_reportingmanager(self.request): @@ -281,3 +250,55 @@ class AssetCategoryNav(HorillaNavView): filter_instance = AssetFilter() filter_form_context_name = "form" search_swap_target = "#assetCategoryList" + + +class AssetCategoryDetailView(HorillaDetailedView): + """ + Detail view of the page + """ + + def get_context_data(self, **kwargs: Any): + """ + Return context data with the title set to the contract's name. + """ + + context = super().get_context_data(**kwargs) + asset_name = context["asset"].asset_name + context["title"] = asset_name + return context + + model = Asset + header = False + template_name = "cbv/asset_category/detail_view_action.html" + body = [ + (_("Tracking Id"), "asset_tracking_id"), + (_("Purchase Date"), "asset_purchase_date"), + (_("Cost"), "asset_purchase_cost"), + (_("Status"), "get_status_display"), + (_("Batch No"), "asset_lot_number_id__lot_number"), + (_("Category"), "asset_category_id"), + ] + + actions = [ + { + "action": _("Edit"), + "icon": "create-outline", + "attrs": """ + class="oh-btn oh-btn--info w-100" + hx-get='{get_update_url}?instance_ids={ordered_ids}' + hx-target="#genericModalBody" + data-toggle="oh-modal-toggle" + data-target="#genericModal" + """, + }, + { + "action": _("Delete"), + "icon": "trash-outline", + "attrs": """ + class="oh-btn oh-btn--danger w-100" + hx-confirm="Do you want to delete this asset?" + hx-post="{get_delete_url}?instance_ids={ordered_ids}" + hx-target="#genericModalBody" + """, + }, + ] diff --git a/asset/cbv/request_and_allocation.py b/asset/cbv/request_and_allocation.py index ba6522035..65e9a7510 100644 --- a/asset/cbv/request_and_allocation.py +++ b/asset/cbv/request_and_allocation.py @@ -310,6 +310,18 @@ class AssetDetailView(HorillaDetailedView): detail view of asset tab """ + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.body = [ + (_("Description"), "asset_id__asset_description"), + (_("Tracking Id"), "asset_id__asset_tracking_id"), + (_("Assigned Date"), "assigned_date"), + (_("Status"), "asset_detail_status"), + (_("Assigned by"), "assigned_by_employee_id"), + (_("Batch No"), "asset_id__asset_lot_number_id"), + # ("Category","asset_id__asset_category_id") + ] + action_method = "asset_detail_action" model = AssetAssignment @@ -319,15 +331,6 @@ class AssetDetailView(HorillaDetailedView): "subtitle": "asset_id__asset_category_id", "avatar": "get_avatar", } - body = [ - (_("Tracking Id"), "asset_id__asset_tracking_id"), - (_("Batch No"), "asset_id__asset_lot_number_id"), - (_("Assigned Date"), "assigned_date"), - (_("Status"), "asset_detail_status"), - (_("Assigned by"), "assigned_by_employee_id"), - (_("Description"), "asset_id__asset_description"), - # ("Category","asset_id__asset_category_id") - ] @method_decorator(login_required, name="dispatch") @@ -336,6 +339,15 @@ class AssetRequestDetailView(HorillaDetailedView): detail view of asset request tab """ + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.body = [ + (_("Asset Category"), "asset_category_id"), + (_("Requested Date"), "asset_request_date"), + (_("Request Description"), "description"), + (_("Status"), "status_col"), + ] + model = AssetRequest title = _("Details") header = { @@ -343,12 +355,6 @@ class AssetRequestDetailView(HorillaDetailedView): "subtitle": "asset_request_detail_subtitle", "avatar": "requested_employee_id__get_avatar", } - body = [ - (_("Asset Category"), "asset_category_id"), - (_("Requested Date"), "asset_request_date"), - (_("Request Description"), "description"), - (_("Status"), "get_asset_request_status_display"), - ] action_method = "detail_action_col" @@ -358,6 +364,18 @@ class AssetAllocationDetailView(HorillaDetailedView): detail view of asset allocation tab """ + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.body = [ + (_("Returned Status"), "return_status"), + (_("Allocated User"), "assigned_by_employee_id"), + (_("Allocated Date"), "assigned_date"), + (_("Return Date"), "return_date"), + (_("Asset"), "asset_id"), + (_("Return Description"), "return_condition"), + (_("Status"), "detail_status"), + ] + model = AssetAssignment title = _("Details") header = { @@ -365,15 +383,6 @@ class AssetAllocationDetailView(HorillaDetailedView): "subtitle": "asset_allocation_detail_subtitle", "avatar": "assigned_to_employee_id__get_avatar", } - body = [ - (_("Returned Status"), "return_status"), - (_("Allocated User"), "assigned_by_employee_id"), - (_("Allocated Date"), "assigned_date"), - (_("Return Date"), "return_date"), - (_("Asset"), "asset_id"), - (_("Return Description"), "return_condition"), - (_("Status"), "detail_status"), - ] action_method = "asset_allocation_detail_action" diff --git a/asset/models.py b/asset/models.py index 4ef817b2b..4473c7e73 100644 --- a/asset/models.py +++ b/asset/models.py @@ -14,7 +14,7 @@ from django.utils.translation import gettext_lazy as _ from base.horilla_company_manager import HorillaCompanyManager from base.models import Company from employee.models import Employee -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_views.cbv_methods import render_template @@ -104,12 +104,6 @@ class AssetLot(HorillaModel): context={"instance": self}, ) - def detail_actions(self): - return render_template( - path="cbv/asset_batch_no/detail_actions.html", - context={"instance": self}, - ) - def get_update_url(self): """ This method to get update url @@ -183,10 +177,11 @@ class Asset(HorillaModel): def __str__(self): return f"{self.asset_name}-{self.asset_tracking_id}" - def action_column(self): - return render_template( - path="asset/action_column.html", context={"instance": self} - ) + def get_status_display(self): + """ + Display status + """ + return dict(self.ASSET_STATUS).get(self.asset_status) def detail_view_action(self): """ @@ -194,14 +189,10 @@ class Asset(HorillaModel): """ return render_template( - path="cbv/asset/detail_action.html", + path="cbv/asset_category/detail_view_action.html", context={"instance": self}, ) - def asset_detail(self): - url = reverse_lazy("asset-information", kwargs={"pk": self.pk}) - return url - def get_update_url(self): """ This method to get update url @@ -273,9 +264,7 @@ class AssetDocuments(HorillaModel): asset_report = models.ForeignKey( "AssetReport", related_name="documents", on_delete=models.CASCADE ) - file = models.FileField( - upload_to="asset/asset_report/documents/", blank=True, null=True - ) + file = models.FileField(upload_to=upload_path, blank=True, null=True) objects = models.Manager() class Meta: @@ -294,7 +283,7 @@ class ReturnImages(HorillaModel): - image: A FileField for uploading the image file (optional). """ - image = models.FileField(upload_to="asset/return_images/", blank=True, null=True) + image = models.FileField(upload_to=upload_path, blank=True, null=True) class AssetAssignment(HorillaModel): @@ -515,31 +504,6 @@ class AssetAssignment(HorillaModel): date_col=date_col, ) - def get_asset_of_offboarding_employee(self): - url = f"{reverse('asset-request-allocation-view')}?assigned_to_employee_id={self.assigned_to_employee_id.id}" - return url - - def get_send_mail_employee_link(self): - if not self.assigned_to_employee_id: - return "" - url = reverse( - "send-mail-employee", kwargs={"emp_id": self.assigned_to_employee_id.id} - ) - title = _("Send Mail") - html = f""" - - - - """ - return format_html(html) - class AssetRequest(HorillaModel): """ diff --git a/asset/static/src/asset/dashboard.js b/asset/static/src/asset/dashboard.js index 88d3045fb..ed9e860e4 100644 --- a/asset/static/src/asset/dashboard.js +++ b/asset/static/src/asset/dashboard.js @@ -1,225 +1,44 @@ staticUrl = $("#statiUrl").attr("data-url"); $(document).ready(function () { - // function available_asset_chart(dataSet) { - // var Asset_available_chart = document.getElementById("assetAvailableChart"); - // if (Asset_available_chart) { - // var assetAvailableChartChart = new Chart(Asset_available_chart, { - // type: "pie", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // emptyImageSrc: dataSet.emptyImageSrc, - // message: dataSet.message, - // }, - // plugins: [ - // { - // afterRender: (assetAvailableChartChart) => emptyAssetAvialabeChart(assetAvailableChartChart), - // }, - // ], - // }); - // } - // } - function available_asset_chart(dataSet) { var Asset_available_chart = document.getElementById("assetAvailableChart"); if (Asset_available_chart) { - const ctx = Asset_available_chart.getContext('2d'); - - // Load center icon image - const centerImage = new Image(); - centerImage.src = "/static/horilla_theme/assets/img/icons/asset-chart.svg"; // Adjust path as needed - - var assetAvailableChartChart = new Chart(ctx, { - type: "doughnut", // Changed from pie to doughnut + var assetAvailableChartChart = new Chart(Asset_available_chart, { + type: "pie", data: { labels: dataSet.labels, - datasets: [{ - data: dataSet.dataset[0].data, // Assuming your dataset structure - backgroundColor: dataSet.dataset[0].backgroundColor || ['#cfe9ff', '#ffc9de', '#e6ccff', '#ffeb99', '#d4edda'], // Default colors - borderWidth: 0 - }], + datasets: dataSet.dataset, emptyImageSrc: dataSet.emptyImageSrc, message: dataSet.message, }, - options: { - cutout: '70%', // Creates the doughnut hole - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { - position: 'bottom', - labels: { - usePointStyle: true, - pointStyle: 'circle', - padding: 20, - font: { - size: 12 - }, - color: '#000' - } - } - } - }, plugins: [ - { - id: 'centerIcon', - afterDraw(chart) { - if (!centerImage.complete) return; // Wait till image is loaded - const ctx = chart.ctx; - const size = 70; - const centerX = chart.getDatasetMeta(0).data[0].x; // Center X of the doughnut - const centerY = chart.getDatasetMeta(0).data[0].y; // Center Y of the doughnut - ctx.drawImage( - centerImage, - centerX - size / 2, - centerY - size / 2, - size, - size - ); - } - }, { afterRender: (assetAvailableChartChart) => emptyAssetAvialabeChart(assetAvailableChartChart), - } - ] + }, + ], }); } } - // function asset_category_chart(dataSet) { - // var Asset_category_chart = document.getElementById("assetCategoryChart"); - // if (Asset_category_chart) { - // var assetCategoryChart = new Chart(Asset_category_chart, { - // type: "bar", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // emptyImageSrc: dataSet.emptyImageSrc, - // message: dataSet.message, - // }, - // plugins: [ - // { - // afterRender: (assetCategoryChart) => emptyAssetAvialabeChart(assetCategoryChart), - // }, - // ], - // }); - // } - // } function asset_category_chart(dataSet) { - const ctx = document.getElementById('assetCategoryChart'); - if (!ctx) return; - - const chartCtx = ctx.getContext('2d'); - const labels = dataSet.labels || []; - - // Extract data from your existing dataset structure - const datasets = dataSet.dataset || []; - const values = datasets.length > 0 ? datasets[0].data || [] : []; - - // Different pastel colors for each item - const colors = [ - '#a5b4fc', - '#fca5a5', - '#fcd34d', - '#c084fc', - '#7dd3fc', - '#bef264', - '#fdba74' - ]; - - const visibility = new Array(labels.length).fill(true); - - const chart = new Chart(chartCtx, { - type: 'bar', - data: { - labels: labels, - datasets: [{ - label: datasets.length > 0 ? datasets[0].label || 'Asset Count' : 'Asset Count', - data: values, - backgroundColor: colors, - borderRadius: 20, - barPercentage: 0.6, - categoryPercentage: 0.6 - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { display: false }, - tooltip: { enabled: true } - }, - scales: { - y: { - beginAtZero: true, - max: Math.max(...values) + 20 || 100, - ticks: { - stepSize: 5, - color: '#6b7280', - font: { size: 12 } + var Asset_category_chart = document.getElementById("assetCategoryChart"); + if (Asset_category_chart) { + var assetCategoryChart = new Chart(Asset_category_chart, { + type: "bar", + data: { + labels: dataSet.labels, + datasets: dataSet.dataset, + emptyImageSrc: dataSet.emptyImageSrc, + message: dataSet.message, }, - grid: { - drawBorder: false, - color: '#e5e7eb', - display: true // Show Y-axis grid lines - } - }, - x: { - ticks: { display: false }, - grid: { display: false }, - border: { display: true, color: '#d1d5db' } - } - } - } - }); - - // Create legend dynamically - const legendContainer = document.getElementById('assetCategoryLegend'); - if (legendContainer) { - // Clear existing legend - legendContainer.innerHTML = ''; - - // Create legend items flowing naturally like "Joinings Per Month" - const legendWrapper = document.createElement('div'); - legendWrapper.className = 'mt-4 flex justify-center flex-wrap gap-3 text-xs'; - - labels.forEach((label, index) => { - const legendItem = document.createElement('div'); - legendItem.className = 'flex items-center gap-2 cursor-pointer'; - - const colorDot = document.createElement('span'); - - colorDot.style.cssText = ` - background:${colors[index]}; transition: 0.3s;`; - colorDot.className ='w-4 h-4 rounded-full inline-block'; - - const labelText = document.createElement('span'); - labelText.textContent = label; - labelText.style.cssText = 'font-size: 14px; color: #374151; font-weight: 400; transition: text-decoration 0.3s; white-space: nowrap;'; - - legendItem.appendChild(colorDot); - legendItem.appendChild(labelText); - legendWrapper.appendChild(legendItem); - - // Add click event listener - legendItem.addEventListener('click', () => { - visibility[index] = !visibility[index]; - - // Update chart data - chart.data.datasets[0].data = values.map((val, i) => visibility[i] ? val : 0); - chart.data.datasets[0].backgroundColor = colors.map((col, i) => visibility[i] ? col : '#e5e7eb'); - chart.update(); - - // Update legend visuals - colorDot.style.opacity = visibility[index] ? '1' : '0.4'; - labelText.style.textDecoration = visibility[index] ? 'none' : 'line-through'; + plugins: [ + { + afterRender: (assetCategoryChart) => emptyAssetAvialabeChart(assetCategoryChart), + }, + ], }); - }); - - // Append the wrapper to the container - legendContainer.appendChild(legendWrapper); } - } + } $.ajax({ type: "GET", diff --git a/asset/static/src/asset_category/assetCategoryView.js b/asset/static/src/asset_category/assetCategoryView.js index ebbb492be..82ab8f9fc 100644 --- a/asset/static/src/asset_category/assetCategoryView.js +++ b/asset/static/src/asset_category/assetCategoryView.js @@ -28,7 +28,22 @@ function getCurrentLanguageCode(callback) { if (allowedLanguageCodes.includes(languageCode)) { callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } } diff --git a/asset/templates/cbv/asset_category/detail_view_action.html b/asset/templates/cbv/asset_category/detail_view_action.html new file mode 100644 index 000000000..658811c57 --- /dev/null +++ b/asset/templates/cbv/asset_category/detail_view_action.html @@ -0,0 +1,19 @@ +{% load i18n %} +{% include 'generic/horilla_detailed_view.html'%} + +{% if messages %} +
+ {% for message in messages %} +
+
+ {{ message }} +
+
+ +{%if message.tags == "oh-alert--success" %} + + {% endif %} + {% endfor %} +
+{% endif %} \ No newline at end of file diff --git a/asset/templates/cbv/asset_history/assign_condition.html b/asset/templates/cbv/asset_history/assign_condition.html index 44c5652c0..17606877d 100644 --- a/asset/templates/cbv/asset_history/assign_condition.html +++ b/asset/templates/cbv/asset_history/assign_condition.html @@ -12,5 +12,5 @@ style="width:40px;height:40px" > + {% endfor %} -{% endfor %} diff --git a/asset/templates/cbv/asset_history/return_condition.html b/asset/templates/cbv/asset_history/return_condition.html index 775fdfa05..8586a37e3 100644 --- a/asset/templates/cbv/asset_history/return_condition.html +++ b/asset/templates/cbv/asset_history/return_condition.html @@ -12,5 +12,5 @@ style="width:40px;height:40px" > + {% endfor %} -{% endfor %} diff --git a/asset/templates/cbv/request_and_allocation/asset_detail_action.html b/asset/templates/cbv/request_and_allocation/asset_detail_action.html index 08f97820f..341fc7ae6 100644 --- a/asset/templates/cbv/request_and_allocation/asset_detail_action.html +++ b/asset/templates/cbv/request_and_allocation/asset_detail_action.html @@ -1,26 +1,32 @@ -{% load static i18n %} -{% if perms.asset.change_assetassignment %} - - - -{% else %} - {% if not instance.return_request %} - -
- -
- +{% load i18n %} +
+ {% if perms.asset.change_assetassignment or not instance.return_request %} +
+ {% if perms.asset.change_assetassignment %} + + {% else %} + {% if not instance.return_request %} +
+ {% csrf_token %} + +
+ {% endif %} + {% endif %} +
{% endif %} -{% endif %} +
diff --git a/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html b/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html index faf2fd94e..c3638a843 100644 --- a/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html +++ b/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html @@ -1,30 +1,30 @@ {% load i18n %} -{% if perms.asset.add_assetassignment %} - {% if instance.asset_request_status == 'Requested' %} - - - -
- {% csrf_token %} - -
- {% else %} - - +
+ {% if perms.asset.add_assetassignment %} + {% if instance.asset_request_status == 'Requested' %} +
+ + {% trans 'Approve' %} + +
+ {% csrf_token %} + +
+
+ {% endif %} {% endif %} -{% endif %} +
diff --git a/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html b/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html index 6509da891..30cbfdf2e 100644 --- a/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html +++ b/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html @@ -1,12 +1,15 @@ -{% load static i18n %} -{% if perms.asset.change_assetassignment and not instance.return_status%} - - - -{% endif %} + {% endif %} + diff --git a/asset/urls.py b/asset/urls.py index 538eeeaf4..532f9543b 100644 --- a/asset/urls.py +++ b/asset/urls.py @@ -6,7 +6,6 @@ from django import views from django.urls import path from asset.cbv import ( - asset, asset_batch_no, asset_category, asset_history, @@ -49,7 +48,7 @@ urlpatterns = [ asset_category.AssetFormView.as_view(), name="asset-creation", ), - path("asset-list/", asset.AssetListView.as_view(), name="asset-list"), + path("asset-list/", views.asset_list, name="asset-list"), # path("asset-update//", views.asset_update, name="asset-update"), path( "asset-update//", @@ -80,7 +79,7 @@ urlpatterns = [ # ), path( "asset-information//", - asset.AssetInformationView.as_view(), + asset_category.AssetCategoryDetailView.as_view(), name="asset-information", ), path("asset-category-view/", views.asset_category_view, name="asset-category-view"), diff --git a/attendance/cbv/attendance_activity.py b/attendance/cbv/attendance_activity.py index 204d89e55..062738e85 100644 --- a/attendance/cbv/attendance_activity.py +++ b/attendance/cbv/attendance_activity.py @@ -187,10 +187,10 @@ class AttendanceDetailView(HorillaDetailedView): body = [ (_("Attendance Date"), "attendance_date"), (_("Day"), "get_status"), - (_("Check In Date"), "clock_in_date"), (_("Check In"), "clock_in"), - (_("Check Out Date"), "clock_out_date"), + (_("Check In Date"), "clock_in_date"), (_("Check Out"), "clock_out"), + (_("Check Out Date"), "clock_out_date"), (_("Duration"), "duration_format"), (_("Shift"), "employee_id__employee_work_info__shift_id"), (_("Work Type"), "employee_id__employee_work_info__work_type_id"), diff --git a/attendance/cbv/attendance_request.py b/attendance/cbv/attendance_request.py index fa2805309..4451c11ce 100644 --- a/attendance/cbv/attendance_request.py +++ b/attendance/cbv/attendance_request.py @@ -319,16 +319,16 @@ class AttendanceListTabDetailView(HorillaDetailedView): (_("Min Hour"), "minimum_hour"), (_("At Work"), "attendance_worked_hour"), (_("Overtime"), "attendance_overtime"), - (_("Activities"), "attendance_detail_activity_col"), + (_("Activities"), "attendance_detail_activity_col", True), ] actions = [ { - "action": _("Edit Request"), - "icon": "edit.svg", + "action": _("Edit"), + "icon": "create-outline", "attrs": """ onclick="event.stopPropagation();" - class="w-50 px-4 py-2 bg-primary-600 text-white rounded-md text-xs flex items-center justify-center gap-2 hover:bg-primary-800 transition duration-300" + class="oh-btn oh-btn--info w-100" data-toggle="oh-modal-toggle" data-target="#genericModalEdit" hx-get="{change_attendance}?all_attendance=true" diff --git a/attendance/cbv/attendances.py b/attendance/cbv/attendances.py index a26072313..c1d2dd28d 100644 --- a/attendance/cbv/attendances.py +++ b/attendance/cbv/attendances.py @@ -399,7 +399,7 @@ class GenericAttendancesDetailView(HorillaDetailedView): (_("Min Hour"), "minimum_hour"), (_("At Work"), "attendance_worked_hour"), (_("Overtime"), "attendance_overtime"), - (_("Activities"), "attendance_detail_activity_col"), + (_("Activities"), "attendance_detail_activity_col", True), ] diff --git a/attendance/cbv/dashboard_offline_online.py b/attendance/cbv/dashboard_offline_online.py index e96b835b2..d44a23bb0 100644 --- a/attendance/cbv/dashboard_offline_online.py +++ b/attendance/cbv/dashboard_offline_online.py @@ -54,7 +54,7 @@ class DashboardOfflineEmployees(HorillaListView): style="width:80px !important;" """, } - records_per_page = 5 + records_per_page = 7 show_toggle_form = False bulk_select_option = False @@ -85,7 +85,7 @@ class DashboardOnlineEmployees(HorillaListView): return queryset columns = [ - ("Employee", "get_full_name", "get_avatar"), + ("Employee", "employee_id__get_full_name", "employee_id__get_avatar"), ("Work Status", "get_custom_forecasted_info_col"), ] diff --git a/attendance/forms.py b/attendance/forms.py index 3105f18c0..89fdfc610 100644 --- a/attendance/forms.py +++ b/attendance/forms.py @@ -662,6 +662,13 @@ class AttendanceRequestForm(BaseModelForm): "request_description", "batch_attendance_id", ] + widgets = { + "attendance_date": DateTimeInput(attrs={"type": "date"}), + "attendance_clock_in": DateTimeInput(attrs={"type": "time"}), + "attendance_clock_in_date": DateTimeInput(attrs={"type": "date"}), + "attendance_clock_out": DateTimeInput(attrs={"type": "time"}), + "attendance_clock_out_date": DateTimeInput(attrs={"type": "date"}), + } widgets = { "attendance_clock_in": TimeInput(attrs={"type": "time"}), diff --git a/attendance/models.py b/attendance/models.py index afc1d997e..f7e90a21f 100644 --- a/attendance/models.py +++ b/attendance/models.py @@ -36,7 +36,7 @@ from employee.models import Employee # Create your models here. from horilla.methods import get_horilla_model_class -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template @@ -853,7 +853,7 @@ class Attendance(HorillaModel): class AttendanceRequestFile(HorillaModel): - file = models.FileField(upload_to="attendance/request_files") + file = models.FileField(upload_to=upload_path) class AttendanceRequestComment(HorillaModel): @@ -1437,7 +1437,7 @@ class WorkRecords(models.Model): ] record_name = models.CharField(max_length=250, null=True, blank=True) - work_record_type = models.CharField(max_length=5, null=True, choices=choices) + work_record_type = models.CharField(max_length=10, null=True, choices=choices) employee_id = models.ForeignKey( Employee, on_delete=models.CASCADE, verbose_name=_("Employee") ) @@ -1449,8 +1449,8 @@ class WorkRecords(models.Model): validate_time_format, ], default="00:00", - max_length=5, - ) + max_length=10, + ) # 841 min_hour = models.CharField( null=True, blank=True, @@ -1458,7 +1458,7 @@ class WorkRecords(models.Model): validate_time_format, ], default="00:00", - max_length=5, + max_length=10, ) at_work_second = models.IntegerField(null=True, blank=True, default=0) min_hour_second = models.IntegerField(null=True, blank=True, default=0) diff --git a/attendance/static/attendance/actions.js b/attendance/static/attendance/actions.js index 671b27f00..7f7734025 100644 --- a/attendance/static/attendance/actions.js +++ b/attendance/static/attendance/actions.js @@ -105,7 +105,22 @@ function getCurrentLanguageCode(callback) { if (allowedLanguageCodes.includes(languageCode)) { callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } } diff --git a/attendance/static/cbv/attendance/hour_account.js b/attendance/static/cbv/attendance/hour_account.js index 63719fa74..40722fa19 100644 --- a/attendance/static/cbv/attendance/hour_account.js +++ b/attendance/static/cbv/attendance/hour_account.js @@ -6,304 +6,319 @@ var downloadMessages = { es: "¿Quieres descargar la plantilla?", en: "Do you want to download the template?", fr: "Voulez-vous télécharger le modèle ?", -}; -var validateMessages = { + }; + var validateMessages = { ar: "هل ترغب حقًا في التحقق من كل الحضور المحدد؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheiten überprüfen?", es: "¿Realmente quieres validar todas las asistencias seleccionadas?", en: "Do you really want to validate all the selected attendances?", fr: "Voulez-vous vraiment valider toutes les présences sélectionnées?", -}; -var overtimeMessages = { + }; + var overtimeMessages = { ar: "هل ترغب حقًا في الموافقة على الساعات الإضافية لجميع الحضور المحدد؟", de: "Möchten Sie wirklich die Überstunden für alle ausgewählten Anwesenheiten genehmigen?", es: "¿Realmente quieres aprobar las horas extras para todas las asistencias seleccionadas?", en: "Do you really want to approve OT for all the selected attendances?", fr: "Voulez-vous vraiment approuver les heures supplémentaires pour toutes les présences sélectionnées?", -}; -var hourdeleteMessages = { + }; + var hourdeleteMessages = { ar: "هل ترغب حقًا في حذف جميع الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheiten löschen?", es: "¿Realmente quieres eliminar todas las asistencias seleccionadas?", en: "Do you really want to delete all the selected attendances?", fr: "Voulez-vous vraiment supprimer toutes les présences sélectionnées?", -}; -var lateDeleteMessages = { + }; + var lateDeleteMessages = { ar: "هل ترغب حقًا في حذف جميع الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheiten löschen?", es: "¿Realmente quieres eliminar todas las asistencias seleccionadas?", en: "Do you really want to delete all the selected records?", fr: "Voulez-vous vraiment supprimer toutes les présences sélectionnées?", -}; -var noRowValidateMessages = { + }; + var noRowValidateMessages = { ar: "لم يتم تحديد أي صفوف من فحص الحضور.", de: "Im Feld „Anwesenheit validieren“ sind keine Zeilen ausgewählt.", es: "No se selecciona ninguna fila de Validar asistencia.", en: "No rows are selected from Validate Attendances.", fr: "Aucune ligne n'est sélectionnée dans Valider la présence.", -}; -var norowotMessages = { + }; + var norowotMessages = { ar: "لم يتم تحديد أي صفوف من حضور العمل الإضافي.", de: "In der OT-Anwesenheit sind keine Zeilen ausgewählt.", es: "No se seleccionan filas de Asistencias de OT.", en: "No rows are selected from OT Attendances.", fr: "Aucune ligne n'est sélectionnée dans les présences OT.", -}; -var norowdeleteMessages = { + }; + var norowdeleteMessages = { ar: "لم يتم تحديد أي صفوف لحذف الحضور.", de: "Es sind keine Zeilen zum Löschen von Anwesenheiten ausgewählt.", es: "No se seleccionan filas para eliminar asistencias.", en: "No rows are selected for deleting attendances.", fr: "Aucune ligne n'est sélectionnée pour la suppression des présences.", -}; -var lateNorowdeleteMessages = { + }; + var lateNorowdeleteMessages = { ar: "لم يتم تحديد أي صفوف لحذف الحضور.", de: "Es sind keine Zeilen zum Löschen von Anwesenheiten ausgewählt.", es: "No se seleccionan filas para eliminar asistencias.", en: "No rows are selected for deleting records.", fr: "Aucune ligne n'est sélectionnée pour la suppression des présences.", -}; -var rowMessages = { + }; + var rowMessages = { ar: " تم الاختيار", de: " Ausgewählt", es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; -var excelMessages = { + }; + var excelMessages = { ar: "هل ترغب في تنزيل ملف Excel؟", de: "Möchten Sie die Excel-Datei herunterladen?", es: "¿Desea descargar el archivo de Excel?", en: "Do you want to download the excel file?", fr: "Voulez-vous télécharger le fichier Excel?", -}; -var requestAttendanceApproveMessages = { + }; + var requestAttendanceApproveMessages = { ar: "هل ترغب حقًا في الموافقة على جميع طلبات الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheitsanfragen genehmigen?", es: "¿Realmente quieres aprobar todas las solicitudes de asistencia seleccionadas?", en: "Do you really want to approve all the selected attendance requests?", fr: "Voulez-vous vraiment approuver toutes les demandes de présence sélectionnées?", -}; + }; -var reqAttendancRejectMessages = { + var reqAttendancRejectMessages = { ar: "هل ترغب حقًا في رفض جميع طلبات الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheitsanfragen ablehnen?", es: "¿Realmente quieres rechazar todas las solicitudes de asistencia seleccionadas?", en: "Do you really want to reject all the selected attendance requests?", fr: "Voulez-vous vraiment rejeter toutes les demandes de présence sélectionnées?", -}; + }; -tickCheckboxes(); -function makeListUnique(list) { + tickCheckboxes(); + function makeListUnique(list) { return Array.from(new Set(list)); -} + } -tickactivityCheckboxes(); -function makeactivityListUnique(list) { + tickactivityCheckboxes(); + function makeactivityListUnique(list) { return Array.from(new Set(list)); -} + } -ticklatecomeCheckboxes(); -function makelatecomeListUnique(list) { + ticklatecomeCheckboxes(); + function makelatecomeListUnique(list) { return Array.from(new Set(list)); -} + } -function getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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 hourAccountbulkDelete() { + function hourAccountbulkDelete() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = hourdeleteMessages[languageCode]; - var textMessage = norowdeleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/attendance-account-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); + languageCode = code; + var confirmMessage = hourdeleteMessages[languageCode]; + var textMessage = norowdeleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/attendance/attendance-account-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } + }, }); - } + } + }); + } }); -}; + }; -function lateComeBulkDelete() { + function lateComeBulkDelete() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = lateDeleteMessages[languageCode]; - var textMessage = lateNorowdeleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/late-come-early-out-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); + languageCode = code; + var confirmMessage = lateDeleteMessages[languageCode]; + var textMessage = lateNorowdeleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/attendance/late-come-early-out-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } + }, }); - } + } + }); + } }); -}; + }; -function reqAttendanceBulkApprove() { + function reqAttendanceBulkApprove() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = requestAttendanceApproveMessages[languageCode]; - var textMessage = lateNorowdeleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "info", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); - $.ajax({ - type: "POST", - url: "/attendance/bulk-approve-attendance-request", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); + languageCode = code; + var confirmMessage = requestAttendanceApproveMessages[languageCode]; + var textMessage = lateNorowdeleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "info", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); + $.ajax({ + type: "POST", + url: "/attendance/bulk-approve-attendance-request", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } + }, }); - } + } + }); + } }); -}; + }; -function reqAttendanceBulkReject() { + function reqAttendanceBulkReject() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = reqAttendancRejectMessages[languageCode]; - var textMessage = noRowValidateMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "info", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); - $.ajax({ - type: "POST", - url: "/attendance/bulk-reject-attendance-request", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); + languageCode = code; + var confirmMessage = reqAttendancRejectMessages[languageCode]; + var textMessage = noRowValidateMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "info", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); + $.ajax({ + type: "POST", + url: "/attendance/bulk-reject-attendance-request", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } + }, }); - } + } + }); + } }); -}; + }; diff --git a/attendance/static/cbv/attendance_activity.js b/attendance/static/cbv/attendance_activity.js index 19863773b..d4ac91a76 100644 --- a/attendance/static/cbv/attendance_activity.js +++ b/attendance/static/cbv/attendance_activity.js @@ -4,120 +4,135 @@ var downloadMessages = { es: "¿Quieres descargar la plantilla?", en: "Do you want to download the template?", fr: "Voulez-vous télécharger le modèle ?", -}; -var validateMessages = { + }; + var validateMessages = { ar: "هل ترغب حقًا في التحقق من كل الحضور المحدد؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheiten überprüfen?", es: "¿Realmente quieres validar todas las asistencias seleccionadas?", en: "Do you really want to validate all the selected attendances?", fr: "Voulez-vous vraiment valider toutes les présences sélectionnées?", -}; -var overtimeMessages = { + }; + var overtimeMessages = { ar: "هل ترغب حقًا في الموافقة على الساعات الإضافية لجميع الحضور المحدد؟", de: "Möchten Sie wirklich die Überstunden für alle ausgewählten Anwesenheiten genehmigen?", es: "¿Realmente quieres aprobar las horas extras para todas las asistencias seleccionadas?", en: "Do you really want to approve OT for all the selected attendances?", fr: "Voulez-vous vraiment approuver les heures supplémentaires pour toutes les présences sélectionnées?", -}; -var attendancedeleteMessages = { + }; + var attendancedeleteMessages = { ar: "هل ترغب حقًا في حذف جميع الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheiten löschen?", es: "¿Realmente quieres eliminar todas las asistencias seleccionadas?", en: "Do you really want to delete all the selected attendances?", fr: "Voulez-vous vraiment supprimer toutes les présences sélectionnées?", -}; -var noRowValidateMessages = { + }; + var noRowValidateMessages = { ar: "لم يتم تحديد أي صفوف من فحص الحضور.", de: "Im Feld „Anwesenheit validieren“ sind keine Zeilen ausgewählt.", es: "No se selecciona ninguna fila de Validar asistencia.", en: "No rows are selected from Validate Attendances.", fr: "Aucune ligne n'est sélectionnée dans Valider la présence.", -}; -var norowotMessages = { + }; + var norowotMessages = { ar: "لم يتم تحديد أي صفوف من حضور العمل الإضافي.", de: "In der OT-Anwesenheit sind keine Zeilen ausgewählt.", es: "No se seleccionan filas de Asistencias de OT.", en: "No rows are selected from OT Attendances.", fr: "Aucune ligne n'est sélectionnée dans les présences OT.", -}; -var norowdeleteMessages = { + }; + var norowdeleteMessages = { ar: "لم يتم تحديد أي صفوف لحذف الحضور.", de: "Es sind keine Zeilen zum Löschen von Anwesenheiten ausgewählt.", es: "No se seleccionan filas para eliminar asistencias.", en: "No rows are selected for deleting attendances.", fr: "Aucune ligne n'est sélectionnée pour la suppression des présences.", -}; -var rowMessages = { + }; + var rowMessages = { ar: " تم الاختيار", de: " Ausgewählt", es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; -var excelMessages = { + }; + var excelMessages = { ar: "هل ترغب في تنزيل ملف Excel؟", de: "Möchten Sie die Excel-Datei herunterladen?", es: "¿Desea descargar el archivo de Excel?", en: "Do you want to download the excel file?", fr: "Voulez-vous télécharger le fichier Excel?", -}; -var reqAttendanceApproveMessages = { + }; + var reqAttendanceApproveMessages = { ar: "هل ترغب حقًا في الموافقة على جميع طلبات الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheitsanfragen genehmigen?", es: "¿Realmente quieres aprobar todas las solicitudes de asistencia seleccionadas?", en: "Do you really want to approve all the selected attendance requests?", fr: "Voulez-vous vraiment approuver toutes les demandes de présence sélectionnées?", -}; + }; -var reqAttendanceApproveMessages = { + var reqAttendanceApproveMessages = { ar: "هل ترغب حقًا في رفض جميع طلبات الحضور المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Anwesenheitsanfragen ablehnen?", es: "¿Realmente quieres rechazar todas las solicitudes de asistencia seleccionadas?", en: "Do you really want to reject all the selected attendance requests?", fr: "Voulez-vous vraiment rejeter toutes les demandes de présence sélectionnées?", -}; + }; -tickCheckboxes(); -function makeListUnique(list) { + tickCheckboxes(); + function makeListUnique(list) { return Array.from(new Set(list)); -} + } -tickactivityCheckboxes(); -function makeactivityListUnique(list) { + tickactivityCheckboxes(); + function makeactivityListUnique(list) { return Array.from(new Set(list)); -} + } -ticklatecomeCheckboxes(); -function makelatecomeListUnique(list) { + ticklatecomeCheckboxes(); + function makelatecomeListUnique(list) { return Array.from(new Set(list)); -} + } -function getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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 getCookie(name) { + 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; - } + 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; -} + } @@ -125,187 +140,187 @@ function getCookie(name) { function deleteAttendanceNav() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = attendancedeleteMessages[languageCode]; - var textMessage = norowdeleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/attendance-activity-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); - } - }); - } - }); -} - - -function importAttendanceNav() { - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = downloadMessages[languageCode]; + languageCode = code; + var confirmMessage = attendancedeleteMessages[languageCode]; + var textMessage = norowdeleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if (ids.length === 0) { Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "/attendance/attendance-excel", - 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 = "attendance_excel.xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } + text: textMessage, + icon: "warning", + confirmButtonText: "Close", }); - }); -} - - - -function importAttendanceActivity() { - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = downloadMessages[languageCode]; + } else { Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", + text: confirmMessage, + icon: "error", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "/attendance/attendance-activity-import-excel", - 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 = "activity_excel.xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } + if (result.isConfirmed) { + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/attendance/attendance-activity-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } + }, + }); + } }); + } }); -} + } -function bulkDeleteAttendanceNav() { + function importAttendanceNav() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = attendancedeleteMessages[languageCode]; - var textMessage = norowdeleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/attendance-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); - } - }); + 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: "/attendance/attendance-excel", + 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 = "attendance_excel.xlsx"; + document.body.appendChild(link); + link.click(); + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, + }); } + }); }); -} + } + + + + function importAttendanceActivity() { + 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: "/attendance/attendance-activity-import-excel", + 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 = "activity_excel.xlsx"; + document.body.appendChild(link); + link.click(); + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, + }); + } + }); + }); + } + + + function bulkDeleteAttendanceNav() { + var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = attendancedeleteMessages[languageCode]; + var textMessage = norowdeleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/attendance/attendance-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } + }, + }); + } + }); + } + }); + } -function showApproveAlert(dataReqValue) { + function showApproveAlert(dataReqValue) { Swal.fire({ title: 'Pending Attendance Update Request!', text: 'An attendance request exists for updating this attendance prior to validation.', @@ -314,108 +329,108 @@ function showApproveAlert(dataReqValue) { showCancelButton: true, cancelButtonText: 'Close', preConfirm: () => { - // Redirect to the page based on dataReqValue - localStorage.setItem("attendanceRequestActiveTab", "#tab_1") - window.location.href = dataReqValue; + // Redirect to the page based on dataReqValue + localStorage.setItem("attendanceRequestActiveTab","#tab_1") + window.location.href = dataReqValue; - }, + }, }); -} + } -function bulkValidateTabAttendance(dataReqValue) { + function bulkValidateTabAttendance(dataReqValue) { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = validateMessages[languageCode]; - var textMessage = noRowValidateMessages[languageCode]; - ids = []; - ids.push($("#validateselectedInstances").attr("data-ids")); - ids = JSON.parse($("#validateselectedInstances").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "info", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - ids = []; - ids.push($("#validateselectedInstances").attr("data-ids")); - ids = JSON.parse($("#validateselectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/validate-bulk-attendance", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); + languageCode = code; + var confirmMessage = validateMessages[languageCode]; + var textMessage = noRowValidateMessages[languageCode]; + ids = []; + ids.push($("#validateselectedInstances").attr("data-ids")); + ids = JSON.parse($("#validateselectedInstances").attr("data-ids")); + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "info", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + ids = []; + ids.push($("#validateselectedInstances").attr("data-ids")); + ids = JSON.parse($("#validateselectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/attendance/validate-bulk-attendance", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } else { } + }, }); - } + } + }); + } }); -} + } -function otBulkValidateTabAttendance(dataReqValue) { + function otBulkValidateTabAttendance(dataReqValue) { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = overtimeMessages[languageCode]; - var textMessage = norowotMessages[languageCode]; - ids = []; - ids.push($("#overtimeselectedInstances").attr("data-ids")); - ids = JSON.parse($("#overtimeselectedInstances").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "success", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - ids = []; - ids.push($("#overtimeselectedInstances").attr("data-ids")); - ids = JSON.parse($("#overtimeselectedInstances").attr("data-ids")); + languageCode = code; + var confirmMessage = overtimeMessages[languageCode]; + var textMessage = norowotMessages[languageCode]; + ids = []; + ids.push($("#overtimeselectedInstances").attr("data-ids")); + ids = JSON.parse($("#overtimeselectedInstances").attr("data-ids")); + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "success", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + ids = []; + ids.push($("#overtimeselectedInstances").attr("data-ids")); + ids = JSON.parse($("#overtimeselectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/attendance/approve-bulk-overtime", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); + $.ajax({ + type: "POST", + url: "/attendance/approve-bulk-overtime", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } else { } + }, }); - } + } + }); + } }); -} + } diff --git a/attendance/static/dashboard/attendanceChart.js b/attendance/static/dashboard/attendanceChart.js index 97ae1f993..0bc8ab65f 100644 --- a/attendance/static/dashboard/attendanceChart.js +++ b/attendance/static/dashboard/attendanceChart.js @@ -1,716 +1,445 @@ -// Get static URL from element staticUrl = $("#statiUrl").attr("data-url"); - $(document).ready(function () { - // Global variables to store chart instances - window.attendanceChart = null; - window.departmentOvertimeChart = null; - window.pendingHoursChart = null; - - // Initialize department overtime chart data - var departmentChartData = { - labels: [], - datasets: [], - message: null, - emptyImageSrc: null - }; - - // Track visibility state for custom legend - var departmentVisibility = []; - - // Get current date information - var today = new Date(); - var month = ("0" + (today.getMonth() + 1)).slice(-2); - var year = today.getFullYear(); - var day = ("0" + today.getDate()).slice(-2); - var formattedDate = year + "-" + month + "-" + day; - var currentWeek = getWeekNumber(today); - - // Set initial date values for both attendance and department charts - $("#attendance_month").val(formattedDate); - if ($("#department_month").length) { - $("#department_month").val(formattedDate).prop("type", "date"); - } - if ($("#department_date_type").length) { - $("#department_date_type").val("day"); - } - - // Initialize Department Overtime Chart with custom legend approach - const departmentOvertimeChartCanvas = document.getElementById("departmentOverChart"); - if (departmentOvertimeChartCanvas) { - window.departmentOvertimeChart = new Chart(departmentOvertimeChartCanvas, { - type: "doughnut", - data: departmentChartData, - options: { - cutout: '70%', - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { display: false }, // Disable built-in legend - tooltip: { - backgroundColor: '#111827', - bodyColor: '#f3f4f6', - borderColor: '#e5e7eb', - borderWidth: 1 - } - } - }, - - plugins: [ - { - id: 'centerText', - afterDraw(chart) { - const { width, height, ctx } = chart; - ctx.save(); - - // Calculate total from visible data - let total = 0; - if (chart.data.datasets[0] && chart.data.datasets[0].data) { - chart.data.datasets[0].data.forEach((value, index) => { - if (departmentVisibility[index] !== false) { - total += value || 0; - } - }); - } - - ctx.font = 'bold 22px sans-serif'; - ctx.fillStyle = '#374151'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText(total, width / 2, height / 2 - 5); - ctx.font = '15px sans-serif'; - ctx.fillStyle = '#9ca3af'; - ctx.fillText('Total', width / 2, height / 2 + 20); - ctx.restore(); - } - }, - { - afterRender: (chart) => emptyOvertimeChart(chart), - }, - ], - }); - } - - // Function to create custom legend - function createCustomLegend(labels, colors) { - const legendContainer = document.getElementById('chartLegend'); - if (!legendContainer) return; - - legendContainer.innerHTML = ''; - departmentVisibility = Array(labels.length).fill(true); - - labels.forEach((label, index) => { - const legendItem = document.createElement('div'); - legendItem.className = 'flex items-center gap-2 cursor-pointer select-none'; - legendItem.innerHTML = ` - - ${label} - `; - - // Add click event listener - legendItem.addEventListener('click', () => { - toggleLegendItem(index, legendItem); - }); - - legendContainer.appendChild(legendItem); - }); - } - - // Function to toggle legend item visibility - function toggleLegendItem(index, legendElement) { - if (!window.departmentOvertimeChart) return; - - departmentVisibility[index] = !departmentVisibility[index]; - - // Update visual appearance of legend item - const dot = legendElement.querySelector('.legend-dot'); - const label = legendElement.querySelector('.legend-label'); - - if (departmentVisibility[index]) { - dot.style.opacity = '1'; - label.style.textDecoration = 'none'; - label.style.opacity = '1'; - } else { - dot.style.opacity = '0.4'; - label.style.textDecoration = 'line-through'; - label.style.opacity = '0.6'; - } - - // Update chart data - updateChartVisibility(); - } - - // Function to update chart based on visibility state - function updateChartVisibility() { - if (!window.departmentOvertimeChart || !window.departmentOvertimeChart.data.datasets[0]) return; - - const originalData = window.departmentOvertimeChart.data.datasets[0].originalData || - window.departmentOvertimeChart.data.datasets[0].data.slice(); - - // Store original data if not already stored - if (!window.departmentOvertimeChart.data.datasets[0].originalData) { - window.departmentOvertimeChart.data.datasets[0].originalData = originalData; - } - - // Update data based on visibility - window.departmentOvertimeChart.data.datasets[0].data = originalData.map((value, index) => - departmentVisibility[index] ? value : 0 - ); - - window.departmentOvertimeChart.update('none'); // No animation for better performance - } - - // Initialize Attendance Analytics Chart - $.ajax({ - url: "/attendance/dashboard-attendance", - type: "GET", - success: function (response) { - createAttendanceChart(response.dataSet, response.labels); + // initializing the department overtime chart. + var departmentChartData = { + labels: [], + datasets: [], + }; + window["departmentOvertimeChart"] = {}; + const departmentOvertimeChart = document.getElementById( + "departmentOverChart" + ); + if (departmentOvertimeChart) { + var departmentAttendanceChart = new Chart(departmentOvertimeChart, { + type: "pie", + data: departmentChartData, + options: { + responsive: true, + maintainAspectRatio: false, + }, + plugins: [ + { + afterRender: (departmentAttendanceChart) => + emptyOvertimeChart(departmentAttendanceChart), }, - error: function (xhr, status, error) { - console.error('Error loading attendance data:', error); - } + ], }); + } - // Initialize Department Overtime Chart Data - if ($("#department_date_type").length && $("#department_month").length) { - $.ajax({ - url: "/attendance/department-overtime-chart", - type: "GET", - dataType: "json", - headers: { - "X-Requested-With": "XMLHttpRequest", - }, - data: { - date: formattedDate, - type: "day" - }, - success: (response) => { - departmentDataUpdate(response); - }, - error: (error) => { - console.log("Error loading department overtime data:", error); - }, - }); + var today = new Date(); + month = ("0" + (today.getMonth() + 1)).slice(-2); + year = today.getFullYear(); + var day = ("0" + today.getDate()).slice(-2); + var formattedDate = year + "-" + month + "-" + day; + var currentWeek = getWeekNumber(today); + + $("#attendance_month").val(formattedDate); + + $.ajax({ + url: "/attendance/dashboard-attendance", + type: "GET", + success: function (response) { + // Code to handle the response + dataSet = response.dataSet; + labels = response.labels; + createAttendanceChart(response.dataSet, response.labels); + }, + }); + + // Function to update the department overtime chart according to the response fetched from backend. + + function departmentDataUpdate(response) { + departmentChartData.labels = response.labels; + departmentChartData.datasets = response.dataset; + departmentChartData.message = response.message; + departmentChartData.emptyImageSrc = response.emptyImageSrc; + if (departmentAttendanceChart) { + departmentAttendanceChart.update(); } + } - // Department Overtime Chart Functions - function departmentDataUpdate(response) { - if (window.departmentOvertimeChart) { - // Ensure response properties are handled safely - departmentChartData.labels = response.labels || []; - departmentChartData.message = response.message || "No data available"; - departmentChartData.emptyImageSrc = response.emptyImageSrc || staticUrl + "images/ui/no_records.svg"; + // Function to update the department overtime chart according to the dates provided. - // Transform dataset for doughnut chart - if (response.dataset && response.dataset.length > 0 && response.dataset[0].data && response.dataset[0].data.length > 0) { - const colors = [ - '#facc15', - '#f87171', - '#ddd6fe', - '#a5b4fc', - '#93c5fd', - '#d1d5db', - '#fbbf24', - '#c084fc', - '#86efac', - '#fdba74' - ]; + function changeDepartmentMonth() { + let type = $("#department_date_type").val(); + let date = $("#department_month").val(); + let end_date = $("#department_month2").val(); + $.ajax({ + type: "GET", + url: "/attendance/department-overtime-chart", + dataType: "json", + data: { + date: date, + type: type, + end_date: end_date, + }, + success: function (response) { + departmentDataUpdate(response); + }, + error: (error) => {}, + }); + } - departmentChartData.datasets = [{ - data: response.dataset[0].data, - originalData: response.dataset[0].data.slice(), // Store original data - backgroundColor: colors.slice(0, response.dataset[0].data.length), - borderWidth: 0, - borderRadius: 10, - hoverOffset: 8 - }]; + // Function to update the input fields according to type select field. - // Create custom legend - createCustomLegend( - departmentChartData.labels, - colors.slice(0, response.dataset[0].data.length) - ); - } else { - departmentChartData.datasets = [{ - data: [], - originalData: [], - backgroundColor: [], - borderWidth: 0, - borderRadius: 10, - hoverOffset: 8 - }]; - - // Clear legend - const legendContainer = document.getElementById('chartLegend'); - if (legendContainer) { - legendContainer.innerHTML = ''; - } - } - - window.departmentOvertimeChart.data = departmentChartData; - window.departmentOvertimeChart.update(); - } - } - - function changeDepartmentMonth() { - let type = $("#department_date_type").val(); - let date = $("#department_month").val(); - let end_date = $("#department_month2").val(); - - $.ajax({ - type: "GET", - url: "/attendance/department-overtime-chart", - dataType: "json", - data: { - date: date, - type: type, - end_date: end_date, - }, - success: function (response) { - departmentDataUpdate(response); - }, - error: (error) => { - console.error('Error updating department chart:', error); - }, - }); - } - - function changeDepartmentView(element) { - var dataType = $(element).val(); - - // Remove existing end date input - $("#department_month2").remove(); - - if (dataType === "date_range") { - $("#department_month").prop("type", "date"); - $("#department_month").after( - '' - ); - $("#department_month").val(formattedDate); - $("#department_month2").val(formattedDate); - } else if (dataType === "weekly") { - $("#department_month").prop("type", "week"); - if (currentWeek < 10) { - $("#department_month").val(`${year}-W0${currentWeek}`); - } else { - $("#department_month").val(`${year}-W${currentWeek}`); - } - } else if (dataType === "day") { - $("#department_month").prop("type", "date"); - $("#department_month").val(formattedDate); + function changeDepartmentView(element) { + var dataType = $(element).val(); + if (dataType === "date_range") { + $("#department_month").prop("type", "date"); + $("#department_day_input").after( + '' + ); + $("#department_month").val(formattedDate); + $("#department_month2").val(formattedDate); + changeDepartmentMonth(); + } else { + $("#department_month2").remove(); + if (dataType === "weekly") { + $("#department_month").prop("type", "week"); + if (currentWeek < 10) { + $("#department_month").val(`${year}-W0${currentWeek}`); } else { - $("#department_month").prop("type", "month"); - $("#department_month").val(`${year}-${month}`); + $("#department_month").val(`${year}-W${currentWeek}`); } - changeDepartmentMonth(); + } else if (dataType === "day") { + $("#department_month").prop("type", "date"); + $("#department_month").val(formattedDate); + changeDepartmentMonth(); + } else { + $("#department_month").prop("type", "month"); + $("#department_month").val(`${year}-${month}`); + changeDepartmentMonth(); + } } + } - function emptyOvertimeChart(chart) { - let flag = false; - for (let i = 0; i < chart.data.datasets.length; i++) { - flag = flag || chart.data.datasets[i].data.some(Boolean); - } + // Function for empty message for department overtime chart. - if (!flag) { - const { ctx, canvas } = chart; - ctx.clearRect(0, 0, canvas.width, canvas.height); - - const parent = canvas.parentElement; - canvas.width = parent.clientWidth; - canvas.height = parent.clientHeight; - - const x = canvas.width / 2; - const y = (canvas.height - 70) / 2; - - var noDataImage = new Image(); - noDataImage.src = chart.data.emptyImageSrc || staticUrl + "images/ui/no_records.svg"; - - var message = chart.data.message || "No data available"; - - noDataImage.onload = () => { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.drawImage(noDataImage, x - 35, y, 70, 70); - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = "hsl(0,0%,45%)"; - ctx.font = "16px Poppins"; - ctx.fillText(message, x, y + 70 + 30); - }; - - noDataImage.onerror = () => { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = "hsl(0,0%,45%)"; - ctx.font = "16px Poppins"; - ctx.fillText(message, x, y + 70 + 30); - }; - } + function emptyOvertimeChart(departmentAttendanceChart, args, options) { + flag = false; + for (let i = 0; i < departmentAttendanceChart.data.datasets.length; i++) { + flag = + flag + departmentAttendanceChart.data.datasets[i].data.some(Boolean); } + if (!flag) { + const { ctx, canvas } = departmentAttendanceChart; + departmentAttendanceChart.clear(); + const parent = canvas.parentElement; - // Event handlers for department overtime chart - $(document).on("change", "#department_date_type", function (e) { - changeDepartmentView($(this)); - }); + // Set canvas width/height to match + canvas.width = parent.clientWidth; + canvas.height = parent.clientHeight; + // Calculate center position + const x = canvas.width / 2; + const y = (canvas.height - 70) / 2; + var noDataImage = new Image(); + noDataImage.src = departmentAttendanceChart.data.emptyImageSrc + ? departmentAttendanceChart.data.emptyImageSrc + : staticUrl + "images/ui/no_records.svg"; - $(document).on("change", "#department_month", function (e) { - changeDepartmentMonth(); - }); + message = departmentAttendanceChart.data.message + ? departmentAttendanceChart.data.message + : emptyMessages[languageCode]; - $(document).on("change", "#department_month2", function (e) { - changeDepartmentMonth(); - }); + noDataImage.onload = () => { + // Draw image first at center + ctx.drawImage(noDataImage, x - 35, y, 70, 70); - // Make functions globally available - window.changeDepartmentView = changeDepartmentView; - window.changeDepartmentMonth = changeDepartmentMonth; - window.toggleLegendItem = toggleLegendItem; + // Draw text below image + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "hsl(0,0%,45%)"; + ctx.font = "16px Poppins"; + ctx.fillText(message, x, y + 70 + 30); + }; + } + } + + // Ajax request to create department overtime chart initially. + + $.ajax({ + url: "/attendance/department-overtime-chart", + type: "GET", + dataType: "json", + headers: { + "X-Requested-With": "XMLHttpRequest", + }, + success: (response) => { + departmentDataUpdate(response); + }, + error: (error) => { + console.log("Error", error); + }, + }); + + // Functions to update department overtime chart while changing the date input field and select input field. + + $("#departmentChartCard").on("change", "#department_date_type", function (e) { + changeDepartmentView($(this)); + }); + + $("#departmentChartCard").on("change", "#department_month", function (e) { + changeDepartmentMonth(); + }); + + $("#departmentChartCard").on("change", "#department_month2", function (e) { + changeDepartmentMonth(); + }); }); -// Rest of the code remains the same... -// [Include all the other functions like generateUniqueColors, emptyChart, createAttendanceChart, etc.] - -// Attendance Analytics Chart Functions -function generateUniqueColors(count) { - const colors = []; - const hueStep = 360 / count; - for (let i = 0; i < count; i++) { - const hue = i * hueStep; - const hslToHex = (h, s, l) => { - l /= 100; - const a = s * Math.min(l, 1 - l) / 100; - const f = n => { - const k = (n + h / 30) % 12; - const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); - return Math.round(255 * color).toString(16).padStart(2, '0'); - }; - return `#${f(0)}${f(8)}${f(4)}`; - }; - colors.push(hslToHex(hue, 40, 85)); - } - return colors; -} - -function createAttendanceChart(dataSet, labels) { - const colors = generateUniqueColors(dataSet.length); - - const modifiedDataSet = dataSet.map((dataset, index) => ({ - ...dataset, - backgroundColor: colors[index], - borderRadius: 10, - barPercentage: 0.8, - categoryPercentage: 0.6 - })); - - const attendanceChartCanvas = document.getElementById("dailyAnalytic"); - if (attendanceChartCanvas) { - const ctx = attendanceChartCanvas.getContext("2d"); - - if (window.attendanceChart) { - window.attendanceChart.destroy(); - } - - window.attendanceChart = new Chart(ctx, { - type: "bar", - data: { - labels: labels, - datasets: modifiedDataSet, - }, - options: { - responsive: true, - maintainAspectRatio: false, - scales: { - y: { - beginAtZero: true, - ticks: { - stepSize: 5, - color: '#6b7280' - }, - grid: { - color: '#e5e7eb' - } - }, - x: { - ticks: { - color: '#6b7280' - }, - grid: { - display: false - } - } - }, - plugins: { - legend: { - position: 'bottom', - labels: { - usePointStyle: true, - pointStyle: 'circle', - font: { - size: 12 - }, - color: '#374151', - padding: 15 - } - }, - tooltip: { - enabled: true - } - }, - onClick: (e, activeEls) => { - if (activeEls.length > 0) { - let datasetLabel = e.chart.data.datasets[activeEls[0].datasetIndex].label; - let value = e.chart.data.datasets[activeEls[0].datasetIndex].data[activeEls[0].index]; - let label = e.chart.data.labels[activeEls[0].index]; - let parms = "?department=" + datasetLabel + "&type=" + label.toLowerCase().replace(/\s/g, "_"); - let type = $("#type").val(); - const dateStr = $("#attendance_month").val(); - - if (type === "weekly") { - const [year, week] = dateStr.split("-W"); - parms += `&week=${week}&year=${year}`; - } else if (type === "monthly") { - const [year, month] = dateStr.split("-"); - parms += `&month=${month}&year=${year}`; - } else if (type === "day") { - parms += `&attendance_date=${dateStr}`; - } else if (type === "date_range") { - const start_date = dateStr; - const end_date = $("#attendance_month2").val(); - parms += `&attendance_date__gte=${start_date}&attendance_date__lte=${end_date}`; - } - - if (typeof (Storage) !== "undefined") { - localStorage.removeItem("savedFilters"); - } - - if (label === "On Time") { - $.ajax({ - url: "/attendance/on-time-view" + parms, - type: "GET", - data: { input_type: type }, - headers: { "X-Requested-With": "XMLHttpRequest" }, - success: (response) => { - $("#back_button").removeClass("d-none"); - $("#dashboard").html(response); - }, - error: (error) => console.error('Ajax error:', error), - }); - } else { - window.location.href = "/attendance/late-come-early-out-view" + parms; - } - } - }, - }, - plugins: [{ - afterRender: (chart) => emptyChart(chart), - }], - }); - } -} +var data; function getWeekNumber(date) { - const clonedDate = new Date(date); - clonedDate.setHours(0, 0, 0, 0); - clonedDate.setDate(clonedDate.getDate() + 4 - (clonedDate.getDay() || 7)); - const yearStart = new Date(clonedDate.getFullYear(), 0, 1); - return Math.ceil(((clonedDate - yearStart) / 86400000 + 1) / 7); + // Clone the date object to avoid modifying the original + var clonedDate = new Date(date); + clonedDate.setHours(0, 0, 0, 0); + + // Set to nearest Thursday: current date + 4 - current day number + // Make Sunday's day number 7 + clonedDate.setDate(clonedDate.getDate() + 4 - (clonedDate.getDay() || 7)); + + // Get first day of year + var yearStart = new Date(clonedDate.getFullYear(), 0, 1); + + // Calculate full weeks to nearest Thursday + var weekNumber = Math.ceil(((clonedDate - yearStart) / 86400000 + 1) / 7); + + return weekNumber; +} + +var today = new Date(); +month = ("0" + (today.getMonth() + 1)).slice(-2); +year = today.getFullYear(); +var day = ("0" + today.getDate()).slice(-2); +var formattedDate = year + "-" + month + "-" + day; +var currentWeek = getWeekNumber(today); + +function createAttendanceChart(dataSet, labels) { + data = { + labels: labels, + datasets: dataSet, + }; + // Create chart using the Chart.js library + window["attendanceChart"] = {}; + if (document.getElementById("dailyAnalytic")) { + const ctx = document.getElementById("dailyAnalytic").getContext("2d"); + attendanceChart = new Chart(ctx, { + type: "bar", + data: data, + options: { + responsive: true, + onClick: (e, activeEls) => { + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + var parms = + "?department=" + + datasetLabel + + "&type=" + + label.toLowerCase().replace(/\s/g, "_"); + var type = $("#type").val(); + const dateStr = $("#attendance_month").val(); + if (type == "weekly") { + const [year, week] = dateStr.split("-W"); + parms = parms + "&week=" + week + "&year=" + year; + } else if (type == "monthly") { + const [year, month] = dateStr.split("-"); + parms = parms + "&month=" + month + "&year=" + year; + } else if (type == "day") { + parms = parms + "&attendance_date=" + dateStr; + } else if (type == "date_range") { + var start_date = dateStr; + var end_date = $("#attendance_month2").val(); + parms = + parms + + "&attendance_date__gte=" + + start_date + + "&attendance_date__lte=" + + end_date; + } + localStorage.removeItem("savedFilters"); + if (label == "On Time") { + $.ajax({ + url: "/attendance/on-time-view" + parms, + type: "GET", + data: { + input_type: type, + }, + headers: { + "X-Requested-With": "XMLHttpRequest", + }, + success: (response) => { + $("#back_button").removeClass("d-none"); + $("#dashboard").html(response); + }, + error: (error) => {}, + }); + } else { + window.location.href = + "/attendance/late-come-early-out-view" + parms; + } + }, + }, + plugins: [ + { + afterRender: (chart) => emptyChart(chart), + }, + ], + }); + } } function changeMonth() { - let type = $("#type").val(); - let date = $("#attendance_month").val(); - let end_date = $("#attendance_month2").val(); - - $.ajax({ - type: "GET", - url: "/attendance/dashboard-attendance", - dataType: "json", - data: { - date: date, - type: type, - end_date: type === "date_range" ? end_date : undefined, - }, - success: function (response) { - if (window.attendanceChart) { - window.attendanceChart.destroy(); - } - createAttendanceChart(response.dataSet, response.labels); - }, - error: (error) => console.error('Ajax error:', error), - }); + let type = $("#type").val(); + let date = $("#attendance_month").val(); + let end_date = $("#attendance_month2").val(); + $.ajax({ + type: "GET", + url: "/attendance/dashboard-attendance", + dataType: "json", + data: { + date: date, + type: type, + end_date: end_date, + }, + success: function (response) { + attendanceChart.destroy(); + createAttendanceChart(response.dataSet, response.labels); + }, + error: (error) => {}, + }); } function changeView(element) { - const dataType = $(element).val(); - const today = new Date(); - const month = ("0" + (today.getMonth() + 1)).slice(-2); - const year = today.getFullYear(); - const day = ("0" + today.getDate()).slice(-2); - const formattedDate = `${year}-${month}-${day}`; - const currentWeek = getWeekNumber(today); - - $("#attendance_month2").remove(); - - if (dataType === "date_range") { - $("#attendance_month").prop("type", "date"); - $("#attendance_month").after( - '' - ); - $("#attendance_month").val(formattedDate); - $("#attendance_month2").val(formattedDate); - } else if (dataType === "weekly") { - $("#attendance_month").prop("type", "week"); - $("#attendance_month").val(`${year}-W${currentWeek.toString().padStart(2, '0')}`); - } else if (dataType === "day") { - $("#attendance_month").prop("type", "date"); - $("#attendance_month").val(formattedDate); - } else if (dataType === "monthly") { - $("#attendance_month").prop("type", "month"); - $("#attendance_month").val(`${year}-${month}`); - } - + var dataType = $(element).val(); + if (dataType === "date_range") { + $("#attendance_month").prop("type", "date"); + $("#day_input").after( + '' + ); + $("#attendance_month").val(formattedDate); + $("#attendance_month2").val(formattedDate); changeMonth(); + } else { + $("#attendance_month2").remove(); + if (dataType === "weekly") { + $("#attendance_month").prop("type", "week"); + if (currentWeek < 10) { + $("#attendance_month").val(`${year}-W0${currentWeek}`); + } else { + $("#attendance_month").val(`${year}-W${currentWeek}`); + } + changeMonth(); + } else if (dataType === "day") { + $("#attendance_month").prop("type", "date"); + $("#attendance_month").val(formattedDate); + changeMonth(); + } else { + $("#attendance_month").prop("type", "month"); + $("#attendance_month").val(`${year}-${month}`); + changeMonth(); + } + } +} +if (document.getElementById("pendingHoursCanvas")) { + var chart = new Chart(document.getElementById("pendingHoursCanvas"), {}); +} +window["pendingHoursCanvas"] = chart; +function pendingHourChart(year, month) { + $.ajax({ + type: "get", + url: "/attendance/pending-hours", + data: { month: month, year: year }, + success: function (response) { + var ctx = document.getElementById("pendingHoursCanvas"); + if (ctx) { + pendingHoursCanvas.destroy(); + pendingHoursCanvas = new Chart(ctx, { + type: "bar", // Bar chart type + data: response.data, + options: { + responsive: true, + aspectRatio: false, + indexAxis: "x", + scales: { + x: { + stacked: true, // Stack the bars on the x-axis + }, + y: { + beginAtZero: true, + stacked: true, + }, + }, + onClick: (e, activeEls) => { + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + parms = + "?year=" + + year + + "&month=" + + month + + "&department_name=" + + label + + "&"; + if (datasetLabel.toLowerCase() == "worked hours") { + parms = parms + "worked_hours__gte=1&"; + } else { + parms = parms + "pending_hours__gte=1&"; + } + window.location.href = + "/attendance/attendance-overtime-view" + parms; + }, + }, + plugins: [ + { + afterRender: (chart) => { + emptyChart(pendingHoursCanvas); + }, + }, + ], + }); + } + }, + }); } -// Pending Hours Chart Functions -document.addEventListener('DOMContentLoaded', () => { - let isLoading = false; +// Create a new Date object +var currentDate = new Date(); - const monthNames = [ - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - ]; +// Get the current month (returns a number, where January is 0 and December is 11) +var currentMonthNumber = currentDate.getMonth(); +// Create an array of month names +var monthNames = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", +]; - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#86efac', '#fbbf24', '#c084fc']; +// Get the current month name +var currentMonth = monthNames[currentMonthNumber]; - const currentDate = new Date(); - const currentMonthNumber = currentDate.getMonth(); - const currentMonth = monthNames[currentMonthNumber]; - const currentYear = currentDate.getFullYear(); - const currentYearMonth = currentDate.toISOString().slice(0, 7); +var currentYearMonth = currentDate.toISOString().slice(0, 7); - const monthSelector = document.getElementById("hourAccountMonth"); - if (monthSelector) { - monthSelector.value = currentYearMonth; - } - - function pendingHourChart(year, month) { - if (isLoading) return; - - const ctx = document.getElementById("pendingHoursCanvas"); - if (!ctx) return; - - isLoading = true; - - $.ajax({ - type: "GET", - url: "/attendance/pending-hours", - data: { month, year }, - cache: true, - success: function (response) { - if (window.pendingHoursChart) { - window.pendingHoursChart.destroy(); - window.pendingHoursChart = null; - } - - const datasets = response.data.datasets.map((dataset, index) => ({ - ...dataset, - backgroundColor: colors[index % colors.length], - borderRadius: 10, - barPercentage: 0.8, - categoryPercentage: 0.6 - })); - - window.pendingHoursChart = new Chart(ctx, { - type: "bar", - data: { - ...response.data, - datasets - }, - options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 300 - }, - scales: { - x: { - ticks: { color: '#6b7280' }, - grid: { display: false } - }, - y: { - beginAtZero: true, - ticks: { - stepSize: 20, - color: '#6b7280' - }, - grid: { color: '#e5e7eb' } - } - }, - plugins: { - legend: { - position: 'bottom', - labels: { - usePointStyle: true, - pointStyle: 'circle', - font: { size: 12 }, - color: '#374151', - padding: 15 - } - }, - tooltip: { - animation: { - duration: 0 - } - } - }, - onClick: (e, activeEls) => { - if (activeEls?.length) { - const { datasetIndex, index: dataIndex } = activeEls[0]; - const datasetLabel = e.chart.data.datasets[datasetIndex].label; - const label = e.chart.data.labels[dataIndex]; - - const params = new URLSearchParams({ - year, - month, - department_name: label, - [datasetLabel.toLowerCase() === "worked hours" ? "worked_hours__gte" : "pending_hours__gte"]: "1" - }); - - window.location.href = `/attendance/attendance-overtime-view?${params}`; - } - } - }, - plugins: [{ - afterRender: () => emptyChart(window.pendingHoursChart) - }] - }); - - isLoading = false; - }, - error: () => { - isLoading = false; - } - }); - } - - function dynamicMonth(element) { - const value = element.val(); - if (!value || isLoading) return; - - const [year, monthStr] = value.split("-"); - const monthIndex = parseInt(monthStr) - 1; - - if (monthIndex >= 0 && monthIndex < 12) { - pendingHourChart(parseInt(year), monthNames[monthIndex]); - } - } - - window.dynamicMonth = dynamicMonth; - - if (document.getElementById("pendingHoursCanvas")) { - pendingHourChart(currentYear, currentMonth); - } -}); +$("#hourAccountMonth").val(currentYearMonth); +var currentYear = currentDate.getFullYear(); +pendingHourChart(currentYear, currentMonth); +function dynamicMonth(element) { + var value = element.val(); + var dateArray = value.split("-"); + pendingHourChart(dateArray[0], monthNames[dateArray[1] - 1]); +} diff --git a/attendance/templates/attendance/attendance/attendance_nav.html b/attendance/templates/attendance/attendance/attendance_nav.html index bfecc0364..52ec64aaa 100644 --- a/attendance/templates/attendance/attendance/attendance_nav.html +++ b/attendance/templates/attendance/attendance/attendance_nav.html @@ -136,7 +136,7 @@ name="search" placeholder="{% trans 'Search' %}" /> - + {% if device.machine_type == "zk" or device.machine_type == "cosec" %} + + {% trans "Activate live capture mode" %} + + +
+ +
+ {% endif %} @@ -66,71 +60,76 @@ hx-target="#objectUpdateModalTarget">{% trans "Edit" %}
  • - {% trans "Fetch Logs" %} + + {% trans "Fetch Logs" %}
  • {% if perms.biometric.change_biometricdevices %} {% if device.is_active %}
  • - {% trans "Archive" %} + {% trans "Archive" %} +
  • {% else %} -
  • - {% trans "Un-Archive" %} -
  • +
  • + {% trans "Un-Archive" %} + +
  • {% endif %} {% endif %} {% if perms.biometric.delete_biometricdevices %}
  • -
    - {% csrf_token %} - -
    +
  • {% endif %} -
    +
    {% trans "Test" %} {% if device.is_scheduler %} - {% trans "Unschedule" %} {% else %} - {% trans "Schedule" %} + {% trans "Schedule" %} + {% endif %} {% if device.machine_type == "zk" or device.machine_type == "cosec" or device.machine_type == "dahua" or device.machine_type == "etimeoffice" %} {% trans "Employee" %} + class="oh-checkpoint-badge text-secondary bio-user-list">{% trans "Employee" %} + {% endif %}
    - +
    {% endfor %} -
    +
    {% trans "Page" %} {{ devices.number }} {% trans "of" %} {{ devices.paginator.num_pages }}. @@ -138,33 +137,38 @@
    {% trans "Page" %} - - {% trans "of" %} {{devices.paginator.num_pages}} + + {% trans "of" %} {{ devices.paginator.num_pages }}
    @@ -190,11 +194,11 @@
    {% else %} -
    -
    - Page not found. 404. -

    {% trans "No Records found." %}

    -

    {% trans "No biometric devices found." %}

    -
    +
    +
    + Page not found. 404. +

    {% trans "No Records found." %}

    +

    {% trans "No biometric devices found." %}

    +
    {% endif %} diff --git a/biometric/templates/biometric/nav_biometric_devices.html b/biometric/templates/biometric/nav_biometric_devices.html index 1fc35013e..3949b766f 100644 --- a/biometric/templates/biometric/nav_biometric_devices.html +++ b/biometric/templates/biometric/nav_biometric_devices.html @@ -21,8 +21,9 @@
    + name="search" placeholder="{% trans 'Search' %}" hx-get="{% url 'view-biometric-devices' %}" + hx-swap="outerHTML" hx-select="#biometricDeviceList" hx-target="#biometricDeviceList" + hx-trigger="keyup delay:500ms" />
    @@ -33,8 +34,7 @@ diff --git a/biometric/templates/biometric_users/dahua/add_dahua_user.html b/biometric/templates/biometric_users/dahua/add_dahua_user.html index 7d741defc..c7e16d921 100644 --- a/biometric/templates/biometric_users/dahua/add_dahua_user.html +++ b/biometric/templates/biometric_users/dahua/add_dahua_user.html @@ -24,10 +24,3 @@
    - diff --git a/biometric/urls.py b/biometric/urls.py index 2ae166bb9..40645d991 100644 --- a/biometric/urls.py +++ b/biometric/urls.py @@ -99,11 +99,6 @@ urlpatterns = [ views.biometric_device_archive, name="biometric-device-archive", ), - path( - "search-devices", - views.search_devices, - name="search-devices", - ), path( "biometric-device-employees//", views.biometric_device_employees, diff --git a/biometric/views.py b/biometric/views.py index 90a69e0cc..6e5dbfe35 100644 --- a/biometric/views.py +++ b/biometric/views.py @@ -332,36 +332,50 @@ class COSECBioAttendanceThread(Thread): @permission_required("biometric.view_biometricdevices") def biometric_devices_view(request): """ - Renders a page displaying a list of active biometric devices. + Renders and filters the list of biometric devices based on query parameters. - Parameters: - - request: The HTTP request object. - - Returns: - - HttpResponse: The rendered HTML page displaying the list of biometric devices. + Handles both initial page load and HTMX-based filter/search requests. Template: - "biometric/view_biometric_devices.html" Context: - biometric_form (BiometricDeviceForm): Form for adding new biometric devices. - - devices (QuerySet): Queryset of active biometric devices, ordered by creation date. - - f (BiometricDeviceFilter): Form for filtering biometric devices. - + - devices (QuerySet): Filtered and paginated queryset of biometric devices. + - f (BiometricDeviceFilter): Filter form. + - pd (str): URL-encoded query params for HTMX push. + - filter_dict (dict): Parsed filter query params. """ - biometric_form = BiometricDeviceForm() - filter_form = BiometricDeviceFilter() - biometric_devices = BiometricDevices.objects.filter(is_active=True).order_by( - "-created_at" - ) + previous_data = request.GET.urlencode() + is_active = request.GET.get("is_active") + + # Apply filters + filter_form = BiometricDeviceFilter(request.GET) + biometric_devices = filter_form.qs.order_by("-created_at") + + # Default to is_active=True if not specified or "unknown" + if not is_active or is_active == "unknown": + biometric_devices = biometric_devices.filter(is_active=True) + + # Paginate biometric_devices = paginator_qry(biometric_devices, request.GET.get("page")) - template = "biometric/view_biometric_devices.html" - context = { - "biometric_form": biometric_form, - "devices": biometric_devices, - "f": filter_form, - } - return render(request, template, context) + + # Parse filters for reuse + data_dict = parse_qs(previous_data) + get_key_instances(BiometricDevices, data_dict) + + # Render + return render( + request, + "biometric/view_biometric_devices.html", + { + "biometric_form": BiometricDeviceForm(), + "devices": biometric_devices, + "f": filter_form, + "pd": previous_data, + "filter_dict": data_dict, + }, + ) @login_required @@ -528,7 +542,7 @@ def biometric_device_unschedule(request, device_id): device.is_scheduler = False device.save() messages.success(request, _("Biometric device unscheduled successfully")) - return redirect(f"/biometric/search-devices?{previous_data}") + return redirect(f"/biometric/view-biometric-devices/?{previous_data}") @login_required @@ -545,7 +559,10 @@ def biometric_device_add(request): Returns: - HttpResponse: Renders the 'add_biometric_device.html' template with the biometric device form. """ - previous_data = unquote(request.GET.urlencode())[len("pd=") :] + previous_data = unquote(request.GET.urlencode()) + previous_data = ( + previous_data[3:] if previous_data.startswith("pd=") else previous_data + ) biometric_form = BiometricDeviceForm() if request.method == "POST": biometric_form = BiometricDeviceForm(request.POST) @@ -554,7 +571,7 @@ def biometric_device_add(request): messages.success(request, _("Biometric device added successfully.")) biometric_form = BiometricDeviceForm() context = {"biometric_form": biometric_form, "pd": previous_data} - return render(request, "biometric/add_biometric_device.html", context) + return render(request, "biometric/biometric_device_form.html", context) @login_required @@ -576,7 +593,7 @@ def biometric_device_edit(request, device_id): device = BiometricDevices.find(device_id) if not device: messages.error(request, _("Biometric device not found.")) - return render(request, "biometric/edit_biometric_device.html") + return render(request, "biometric/biometric_device_form.html") biometric_form = BiometricDeviceForm(instance=device) if request.method == "POST": biometric_form = BiometricDeviceForm(request.POST, instance=device) @@ -587,7 +604,7 @@ def biometric_device_edit(request, device_id): "biometric_form": biometric_form, "device_id": device_id, } - return render(request, "biometric/edit_biometric_device.html", context) + return render(request, "biometric/biometric_device_form.html", context) @login_required @@ -602,12 +619,12 @@ def biometric_device_archive(request, device_id): device_obj = BiometricDevices.find(device_id) if not device_obj: messages.error(request, _("Biometric device not found.")) - return redirect(f"/biometric/search-devices?{previous_data}") + return redirect(f"/biometric/view-biometric-devices/?{previous_data}") device_obj.is_active = not device_obj.is_active device_obj.save() message = _("archived") if not device_obj.is_active else _("un-archived") messages.success(request, _("Device is %(message)s") % {"message": message}) - return redirect(f"/biometric/biometric-card-view/?{previous_data}") + return redirect(f"/biometric/view-biometric-devices/?{previous_data}") @login_required @@ -623,7 +640,7 @@ def biometric_device_delete(request, device_id): - device_id (uuid): The ID of the biometric device to be deleted. Returns: - - HttpResponseRedirect: Redirects to the 'search-devices' page after deleting the + - HttpResponseRedirect: Redirects to the 'view-biometric-devices' page after deleting the biometric device. """ @@ -631,49 +648,10 @@ def biometric_device_delete(request, device_id): device_obj = BiometricDevices.find(device_id) if not device_obj: messages.error(request, _("Biometric device not found.")) - return redirect(f"/biometric/search-devices?{previous_data}") + return redirect(f"/biometric/view-biometric-devices/?{previous_data}") device_obj.delete() messages.success(request, _("Biometric device deleted successfully.")) - return redirect(f"/biometric/biometric-card-view?{previous_data}") - # return redirect(f"/biometric/view-biometric-devices?{previous_data}") - - -@login_required -@install_required -@hx_request_required -@permission_required("biometric.view_biometricdevices") -def search_devices(request): - """ - This method is used to search biometric device model and return matching objects - """ - previous_data = request.GET.urlencode() - search = request.GET.get("search") - is_active = request.GET.get("is_active") - if search is None: - search = "" - devices = BiometricDeviceFilter(request.GET).qs.order_by("-created_at") - if not is_active or is_active == "unknown": - devices = devices.filter(is_active=True) - data_dict = [] - data_dict = parse_qs(previous_data) - get_key_instances(BiometricDevices, data_dict) - template = "biometric/card_biometric_devices.html" - # if request.GET.get("view") == "list": - # template = "biometric/list_biometric_devices.html" - # else: - # return HttpResponse("") - # # return redirect(reverse("biometric-card-view")) - - devices = paginator_qry(devices, request.GET.get("page")) - return render( - request, - template, - { - "devices": devices, - "pd": previous_data, - "filter_dict": data_dict, - }, - ) + return redirect(f"/biometric/view-biometric-devices/?{previous_data}") def render_connection_response(title, text, icon): @@ -915,7 +893,7 @@ def biometric_device_bulk_fetch_logs(request): ) return HttpResponse(script) - attendance_count, error_message = zk_biometric_attendance_bulk_logs(zk_devices) + attendance_count, error_message = zk_biometric_attendance_logs(zk_devices) if isinstance(attendance_count, int): script = render_connection_response( _("Logs Fetched Successfully"), @@ -2166,91 +2144,28 @@ def biometric_device_live(request): return HttpResponse(script) -def zk_biometric_attendance_logs(device): +def zk_biometric_attendance_logs(device_or_devices): """ - Retrieve attendance records from a ZK biometric device and update the clock-in/clock-out status. + Retrieve and process attendance logs from one or more ZKTeco biometric devices. - :param device_id: The ID of the ZK biometric device. + Handles scenarios where the same user_id may exist across multiple devices for the same employee. + + :param device_or_devices: A single BiometricDevice instance or a queryset/list of them. + :return: Tuple (number_of_attendance_processed, error_message or None) """ - port_no = device.port - machine_ip = device.machine_ip - conn = None - zk_device = ZK( - machine_ip, - port=port_no, - timeout=5, - password=int(device.zk_password), - force_udp=False, - ommit_ping=False, - ) - try: - conn = zk_device.connect() - conn.enable_device() - attendances = conn.get_attendance() - last_attendance_datetime = attendances[-1].timestamp - if device.last_fetch_date and device.last_fetch_time: - filtered_attendances = [ - attendance - for attendance in attendances - if (attendance.timestamp.date() > device.last_fetch_date) - or ( - attendance.timestamp.date() == device.last_fetch_date - and attendance.timestamp.time() > device.last_fetch_time - ) - ] - else: - filtered_attendances = attendances - device.last_fetch_date = last_attendance_datetime.date() - device.last_fetch_time = last_attendance_datetime.time() - device.save() - bio_id_map = { - bio.user_id: bio - for bio in BiometricEmployees.objects.filter(device_id=device) - } - for attendance in filtered_attendances: - user_id = attendance.user_id - punch_code = attendance.punch - date_time = django_timezone.make_aware(attendance.timestamp) - date = date_time.date() - time = date_time.time() - bio_id = bio_id_map.get(user_id) - if bio_id: - request_data = Request( - user=bio_id.employee_id.employee_user_id, - date=date, - time=time, - datetime=date_time, - ) + if hasattr(device_or_devices, "__iter__") and not isinstance( + device_or_devices, dict + ): + devices = list(device_or_devices) + else: + devices = [device_or_devices] - if punch_code in {0, 3, 4}: - try: - clock_in(request_data) - except Exception as error: - logger.error("Got an error : ", error) - elif punch_code in {1, 2, 5}: - try: - clock_out(request_data) - except Exception as error: - logger.error("Got an error : ", error) - else: - pass - return len(filtered_attendances), None - except zk_exception.ZKErrorResponse as e: - return "error", str(e) - except Exception as e: - logger.error("ZKTeco connection error", exc_info=True) - return "error", str(e) - finally: - if conn: - conn.disconnect() - - -def zk_biometric_attendance_bulk_logs(devices): errors = [] combined_attendances = [] + patch_direction = {"in": 0, "out": 1} bio_id_map = { - bio.user_id: bio + (bio.device_id_id, bio.user_id): bio for bio in BiometricEmployees.objects.filter(device_id__in=devices) } @@ -2289,13 +2204,17 @@ def zk_biometric_attendance_bulk_logs(devices): else: filtered = attendances - # Track for final device update + # Update last fetch markers device.last_fetch_date = last_attendance_datetime.date() device.last_fetch_time = last_attendance_datetime.time() device.save() - for attendance in filtered: - attendance.device = device # Attach device info for later processing + attendance.device = device # Attach device info + attendance.punch = ( + patch_direction[device.device_direction] + if device.device_direction in patch_direction + else attendance.punch + ) # Update punch code based on device direction combined_attendances.append(attendance) except zk_exception.ZKErrorResponse as e: @@ -2307,7 +2226,7 @@ def zk_biometric_attendance_bulk_logs(devices): if conn: conn.disconnect() - # Process all combined attendances (after sorting based on timestamp) + # Sort all filtered attendances by time combined_attendances.sort(key=lambda a: a.timestamp) for attendance in combined_attendances: @@ -2316,7 +2235,8 @@ def zk_biometric_attendance_bulk_logs(devices): date_time = django_timezone.make_aware(attendance.timestamp) date = date_time.date() time = date_time.time() - bio_id = bio_id_map.get(user_id) + device_id = attendance.device.id + bio_id = bio_id_map.get((device_id, user_id)) if bio_id: request_data = Request( user=bio_id.employee_id.employee_user_id, @@ -2329,9 +2249,10 @@ def zk_biometric_attendance_bulk_logs(devices): clock_in(request_data) elif punch_code in {1, 2, 5}: clock_out(request_data) - except Exception as error: + except Exception: logger.error( - f"[Device: {attendance.device.name}] Punch error", exc_info=True + f"[Device: {attendance.device.name}] Punch processing error", + exc_info=True, ) return len(combined_attendances), "; ".join(errors) if errors else None diff --git a/employee/cbv/document_request.py b/employee/cbv/document_request.py index 55ce047a5..82e8c6f42 100644 --- a/employee/cbv/document_request.py +++ b/employee/cbv/document_request.py @@ -8,12 +8,11 @@ from django import forms from django.contrib import messages from django.http import HttpResponse from django.shortcuts import get_object_or_404 -from django.urls import reverse, reverse_lazy +from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ -from base.methods import choosesubordinates, is_reportingmanager -from employee.filters import DocumentRequestFilter +from base.methods import choosesubordinates from employee.models import Employee from horilla.decorators import manager_can_enter from horilla_documents.forms import ( @@ -24,7 +23,7 @@ from horilla_documents.forms import ( ) from horilla_documents.models import Document, DocumentRequest from horilla_views.cbv_methods import login_required -from horilla_views.generic.cbv.views import HorillaFormView, HorillaNavView +from horilla_views.generic.cbv.views import HorillaFormView from notifications.signals import notify @@ -138,7 +137,7 @@ class DocumentRejectCbvForm(HorillaFormView): messages.error(self.request, _("Document request rejected")) else: messages.error(self.request, _("No document uploaded")) - form.save() + # form.save() return HttpResponse("") return super().form_valid(form) @@ -189,60 +188,3 @@ class DocumentUploadForm(HorillaFormView): form.save() return HttpResponse("") return super().form_valid(form) - - -class DocumentRequestNav(HorillaNavView): - """ - For nav bar - """ - - def __init__(self, **kwargs: Any) -> None: - super().__init__(**kwargs) - self.search_url = reverse("document-request-filter-view") - self.create_attrs = f""" - data-toggle="oh-modal-toggle" - data-target="#genericModal" - hx-target="#genericModalBody" - hx-get="{reverse_lazy('document-request-create')}" - """ - - if self.request.user.has_perm( - "employee.change_employee" - ) or is_reportingmanager(self.request): - if self.request.user.has_perm( - "horilla_documents.change_documentrequest" - ) or is_reportingmanager(self.request): - self.actions = [ - { - "action": _("Bulk Approve Requests"), - "attrs": f""" - id="bulkApproveDocument" - hx-post="{reverse('document-bulk-approve')}" - hx-confirm='Do you really want to approve all the selected requests?' - style="cursor: pointer;" - hx-on:click="validateDocsIds(event, 'approved');" - data-action="approved" - """, - }, - { - "action": _("Bulk Reject Requests"), - "attrs": f""" - hx-get={reverse('document-bulk-reject')} - data-target="#objectCreateModal" - data-toggle="oh-modal-toggle" - hx-on:click="validateDocsIds(event, 'rejected');" - data-action="rejected" - hx-target="#objectCreateModalTarget" - id="bulkRejectDocument" - style="cursor: pointer;" - """, - }, - ] - else: - self.actions = None - - nav_title = _("Document Requests") - filter_body_template = "cbv/documents/document_filter.html" - filter_instance = DocumentRequestFilter() - filter_form_context_name = "form" - search_swap_target = "#view-container" diff --git a/employee/cbv/employees.py b/employee/cbv/employees.py index 03807d1ad..a0654819b 100644 --- a/employee/cbv/employees.py +++ b/employee/cbv/employees.py @@ -31,10 +31,8 @@ from horilla_views.cbv_methods import login_required from horilla_views.forms import DynamicBulkUpdateForm from horilla_views.generic.cbv.views import ( HorillaCardView, - HorillaDetailedView, HorillaListView, HorillaNavView, - HorillaTabView, TemplateView, ) @@ -61,16 +59,6 @@ def toggle_profile_edit_access_url(self): ) -def get_subtitle(self): - """ - Get subtitle for employee card - """ - return self.get_job_position() - - -Employee.get_subtitle = get_subtitle - - Employee.profile_edit_accessibility_display = profile_edit_accessibility_display Employee.toggle_profile_edit_access_url = toggle_profile_edit_access_url @@ -338,119 +326,6 @@ class EmployeesList(HorillaListView): ] -def get_detailed_work_url(self): - """ - Get detailed work url - """ - return reverse("employee-work-detailed", kwargs={"pk": self.pk}) - - -Employee.get_detailed_work_url = get_detailed_work_url - - -@method_decorator(login_required, name="dispatch") -class TabEmployeeWorkList(HorillaListView): - """ - Self Employee Work List - """ - - model = Employee - filter_class = EmployeeFilter - # bulk_select_option = False - filter_selected = False - show_filter_tags = False - - columns = [ - (_("Badge Id"), "badge_id"), - (_("Job Position"), "employee_work_info__job_position_id"), - (_("Department"), "employee_work_info__department_id"), - (_("Shift"), "employee_work_info__shift_id"), - (_("Work Type"), "employee_work_info__work_type_id"), - (_("Employee Type"), "employee_work_info__employee_type_id"), - (_("Job Role"), "employee_work_info__job_role_id"), - (_("Reporting Manager"), "employee_work_info__reporting_manager_id"), - (_("Company"), "employee_work_info__company_id"), - (_("Work Email"), "employee_work_info__email"), - (_("Date of Joining"), "employee_work_info__date_joining"), - ] - - def __init__(self, **kwargs): - super().__init__(**kwargs) - print(kwargs) - self.row_attrs = """ - hx-get="{get_detailed_work_url}" - hx-target="#genericModalBody" - data-toggle="oh-modal-toggle" - data-target="#genericModal" - """ - - def get_queryset(self): - """ - Get Queryset - """ - if self.request.user.has_perm("employee.view_employee"): - # If user has permission to view all employees - return super().get_queryset().filter(id=self.request.GET.get("pk")) - - return super().get_queryset( - queryset=self.model.objects.filter(employee_user_id=self.request.user.id), - filtered=True, - ) - - -@method_decorator(login_required, name="dispatch") -class EmployeeWorkDetails(HorillaDetailedView): - """ - Employee Detail View - """ - - title = _("Work Information") - model = Employee - - body = [ - (_("Badge Id"), "badge_id"), - (_("Job Position"), "employee_work_info__job_position_id"), - (_("Department"), "employee_work_info__department_id"), - (_("Shift"), "employee_work_info__shift_id"), - (_("Work Type"), "employee_work_info__work_type_id"), - (_("Employee Type"), "employee_work_info__employee_type_id"), - (_("Job Role"), "employee_work_info__job_role_id"), - (_("Reporting Manager"), "employee_work_info__reporting_manager_id"), - (_("Company"), "employee_work_info__company_id"), - (_("Work Email"), "employee_work_info__email"), - (_("Date of Joining"), "employee_work_info__date_joining"), - ] - - def get_queryset(self): - """ - Get Queryset - """ - if self.request.user.has_perm("employee.view_employee"): - return super().get_queryset().filter(id=self.kwargs.get("pk")) - - return self.model.objects.filter(employee_user_id=self.request.user.id) - - -@method_decorator(login_required, name="dispatch") -class WorkTab(HorillaTabView): - """ - Work Tab - """ - - model = Employee - additional_tabs = [] - - def __init__(self, **kwargs): - super().__init__(**kwargs) - self.tabs = [ - { - "title": _("Work Information"), - "url": f"{reverse_lazy('employee-work-tab')}", - }, - ] + self.additional_tabs - print("++++++++++++++++") - - @method_decorator(login_required, name="dispatch") @method_decorator( enter_if_accessible( diff --git a/employee/models.py b/employee/models.py index 06712bc31..3a43dc94d 100644 --- a/employee/models.py +++ b/employee/models.py @@ -37,7 +37,7 @@ from employee.methods.duration_methods import format_time, strtime_seconds from horilla import horilla_middlewares from horilla.horilla_middlewares import _thread_locals from horilla.methods import get_horilla_model_class -from horilla.models import HorillaModel, has_xss +from horilla.models import HorillaModel, has_xss, upload_path from horilla_audit.methods import get_diff from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template @@ -82,9 +82,7 @@ class Employee(models.Model): employee_last_name = models.CharField( max_length=200, null=True, blank=True, verbose_name=_("Last Name") ) - employee_profile = models.ImageField( - upload_to="employee/profile", null=True, blank=True - ) + employee_profile = models.ImageField(upload_to=upload_path, null=True, blank=True) email = models.EmailField(max_length=254, unique=True) phone = models.CharField( max_length=25, @@ -961,7 +959,7 @@ class EmployeeBankDetails(HorillaModel): class NoteFiles(HorillaModel): - files = models.FileField(upload_to="employee/NoteFiles", blank=True, null=True) + files = models.FileField(upload_to=upload_path, blank=True, null=True) objects = models.Manager() def __str__(self): @@ -996,7 +994,7 @@ class PolicyMultipleFile(HorillaModel): PoliciesMultipleFile model """ - attachment = models.FileField(upload_to="employee/policies") + attachment = models.FileField(upload_to=upload_path) class Policy(HorillaModel): @@ -1162,9 +1160,7 @@ class DisciplinaryAction(HorillaModel): validators=[validate_time_format], ) start_date = models.DateField(null=True) - attachment = models.FileField( - upload_to="employee/discipline", null=True, blank=True - ) + attachment = models.FileField(upload_to=upload_path, null=True, blank=True) objects = HorillaCompanyManager("employee_id__employee_work_info__company_id") def __str__(self) -> str: diff --git a/employee/static/cbv/employee_view/actions.js b/employee/static/cbv/employee_view/actions.js index d0bf79fae..27d987fe0 100644 --- a/employee/static/cbv/employee_view/actions.js +++ b/employee/static/cbv/employee_view/actions.js @@ -5,118 +5,133 @@ var downloadMessages = { es: "¿Quieres descargar la plantilla?", en: "Do you want to download the template?", fr: "Voulez-vous télécharger le modèle ?", -}; + }; -var importSuccess = { + var importSuccess = { ar: "نجح الاستيراد", // Arabic de: "Import erfolgreich", // German es: "Importado con éxito", // Spanish en: "Imported Successfully!", // English fr: "Importation réussie", // French -}; + }; -var uploadSuccess = { + var uploadSuccess = { ar: "تحميل كامل", // Arabic de: "Upload abgeschlossen", // German es: "Carga completa", // Spanish en: "Upload Complete!", // English fr: "Téléchargement terminé", // French -}; + }; -var uploadingMessage = { + var uploadingMessage = { ar: "جارٍ الرفع", de: "Hochladen...", es: "Subiendo...", en: "Uploading...", fr: "Téléchargement en cours...", -}; + }; -var validationMessage = { + var validationMessage = { ar: "يرجى تحميل ملف بامتداد .xlsx فقط.", de: "Bitte laden Sie nur eine Datei mit der Erweiterung .xlsx hoch.", es: "Por favor, suba un archivo con la extensión .xlsx solamente.", en: "Please upload a file with the .xlsx extension only.", fr: "Veuillez télécharger uniquement un fichier avec l'extension .xlsx.", -}; + }; -var excelMessages = { + var excelMessages = { ar: "هل ترغب في تنزيل ملف Excel؟", de: "Möchten Sie die Excel-Datei herunterladen?", es: "¿Desea descargar el archivo de Excel?", en: "Do you want to download the excel file?", fr: "Voulez-vous télécharger le fichier Excel?", -}; -var archiveMessagesEmployee = { + }; + var archiveMessagesEmployee = { ar: "هل ترغب حقًا في أرشفة جميع الموظفين المحددين؟", de: "Möchten Sie wirklich alle ausgewählten Mitarbeiter archivieren?", es: "¿Realmente quieres archivar a todos los empleados seleccionados?", en: "Do you really want to archive all the selected employees?", fr: "Voulez-vous vraiment archiver tous les employés sélectionnés ?", -}; + }; -var unarchiveMessagesEmployees = { + var unarchiveMessagesEmployees = { ar: "هل ترغب حقًا في إلغاء أرشفة جميع الموظفين المحددين؟", de: "Möchten Sie wirklich alle ausgewählten Mitarbeiter aus der Archivierung zurückholen?", es: "¿Realmente quieres desarchivar a todos los empleados seleccionados?", en: "Do you really want to unarchive all the selected employees?", fr: "Voulez-vous vraiment désarchiver tous les employés sélectionnés?", -}; + }; -var deleteMessages = { + var deleteMessages = { ar: "هل ترغب حقًا في حذف جميع الموظفين المحددين؟", de: "Möchten Sie wirklich alle ausgewählten Mitarbeiter löschen?", es: "¿Realmente quieres eliminar a todos los empleados seleccionados?", en: "Do you really want to delete all the selected employees?", fr: "Voulez-vous vraiment supprimer tous les employés sélectionnés?", -}; + }; -var noRowMessages = { + var noRowMessages = { ar: "لم يتم تحديد أي صفوف.", de: "Es wurden keine Zeilen ausgewählt.", es: "No se han seleccionado filas.", en: "No rows have been selected.", fr: "Aucune ligne n'a été sélectionnée.", -}; + }; -var rowMessages = { + var rowMessages = { ar: " تم الاختيار", de: " Ausgewählt", es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; + }; -function getCookie(name) { + 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; - } + 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 getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } -} + } -var form = document.getElementById("workInfoImportForm"); + var form = document.getElementById("workInfoImportForm"); -// Add an event listener to the form submission -form.addEventListener("submit", function (event) { + // Add an event listener to the form submission + form.addEventListener("submit", function (event) { // Prevent the default form submission event.preventDefault(); @@ -129,411 +144,411 @@ form.addEventListener("submit", function (event) { var fileInput = document.querySelector("#workInfoImportFile"); formData.append("file", fileInput.files[0]); $.ajax({ - type: "POST", - url: "/employee/work-info-import", - dataType: "binary", - data: formData, - processData: false, - contentType: false, - headers: { - "X-CSRFToken": getCookie("csrftoken"), - }, - xhrFields: { - responseType: "blob", - }, - success: function (response, textStatus, xhr) { - var errorCount = xhr.getResponseHeader('X-Error-Count'); - if (typeof response === 'object' && response.type == 'application/json') { - var reader = new FileReader(); + type: "POST", + url: "/employee/work-info-import", + dataType: "binary", + data: formData, + processData: false, + contentType: false, + headers: { + "X-CSRFToken": getCookie("csrftoken"), + }, + xhrFields: { + responseType: "blob", + }, + success: function (response, textStatus, xhr) { + var errorCount = xhr.getResponseHeader('X-Error-Count'); + if (typeof response === 'object' && response.type == 'application/json') { + var reader = new FileReader(); - reader.onload = function () { - var json = JSON.parse(reader.result); + reader.onload = function() { + var json = JSON.parse(reader.result); - if (json.success_count > 0) { - Swal.fire({ - text: `${json.success_count} Employees Imported Successfully`, - icon: "success", - showConfirmButton: false, - timer: 3000, - timerProgressBar: true, - }).then(function () { - window.location.reload(); - }); - } - } - reader.readAsText(response); - return; + if(json.success_count > 0) { + Swal.fire({ + text: `${json.success_count} Employees Imported Successfully`, + icon: "success", + showConfirmButton: false, + timer: 3000, + timerProgressBar: true, + }).then(function() { + window.location.reload(); + }); } - if (!$(".file-xlsx-validation").length) { - swal.fire({ - text: `You have ${errorCount} errors. Do you want to download the error list?`, - icon: "error", - showCancelButton: true, - showDenyButton: true, - confirmButtonText: "Download error list & Skip Import", - denyButtonText: "Downlod error list & Continue Import", - cancelButtonText: "Cancel", - confirmButtonColor: "#d33", - denyButtonColor: "#008000", - customClass: { - container: 'custom-swal-container' - } - }) - .then((result) => { - if (result.isConfirmed) { - 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 = "ImportError.xlsx"; - document.body.appendChild(link); - link.click(); - window.location.reload(); - } - else if (result.isDenied) { - formData.append("create_work_info", true); - $.ajax({ - type: "POST", - url: "/employee/work-info-import", - dataType: "binary", - data: formData, - processData: false, - contentType: false, - headers: { - "X-CSRFToken": getCookie("csrftoken"), - }, - xhrFields: { - responseType: "blob", - }, - success: function (response, textStatus, xhr) { - Swal.fire({ - text: `Employees Imported Successfully`, - icon: "success", - showConfirmButton: false, - timer: 3000, - timerProgressBar: true, - }).then(function () { - 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 = "ImportError.xlsx"; - document.body.appendChild(link); - link.click(); - window.location.reload(); - }); - - return; - } - }) - } - else { - $(".oh-dropdown__import-form").css("display", "block"); - $("#uploading").css("display", "none"); - } + } + reader.readAsText(response); + return; + } + if (!$(".file-xlsx-validation").length) { + swal.fire({ + text: `You have ${errorCount} errors. Do you want to download the error list?`, + icon: "error", + showCancelButton: true, + showDenyButton: true, + confirmButtonText: "Download error list & Skip Import", + denyButtonText: "Downlod error list & Continue Import", + cancelButtonText: "Cancel", + confirmButtonColor: "#d33", + denyButtonColor: "#008000", + customClass: { + container: 'custom-swal-container' + } + }) + .then((result) => { + if (result.isConfirmed) { + 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 = "ImportError.xlsx"; + document.body.appendChild(link); + link.click(); + window.location.reload(); + } + else if (result.isDenied) { + formData.append("create_work_info", true); + $.ajax({ + type: "POST", + url: "/employee/work-info-import", + dataType: "binary", + data: formData, + processData: false, + contentType: false, + headers: { + "X-CSRFToken": getCookie("csrftoken"), + }, + xhrFields: { + responseType: "blob", + }, + success: function (response, textStatus, xhr) { + Swal.fire({ + text: `Employees Imported Successfully`, + icon: "success", + showConfirmButton: false, + timer: 3000, + timerProgressBar: true, + }).then(function() { + 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 = "ImportError.xlsx"; + document.body.appendChild(link); + link.click(); + window.location.reload(); + }); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, + return; + } + }) + } + else { + $(".oh-dropdown__import-form").css("display", "block"); + $("#uploading").css("display", "none"); + } + }); + } + + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, }); -}); + }); $(document).on("click", "#work-info-import", function (e) { e.preventDefault(); getCurrentLanguageCode(function (code) { - var 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) { - $("#loading").show(); + var 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) { + $("#loading").show(); - var xhr = new XMLHttpRequest(); - xhr.open("GET", "/employee/work-info-import", true); - xhr.responseType = "arraybuffer"; + var xhr = new XMLHttpRequest(); + xhr.open("GET", "/employee/work-info-import", true); + xhr.responseType = "arraybuffer"; - xhr.upload.onprogress = function (e) { - if (e.lengthComputable) { - var percent = (e.loaded / e.total) * 100; - $(".progress-bar") - .width(percent + "%") - .attr("aria-valuenow", percent); - $("#progress-text").text( - "Uploading... " + percent.toFixed(2) + "%" - ); - } - }; - - xhr.onload = function (e) { - if (this.status == 200) { - const file = new Blob([this.response], { - type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - }); - const url = URL.createObjectURL(file); - const link = document.createElement("a"); - link.href = url; - link.download = "work_info_template.xlsx"; - document.body.appendChild(link); - link.click(); - } - }; - - - xhr.onerror = function () { - console.error("Error downloading file:", xhr.statusText); - }; - - xhr.onerror = function (e) { - console.error("Error downloading file:", e); - }; - xhr.send(); + xhr.upload.onprogress = function (e) { + if (e.lengthComputable) { + var percent = (e.loaded / e.total) * 100; + $(".progress-bar") + .width(percent + "%") + .attr("aria-valuenow", percent); + $("#progress-text").text( + "Uploading... " + percent.toFixed(2) + "%" + ); } - }); + }; + + xhr.onload = function (e) { + if (this.status == 200) { + const file = new Blob([this.response], { + type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + }); + const url = URL.createObjectURL(file); + const link = document.createElement("a"); + link.href = url; + link.download = "work_info_template.xlsx"; + document.body.appendChild(link); + link.click(); + } + }; + + + xhr.onerror = function () { + console.error("Error downloading file:", xhr.statusText); + }; + + xhr.onerror = function (e) { + console.error("Error downloading file:", e); + }; + xhr.send(); + } + }); }); -}); -$(document).ajaxStart(function () { + }); + $(document).ajaxStart(function () { $("#loading").show(); -}); + }); -$(document).ajaxStop(function () { + $(document).ajaxStop(function () { $("#loading").hide(); -}); + }); -function simulateProgress() { + function simulateProgress() { getCurrentLanguageCode(function (code) { - let progressBar = document.querySelector(".progress-bar"); - let progressText = document.getElementById("progress-text"); + let progressBar = document.querySelector(".progress-bar"); + let progressText = document.getElementById("progress-text"); - let width = 0; - let interval = setInterval(function () { - if (width >= 100) { - clearInterval(interval); - progressText.innerText = uploadMessage; - setTimeout(function () { - document.getElementById("loading").style.display = "none"; - }, 3000); - Swal.fire({ - text: importMessage, - icon: "success", - showConfirmButton: false, - timer: 2000, - timerProgressBar: true, - }); - setTimeout(function () { - $("#workInfoImport").removeClass("oh-modal--show"); - location.reload(true); - }, 2000); - } else { - width++; - progressBar.style.width = width + "%"; - progressBar.setAttribute("aria-valuenow", width); - progressText.innerText = uploadingMessage[languageCode] + width + "%"; - } - }, 20); + let width = 0; + let interval = setInterval(function () { + if (width >= 100) { + clearInterval(interval); + progressText.innerText = uploadMessage; + setTimeout(function () { + document.getElementById("loading").style.display = "none"; + }, 3000); + Swal.fire({ + text: importMessage, + icon: "success", + showConfirmButton: false, + timer: 2000, + timerProgressBar: true, + }); + setTimeout(function () { + $("#workInfoImport").removeClass("oh-modal--show"); + location.reload(true); + }, 2000); + } else { + width++; + progressBar.style.width = width + "%"; + progressBar.setAttribute("aria-valuenow", width); + progressText.innerText = uploadingMessage[languageCode] + width + "%"; + } + }, 20); }); -} + } -$(document).on("click", "#archiveEmployees", function (e) { + $(document).on("click", "#archiveEmployees", function (e) { e.preventDefault(); var languageCode = null; languageCode = $("#main-section-data").attr("data-lang"); var confirmMessage = - archiveMessagesEmployee[languageCode] || - ((languageCode = "en"), archiveMessages[languageCode]); + archiveMessagesEmployee[languageCode] || + ((languageCode = "en"), archiveMessages[languageCode]); var textMessage = - noRowMessages[languageCode] || - ((languageCode = "en"), noRowMessages[languageCode]); + noRowMessages[languageCode] || + ((languageCode = "en"), noRowMessages[languageCode]); ids = []; ids.push($("#selectedInstances").attr("data-ids")); ids = JSON.parse($("#selectedInstances").attr("data-ids")); if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); } else { - Swal.fire({ - text: confirmMessage, - icon: "info", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - e.preventDefault(); - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/employee/employee-bulk-archive?is_active=False", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } - }); + Swal.fire({ + text: confirmMessage, + icon: "info", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + e.preventDefault(); + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/employee/employee-bulk-archive?is_active=False", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); + } + }, + }); + } + }); } -}); + }); -$(document).on("click", "#unArchiveEmployees", function (e) { + $(document).on("click", "#unArchiveEmployees", function (e) { e.preventDefault(); var languageCode = null; languageCode = $("#main-section-data").attr("data-lang"); var confirmMessage = - unarchiveMessagesEmployees[languageCode] || - ((languageCode = "en"), unarchiveMessages[languageCode]); + unarchiveMessagesEmployees[languageCode] || + ((languageCode = "en"), unarchiveMessages[languageCode]); var textMessage = - noRowMessages[languageCode] || - ((languageCode = "en"), noRowMessages[languageCode]); + noRowMessages[languageCode] || + ((languageCode = "en"), noRowMessages[languageCode]); ids = []; ids.push($("#selectedInstances").attr("data-ids")); ids = JSON.parse($("#selectedInstances").attr("data-ids")); if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); } else { - Swal.fire({ - text: confirmMessage, - icon: "info", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - e.preventDefault(); + Swal.fire({ + text: confirmMessage, + icon: "info", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + e.preventDefault(); - ids = []; + ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/employee/employee-bulk-archive?is_active=True", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } - }); + $.ajax({ + type: "POST", + url: "/employee/employee-bulk-archive?is_active=True", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); + } + }, + }); + } + }); } -}); + }); -$(document).on("click", "#employeeBulkUpdateId", function (e) { + $(document).on("click", "#employeeBulkUpdateId", function (e) { var languageCode = null; languageCode = $("#main-section-data").attr("data-lang"); var textMessage = - noRowMessages[languageCode] || - ((languageCode = "en"), noRowMessages[languageCode]); + noRowMessages[languageCode] || + ((languageCode = "en"), noRowMessages[languageCode]); ids = []; ids.push($("#selectedInstances").attr("data-ids")); ids = JSON.parse($("#selectedInstances").attr("data-ids")); if (ids.length === 0) { - $("#bulkUpdateModal").removeClass("oh-modal--show"); - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); + $("#bulkUpdateModal").removeClass("oh-modal--show"); + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); } else { - $("#id_bulk_employee_ids").val(JSON.stringify(ids)); - $("#bulkUpdateModal").addClass("oh-modal--show"); + $("#id_bulk_employee_ids").val(JSON.stringify(ids)); + $("#bulkUpdateModal").addClass("oh-modal--show"); } -}); + }); -$(document).on("click", "#deleteEmployees", function (e) { + $(document).on("click", "#deleteEmployees", function (e) { e.preventDefault(); var languageCode = null; languageCode = $("#main-section-data").attr("data-lang"); var confirmMessage = - deleteMessages[languageCode] || - ((languageCode = "en"), deleteMessages[languageCode]); + deleteMessages[languageCode] || + ((languageCode = "en"), deleteMessages[languageCode]); var textMessage = - noRowMessages[languageCode] || - ((languageCode = "en"), noRowMessages[languageCode]); + noRowMessages[languageCode] || + ((languageCode = "en"), noRowMessages[languageCode]); ids = []; ids.push($("#selectedInstances").attr("data-ids")); ids = JSON.parse($("#selectedInstances").attr("data-ids")); if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); + 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) { - e.preventDefault(); + Swal.fire({ + text: confirmMessage, + icon: "error", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + e.preventDefault(); - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/employee/employee-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } - }); + $.ajax({ + type: "POST", + url: "/employee/employee-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); + } + }, + }); + } + }); } -}); + }); diff --git a/employee/static/dashboard/employeeChart.js b/employee/static/dashboard/employeeChart.js index e1cc172e8..610b18574 100644 --- a/employee/static/dashboard/employeeChart.js +++ b/employee/static/dashboard/employeeChart.js @@ -1,324 +1,71 @@ $(document).ready(function () { - // function employeeChart(dataSet, labels) { - // const data = { - // labels: labels, - // datasets: dataSet, - // }; - // // Create chart using the Chart.js library - // window["myChart"] = {}; - // if (document.getElementById("totalEmployees")) { - // const ctx = document.getElementById("totalEmployees").getContext("2d"); - // employeeChart = new Chart(ctx, { - // type: "doughnut", - // data: data, - // options: { - // responsive: true, - // maintainAspectRatio: false, - // onClick: (e, activeEls) => { - // let datasetIndex = activeEls[0].datasetIndex; - // let dataIndex = activeEls[0].index; - // let datasetLabel = e.chart.data.datasets[datasetIndex].label; - // let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; - // let label = e.chart.data.labels[dataIndex]; - // var active = "False"; - // if (label.toLowerCase() == "active") { - // active = "True"; - // } - // localStorage.removeItem("savedFilters"); - // window.location.href = "/employee/employee-view?is_active=" + active; - // }, - // }, - // plugins: [ - // { - // afterRender: (chart) => emptyChart(chart), - // }, - // ], - // }); - // } - // } - - // function genderChart(dataSet, labels) { - // const data = { - // labels: labels, - // datasets: dataSet, - // }; - // console.log(data) - // // Create chart using the Chart.js library - // window["genderChart"] = {}; - // if (document.getElementById("genderChart")) { - // const ctx = document.getElementById("genderChart").getContext("2d"); - // genderChart = new Chart(ctx, { - // type: "doughnut", - // data: data, - // options: { - // responsive: true, - // maintainAspectRatio: false, - // onClick: (e, activeEls) => { - // let datasetIndex = activeEls[0].datasetIndex; - // let dataIndex = activeEls[0].index; - // let datasetLabel = e.chart.data.datasets[datasetIndex].label; - // let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; - // let label = e.chart.data.labels[dataIndex]; - // localStorage.removeItem("savedFilters"); - // window.location.href = - // "/employee/employee-view?gender=" + label.toLowerCase(); - // }, - // }, - // plugins: [ - // { - // afterRender: (chart) => emptyChart(chart), - // }, - // ], - // }); - // } - // } - - // function departmentChart(dataSet, labels) { - // console.log(dataSet); - // console.log(labels); - // const data = { - // labels: labels, - // datasets: dataSet, - // }; - // // Create chart using the Chart.js library - // window["departmentChart"] = {}; - // if (document.getElementById("departmentChart")) { - // const ctx = document.getElementById("departmentChart").getContext("2d"); - // departmentChart = new Chart(ctx, { - // type: "doughnut", - // data: data, - // options: { - // responsive: true, - // maintainAspectRatio: false, - // onClick: (e, activeEls) => { - // let datasetIndex = activeEls[0].datasetIndex; - // let dataIndex = activeEls[0].index; - // let datasetLabel = e.chart.data.datasets[datasetIndex].label; - // let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; - // let label = e.chart.data.labels[dataIndex]; - // localStorage.removeItem("savedFilters"); - // window.location.href = - // "/employee/employee-view?department=" + label; - - // }, - // }, - // plugins: [ - // { - // afterRender: (chart) => emptyChart(chart), - // }, - // ], - // }); - // } - // } - function employeeChart(dataSet, labels) { - $(document).ready(function () { - const ctx = document.getElementById("totalEmployees")?.getContext("2d"); - if (!ctx) return; - - const values = dataSet[0].data; - const colors = [ - "#34d399", // Active - green - "#f87171", // Inactive - red - ]; - const visibility = Array(labels.length).fill(true); - - // Create chart instance - const employeeChartInstance = new Chart(ctx, { + const data = { + labels: labels, + datasets: dataSet, + }; + // Create chart using the Chart.js library + window["myChart"] = {}; + if (document.getElementById("totalEmployees")) { + const ctx = document.getElementById("totalEmployees").getContext("2d"); + employeeChart = new Chart(ctx, { type: "doughnut", - data: { - labels: labels, - datasets: [ - { - ...dataSet[0], - backgroundColor: colors.slice(0, labels.length), - borderWidth: 0, - borderRadius: 10, - hoverOffset: 8, - }, - ], - }, + data: data, options: { - cutout: "70%", - responsive: true, - maintainAspectRatio: false, - onClick: function (e, activeEls) { - if (!activeEls.length) return; - - const dataIndex = activeEls[0].index; - const label = labels[dataIndex]; - let active = label.toLowerCase() === "active" ? "True" : "False"; - - localStorage.removeItem("savedFilters"); - window.location.href = "/employee/employee-view?is_active=" + active; - }, - plugins: { - legend: { display: false }, - tooltip: { - backgroundColor: "#111827", - bodyColor: "#f3f4f6", - borderColor: "#e5e7eb", - borderWidth: 1, - }, - }, - }, - plugins: [ - { - id: "centerText", - afterDraw(chart) { - const { width, height, ctx } = chart; - ctx.save(); - - const total = chart.data.datasets[0].data.reduce( - (sum, val) => sum + val, - 0 - ); - - ctx.font = "bold 22px sans-serif"; - ctx.fillStyle = "#374151"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillText(total, width / 2, height / 2 - 5); - - ctx.font = "15px sans-serif"; - ctx.fillStyle = "#9ca3af"; - ctx.fillText("Total", width / 2, height / 2 + 20); - - ctx.restore(); - }, - }, - { - afterRender: (chart) => { - if (typeof emptyChart === "function") { - emptyChart(chart); - } - }, - }, - ], - }); - - // 🧩 Custom Legend Generation - const $legendContainer = $("#employeeChartLegend"); // Make sure to have this element in DOM - $legendContainer.empty(); - - labels.forEach((label, index) => { - const color = colors[index % colors.length]; - - const $item = $(` -
    - - ${label} -
    - `); - - $legendContainer.append($item); - - $item.on("click", function () { - visibility[index] = !visibility[index]; - - employeeChartInstance.data.datasets[0].data = values.map((val, i) => - visibility[i] ? val : 0 - ); - - const $dot = $(this).find("span").first(); - const $label = $(this).find(".legend-label"); - - if (visibility[index]) { - $dot.css("opacity", "1"); - $label.css("text-decoration", "none"); - } else { - $dot.css("opacity", "0.4"); - $label.css("text-decoration", "line-through"); - } - - employeeChartInstance.update(); - }); - }); - }); - } - - function genderChart(dataSet, labels) { - const centerImage = new Image(); - centerImage.src = "/static/horilla_theme/assets/img/icons/gender.svg"; - - if (document.getElementById("genderChart")) { - const ctx = document.getElementById("genderChart").getContext("2d"); - - // Override dataset background colors with new design colors - const updatedDataSet = dataSet.map((ds) => ({ - ...ds, - backgroundColor: ["#cfe9ff", "#ffc9de", "#e6ccff"], - borderWidth: 0, - })); - - window["genderChart"] = new Chart(ctx, { - type: "doughnut", - data: { - labels: labels, - datasets: updatedDataSet, - }, - options: { - cutout: "70%", responsive: true, maintainAspectRatio: false, onClick: (e, activeEls) => { - if (activeEls.length > 0) { - let datasetIndex = activeEls[0].datasetIndex; - let dataIndex = activeEls[0].index; - let label = e.chart.data.labels[dataIndex]; - localStorage.removeItem("savedFilters"); - window.location.href = "/employee/employee-view?gender=" + label.toLowerCase(); + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + var active = "False"; + if (label.toLowerCase() == "active") { + active = "True"; } - }, - plugins: { - legend: { - position: "bottom", - labels: { - usePointStyle: true, - pointStyle: "circle", - padding: 20, - font: { - size: 12, - }, - color: "#000", - }, - }, - tooltip: { - padding: 10, - cornerRadius: 4, - backgroundColor: "#333", - titleColor: "#fff", - bodyColor: "#fff", - callbacks: { - label: function (context) { - return context.parsed; // This shows only "13", not "Employees: 13" - }, - }, - }, + localStorage.removeItem("savedFilters"); + window.location.href = "/employee/employee-view?is_active=" + active; }, }, plugins: [ { - id: "centerIcon", - afterDatasetsDraw(chart) { - if (!centerImage.complete) return; - const ctx = chart.ctx; - const size = 70; - ctx.drawImage( - centerImage, - chart.width / 2 - size / 2, - chart.height / 2 - size / 2 - 20, - size, - size - ); - }, + afterRender: (chart) => emptyChart(chart), }, + ], + }); + } + } + + function genderChart(dataSet, labels) { + const data = { + labels: labels, + datasets: dataSet, + }; + // Create chart using the Chart.js library + window["genderChart"] = {}; + if (document.getElementById("genderChart")) { + const ctx = document.getElementById("genderChart").getContext("2d"); + genderChart = new Chart(ctx, { + type: "doughnut", + data: data, + options: { + responsive: true, + maintainAspectRatio: false, + onClick: (e, activeEls) => { + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + localStorage.removeItem("savedFilters"); + window.location.href = + "/employee/employee-view?gender=" + label.toLowerCase(); + }, + }, + plugins: [ { - afterRender: (chart) => { - if (typeof emptyChart === "function") { - emptyChart(chart); - } - }, + afterRender: (chart) => emptyChart(chart), }, ], }); @@ -326,124 +73,39 @@ $(document).ready(function () { } function departmentChart(dataSet, labels) { - $(document).ready(function () { - const ctx = $("#departmentChart")[0]?.getContext("2d"); - if (!ctx) return; - - const values = dataSet[0].data; - const colors = [ - "#facc15", - "#f87171", - "#ddd6fe", - "#a5b4fc", - "#93c5fd", - "#d1d5db", - ]; - const visibility = Array(labels.length).fill(true); - - // Create the chart instance - const departmentChartInstance = new Chart(ctx, { + const data = { + labels: labels, + datasets: dataSet, + }; + // Create chart using the Chart.js library + window["departmentChart"] = {}; + if (document.getElementById("departmentChart")) { + const ctx = document.getElementById("departmentChart").getContext("2d"); + departmentChart = new Chart(ctx, { type: "doughnut", - data: { - labels: labels, - datasets: [ - { - ...dataSet[0], - backgroundColor: colors.slice(0, labels.length), - borderWidth: 0, - borderRadius: 10, - hoverOffset: 8, - }, - ], - }, + data: data, options: { - cutout: "70%", responsive: true, maintainAspectRatio: false, - onClick: function (e, activeEls) { - if (!activeEls.length) return; - const dataIndex = activeEls[0].index; - const label = labels[dataIndex]; - + onClick: (e, activeEls) => { + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; localStorage.removeItem("savedFilters"); - window.location.href = "/employee/employee-view?department=" + label; - }, - plugins: { - legend: { display: false }, - tooltip: { - backgroundColor: "#111827", - bodyColor: "#f3f4f6", - borderColor: "#e5e7eb", - borderWidth: 1, - }, + window.location.href = + "/employee/employee-view?department=" + label; + }, }, plugins: [ { - id: "centerText", - afterDraw(chart) { - const { width, height, ctx } = chart; - ctx.save(); - - const total = chart.data.datasets[0].data.reduce( - (sum, val) => sum + val, - 0 - ); - - ctx.font = "bold 22px sans-serif"; - ctx.fillStyle = "#374151"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillText(total, width / 2, height / 2 - 5); - - ctx.font = "15px sans-serif"; - ctx.fillStyle = "#9ca3af"; - ctx.fillText("Total", width / 2, height / 2 + 20); - - ctx.restore(); - }, + afterRender: (chart) => emptyChart(chart), }, ], }); - - // 🧩 Generate Custom Legend - const $legendContainer = $("#chartLegend"); - $legendContainer.empty(); - - labels.forEach((label, index) => { - const color = colors[index % colors.length]; - - const $item = $(` -
    - - ${label} -
    - `); - - $legendContainer.append($item); - - $item.on("click", function () { - visibility[index] = !visibility[index]; - - departmentChartInstance.data.datasets[0].data = values.map((val, i) => - visibility[i] ? val : 0 - ); - - const $dot = $(this).find("span").first(); - const $label = $(this).find(".legend-label"); - - if (visibility[index]) { - $dot.css("opacity", "1"); - $label.css("text-decoration", "none"); - } else { - $dot.css("opacity", "0.4"); - $label.css("text-decoration", "line-through"); - } - - departmentChartInstance.update(); - }); - }); - }); + } } $.ajax({ diff --git a/employee/static/document/actions.js b/employee/static/document/actions.js index 9348c4c8d..de63a1f11 100644 --- a/employee/static/document/actions.js +++ b/employee/static/document/actions.js @@ -32,102 +32,13 @@ var alreadyActionMessages = { }, }; -// function validateDocsIds(event) { -// getCurrentLanguageCode(function (lang) { -// const ids = []; -// const checkedRows = $("[type=checkbox]:checked"); -// const takeAction = $(event.currentTarget).data("action"); -// let alreadyTakeAction = false; - -// checkedRows.each(function () { -// const id = $(this).attr("id"); -// const status = $(this).data("status"); - -// if (id) { -// if (status === takeAction) alreadyTakeAction = true; -// ids.push(id); -// } -// }); - -// if (ids.length === 0) { -// var norowMessages = { -// ar: "لم يتم تحديد أي صفوف.", -// de: "Es wurden keine Zeilen ausgewählt.", -// es: "No se han seleccionado filas.", -// en: "No rows have been selected.", -// fr: "Aucune ligne n'a été sélectionnée.", -// }; -// event.preventDefault(); -// Swal.fire({ -// text: norowMessages[lang] || norowMessages.en, -// icon: "warning", -// confirmButtonText: "Close", -// }); -// } else if (alreadyTakeAction) { -// event.preventDefault(); -// Swal.fire({ -// text: -// alreadyActionMessages[takeAction][lang] || -// alreadyActionMessages[takeAction].en, -// icon: "warning", -// confirmButtonText: "Close", -// }); -// } else { -// // Directly trigger action without confirmation -// const triggerId = -// takeAction === "approved" -// ? "#bulkApproveDocument" -// : "#bulkRejectDocument"; -// $(triggerId).attr("hx-vals", JSON.stringify({ ids })).click(); -// } -// }); -// } - - -function validateDocsIds(event, action = null) { +function validateDocsIds(event) { getCurrentLanguageCode(function (lang) { const ids = []; const checkedRows = $("[type=checkbox]:checked"); - - // Use passed action parameter or try to get from element - let takeAction = action; - let currentElement = null; - - // Handle case where event might be undefined or not have currentTarget - if (event && event.currentTarget) { - currentElement = event.currentTarget; - } else if (event && event.target) { - currentElement = event.target; - } - - if (!takeAction && currentElement) { - // Try multiple ways to get the action attribute - takeAction = $(currentElement).data("action"); - - // If data() doesn't work, try attr() - if (!takeAction) { - takeAction = $(currentElement).attr("data-action"); - } - - // If still undefined, try getting from the element directly - if (!takeAction) { - takeAction = currentElement.getAttribute("data-action"); - } - } - - + const takeAction = $(event.currentTarget).data("action"); let alreadyTakeAction = false; - // Add validation to ensure takeAction is valid - if (!takeAction || (takeAction !== "approved" && takeAction !== "rejected")) { - if (currentElement && currentElement.attributes) { - } - if (event && event.preventDefault) { - event.preventDefault(); - } - return; - } - checkedRows.each(function () { const id = $(this).attr("id"); const status = $(this).data("status"); @@ -173,8 +84,6 @@ function validateDocsIds(event, action = null) { } - - function highlightRow(checkbox) { checkbox.closest(".oh-user_permission-list_item").removeClass("highlight-selected"); if (checkbox.is(":checked")) { @@ -182,31 +91,17 @@ function highlightRow(checkbox) { } } -// function selectAllDocuments(event) { -// event.stopPropagation(); -// const checkbox = event.currentTarget; -// const isChecked = checkbox.checked; - -// const accordionBody = checkbox -// .closest(".oh-accordion-meta__header") -// .nextElementSibling; - -// if (accordionBody) { -// const checkboxes = accordionBody.querySelectorAll('[type="checkbox"]'); -// checkboxes.forEach(cb => cb.checked = isChecked); -// } -// } - function selectAllDocuments(event) { event.stopPropagation(); const checkbox = event.currentTarget; const isChecked = checkbox.checked; - const button = checkbox.closest('button'); - const accordionPanel = button ? button.nextElementSibling : null; + const accordionBody = checkbox + .closest(".oh-accordion-meta__header") + .nextElementSibling; - if (accordionPanel && accordionPanel.classList.contains('accordion-panel')) { - const checkboxes = accordionPanel.querySelectorAll('input[type="checkbox"]'); + if (accordionBody) { + const checkboxes = accordionBody.querySelectorAll('[type="checkbox"]'); checkboxes.forEach(cb => cb.checked = isChecked); } } diff --git a/employee/static/employee/importExport.js b/employee/static/employee/importExport.js index 2cea41244..17e48e916 100644 --- a/employee/static/employee/importExport.js +++ b/employee/static/employee/importExport.js @@ -61,7 +61,22 @@ function getCurrentLanguageCode(callback) { if (allowedLanguageCodes.includes(languageCode)) { callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } } diff --git a/employee/templates/cbv/disciplinary_actions/detail_action.html b/employee/templates/cbv/disciplinary_actions/detail_action.html index 7ec9d85f7..7dc8b4143 100644 --- a/employee/templates/cbv/disciplinary_actions/detail_action.html +++ b/employee/templates/cbv/disciplinary_actions/detail_action.html @@ -1,34 +1,23 @@ -{% load static i18n %} -{% if perms.employee.change_disciplinaryaction %} - - - -{% endif %} +{% load basefilters %}{% load i18n %} + {% if perms.payroll.change_disciplinaryaction or perms.payroll.delete_disciplinaryaction %} -{% if perms.employee.delete_disciplinaryaction %} - -
    - {% csrf_token %} - -
    - -{% endif %} +
    + {% if perms.payroll.change_disciplinaryaction %} + + + {% endif %} + {% if perms.payroll.delete_disciplinaryaction %} +
    + {% csrf_token %} + +
    + {% endif %} +
    -{% if request.GET.deleted %} - -{% endif %} + {% endif %} + {% if request.GET.deleted %} + + {% endif %} diff --git a/employee/templates/cbv/disciplinary_actions/main_dis.html b/employee/templates/cbv/disciplinary_actions/main_dis.html new file mode 100644 index 000000000..4bebb06b4 --- /dev/null +++ b/employee/templates/cbv/disciplinary_actions/main_dis.html @@ -0,0 +1,4 @@ + +
    + {% include "generic/horilla_list.html" %} +
    \ No newline at end of file diff --git a/employee/templates/cbv/profile/profile_view.html b/employee/templates/cbv/profile/profile_view.html index a398c3546..48bd7fcaa 100644 --- a/employee/templates/cbv/profile/profile_view.html +++ b/employee/templates/cbv/profile/profile_view.html @@ -5,10 +5,10 @@ diff --git a/employee/templates/dashboard/birthdays_container.html b/employee/templates/dashboard/birthdays_container.html index 5308a60a4..454db918e 100644 --- a/employee/templates/dashboard/birthdays_container.html +++ b/employee/templates/dashboard/birthdays_container.html @@ -13,7 +13,7 @@ {{birthday.name}} {{birthday.dob}}, {{birthday.daysUntilBirthday}} {{birthday.job_position}}, {{birthday.department}} + style="font-size:10px;">{{birthday.job_position}}{% if birthday.job_position and birthday.department %}, {% endif %}{{birthday.department}} {% endfor %} diff --git a/employee/templates/documents/document_requests.html b/employee/templates/documents/document_requests.html index 6249de92b..f98c7718f 100644 --- a/employee/templates/documents/document_requests.html +++ b/employee/templates/documents/document_requests.html @@ -32,7 +32,6 @@ } {% include 'documents/document_nav.html' %} - diff --git a/employee/urls.py b/employee/urls.py index dc402f3a5..43cd1b653 100644 --- a/employee/urls.py +++ b/employee/urls.py @@ -322,17 +322,6 @@ urlpatterns = [ views.employee_select_filter, name="employee-select-filter", ), - path("work-tab", employees.WorkTab.as_view(), name="work-tab"), - path( - "employee-work-tab", - employees.TabEmployeeWorkList.as_view(), - name="employee-work-tab", - ), - path( - "employee-work-detailed//", - employees.EmployeeWorkDetails.as_view(), - name="employee-work-detailed", - ), # path("not-in-yet/", not_in_out_dashboard.not_in_yet, name="not-in-yet"), # path("not-out-yet/", not_in_out_dashboard.not_out_yet, name="not-out-yet"), path( @@ -440,11 +429,6 @@ urlpatterns = [ document_request.DocumentRequestCreateForm.as_view(), name="document-request-create", ), - path( - "document-request-nav-cbv/", - document_request.DocumentRequestNav.as_view(), - name="document-request-nav-cbv", - ), # path( # "document-request-create", # views.document_request_create, diff --git a/employee/views.py b/employee/views.py index cfb0c5766..3bef2a1d9 100755 --- a/employee/views.py +++ b/employee/views.py @@ -118,7 +118,7 @@ from horilla.decorators import ( from horilla.filters import HorillaPaginator from horilla.group_by import group_by_queryset from horilla.horilla_settings import HORILLA_DATE_FORMATS -from horilla.methods import get_horilla_model_class +from horilla.methods import dynamic_attr, get_horilla_model_class from horilla_audit.models import AccountBlockUnblock, HistoryTrackingFields from horilla_documents.forms import ( DocumentForm, @@ -208,6 +208,18 @@ def employee_profile(request): This method is used to view own profile of employee. """ employee = request.user.employee_get + selected_company = request.session.get("selected_company") + if selected_company != "all": + company_id = getattr( + getattr(getattr(employee, "employee_work_info", None), "company_id", None), + "id", + None, + ) + + if str(company_id) != str(selected_company): + messages.error(request, "Employee is not working in the selected company.") + return redirect("employee-view") + today = datetime.today() now = timezone.now() return render( @@ -298,17 +310,22 @@ def employee_view_individual(request, obj_id, **kwargs): """ This method is used to view profile of an employee. """ - # employee = Employee.objects.get(id=obj_id) - # employee_leaves = ( - # employee.available_leave.all() if apps.is_installed("leave") else None - # ) - # enabled_block_unblock = ( - # AccountBlockUnblock.objects.exists() - # and AccountBlockUnblock.objects.first().is_enabled - # ) - # # Retrieve the filtered employees from the session - # filtered_employee_ids = request.session.get("filtered_employees", []) - # filtered_employees = Employee.objects.filter(id__in=filtered_employee_ids) + try: + employee = Employee.objects.get(id=obj_id) + except ObjectDoesNotExist: + try: + employee = Employee.objects.entire().get(id=obj_id) + company = getattr( + getattr(employee, "employee_work_info", None), "company_id", None + ) + company_id = getattr(company, "pk", None) + if company_id != request.session["selected_company"]: + messages.error( + request, "Employee is not working in the selected company." + ) + return redirect("employee-view") + except Exception as e: + return render(request, "404.html", status=404) # request_ids_str = json.dumps( # [ diff --git a/geofencing/views.py b/geofencing/views.py index 9932f0631..49dedde45 100644 --- a/geofencing/views.py +++ b/geofencing/views.py @@ -1,7 +1,7 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required from django.http import QueryDict -from django.shortcuts import redirect, render +from django.shortcuts import get_object_or_404, redirect, render from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from geopy.distance import geodesic @@ -27,7 +27,7 @@ class GeoFencingSetupGetPostAPIView(APIView): ) def get(self, request): company = request.user.employee_get.get_company() - location = GeoFencing.objects.get(company_id=company) + location = get_object_or_404(GeoFencing, pk=company.id) serializer = GeoFencingSetupSerializer(location) return Response(serializer.data, status=status.HTTP_200_OK) @@ -139,11 +139,12 @@ class GeoFencingEmployeeLocationCheckAPIView(APIView): class GeoFencingSetUpPermissionCheck(APIView): permission_classes = [IsAuthenticated] + @method_decorator( + permission_required("geofencing.view_geofencing", raise_exception=True), + name="dispatch", + ) def get(self, request): - geo_fencing = GeoFencingSetupGetPostAPIView() - if geo_fencing.get(request).status_code == 200: - return Response(status=200) - return Response(status=400) + return Response(status=200) def get_company(request): diff --git a/helpdesk/models.py b/helpdesk/models.py index 9b7cff493..43c28ae15 100644 --- a/helpdesk/models.py +++ b/helpdesk/models.py @@ -10,8 +10,9 @@ from django.utils.translation import gettext_lazy as _ from base.horilla_company_manager import HorillaCompanyManager from base.models import Company, Department, JobPosition, Tags from employee.models import Employee +from horilla import horilla_middlewares from horilla.horilla_middlewares import _thread_locals -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_audit.methods import get_diff from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template @@ -421,13 +422,14 @@ class Comment(HorillaModel): Employee, on_delete=models.DO_NOTHING, related_name="employee_comment" ) date = models.DateTimeField(auto_now_add=True) + xss_exempt_fields = ["comment"] # 850 def __str__(self): return self.comment class Attachment(HorillaModel): - file = models.FileField(upload_to="Tickets/Attachment") + file = models.FileField(upload_to=upload_path) description = models.CharField(max_length=100, blank=True, null=True) format = models.CharField(max_length=50, blank=True, null=True) ticket = models.ForeignKey( @@ -459,7 +461,7 @@ class Attachment(HorillaModel): def save(self, *args, **kwargs): self.get_file_format() - super().save(*args, **kwargs) + super().save(self, *args, **kwargs) def __str__(self): return os.path.basename(self.file.name) @@ -468,10 +470,32 @@ class Attachment(HorillaModel): class FAQCategory(HorillaModel): title = models.CharField(max_length=30) description = models.TextField(blank=True, null=True, max_length=255) + company_id = models.ForeignKey( + Company, + null=True, + blank=True, + editable=False, + verbose_name=_("Company"), + on_delete=models.CASCADE, + ) + objects = HorillaCompanyManager() def __str__(self): return self.title + def save(self, *args, **kwargs): + request = getattr(horilla_middlewares._thread_locals, "request", None) + selected_company = request.session.get("selected_company") + if ( + not self.id + and not self.company_id + and selected_company + and selected_company != "all" + ): + self.company_id = Company.find(selected_company) + + super().save() + class Meta: verbose_name = _("FAQ Category") verbose_name_plural = _("FAQ Categories") @@ -485,11 +509,24 @@ class FAQ(HorillaModel): company_id = models.ForeignKey( Company, null=True, editable=False, on_delete=models.PROTECT ) - objects = HorillaCompanyManager(related_company_field="company_id") + objects = HorillaCompanyManager() def __str__(self): return self.question + def save(self, *args, **kwargs): + request = getattr(horilla_middlewares._thread_locals, "request", None) + selected_company = request.session.get("selected_company") + if ( + not self.id + and not self.company_id + and selected_company + and selected_company != "all" + ): + self.company_id = Company.find(selected_company) + + super().save() + class Meta: verbose_name = _("FAQ") verbose_name_plural = _("FAQs") diff --git a/helpdesk/sidebar.py b/helpdesk/sidebar.py index 7ae51013b..973d769a1 100644 --- a/helpdesk/sidebar.py +++ b/helpdesk/sidebar.py @@ -2,19 +2,19 @@ helpdesk/sidebar.py """ -from django.urls import reverse -from django.utils.translation import gettext_lazy as trans +from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ -MENU = trans("Help Desk") +MENU = _("Help Desk") IMG_SRC = "images/ui/headset-solid.svg" SUBMENUS = [ { - "menu": trans("FAQs"), - "redirect": reverse("faq-category-view"), + "menu": _("FAQs"), + "redirect": reverse_lazy("faq-category-view"), }, { - "menu": trans("Tickets"), - "redirect": reverse("ticket-view"), + "menu": _("Tickets"), + "redirect": reverse_lazy("ticket-view"), }, ] diff --git a/helpdesk/templates/department_managers/department_managers.html b/helpdesk/templates/department_managers/department_managers.html index de9af66af..d78d29369 100644 --- a/helpdesk/templates/department_managers/department_managers.html +++ b/helpdesk/templates/department_managers/department_managers.html @@ -7,10 +7,7 @@
    {% if perms.helpdesk.view_departmentmanager %} - -
    -
    - {% comment %}
    +

    {{model.get_verbose_name_plural}}

    {% if perms.helpdesk.add_departmentmanager %}
    {% endcomment %} +
    {% endcomment %} {% comment %} ------------------------------------------------------ {% endcomment %}
    {% endif %} {% if perms.helpdesk.delete_comment %} - diff --git a/helpdesk/urls.py b/helpdesk/urls.py index ad0bb138f..bb08b0be2 100644 --- a/helpdesk/urls.py +++ b/helpdesk/urls.py @@ -246,9 +246,4 @@ urlpatterns = [ name="delete-ticket-document", ), path("load-faqs/", views.load_faqs, name="load-faqs"), - path( - "ticket-file-upload//", - views.ticket_file_upload, - name="ticket-file-upload", - ), ] diff --git a/helpdesk/views.py b/helpdesk/views.py index d7002b9b1..f9f808ba1 100644 --- a/helpdesk/views.py +++ b/helpdesk/views.py @@ -1056,7 +1056,7 @@ def ticket_change_raised_on(request, ticket_id): if form.is_valid(): form.save() messages.success(request, _("Responsibility updated for the Ticket")) - return HttpResponse(status=204, headers={"HX-Refresh": "true"}) + return redirect(ticket_detail, ticket_id=ticket_id) return render( request, "helpdesk/ticket/forms/change_raised_on.html", @@ -1251,7 +1251,7 @@ def comment_create(request, ticket_id): ) a_form.save() messages.success(request, _("A new comment has been created.")) - return redirect(ticket_detail, ticket_id=ticket_id) + return redirect(ticket_detail, ticket_id=ticket_id) @login_required @@ -1863,24 +1863,3 @@ def load_faqs(request): "catagories": category_lookup, }, ) - - -@login_required -@hx_request_required -def ticket_file_upload(request, id): - """ - This function is used to upload files to the ticket. - """ - ticket = Ticket.objects.get(id=id) - if request.method == "POST": - files = request.FILES.getlist("file") - for file in files: - a_form = AttachmentForm({"file": file, "ticket": ticket, "comment": None}) - a_form.save() - messages.success(request, _("File(s) uploaded successfully.")) - - return render( - request, - "helpdesk/ticket/ticket_detail.html", - {"ticket": ticket, "attachments": ticket.ticket_attachment.all()}, - ) diff --git a/horilla/decorators.py b/horilla/decorators.py index d66546cc2..7861e2df6 100755 --- a/horilla/decorators.py +++ b/horilla/decorators.py @@ -260,6 +260,8 @@ def login_required(view_func): or not employee or not employee.is_active ): + if request.headers.get("HX-Request"): + return HttpResponse(status=204, headers={"HX-Refresh": "true"}) return redirect(redirect_url) try: func = view_func(request, *args, **kwargs) diff --git a/horilla/models.py b/horilla/models.py index 64eb9a8b1..5f889840c 100644 --- a/horilla/models.py +++ b/horilla/models.py @@ -9,6 +9,7 @@ information, audit logging, and active/inactive status management. """ import re +from uuid import uuid4 from auditlog.models import AuditlogHistoryField from auditlog.registry import auditlog @@ -17,6 +18,7 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models.fields.files import FieldFile from django.urls import reverse +from django.utils.text import slugify from django.utils.translation import gettext as _ from horilla.horilla_middlewares import _thread_locals @@ -45,6 +47,33 @@ def has_xss(value): return bool(xss_pattern.search(value)) +def upload_path(instance, filename): + """ + Generates a unique file path for uploads in the format: + app_label/model_name/field_name/originalfilename-uuid.ext + """ + ext = filename.split(".")[-1] + base_name = ".".join(filename.split(".")[:-1]) or "file" + unique_name = f"{slugify(base_name)}-{uuid4().hex[:8]}.{ext}" + + # Try to find which field is uploading this file + field_name = next( + ( + k + for k, v in instance.__dict__.items() + if hasattr(v, "name") and v.name == filename + ), + None, + ) + + app_label = instance._meta.app_label + model_name = instance._meta.model_name + + if field_name: + return f"{app_label}/{model_name}/{field_name}/{unique_name}" + return f"{app_label}/{model_name}/{unique_name}" + + class HorillaModel(models.Model): """ An abstract base model that includes common fields and functionalities @@ -91,7 +120,7 @@ class HorillaModel(models.Model): Override the save method to automatically set the created_by and modified_by fields based on the current request user. """ - self.full_clean() + # self.full_clean() request = getattr(_thread_locals, "request", None) diff --git a/horilla_api/api_views/auth/views.py b/horilla_api/api_views/auth/views.py index 997a46ca5..d53039b97 100644 --- a/horilla_api/api_views/auth/views.py +++ b/horilla_api/api_views/auth/views.py @@ -18,6 +18,7 @@ class LoginAPIView(APIView): face_detection = False face_detection_image = None geo_fencing = False + company_id = None try: face_detection = employee.get_company().face_detection.start except: diff --git a/horilla_automations/models.py b/horilla_automations/models.py index aee3bc1e0..f2462d7d7 100644 --- a/horilla_automations/models.py +++ b/horilla_automations/models.py @@ -38,7 +38,7 @@ class MailAutomation(HorillaModel): ] title = models.CharField(max_length=256, unique=True) - method_title = models.CharField(max_length=50, editable=False) + method_title = models.CharField(max_length=100, editable=False) model = models.CharField(max_length=100, choices=MODEL_CHOICES, null=False) mail_to = models.TextField(verbose_name="Mail to/Notify to") mail_details = models.CharField( @@ -63,7 +63,7 @@ class MailAutomation(HorillaModel): default="email", max_length=50, choices=SEND_OPTIONS, - verbose_name=_("Choose Delivery Channel"), + verbose_name=_("Choose Delivary Channel"), ) template_attachments = models.ManyToManyField( HorillaMailTemplate, @@ -123,16 +123,6 @@ class MailAutomation(HorillaModel): "horilla_automations/mail_cc.html", {"employees": employees} ) - def detail_actions(self): - """ - This method for get custom column for actions. - """ - - return render_template( - path="horilla_automations/detail_action.html", - context={"instance": self}, - ) - def detailed_url(self): return reverse("automation-detailed-view", kwargs={"pk": self.pk}) diff --git a/horilla_automations/signals.py b/horilla_automations/signals.py index 3e0de9169..398084681 100644 --- a/horilla_automations/signals.py +++ b/horilla_automations/signals.py @@ -361,171 +361,159 @@ def send_mail(request, automation, instance): mail_template = automation.mail_template employees = [] - raw_emails = [] + to_emails = [] + + if instance.pk: + # refreshing instance due to m2m fields are not loading here some times + time.sleep(0.1) + instance = instance._meta.model.objects.get(pk=instance.pk) + + pk_or_text = getattribute(instance, automation.mail_details) + model_class = get_model_class(automation.model) + model_class = get_related_field_model(model_class, automation.mail_details) + context_instance = None + if isinstance(pk_or_text, int): + context_instance = model_class.objects.filter(pk=pk_or_text).first() + + for mapping in eval_validate(automation.mail_to): + result = getattribute(instance, mapping) + if isinstance(result, list): + to_emails.extend(result) + else: + to_emails.append(result) + + to_emails = list(filter(None, set(to_emails))) + + employees = Employee.objects.filter( + models.Q(email__in=to_emails) + | models.Q(employee_work_info__email__in=to_emails) + ).select_related("employee_work_info") + + employees = list(employees) try: - if instance.pk: - # refreshing instance due to m2m fields are not loading here some times - time.sleep(0.1) - instance = instance._meta.model.objects.get(pk=instance.pk) - - pk_or_text = getattribute(instance, automation.mail_details) - model_class = get_model_class(automation.model) - model_class = get_related_field_model(model_class, automation.mail_details) - context_instance = None - if isinstance(pk_or_text, int): - context_instance = model_class.objects.filter(pk=pk_or_text).first() - - for mapping in eval_validate(automation.mail_to): - result = getattribute(instance, mapping) - if isinstance(result, list): - raw_emails.extend(result) - else: - raw_emails.append(result) - - raw_emails = list(filter(None, set(raw_emails))) - - employees = Employee.objects.filter( - models.Q(email__in=raw_emails) - | models.Q(employee_work_info__email__in=raw_emails) - ).select_related("employee_work_info") - - employees = list(employees) - try: - also_sent_to = automation.also_sent_to.select_related( - "employee_work_info" - ).all() - if also_sent_to.exists(): - employees.extend(emp for emp in also_sent_to if emp) - except Exception as e: - logger.error(e) - - email_backend = ConfiguredEmailBackend() - display_email_name = email_backend.dynamic_from_email_with_display_name - if request: - try: - display_email_name = f"{request.user.employee_get.get_full_name()} <{request.user.employee_get.email}>" - from_email = display_email_name - reply_to = [display_email_name] - except: - logger.error(Exception) - - if pk_or_text and request and raw_emails: - attachments = [] - try: - sender: Employee = request.user.employee_get - except: - sender = None - if context_instance: - - # Prevent same person notification on automation - user_ids = [ - emp.employee_user_id - for emp in employees - if sender.employee_user_id.pk != emp.employee_user_id.pk - ] - emails = [ - str(emp.get_mail()) - for emp in employees - if emp and emp.get_mail() - if emp.get_mail() != sender.get_mail() - ] - - to = emails[:1] - cc = emails[1:] - if template_attachments := automation.template_attachments.all(): - for template_attachment in template_attachments: - template_bdy = template.Template(template_attachment.body) - context = template.Context( - { - "instance": context_instance, - "self": sender, - "model_instance": instance, - "request": request, - } - ) - render_bdy = template_bdy.render(context) - attachments.append( - ( - "Document", - generate_pdf( - render_bdy, {}, path=False, title="Document" - ).content, - "application/pdf", - ) - ) - - template_bdy = template.Template(mail_template.body) - else: - template_bdy = template.Template(pk_or_text) - context = template.Context( - { - "instance": context_instance, - "self": sender, - "model_instance": instance, - "request": request, - } - ) - render_bdy = template_bdy.render(context) - - title_template = template.Template(automation.title) - title_context = template.Context( - {"instance": instance, "self": sender, "request": request} - ) - render_title = title_template.render(title_context) - soup = BeautifulSoup(render_bdy, "html.parser") - plain_text = soup.get_text(separator="\n") - - email = EmailMessage( - subject=render_title, - body=render_bdy, - to=to, - cc=cc, - from_email=from_email, - reply_to=reply_to, - ) - email.content_subtype = "html" - - email.attachments = attachments - - def _send_mail(email): - try: - email.send() - logger.info( - f"Automation {automation.title} is triggered by {request.user.employee_get}" - ) - except Exception as e: - logger.error(e) - - def _send_notification(text): - - notify.send( - sender, - recipient=[ - user - for user in user_ids - if sender.employee_user_id.pk != user.pk - ], - verb=f"{text}", - icon="person-remove", - redirect="", - ) - logger.info( - f"Automation {automation.title} is triggered by {request.user.employee_get}" - ) - - if automation.delivery_channel != "notification": - thread = threading.Thread( - target=lambda: _send_mail(email), - ) - thread.start() - - if automation.delivery_channel != "email": - thread = threading.Thread( - target=lambda: _send_notification(plain_text), - ) - thread.start() - logger.info( - f"Automation Triggered | {automation.get_delivery_channel_display()} | {automation}" - ) + also_sent_to = automation.also_sent_to.select_related( + "employee_work_info" + ).all() + if also_sent_to.exists(): + employees.extend(emp for emp in also_sent_to if emp) except Exception as e: - logger.error(f"Error in Automation | {e}") + logger.error(e) + + cc_emails = [str(emp.get_mail()) for emp in also_sent_to if emp and emp.get_mail()] + user_ids = [emp.employee_user_id for emp in employees] + + to = to_emails + cc = cc_emails + + email_backend = ConfiguredEmailBackend() + default_email = email_backend.dynamic_from_email_with_display_name + + from_email = default_email + reply_to = [default_email] + + if request and hasattr(request, "user") and hasattr(request.user, "employee_get"): + try: + user = request.user.employee_get + display_email_name = f"{user.get_full_name()} <{user.email}>" + from_email = display_email_name + reply_to = [display_email_name] + except Exception as e: + logger.error(f"Error generating user-based email display name: {e}") + + if pk_or_text and request and to_emails: + attachments = [] + try: + sender = request.user.employee_get + except: + sender = None + if context_instance: + if template_attachments := automation.template_attachments.all(): + for template_attachment in template_attachments: + template_bdy = template.Template(template_attachment.body) + context = template.Context( + { + "instance": context_instance, + "self": sender, + "model_instance": instance, + "request": request, + } + ) + render_bdy = template_bdy.render(context) + attachments.append( + ( + "Document", + generate_pdf( + render_bdy, {}, path=False, title="Document" + ).content, + "application/pdf", + ) + ) + + template_bdy = template.Template(mail_template.body) + else: + template_bdy = template.Template(pk_or_text) + context = template.Context( + { + "instance": context_instance, + "self": sender, + "model_instance": instance, + "request": request, + } + ) + render_bdy = template_bdy.render(context) + + title_template = template.Template(automation.title) + title_context = template.Context( + {"instance": instance, "self": sender, "request": request} + ) + render_title = title_template.render(title_context) + soup = BeautifulSoup(render_bdy, "html.parser") + plain_text = soup.get_text(separator="\n") + + email = EmailMessage( + subject=render_title, + body=render_bdy, + to=to, + cc=cc, + from_email=from_email, + reply_to=reply_to, + ) + email.content_subtype = "html" + + email.attachments = attachments + + def _send_mail(email): + try: + email.send() + logger.info( + f"Automation {automation.title} is triggered by {request.user.employee_get}" + ) + except Exception as e: + logger.error(e) + + def _send_notification(text): + notify.send( + sender, + recipient=user_ids, + verb=f"{text}", + icon="person-remove", + redirect="", + ) + logger.info( + f"Automation {automation.title} is triggered by {request.user.employee_get}" + ) + + if automation.delivery_channel != "notification": + thread = threading.Thread( + target=lambda: _send_mail(email), + ) + thread.start() + + if automation.delivery_channel != "email": + thread = threading.Thread( + target=lambda: _send_notification(plain_text), + ) + thread.start() + logger.info( + f"Automation Triggered | {automation.get_delivery_channel_display()} | {automation}" + ) diff --git a/horilla_automations/templates/horilla_automations/load_automation.html b/horilla_automations/templates/horilla_automations/load_automation.html index f21f4a973..783d6a122 100644 --- a/horilla_automations/templates/horilla_automations/load_automation.html +++ b/horilla_automations/templates/horilla_automations/load_automation.html @@ -6,7 +6,7 @@
    -
    +
    {% csrf_token %}
    {var nt=!1,it=!1,W=[],ot=-1;function Ut(e){Rn(e)}function Rn(e){W.includes(e)||W.push(e),Mn()}function Wt(e){let t=W.indexOf(e);t!==-1&&t>ot&&W.splice(t,1)}function Mn(){!it&&!nt&&(nt=!0,queueMicrotask(Nn))}function Nn(){nt=!1,it=!0;for(let e=0;ee.effect(t,{scheduler:r=>{st?Ut(r):r()}}),at=e.raw}function ct(e){N=e}function Yt(e){let t=()=>{};return[n=>{let i=N(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),$(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=N(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>$(i)}var Xt=[],Zt=[],Qt=[];function er(e){Qt.push(e)}function te(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Zt.push(t))}function Ae(e){Xt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function lt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function tr(e){for(e._x_effects?.forEach(Wt);e._x_cleanups?.length;)e._x_cleanups.pop()()}var ut=new MutationObserver(mt),ft=!1;function ue(){ut.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ft=!0}function dt(){kn(),ut.disconnect(),ft=!1}var le=[];function kn(){let e=ut.takeRecords();le.push(()=>e.length>0&&mt(e));let t=le.length;queueMicrotask(()=>{if(le.length===t)for(;le.length>0;)le.shift()()})}function m(e){if(!ft)return e();dt();let t=e();return ue(),t}var pt=!1,Se=[];function rr(){pt=!0}function nr(){pt=!1,mt(Se),Se=[]}function mt(e){if(pt){Se=Se.concat(e);return}let t=[],r=new Set,n=new Map,i=new Map;for(let o=0;o{s.nodeType===1&&s._x_marker&&r.add(s)}),e[o].addedNodes.forEach(s=>{if(s.nodeType===1){if(r.has(s)){r.delete(s);return}s._x_marker||t.push(s)}})),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{lt(s,o)}),n.forEach((o,s)=>{Xt.forEach(a=>a(s,o))});for(let o of r)t.some(s=>s.contains(o))||Zt.forEach(s=>s(o));for(let o of t)o.isConnected&&Qt.forEach(s=>s(o));t=null,r=null,n=null,i=null}function Ce(e){return z(B(e))}function k(e,t,r){return e._x_dataStack=[t,...B(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function B(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?B(e.host):e.parentNode?B(e.parentNode):[]}function z(e){return new Proxy({objects:e},Dn)}var Dn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Pn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Pn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>In(n,i),s=>ht(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function In(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function ht(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),ht(e[t[0]],t.slice(1),r)}}var ir={};function y(e,t){ir[e]=t}function fe(e,t){let r=Ln(t);return Object.entries(ir).forEach(([n,i])=>{Object.defineProperty(e,`$${n}`,{get(){return i(t,r)},enumerable:!1})}),e}function Ln(e){let[t,r]=_t(e),n={interceptor:Re,...t};return te(e,r),n}function or(e,t,r,...n){try{return r(...n)}catch(i){re(i,e,t)}}function re(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message} + +${r?'Expression: "'+r+`" + +`:""}`,t),setTimeout(()=>{throw e},0)}var Me=!0;function ke(e){let t=Me;Me=!1;let r=e();return Me=t,r}function R(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return sr(...e)}var sr=xt;function ar(e){sr=e}function xt(e,t){let r={};fe(r,e);let n=[r,...B(e)],i=typeof t=="function"?$n(n,t):Fn(n,t,e);return or.bind(null,e,t,i)}function $n(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(z([n,...e]),i);Ne(r,o)}}var gt={};function jn(e,t){if(gt[e])return gt[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return re(s,t,e),Promise.resolve()}})();return gt[e]=o,o}function Fn(e,t,r){let n=jn(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=z([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>re(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>re(l,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>re(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var wt="x-";function C(e=""){return wt+e}function cr(e){wt=e}var De={};function d(e,t){return De[e]=t,{before(r){if(!De[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=G.indexOf(r);G.splice(n>=0?n:G.indexOf("DEFAULT"),0,e)}}}function lr(e){return Object.keys(De).includes(e)}function pe(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=Et(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(dr((o,s)=>n[o]=s)).filter(mr).map(zn(n,r)).sort(Kn).map(o=>Bn(e,o))}function Et(e){return Array.from(e).map(dr()).filter(t=>!mr(t))}var yt=!1,de=new Map,ur=Symbol();function fr(e){yt=!0;let t=Symbol();ur=t,de.set(t,[]);let r=()=>{for(;de.get(t).length;)de.get(t).shift()();de.delete(t)},n=()=>{yt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Yt(e);return t.push(i),[{Alpine:K,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:R.bind(R,e)},()=>t.forEach(a=>a())]}function Bn(e,t){let r=()=>{},n=De[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),yt?de.get(ur).push(n):n())};return s.runCleanups=o,s}var Pe=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),Ie=e=>e;function dr(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=pr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var pr=[];function ne(e){pr.push(e)}function mr({name:e}){return hr().test(e)}var hr=()=>new RegExp(`^${wt}([^:^.]+)\\b`);function zn(e,t){return({name:r,value:n})=>{let i=r.match(hr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var bt="DEFAULT",G=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",bt,"teleport"];function Kn(e,t){let r=G.indexOf(e.type)===-1?bt:e.type,n=G.indexOf(t.type)===-1?bt:t.type;return G.indexOf(r)-G.indexOf(n)}function J(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function D(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>D(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)D(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var _r=!1;function gr(){_r&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),_r=!0,document.body||E("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` + + \ No newline at end of file diff --git a/horilla_theme/templates/feedback/question_template/question_template_detailed_view.html b/horilla_theme/templates/feedback/question_template/question_template_detailed_view.html new file mode 100644 index 000000000..445098544 --- /dev/null +++ b/horilla_theme/templates/feedback/question_template/question_template_detailed_view.html @@ -0,0 +1,119 @@ +{% extends 'index.html' %} +{% load i18n %} +{% load widget_tweaks %} +{% load basefilters %} +{% block content %} + + +
    +
    +

    {% trans "Add A Question" %}

    +
    + + {% if perms.pms.add_question or request.user|filtersubordinates %} + + {% csrf_token %} +
    +
    +
    + {% render_field form.question_type class="form-control oh-select--qa-change" %} + {{ form.question_type.errors }} +
    +
    + {% render_field form.question class="form-control" placeholder="Enter question here" %} +

    +
    +
    + + +
    + + + + + {% endif %} +
    + +
    +
    +

    {% trans "Questions" %}

    +
    + +
    + {% include 'feedback/question/question_all.html' %} +
    +
    + + + + + +{% endblock %} diff --git a/horilla_theme/templates/horilla_theme/components/header_scripts.html b/horilla_theme/templates/horilla_theme/components/header_scripts.html index e11efaa13..1a73d8742 100644 --- a/horilla_theme/templates/horilla_theme/components/header_scripts.html +++ b/horilla_theme/templates/horilla_theme/components/header_scripts.html @@ -6,6 +6,6 @@ - + {% block header_scripts %} {% endblock header_scripts %} diff --git a/horilla_views/cbv_methods.py b/horilla_views/cbv_methods.py index 31b1fa93b..ccf345bc3 100644 --- a/horilla_views/cbv_methods.py +++ b/horilla_views/cbv_methods.py @@ -13,7 +13,7 @@ from venv import logger from django import forms, template from django.contrib import messages from django.core.cache import cache as CACHE -from django.core.paginator import Page, Paginator +from django.core.paginator import Paginator from django.db import models from django.db.models.fields.related import ForeignKey from django.db.models.fields.related_descriptors import ( diff --git a/horilla_views/generic/cbv/views.py b/horilla_views/generic/cbv/views.py index 225ed2c75..a93a5d3c8 100644 --- a/horilla_views/generic/cbv/views.py +++ b/horilla_views/generic/cbv/views.py @@ -42,11 +42,9 @@ from horilla_views.cbv_methods import ( # update_initial_cache, get_verbose_name_from_field_path, hx_request_required, paginator_qry, - resolve_foreign_keys, sortby, split_by_import_reference, structured, - update_related, update_saved_filter_cache, ) from horilla_views.forms import DynamicBulkUpdateForm, ToggleColumnForm diff --git a/horilla_views/templates/generic/horilla_nav.html b/horilla_views/templates/generic/horilla_nav.html index fd4c4e18b..015a543fc 100644 --- a/horilla_views/templates/generic/horilla_nav.html +++ b/horilla_views/templates/generic/horilla_nav.html @@ -1,7 +1,7 @@ {% load i18n %}
    -

    {{nav_title}}

    +

    {{nav_title|safe}}

    {% endfor %} {% for path in script_static_paths %} diff --git a/leave/cbv/leave_requests.py b/leave/cbv/leave_requests.py index 52822b140..32556e99f 100644 --- a/leave/cbv/leave_requests.py +++ b/leave/cbv/leave_requests.py @@ -296,7 +296,6 @@ class LeaveRequestsDetailView(HorillaDetailedView): (_("Created Date"), "requested_date"), (_("Created By"), "created_by"), (_("Description"), "description"), - (_("Status"), "get_status_display"), (_("View attachment"), "attachment_action", True), (_("Reason for Rejection"), "rejected_action", True), (_("Reason for Cancellation"), "cancelled_action", True), diff --git a/leave/cbv/leave_types.py b/leave/cbv/leave_types.py index fc34ec172..d356f457e 100644 --- a/leave/cbv/leave_types.py +++ b/leave/cbv/leave_types.py @@ -157,15 +157,15 @@ class LeaveTypeDetailView(HorillaDetailedView): header = {"title": "name", "subtitle": "", "avatar": "get_avatar"} body = [ - (_("Period In"), "get_period_in_display"), + (_("Period In"), "period_in"), (_("Total Days"), "count"), (_("Reset"), "leave_detail_reset", True), (_("Carryforward Type"), "leave_detail_carryforward", True), - (_("Is paid"), "get_payment_display"), - (_("Require Approval"), "get_require_approval_display"), - (_("Require Attachment"), "get_require_attachment_display"), - (_("Exclude company Leaves"), "get_exclude_company_leave_display"), - (_("Exclude Holidays"), "get_exclude_holiday_display"), + (_("Is paid"), "payment"), + (_("Require Approval"), "require_approval"), + (_("Require Attachment"), "require_attachment"), + (_("Exclude company Leaves"), "exclude_company_leave"), + (_("Exclude Holidays"), "exclude_holiday"), (_("Is Encashable"), "encashable"), ] action_method = "detail_view_actions" diff --git a/leave/cbv/my_leave_request.py b/leave/cbv/my_leave_request.py index 93370a13a..7f6c7332f 100644 --- a/leave/cbv/my_leave_request.py +++ b/leave/cbv/my_leave_request.py @@ -236,7 +236,7 @@ class MyLeaveRequestDetailView(HorillaDetailedView): ("Days", "requested_days"), ("Start Date", "start_date"), ("End Date", "end_date"), - ("Status", "get_status_display"), + ("Status", "get_status"), ("Description", "description"), ("Reason for Rejection", "rejected_action", True), ("Reason for Cancellation", "cancelled_action", True), diff --git a/leave/forms.py b/leave/forms.py index 53906657d..abb4abc87 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -52,7 +52,9 @@ class ConditionForm(forms.ModelForm): for field_name, field in self.fields.items(): widget = field.widget if isinstance(widget, (forms.Select,)): - field.widget.attrs["class"] = "oh-select" + field.widget.attrs["style"] = ( + "width:100%; height:50px;border: 1px solid hsl(213deg,22%,84%);border-radius: 0rem;padding: 0.8rem 1.25rem;" + ) elif isinstance(widget, (forms.DateInput)): field.widget.attrs.update({"class": "oh-input w-100"}) field.initial = date.today() @@ -175,9 +177,11 @@ class UpdateLeaveTypeForm(ConditionForm): class Meta: model = LeaveType fields = "__all__" - exclude = ["period_in", "total_days", "is_active"] + exclude = ["is_active"] widgets = { "color": TextInput(attrs={"type": "color", "style": "height:40px;"}), + "period_in": forms.HiddenInput(), + "total_days": forms.HiddenInput(), "carryforward_expire_date": forms.DateInput(attrs={"type": "date"}), } @@ -273,6 +277,23 @@ class LeaveRequestUpdationForm(BaseModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + leave_request = self.instance + employee = leave_request.employee_id + leave_type = leave_request.leave_type_id + + if employee: + available_leaves = employee.available_leave.all() + assigned_leave_types = LeaveType.objects.filter( + id__in=available_leaves.values_list("leave_type_id", flat=True) + ) + + if leave_type and leave_type.id not in assigned_leave_types.values_list( + "id", flat=True + ): + assigned_leave_types |= LeaveType.objects.filter(id=leave_type.id) + + self.fields["leave_type_id"].queryset = assigned_leave_types + self.fields["leave_type_id"].widget.attrs.update( { "hx-include": "#leaveRequestUpdateForm", diff --git a/leave/models.py b/leave/models.py index 98434a841..83f217ff4 100644 --- a/leave/models.py +++ b/leave/models.py @@ -31,7 +31,7 @@ from employee.models import Employee, EmployeeWorkInformation from horilla import horilla_middlewares from horilla.horilla_middlewares import _thread_locals from horilla.methods import get_horilla_model_class -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_audit.methods import get_diff from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template @@ -165,38 +165,69 @@ WEEK_DAYS = [ class LeaveType(HorillaModel): - icon = models.ImageField(null=True, blank=True, upload_to="leave/leave_icon") - name = models.CharField(max_length=30, null=False) - color = models.CharField(null=True, max_length=30) - payment = models.CharField(max_length=30, choices=PAYMENT, default="unpaid") + icon = models.ImageField( + null=True, blank=True, upload_to=upload_path, verbose_name=_("Icon") + ) + name = models.CharField(max_length=30, null=False, verbose_name=_("Name")) + color = models.CharField(null=True, max_length=30, verbose_name=_("Color")) + payment = models.CharField( + max_length=30, choices=PAYMENT, default="unpaid", verbose_name=_("Is Paid") + ) count = models.FloatField(null=True, default=1) period_in = models.CharField(max_length=30, choices=TIME_PERIOD, default="day") - limit_leave = models.BooleanField(default=True) + limit_leave = models.BooleanField(default=True, verbose_name=_("Limit Leave Days")) total_days = models.FloatField(null=True, default=1) - reset = models.BooleanField(default=False) - is_encashable = models.BooleanField(default=False, verbose_name=_("Is encashable")) + reset = models.BooleanField(default=False, verbose_name=_("Reset")) + is_encashable = models.BooleanField(default=False, verbose_name=_("Is Encashable")) reset_based = models.CharField( max_length=30, choices=RESET_BASED, blank=True, null=True, + verbose_name=_("Reset Period"), + ) + reset_month = models.CharField( + max_length=30, choices=MONTHS, blank=True, verbose_name=_("Reset Month") + ) + reset_day = models.CharField( + max_length=30, choices=DAYS, null=True, blank=True, verbose_name=_("Reset Day") ) - reset_month = models.CharField(max_length=30, choices=MONTHS, blank=True) - reset_day = models.CharField(max_length=30, choices=DAYS, null=True, blank=True) reset_weekend = models.CharField( - max_length=10, null=True, blank=True, choices=WEEK_DAYS + max_length=10, + null=True, + blank=True, + choices=WEEK_DAYS, + verbose_name=_("Reset Weekday"), ) carryforward_type = models.CharField( - max_length=30, choices=CARRYFORWARD_TYPE, default="no carryforward" + max_length=30, + choices=CARRYFORWARD_TYPE, + default="no carryforward", + verbose_name=_("Carryforward Type"), + ) + carryforward_max = models.FloatField( + null=True, blank=True, verbose_name=_("Carryforward Max") + ) + carryforward_expire_in = models.IntegerField( + null=True, blank=True, verbose_name=_("Carryforward Expire In") ) - carryforward_max = models.FloatField(null=True, blank=True) - carryforward_expire_in = models.IntegerField(null=True, blank=True) carryforward_expire_period = models.CharField( - max_length=30, choices=TIME_PERIOD, null=True, blank=True + max_length=30, + choices=TIME_PERIOD, + null=True, + blank=True, + verbose_name=_("Carryforward Expire Period"), + ) + carryforward_expire_date = models.DateField( + null=True, blank=True, verbose_name=_("Carryforward Expire Date") ) - carryforward_expire_date = models.DateField(null=True, blank=True) require_approval = models.CharField( - max_length=30, choices=CHOICES, null=True, blank=True, default="yes" + max_length=30, + choices=CHOICES, + null=True, + blank=True, + default="yes", + verbose_name=_("Require Approval"), ) require_attachment = models.CharField( max_length=30, @@ -207,9 +238,14 @@ class LeaveType(HorillaModel): verbose_name=_("Require Attachment"), ) exclude_company_leave = models.CharField( - max_length=30, choices=CHOICES, default="no" + max_length=30, + choices=CHOICES, + default="no", + verbose_name=_("Exclude Company Holidays"), + ) + exclude_holiday = models.CharField( + max_length=30, choices=CHOICES, default="no", verbose_name=_("Exclude Holidays") ) - exclude_holiday = models.CharField(max_length=30, choices=CHOICES, default="no") is_compensatory_leave = models.BooleanField(default=False) company_id = models.ForeignKey( Company, null=True, editable=False, on_delete=models.PROTECT @@ -300,6 +336,16 @@ class LeaveType(HorillaModel): ) def save(self, *args, **kwargs): + request = getattr(horilla_middlewares._thread_locals, "request", None) + selected_company = request.session.get("selected_company") + if ( + not self.id + and not self.company_id + and selected_company + and selected_company != "all" + ): + self.company_id = Company.find(selected_company) + if ( self.carryforward_type != "no carryforward" and self.carryforward_max is None @@ -868,7 +914,7 @@ class LeaveRequest(HorillaModel): attachment = models.FileField( null=True, blank=True, - upload_to="leave/leave_attachment", + upload_to=upload_path, verbose_name=_("Attachment"), ) status = models.CharField( @@ -1409,11 +1455,11 @@ class LeaveRequest(HorillaModel): ) def clean(self): - cleaned_data = super().clean() - - attachment = self.attachment - leave_type = self.leave_type_id + leave_type = getattr(self, "leave_type_id", None) + if not leave_type: # 836 + return + attachment = getattr(self, "attachment", None) requ_days = set(self.requested_dates()) restricted_leaves = RestrictLeave.objects.all() request = getattr(horilla_middlewares._thread_locals, "request", None) @@ -1632,7 +1678,7 @@ class LeaveRequest(HorillaModel): result = False return result - def is_approvable_by_user(self): + def is_approved(self): request = getattr(horilla_middlewares._thread_locals, "request", None) if request: employee = Employee.objects.filter(employee_user_id=request.user).first() @@ -1707,7 +1753,7 @@ class LeaveRequest(HorillaModel): class LeaverequestFile(models.Model): - file = models.FileField(upload_to="leave/request_files") + file = models.FileField(upload_to=upload_path) class LeaverequestComment(HorillaModel): @@ -1739,7 +1785,7 @@ class LeaveAllocationRequest(HorillaModel): attachment = models.FileField( null=True, blank=True, - upload_to="leave/leave_attachment", + upload_to=upload_path, verbose_name=_("Attachment"), ) status = models.CharField( diff --git a/leave/scheduler.py b/leave/scheduler.py index 825d63ed1..50724d699 100644 --- a/leave/scheduler.py +++ b/leave/scheduler.py @@ -64,4 +64,4 @@ if not any( scheduler = BackgroundScheduler() scheduler.add_job(leave_reset, "interval", seconds=20) - scheduler.start() + # scheduler.start() diff --git a/leave/sidebar.py b/leave/sidebar.py index 687745214..eb56e8197 100644 --- a/leave/sidebar.py +++ b/leave/sidebar.py @@ -3,7 +3,7 @@ leave/sidebar.py """ from django.apps import apps -from django.urls import reverse +from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as trans from base.templatetags.basefilters import is_leave_approval_manager, is_reportingmanager @@ -15,45 +15,45 @@ IMG_SRC = "images/ui/leave.svg" SUBMENUS = [ { "menu": trans("Dashboard"), - "redirect": reverse("leave-dashboard"), + "redirect": reverse_lazy("leave-dashboard"), "accessibility": "leave.sidebar.dashboard_accessibility", }, { "menu": trans("My Leave Requests"), - "redirect": reverse("user-request-view"), + "redirect": reverse_lazy("user-request-view"), }, { "menu": trans("Leave Requests"), - "redirect": reverse("request-view"), + "redirect": reverse_lazy("request-view"), "accessibility": "leave.sidebar.leave_request_accessibility", }, { "menu": trans("Leave Types"), - "redirect": reverse("type-view"), + "redirect": reverse_lazy("type-view"), "accessibility": "leave.sidebar.type_accessibility", }, { "menu": trans("Assigned Leave"), - "redirect": reverse("assign-view"), + "redirect": reverse_lazy("assign-view"), "accessibility": "leave.sidebar.assign_accessibility", }, { "menu": trans("Leave Allocation Request"), - "redirect": reverse("leave-allocation-request-view"), + "redirect": reverse_lazy("leave-allocation-request-view"), }, { "menu": trans("Holidays"), - "redirect": reverse("holiday-view"), + "redirect": reverse_lazy("holiday-view"), "accessibility": "leave.sidebar.holiday_accessibility", }, { "menu": trans("Company Leaves"), - "redirect": reverse("company-leave-view"), + "redirect": reverse_lazy("company-leave-view"), "accessibility": "leave.sidebar.company_leave_accessibility", }, { "menu": trans("Restrict Leaves"), - "redirect": reverse("restrict-view"), + "redirect": reverse_lazy("restrict-view"), "accessibility": "leave.sidebar.restrict_leave_accessibility", }, ] @@ -62,7 +62,9 @@ SUBMENUS = [ def dashboard_accessibility(request, submenu, user_perms, *args, **kwargs): have_perm = request.user.has_perm("leave.view_leaverequest") if not have_perm: - submenu["redirect"] = reverse("leave-employee-dashboard") + "?dashboard=true" + submenu["redirect"] = ( + reverse_lazy("leave-employee-dashboard") + "?dashboard=true" + ) return True @@ -107,7 +109,7 @@ if apps.is_installed("attendance"): SUBMENUS.append( { "menu": trans("Compensatory Leave Requests"), - "redirect": reverse("view-compensatory-leave"), + "redirect": reverse_lazy("view-compensatory-leave"), "accessibility": "leave.sidebar.componstory_accessibility", } ) diff --git a/leave/static/cbv/assigned_leave/assigned_leave.js b/leave/static/cbv/assigned_leave/assigned_leave.js index b96b420aa..da0615ae2 100644 --- a/leave/static/cbv/assigned_leave/assigned_leave.js +++ b/leave/static/cbv/assigned_leave/assigned_leave.js @@ -44,13 +44,28 @@ function makeLeaveListUnique(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 { - callback("en"); - } + 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 importAssignedLeave() { diff --git a/leave/static/cbv/compensatory_leave/compensatory_leave.js b/leave/static/cbv/compensatory_leave/compensatory_leave.js index ecae649af..f760fe52f 100644 --- a/leave/static/cbv/compensatory_leave/compensatory_leave.js +++ b/leave/static/cbv/compensatory_leave/compensatory_leave.js @@ -1,45 +1,60 @@ var closeButtonText = { - ar: "إغلاق", - de: "Schließen", - es: "Cerrar", - en: "Close", - fr: "Fermer", -}; + ar: "إغلاق", + de: "Schließen", + es: "Cerrar", + en: "Close", + fr: "Fermer", + }; -var confirmButtonText = { - ar: "تأكيد", - de: "Bestätigen", - es: "Confirmar", - en: "Confirm", - fr: "Confirmer", -}; + var confirmButtonText = { + ar: "تأكيد", + de: "Bestätigen", + es: "Confirmar", + en: "Confirm", + fr: "Confirmer", + }; -var deleteCompensatoryMessages = { - ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", - es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", - en: "Are you sure you want to delete ?", - fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", -}; + var deleteCompensatoryMessages = { + ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", + de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", + es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", + en: "Are you sure you want to delete ?", + fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", + }; -tickLeaverequestsCheckboxes(); -function makeLeaverequestsListUnique(list) { - return Array.from(new Set(list)); -} - -tickUserrequestsCheckboxes(); -function makeUserrequestsListUnique(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 { - callback("en"); + tickLeaverequestsCheckboxes(); + function makeLeaverequestsListUnique(list) { + return Array.from(new Set(list)); + } + + tickUserrequestsCheckboxes(); + function makeUserrequestsListUnique(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"); + }, + }); + } } -} diff --git a/leave/static/cbv/holidays/holiday_action.js b/leave/static/cbv/holidays/holiday_action.js index a871efec1..d6acba4ba 100644 --- a/leave/static/cbv/holidays/holiday_action.js +++ b/leave/static/cbv/holidays/holiday_action.js @@ -4,170 +4,185 @@ var rowMessages = { es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; + }; -var deleteHolidayMessages = { + 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 = { + 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 = { + }; + 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() { + function createHolidayHxValue() { var pd = $(".oh-pagination").attr("data-pd"); var hxValue = JSON.stringify(pd); $("#holidayCreateButton").attr("hx-vals", `{"pd":${hxValue}}`); -} + } -tickHolidayCheckboxes(); -function makeHolidayListUnique(list) { + tickHolidayCheckboxes(); + function makeHolidayListUnique(list) { return Array.from(new Set(list)); -} + } -function getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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() { + 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); + $(".all-holidays").prop("checked", true); } uniqueIds.forEach(function (id) { - $("#" + id).prop("checked", true); + $("#" + 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"); - } + 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"); + } }); -} + } -//$(".holidaysInfoImport").click(function (e) { + //$(".holidaysInfoImport").click(function (e) { function importHolidays() { 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: "/configuration/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); - }, - }); - } - }); + 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: "/configuration/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); + }, + }); + } + }); }); -} + } -function bulkDeleteHoliday() { +function bulkDeleteHoliday(){ var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteHolidayMessages[languageCode]; - var textMessage = no_rows_deleteMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/holidays-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); + languageCode = code; + var confirmMessage = deleteHolidayMessages[languageCode]; + var textMessage = no_rows_deleteMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/holidays-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } else { } + }, }); - } + } + }); + } }); } diff --git a/leave/static/cbv/leave_requests/leave_requests.js b/leave/static/cbv/leave_requests/leave_requests.js index b21e81ad5..91cd07c21 100644 --- a/leave/static/cbv/leave_requests/leave_requests.js +++ b/leave/static/cbv/leave_requests/leave_requests.js @@ -1,73 +1,88 @@ var closeButtonText = { - ar: "إغلاق", - de: "Schließen", - es: "Cerrar", - en: "Close", - fr: "Fermer", + ar: "إغلاق", + de: "Schließen", + es: "Cerrar", + en: "Close", + fr: "Fermer", }; var confirmButtonText = { - ar: "تأكيد", - de: "Bestätigen", - es: "Confirmar", - en: "Confirm", - fr: "Confirmer", + ar: "تأكيد", + de: "Bestätigen", + es: "Confirmar", + en: "Confirm", + fr: "Confirmer", }; var deleteLeaveRequestMessages = { - ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", - es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", - en: "Do you really want to delete all the selected leave requests?", - fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", + ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", + de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", + es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", + en: "Do you really want to delete all the selected leave requests?", + fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", }; var approveLeaveRequests = { - ar: "هل ترغب في الموافقة على طلبات الإجازة المحددة؟", - de: "Möchten Sie die ausgewählten Urlaubsanfragen genehmigen?", - es: "¿Quieres aprobar las solicitudes de licencia seleccionadas?", - en: "Do you want to approve the selected leave requests?", - fr: "Voulez-vous approuver les demandes de congé sélectionnées?", + ar: "هل ترغب في الموافقة على طلبات الإجازة المحددة؟", + de: "Möchten Sie die ausgewählten Urlaubsanfragen genehmigen?", + es: "¿Quieres aprobar las solicitudes de licencia seleccionadas?", + en: "Do you want to approve the selected leave requests?", + fr: "Voulez-vous approuver les demandes de congé sélectionnées?", }; var noRowMessage = { - ar: "لم يتم تحديد أي صفوف.", - de: "Es wurden keine Zeilen ausgewählt.", - es: "No se han seleccionado filas.", - en: "No rows have been selected.", - fr: "Aucune ligne n'a été sélectionnée.", + ar: "لم يتم تحديد أي صفوف.", + de: "Es wurden keine Zeilen ausgewählt.", + es: "No se han seleccionado filas.", + en: "No rows have been selected.", + fr: "Aucune ligne n'a été sélectionnée.", }; var rowMessages = { - ar: " تم الاختيار", - de: " Ausgewählt", - es: " Seleccionado", - en: " Selected", - fr: " Sélectionné", + ar: " تم الاختيار", + de: " Ausgewählt", + es: " Seleccionado", + en: " Selected", + fr: " Sélectionné", }; var excelMessages = { - ar: "هل ترغب في تنزيل ملف Excel؟", - de: "Möchten Sie die Excel-Datei herunterladen?", - es: "¿Desea descargar el archivo de Excel?", - en: "Do you want to download the excel file?", - fr: "Voulez-vous télécharger le fichier Excel?", + ar: "هل ترغب في تنزيل ملف Excel؟", + de: "Möchten Sie die Excel-Datei herunterladen?", + es: "¿Desea descargar el archivo de Excel?", + en: "Do you want to download the excel file?", + fr: "Voulez-vous télécharger le fichier Excel?", }; tickLeaverequestsCheckboxes(); function makeLeaverequestsListUnique(list) { - return Array.from(new Set(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 { + 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"); - } + }, + }); + } } // --------------------------------------- @@ -75,93 +90,93 @@ function getCurrentLanguageCode(callback) { // --------------------------------------- function tickLeaverequestsCheckboxes() { - var ids = JSON.parse($("#selectedLeaverequests").attr("data-ids") || "[]"); - uniqueIds = makeLeaverequestsListUnique(ids); - toggleHighlight(uniqueIds); - click = $("#selectedLeaverequests").attr("data-clicked"); - if (click === "1") { - $(".all-leave-requests").prop("checked", true); + var ids = JSON.parse($("#selectedLeaverequests").attr("data-ids") || "[]"); + uniqueIds = makeLeaverequestsListUnique(ids); + toggleHighlight(uniqueIds); + click = $("#selectedLeaverequests").attr("data-clicked"); + if (click === "1") { + $(".all-leave-requests").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) { + $("#unselectAllLeaverequests").css("display", "inline-flex"); + $("#exportLeaverequests").css("display", "inline-flex"); + $("#selectedShowLeaverequests").css("display", "inline-flex"); + $("#selectedShowLeaverequests").text(selectedCount + " -" + message); + } else { + $("#selectedShowLeaverequests").css("display", "none"); + $("#exportLeaverequests").css("display", "none"); + $("#unselectAllLeaverequests").css("display", "none"); } - uniqueIds.forEach(function (id) { - $("#" + id).prop("checked", true); - }); - var selectedCount = uniqueIds.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; - if (selectedCount > 0) { - $("#unselectAllLeaverequests").css("display", "inline-flex"); - $("#exportLeaverequests").css("display", "inline-flex"); - $("#selectedShowLeaverequests").css("display", "inline-flex"); - $("#selectedShowLeaverequests").text(selectedCount + " -" + message); - } else { - $("#selectedShowLeaverequests").css("display", "none"); - $("#exportLeaverequests").css("display", "none"); - $("#unselectAllLeaverequests").css("display", "none"); - } - }); + }); } -// function bulkApproveLeaveRequests() { -// var languageCode = null; -// getCurrentLanguageCode(function (code) { -// languageCode = code; -// var confirmMessage = approveLeaveRequests[languageCode]; -// var textMessage = noRowMessage[languageCode]; -// ids = []; -// ids.push($("#selectedInstances").attr("data-ids")); -// ids = JSON.parse($("#selectedInstances").attr("data-ids")); -// console.log(ids) // Parse IDs + // function bulkApproveLeaveRequests() { + // var languageCode = null; + // getCurrentLanguageCode(function (code) { + // languageCode = code; + // var confirmMessage = approveLeaveRequests[languageCode]; + // var textMessage = noRowMessage[languageCode]; + // ids = []; + // ids.push($("#selectedInstances").attr("data-ids")); + // ids = JSON.parse($("#selectedInstances").attr("data-ids")); + // console.log(ids) // Parse IDs -// if (ids.length === 0) { -// Swal.fire({ -// text: textMessage, -// icon: "warning", -// confirmButtonText: closeButtonText[languageCode], // Use language-specific text for close button -// }); -// } else { -// Swal.fire({ -// text: confirmMessage, -// icon: "question", -// showCancelButton: true, -// confirmButtonColor: "#008000", -// cancelButtonColor: "#d33", -// confirmButtonText: confirmButtonText[languageCode], // Use language-specific text for confirm button -// }).then(function (result) { -// if (result.isConfirmed) { -// ids = []; -// ids.push($("#selectedInstances").attr("data-ids")); -// ids = JSON.parse($("#selectedInstances").attr("data-ids")); -// console.log(ids) -// $.ajax({ -// type: "POST", -// url: "/leave/leave-requests-bulk-approve", -// data: { -// csrfmiddlewaretoken: getCookie("csrftoken"), -// ids: JSON.stringify(ids), -// }, -// success: function (response, textStatus, jqXHR) { -// if (jqXHR.status === 200) { -// location.reload(); // Reload the current page on success -// } else { -// console.error("Unexpected HTTP status:", jqXHR.status); -// } -// }, -// error: function (jqXHR, textStatus, errorThrown) { -// console.error("AJAX Error:", errorThrown); -// }, -// }); -// } -// }); -// } -// }); -// } + // if (ids.length === 0) { + // Swal.fire({ + // text: textMessage, + // icon: "warning", + // confirmButtonText: closeButtonText[languageCode], // Use language-specific text for close button + // }); + // } else { + // Swal.fire({ + // text: confirmMessage, + // icon: "question", + // showCancelButton: true, + // confirmButtonColor: "#008000", + // cancelButtonColor: "#d33", + // confirmButtonText: confirmButtonText[languageCode], // Use language-specific text for confirm button + // }).then(function (result) { + // if (result.isConfirmed) { + // ids = []; + // ids.push($("#selectedInstances").attr("data-ids")); + // ids = JSON.parse($("#selectedInstances").attr("data-ids")); + // console.log(ids) + // $.ajax({ + // type: "POST", + // url: "/leave/leave-requests-bulk-approve", + // data: { + // csrfmiddlewaretoken: getCookie("csrftoken"), + // ids: JSON.stringify(ids), + // }, + // success: function (response, textStatus, jqXHR) { + // if (jqXHR.status === 200) { + // location.reload(); // Reload the current page on success + // } else { + // console.error("Unexpected HTTP status:", jqXHR.status); + // } + // }, + // error: function (jqXHR, textStatus, errorThrown) { + // console.error("AJAX Error:", errorThrown); + // }, + // }); + // } + // }); + // } + // }); + // } function bulkApproveLeaveRequests() { var languageCode = null; - getCurrentLanguageCode(function (code) { + getCurrentLanguageCode(function(code) { languageCode = code; var confirmMessage = approveLeaveRequests[languageCode]; var textMessage = noRowMessage[languageCode]; @@ -181,64 +196,64 @@ function bulkApproveLeaveRequests() { confirmButtonColor: "#008000", cancelButtonColor: "#d33", confirmButtonText: "Confirm", - }).then(function (result) { + }).then(function(result) { if (result.isConfirmed) { - console.log("worked") - var hxVals = JSON.stringify(ids); - console.log(hxVals) - $("#bulkApproveSpan").attr("hx-vals", `{"ids":${hxVals}}`); - $("#bulkApproveSpan").click(); + console.log("worked") + var hxVals = JSON.stringify(ids); + console.log(hxVals) + $("#bulkApproveSpan").attr("hx-vals", `{"ids":${hxVals}}`); + $("#bulkApproveSpan").click(); + } + }); + } + }); } - }); - } - }); -} -function bulkDeleteLeaveRequests() { +function bulkDeleteLeaveRequests(){ var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteLeaveRequestMessages[languageCode]; - var textMessage = noRowMessage[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/leave/leave-request-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); + languageCode = code; + var confirmMessage = deleteLeaveRequestMessages[languageCode]; + var textMessage = noRowMessage[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/leave/leave-request-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } else { } + }, }); - } + } + }); + } }); -} + } diff --git a/leave/static/cbv/my_leave_request/my_leave_request.js b/leave/static/cbv/my_leave_request/my_leave_request.js index df5f0a478..f67507922 100644 --- a/leave/static/cbv/my_leave_request/my_leave_request.js +++ b/leave/static/cbv/my_leave_request/my_leave_request.js @@ -1,57 +1,57 @@ var closeButtonText = { - ar: "إغلاق", - de: "Schließen", - es: "Cerrar", - en: "Close", - fr: "Fermer", + ar: "إغلاق", + de: "Schließen", + es: "Cerrar", + en: "Close", + fr: "Fermer", }; var confirmButtonText = { - ar: "تأكيد", - de: "Bestätigen", - es: "Confirmar", - en: "Confirm", - fr: "Confirmer", + ar: "تأكيد", + de: "Bestätigen", + es: "Confirmar", + en: "Confirm", + fr: "Confirmer", }; var deleteLeaveRequestMessages = { - ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", - es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", - en: "Do you really want to delete all the selected leave requests?", - fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", + ar: "هل تريد حقًا حذف جميع طلبات الإجازة المحددة؟", + de: "Möchten Sie wirklich alle ausgewählten Urlaubsanfragen löschen?", + es: "¿Realmente desea eliminar todas las solicitudes de permiso seleccionadas?", + en: "Do you really want to delete all the selected leave requests?", + fr: "Voulez-vous vraiment supprimer toutes les demandes de congé sélectionnées?", }; var approveLeaveRequests = { - ar: "هل ترغب في الموافقة على طلبات الإجازة المحددة؟", - de: "Möchten Sie die ausgewählten Urlaubsanfragen genehmigen?", - es: "¿Quieres aprobar las solicitudes de licencia seleccionadas?", - en: "Do you want to approve the selected leave requests?", - fr: "Voulez-vous approuver les demandes de congé sélectionnées?", + ar: "هل ترغب في الموافقة على طلبات الإجازة المحددة؟", + de: "Möchten Sie die ausgewählten Urlaubsanfragen genehmigen?", + es: "¿Quieres aprobar las solicitudes de licencia seleccionadas?", + en: "Do you want to approve the selected leave requests?", + fr: "Voulez-vous approuver les demandes de congé sélectionnées?", }; var noRowMessages = { - ar: "لم يتم تحديد أي صفوف.", - de: "Es wurden keine Zeilen ausgewählt.", - es: "No se han seleccionado filas.", - en: "No rows have been selected.", - fr: "Aucune ligne n'a été sélectionnée.", + ar: "لم يتم تحديد أي صفوف.", + de: "Es wurden keine Zeilen ausgewählt.", + es: "No se han seleccionado filas.", + en: "No rows have been selected.", + fr: "Aucune ligne n'a été sélectionnée.", }; var rowMessages = { - ar: " تم الاختيار", - de: " Ausgewählt", - es: " Seleccionado", - en: " Selected", - fr: " Sélectionné", + ar: " تم الاختيار", + de: " Ausgewählt", + es: " Seleccionado", + en: " Selected", + fr: " Sélectionné", }; var excelMessages = { - ar: "هل ترغب في تنزيل ملف Excel؟", - de: "Möchten Sie die Excel-Datei herunterladen?", - es: "¿Desea descargar el archivo de Excel?", - en: "Do you want to download the excel file?", - fr: "Voulez-vous télécharger le fichier Excel?", + ar: "هل ترغب في تنزيل ملف Excel؟", + de: "Möchten Sie die Excel-Datei herunterladen?", + es: "¿Desea descargar el archivo de Excel?", + en: "Do you want to download the excel file?", + fr: "Voulez-vous télécharger le fichier Excel?", }; // tickLeaverequestsCheckboxes(); @@ -65,13 +65,28 @@ var excelMessages = { // } 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 { + 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"); - } + }, + }); + } } // --------------------------------------- @@ -110,46 +125,46 @@ function getCurrentLanguageCode(callback) { function myLeaveRequestBulkDelete() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteLeaveRequestMessages[languageCode]; - var textMessage = noRowMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/leave/user-request-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - }); + languageCode = code; + var confirmMessage = deleteLeaveRequestMessages[languageCode]; + var textMessage = noRowMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/leave/user-request-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } + }, }); - } + } + }); + } }); -} + } diff --git a/leave/static/dashboard/dashboard.js b/leave/static/dashboard/dashboard.js index aa8a832ff..ad083d0db 100644 --- a/leave/static/dashboard/dashboard.js +++ b/leave/static/dashboard/dashboard.js @@ -38,286 +38,39 @@ $(document).ready(function () { } //Employee wise chart for available leaves - // function available_leave_chart(dataSet) { - // var myChart1 = document.getElementById("availableLeave"); - // availableLeaveChart = new Chart(myChart1, { - // type: "pie", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // }, - // }); - // } - function available_leave_chart(dataSet) { - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#86efac', '#fbbf24', '#c084fc']; - const visibility = dataSet.labels.map(() => true); - const ctx = document.getElementById("availableLeave")?.getContext("2d"); - - if (!ctx || !dataSet?.dataset?.length) return; - - const dataset = { - data: dataSet.dataset[0].data, - backgroundColor: colors.slice(0, dataSet.labels.length), - borderColor: '#fff', - borderWidth: 2 - }; - - if (availableLeaveChart) { - availableLeaveChart.destroy(); - } - - availableLeaveChart = new Chart(ctx, { + var myChart1 = document.getElementById("availableLeave"); + availableLeaveChart = new Chart(myChart1, { type: "pie", data: { labels: dataSet.labels, - datasets: [dataset] + datasets: dataSet.dataset, }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { display: false }, - tooltip: { - enabled: true, - backgroundColor: "#111827", - bodyColor: "#f3f4f6", - borderColor: "#e5e7eb", - borderWidth: 1, - } - } - } - }); - - // 🧩 Custom interactive legend (must exist in HTML) - const legendContainer = document.getElementById("availableLeaveLegend"); - if (!legendContainer) return; - - legendContainer.innerHTML = ""; - dataSet.labels.forEach((label, i) => { - const colorDot = ``; - const labelText = `${label}`; - const item = document.createElement("div"); - item.className = "cursor-pointer text-sm flex items-center mb-2 text-gray-700"; - item.innerHTML = `${colorDot}${labelText}`; - - item.addEventListener("click", () => { - visibility[i] = !visibility[i]; - availableLeaveChart.data.datasets[0].data = dataSet.dataset[0].data.map((val, idx) => - visibility[idx] ? val : 0 - ); - availableLeaveChart.data.datasets[0].backgroundColor = colors.map((col, idx) => - visibility[idx] ? col : '#e5e7eb' - ); - availableLeaveChart.update(); - - const dot = item.querySelector('span:first-child'); - const labelSpan = item.querySelector('span:last-child'); - dot.style.opacity = visibility[i] ? '1' : '0.4'; - labelSpan.style.textDecoration = visibility[i] ? 'none' : 'line-through'; - }); - - legendContainer.appendChild(item); }); } - - // function department_leave_chart(dataSet) { - // var myChart3 = document.getElementById("departmentLeave"); - // departmentLeaveChart = new Chart(myChart3, { - // type: "pie", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // }, - // }); - // } function department_leave_chart(dataSet) { - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#86efac', '#fbbf24', '#c084fc']; - const visibility = dataSet.labels.map(() => true); - const ctx = document.getElementById("departmentLeave").getContext("2d"); - - // Ensure dataset is single pie-type (merge if needed) - const dataset = { - data: dataSet.dataset[0].data, - backgroundColor: colors.slice(0, dataSet.labels.length), - borderColor: '#fff', - borderWidth: 2 - }; - - if (departmentLeaveChart) { - departmentLeaveChart.destroy(); - } - - departmentLeaveChart = new Chart(ctx, { + var myChart3 = document.getElementById("departmentLeave"); + departmentLeaveChart = new Chart(myChart3, { type: "pie", data: { labels: dataSet.labels, - datasets: [dataset] + datasets: dataSet.dataset, }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { display: false }, - tooltip: { enabled: true } - } - } - }); - - // Interactive legend — assumes #departmentPieLegend exists in HTML - const legendContainer = document.getElementById("departmentPieLegend"); - if (!legendContainer) return; - - legendContainer.innerHTML = ''; - dataSet.labels.forEach((label, i) => { - const colorDot = ``; - const labelText = `${label}`; - const item = document.createElement("div"); - item.className = "cursor-pointer text-sm flex items-center mb-2 text-gray-700"; - item.innerHTML = `${colorDot}${labelText}`; - item.addEventListener("click", () => { - visibility[i] = !visibility[i]; - departmentLeaveChart.data.datasets[0].data = dataSet.dataset[0].data.map((val, idx) => - visibility[idx] ? val : 0 - ); - departmentLeaveChart.data.datasets[0].backgroundColor = colors.map((col, idx) => - visibility[idx] ? col : '#e5e7eb' - ); - departmentLeaveChart.update(); - - const dot = item.querySelector('span:first-child'); - const label = item.querySelector('span:last-child'); - dot.style.opacity = visibility[i] ? '1' : '0.4'; - label.style.textDecoration = visibility[i] ? 'none' : 'line-through'; - }); - - legendContainer.appendChild(item); }); } - - // function leave_type_chart(dataSet) { - // var myChart4 = document.getElementById("leaveType"); - // leaveTypeChart = new Chart(myChart4, { - // type: "doughnut", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // }, - // }); - // } - function leave_type_chart(dataSet) { - const ctx = document.getElementById("leaveType")?.getContext("2d"); - if (!ctx || !dataSet?.dataset?.length) return; - - const labels = dataSet.labels; - const values = dataSet.dataset[0].data; - const visibility = Array(labels.length).fill(true); - const colors = [ - "#facc15", "#f87171", "#ddd6fe", "#a5b4fc", "#93c5fd", "#d1d5db" - ]; - - if (leaveTypeChart) { - leaveTypeChart.destroy(); - } - - leaveTypeChart = new Chart(ctx, { + var myChart4 = document.getElementById("leaveType"); + leaveTypeChart = new Chart(myChart4, { type: "doughnut", data: { - labels: labels, - datasets: [ - { - ...dataSet.dataset[0], - backgroundColor: colors.slice(0, labels.length), - borderWidth: 0, - borderRadius: 10, - hoverOffset: 8, - }, - ], + labels: dataSet.labels, + datasets: dataSet.dataset, }, - options: { - cutout: "70%", - responsive: true, - maintainAspectRatio: false, - onClick: function (e, activeEls) { - if (!activeEls.length) return; - const index = activeEls[0].index; - const label = labels[index]; - // Customize the redirection or interaction here if needed - console.log("Clicked:", label); - }, - plugins: { - legend: { display: false }, - tooltip: { - backgroundColor: "#111827", - bodyColor: "#f3f4f6", - borderColor: "#e5e7eb", - borderWidth: 1, - }, - }, - }, - plugins: [ - { - id: "centerText", - afterDraw(chart) { - const { width, height, ctx } = chart; - ctx.save(); - - const total = chart.data.datasets[0].data.reduce((sum, val) => sum + val, 0); - - ctx.font = "bold 22px sans-serif"; - ctx.fillStyle = "#374151"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillText(total, width / 2, height / 2 - 5); - - ctx.font = "15px sans-serif"; - ctx.fillStyle = "#9ca3af"; - ctx.fillText("Total", width / 2, height / 2 + 20); - - ctx.restore(); - }, - }, - ], - }); - - // 🔁 Render Custom Legend - const legendContainer = document.getElementById("leaveTypeLegend"); - if (!legendContainer) return; - legendContainer.innerHTML = ""; - - labels.forEach((label, index) => { - const color = colors[index % colors.length]; - - const legendItem = document.createElement("div"); - legendItem.className = "flex items-center mb-2 cursor-pointer text-sm text-gray-700"; - legendItem.innerHTML = ` - - ${label} - `; - - legendItem.addEventListener("click", function () { - visibility[index] = !visibility[index]; - - leaveTypeChart.data.datasets[0].data = values.map((val, i) => visibility[i] ? val : 0); - leaveTypeChart.data.datasets[0].backgroundColor = colors.map((col, i) => visibility[i] ? col : "#e5e7eb"); - - const dot = legendItem.querySelector("span:first-child"); - const labelEl = legendItem.querySelector(".legend-label"); - - dot.style.opacity = visibility[index] ? "1" : "0.4"; - labelEl.style.textDecoration = visibility[index] ? "none" : "line-through"; - - leaveTypeChart.update(); - }); - - legendContainer.appendChild(legendItem); }); } - function leave_period_chart(dataSet) { var myChart4 = document.getElementById("leavePeriod"); leavePeriodChart = new Chart(myChart4, { @@ -356,131 +109,44 @@ $(document).ready(function () { } //Chart of leave request by employees - // function employee_leave_chart(dataSet) { - // employeeLeaveChart.destroy(); - - // var myChart2 = document.getElementById("employeeLeave"); - // employeeLeaveChart = new Chart(myChart2, { - // type: "bar", - // data: { - // labels: dataSet.labels, - // datasets: dataSet.dataset, - // }, - // options: { - // scales: { - // x: { - // stacked: true, - // title: { - // display: true, - // text: "Employees", - // font: { - // weight: "bold", - // size: 16, - // }, - // }, - // }, - // y: { - // stacked: true, - // title: { - // display: true, - // text: "Number of days", - // font: { - // weight: "bold", - // size: 16, - // }, - // }, - // }, - // }, - // }, - // }); - // } function employee_leave_chart(dataSet) { - if (employeeLeaveChart) { - employeeLeaveChart.destroy(); - } - - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#86efac', '#fbbf24', '#c084fc']; - const myChart2 = document.getElementById("employeeLeave"); - myChart2.height = 250; - const datasets = dataSet.dataset.map((dataset, index) => ({ - ...dataset, - backgroundColor: colors[index % colors.length], - borderRadius: 10, - barPercentage: 0.8, - categoryPercentage: 0.6 - })); + employeeLeaveChart.destroy(); + var myChart2 = document.getElementById("employeeLeave"); employeeLeaveChart = new Chart(myChart2, { type: "bar", data: { labels: dataSet.labels, - datasets: datasets, + datasets: dataSet.dataset, }, options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 300 - }, scales: { x: { stacked: true, - ticks: { color: '#6b7280' }, - grid: { display: false }, title: { display: true, text: "Employees", - font: { size: 16, weight: "bold" } - } + font: { + weight: "bold", + size: 16, + }, + }, }, y: { stacked: true, - beginAtZero: true, - ticks: { - stepSize: 5, - color: '#6b7280' - }, - grid: { color: '#e5e7eb' }, title: { display: true, text: "Number of days", - font: { size: 16, weight: "bold" } - } - } - }, - plugins: { - legend: { - position: 'bottom', - labels: { - usePointStyle: true, - pointStyle: 'circle', - font: { size: 12 }, - color: '#374151', - padding: 15 - } + font: { + weight: "bold", + size: 16, + }, + }, }, - tooltip: { - enabled: true - } }, }, - plugins: [{ - afterRender: (chart) => { - const allZero = chart.data.datasets.every(ds => - ds.data.every(val => val === 0) - ); - if (allZero) { - const ctx = chart.canvas.getContext("2d"); - ctx.font = "16px Arial"; - ctx.fillStyle = "#6b7280"; - ctx.textAlign = "center"; - ctx.fillText("No data available", chart.width / 2, chart.height / 2); - } - } - }] }); } - $.ajax({ type: "GET", url: "/leave/employee-leave-chart", diff --git a/leave/static/dashboard/leaveChart.js b/leave/static/dashboard/leaveChart.js index 225e4b566..d80cae5b9 100644 --- a/leave/static/dashboard/leaveChart.js +++ b/leave/static/dashboard/leaveChart.js @@ -1,168 +1,67 @@ $(document).ready(function () { - let overAllLeaveChart = null; - - function renderOverAllLeaveChart(data, labels) { - const ctx = document.getElementById("overAllLeave")?.getContext("2d"); - if (!ctx) return; - - const dataset = [{ - label: "Leave count", - data: data, - backgroundColor: ["#cfe9ff", "#ffc9de", "#e6ccff"], // Customize as needed - borderWidth: 0, - }]; - - if (overAllLeaveChart) { - overAllLeaveChart.data.labels = labels; - overAllLeaveChart.data.datasets = dataset; - overAllLeaveChart.update(); - return; - } - - overAllLeaveChart = new Chart(ctx, { + //Todays leave count department wise chart + if (document.getElementById("overAllLeave")){ + var myChart1 = document.getElementById("overAllLeave").getContext("2d"); + var overAllLeave = new Chart(myChart1, { type: "doughnut", data: { - labels: labels, - datasets: dataset, + labels: [], + datasets: [ + { + label: "Leave count", + data: [], + backgroundColor: null, + }, + ], }, options: { - cutout: "70%", responsive: true, maintainAspectRatio: false, onClick: (e, activeEls) => { - if (activeEls.length > 0) { - const datasetIndex = activeEls[0].datasetIndex; - const dataIndex = activeEls[0].index; - const label = e.chart.data.labels[dataIndex]; - const selected = $("#overAllLeaveSelect").val(); - const params = `?department_name=${label}&overall_leave=${selected}`; - window.location.href = "/leave/request-view" + params; - } - }, - plugins: { - legend: { - position: "bottom", - labels: { - usePointStyle: true, - pointStyle: "circle", - padding: 20, - font: { - size: 12, - }, - color: "#000", - }, - }, - tooltip: { - padding: 10, - cornerRadius: 4, - backgroundColor: "#333", - titleColor: "#fff", - bodyColor: "#fff", - callbacks: { - label: function (context) { - return context.parsed; - }, - }, - }, + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + params =`?department_name=${label}&overall_leave=${$("#overAllLeaveSelect").val()}`; + window.location.href = "/leave/request-view" + params; }, }, plugins: [ { - afterRender: (chart) => { - if (typeof emptyChart === "function") { - emptyChart(chart); - } - }, + afterRender: (chart) => emptyChart(chart), }, ], }); } - function fetchOverAllLeaveData(overallLeaveType = "today") { + $.ajax({ + type: "GET", + url: "/leave/overall-leave?overall_leave=today", + dataType: "json", + success: function (response) { + if (overAllLeave){ + overAllLeave.data.labels = response.labels; + overAllLeave.data.datasets[0].data = response.data; + overAllLeave.data.datasets[0].backgroundColor = null; + overAllLeave.update(); + } + }, + }); + $(document).on("change", "#overAllLeaveSelect", function () { + var selected = $(this).val(); $.ajax({ type: "GET", - url: `/leave/overall-leave?overall_leave=${overallLeaveType}`, + url: `/leave/overall-leave?overall_leave=${selected}`, dataType: "json", success: function (response) { - renderOverAllLeaveChart(response.data, response.labels); + overAllLeave.data.labels = response.labels; + overAllLeave.data.datasets[0].data = response.data; + overAllLeave.data.datasets[0].backgroundColor = null; + overAllLeave.update(); }, }); - } - - // Initial chart load - fetchOverAllLeaveData(); - - // Dropdown change event - $(document).on("change", "#overAllLeaveSelect", function () { - fetchOverAllLeaveData($(this).val()); }); + + //Today leave employees chart }); - - -// $(document).ready(function () { -// //Todays leave count department wise chart -// if (document.getElementById("overAllLeave")){ -// var myChart1 = document.getElementById("overAllLeave").getContext("2d"); -// var overAllLeave = new Chart(myChart1, { -// type: "doughnut", -// data: { -// labels: [], -// datasets: [ -// { -// label: "Leave count", -// data: [], -// backgroundColor: null, -// }, -// ], -// }, -// options: { -// responsive: true, -// maintainAspectRatio: false, -// onClick: (e, activeEls) => { -// let datasetIndex = activeEls[0].datasetIndex; -// let dataIndex = activeEls[0].index; -// let datasetLabel = e.chart.data.datasets[datasetIndex].label; -// let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; -// let label = e.chart.data.labels[dataIndex]; -// params =`?department_name=${label}&overall_leave=${$("#overAllLeaveSelect").val()}`; -// window.location.href = "/leave/request-view" + params; -// }, -// }, -// plugins: [ -// { -// afterRender: (chart) => emptyChart(chart), -// }, -// ], -// }); -// } - -// $.ajax({ -// type: "GET", -// url: "/leave/overall-leave?overall_leave=today", -// dataType: "json", -// success: function (response) { -// if (overAllLeave){ -// overAllLeave.data.labels = response.labels; -// overAllLeave.data.datasets[0].data = response.data; -// overAllLeave.data.datasets[0].backgroundColor = null; -// overAllLeave.update(); -// } -// }, -// }); -// $(document).on("change", "#overAllLeaveSelect", function () { -// var selected = $(this).val(); -// $.ajax({ -// type: "GET", -// url: `/leave/overall-leave?overall_leave=${selected}`, -// dataType: "json", -// success: function (response) { -// overAllLeave.data.labels = response.labels; -// overAllLeave.data.datasets[0].data = response.data; -// overAllLeave.data.datasets[0].backgroundColor = null; -// overAllLeave.update(); -// }, -// }); -// }); - -// //Today leave employees chart -// }); diff --git a/leave/static/leave_assign/action.js b/leave/static/leave_assign/action.js index 05d58833e..a6318e4ef 100644 --- a/leave/static/leave_assign/action.js +++ b/leave/static/leave_assign/action.js @@ -1,302 +1,317 @@ var rowMessages = { - ar: " تم الاختيار", - de: " Ausgewählt", - es: " Seleccionado", - en: " Selected", - fr: " Sélectionné", + ar: " تم الاختيار", + de: " Ausgewählt", + es: " Seleccionado", + en: " Selected", + fr: " Sélectionné", }; var excelMessages = { - ar: "هل ترغب في تنزيل ملف Excel؟", - de: "Möchten Sie die Excel-Datei herunterladen?", - es: "¿Desea descargar el archivo de Excel?", - en: "Do you want to download the excel file?", - fr: "Voulez-vous télécharger le fichier Excel?", + ar: "هل ترغب في تنزيل ملف Excel؟", + de: "Möchten Sie die Excel-Datei herunterladen?", + es: "¿Desea descargar el archivo de Excel?", + en: "Do you want to download the excel file?", + fr: "Voulez-vous télécharger le fichier Excel?", }; var deleteAssignedMessages = { - ar: "هل تريد حقًا حذف كافة حالات الغياب المعينة المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten zugewiesenen abwesenheit löschen?", - es: "¿Realmente desea eliminar todas las hojas asignadas dejar?", - en: "Do you really want to delete all the selected assigned leaves?", - fr: "Voulez-vous vraiment supprimer tous les sélectionnés congés attribués ?", + ar: "هل تريد حقًا حذف كافة حالات الغياب المعينة المحددة؟", + de: "Möchten Sie wirklich alle ausgewählten zugewiesenen abwesenheit löschen?", + es: "¿Realmente desea eliminar todas las hojas asignadas dejar?", + en: "Do you really want to delete all the selected assigned leaves?", + fr: "Voulez-vous vraiment supprimer tous les sélectionnés congés attribués ?", }; var no_rows_deleteMessages = { - ar: "لم يتم تحديد أي صفوف لحذف الإجازات المخصصة.", - de: "Es gibt keine Zeilen zum Löschen der zugewiesenen abwesenheit.", - es: "No se ha seleccionado ninguna fila para eliminar la asignadas dejar", - en: "No rows are selected for deleting assigned leaves.", - fr: "Aucune ligne n'est sélectionnée pour supprimer les congés attribués.", + ar: "لم يتم تحديد أي صفوف لحذف الإجازات المخصصة.", + de: "Es gibt keine Zeilen zum Löschen der zugewiesenen abwesenheit.", + es: "No se ha seleccionado ninguna fila para eliminar la asignadas dejar", + en: "No rows are selected for deleting assigned leaves.", + fr: "Aucune ligne n'est sélectionnée pour supprimer les congés attribués.", }; 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 ?", + 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 ?", }; tickLeaveCheckboxes(); function makeLeaveListUnique(list) { - return Array.from(new Set(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 { + 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 tickLeaveCheckboxes() { - var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); - uniqueIds = makeLeaveListUnique(ids); - toggleHighlight(uniqueIds); - click = $("#selectedLeaves").attr("data-clicked"); - if (click === "1") { - $(".all-assigned-leaves").prop("checked", true); + var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); + uniqueIds = makeLeaveListUnique(ids); + toggleHighlight(uniqueIds); + click = $("#selectedLeaves").attr("data-clicked"); + if (click === "1") { + $(".all-assigned-leaves").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) { + $("#unselectAllLeaves").css("display", "inline-flex"); + $("#exportAssignedLeaves").css("display", "inline-flex"); + $("#selectedShowLeaves").css("display", "inline-flex"); + $("#selectedShowLeaves").text(selectedCount + " -" + message); + } else { + $("#selectedShowLeaves").css("display", "none"); + $("#exportAssignedLeaves").css("display", "none"); + $("#unselectAllLeaves").css("display", "none"); } - uniqueIds.forEach(function (id) { - $("#" + id).prop("checked", true); - }); - var selectedCount = uniqueIds.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; - if (selectedCount > 0) { - $("#unselectAllLeaves").css("display", "inline-flex"); - $("#exportAssignedLeaves").css("display", "inline-flex"); - $("#selectedShowLeaves").css("display", "inline-flex"); - $("#selectedShowLeaves").text(selectedCount + " -" + message); - } else { - $("#selectedShowLeaves").css("display", "none"); - $("#exportAssignedLeaves").css("display", "none"); - $("#unselectAllLeaves").css("display", "none"); - } - }); + }); } function addingAssignedLeaveIds() { - var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); - var selectedCount = 0; + var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); + var selectedCount = 0; - $(".all-assigned-leaves-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-assigned-leaves-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); + } + } + }); - ids = makeLeaveListUnique(ids); - selectedCount = ids.length; + ids = makeLeaveListUnique(ids); + selectedCount = ids.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; + getCurrentLanguageCode(function (code) { + languageCode = code; + var message = rowMessages[languageCode]; - $("#selectedLeaves").attr("data-ids", JSON.stringify(ids)); + $("#selectedLeaves").attr("data-ids", JSON.stringify(ids)); - if (selectedCount === 0) { - $("#selectedShowLeaves").css("display", "none"); - $("#exportAssignedLeaves").css("display", "none"); - $("#unselectAllLeaves").css("display", "none"); - } else { - $("#unselectAllLeaves").css("display", "inline-flex"); - $("#exportAssignedLeaves").css("display", "inline-flex"); - $("#selectedShowLeaves").css("display", "inline-flex"); - $("#selectedShowLeaves").text(selectedCount + " - " + message); - } - }); + if (selectedCount === 0) { + $("#selectedShowLeaves").css("display", "none"); + $("#exportAssignedLeaves").css("display", "none"); + $("#unselectAllLeaves").css("display", "none"); + } else { + $("#unselectAllLeaves").css("display", "inline-flex"); + $("#exportAssignedLeaves").css("display", "inline-flex"); + $("#selectedShowLeaves").css("display", "inline-flex"); + $("#selectedShowLeaves").text(selectedCount + " - " + message); + } + }); } $("#selectAllLeaves").click(function () { - $("#selectedLeaves").attr("data-clicked", 1); - $("#selectedShowLeaves").removeAttr("style"); - var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); + $("#selectedLeaves").attr("data-clicked", 1); + $("#selectedShowLeaves").removeAttr("style"); + var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); - if (savedFilters && savedFilters["filterData"] !== null) { - var filter = savedFilters["filterData"]; - $.ajax({ - url: "/leave/assigned-leave-select-filter", - data: { page: "all", filter: JSON.stringify(filter) }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; + if (savedFilters && savedFilters["filterData"] !== null) { + var filter = savedFilters["filterData"]; + $.ajax({ + url: "/leave/assigned-leave-select-filter", + data: { page: "all", filter: JSON.stringify(filter) }, + type: "GET", + dataType: "json", + success: function (response) { + var employeeIds = response.employee_ids; - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", true); - } - $("#selectedLeaves").attr("data-ids", JSON.stringify(employeeIds)); - count = makeLeaveListUnique(employeeIds); - tickLeaveCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } else { - $.ajax({ - url: "/leave/assigned-leave-select", - data: { page: "all" }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; + for (var i = 0; i < employeeIds.length; i++) { + var empId = employeeIds[i]; + $("#" + empId).prop("checked", true); + } + $("#selectedLeaves").attr("data-ids", JSON.stringify(employeeIds)); + count = makeLeaveListUnique(employeeIds); + tickLeaveCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } else { + $.ajax({ + url: "/leave/assigned-leave-select", + data: { page: "all" }, + type: "GET", + dataType: "json", + success: function (response) { + var employeeIds = response.employee_ids; - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", true); - } - var previousIds = $("#selectedLeaves").attr("data-ids"); - $("#selectedLeaves").attr( - "data-ids", - JSON.stringify( - Array.from(new Set([...employeeIds, ...JSON.parse(previousIds)])) - ) - ); - count = makeLeaveListUnique(employeeIds); - tickLeaveCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } + for (var i = 0; i < employeeIds.length; i++) { + var empId = employeeIds[i]; + $("#" + empId).prop("checked", true); + } + var previousIds = $("#selectedLeaves").attr("data-ids"); + $("#selectedLeaves").attr( + "data-ids", + JSON.stringify( + Array.from(new Set([...employeeIds, ...JSON.parse(previousIds)])) + ) + ); + count = makeLeaveListUnique(employeeIds); + tickLeaveCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } }); $("#unselectAllLeaves").click(function (e) { - $("#unselectAllLeaves").click(function () { - $("#selectedLeaves").attr("data-clicked", 0); - $.ajax({ - url: "/leave/assigned-leave-select", - data: { page: "all", filter: "{}" }, - type: "GET", - dataType: "json", - success: function (response) { - var employeeIds = response.employee_ids; - for (var i = 0; i < employeeIds.length; i++) { - var empId = employeeIds[i]; - $("#" + empId).prop("checked", false); - $(".all-assigned-leaves").prop("checked", false); - } - var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); - uniqueIds = makeLeaveListUnique(ids); - toggleHighlight(uniqueIds); - $("#selectedLeaves").attr("data-ids", JSON.stringify([])); - count = []; - tickLeaveCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); + $("#unselectAllLeaves").click(function () { + $("#selectedLeaves").attr("data-clicked", 0); + $.ajax({ + url: "/leave/assigned-leave-select", + data: { page: "all", filter: "{}" }, + type: "GET", + dataType: "json", + success: function (response) { + var employeeIds = response.employee_ids; + for (var i = 0; i < employeeIds.length; i++) { + var empId = employeeIds[i]; + $("#" + empId).prop("checked", false); + $(".all-assigned-leaves").prop("checked", false); + } + var ids = JSON.parse($("#selectedLeaves").attr("data-ids") || "[]"); + uniqueIds = makeLeaveListUnique(ids); + toggleHighlight(uniqueIds); + $("#selectedLeaves").attr("data-ids", JSON.stringify([])); + count = []; + tickLeaveCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, }); + }); }); $("#exportAssignedLeaves").click(function (e) { - 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($("#selectedLeaves").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/assigned-leaves-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 = "Assigned_leaves" + currentDate + ".xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } + 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($("#selectedLeaves").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/assigned-leaves-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 = "Assigned_leaves" + currentDate + ".xlsx"; + document.body.appendChild(link); + link.click(); + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, }); + } }); + }); }); $("#bulkAssignedLeavesDelete").click(function (e) { - e.preventDefault(); - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteAssignedMessages[languageCode]; - var textMessage = no_rows_deleteMessages[languageCode]; - ids = []; - ids.push($("#selectedLeaves").attr("data-ids")); - ids = JSON.parse($("#selectedLeaves").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) { - e.preventDefault(); - ids = []; - ids.push($("#selectedLeaves").attr("data-ids")); - ids = JSON.parse($("#selectedLeaves").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/leave/assigned-leave-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } else { - } - }, - }); - } - }); + e.preventDefault(); + var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = deleteAssignedMessages[languageCode]; + var textMessage = no_rows_deleteMessages[languageCode]; + ids = []; + ids.push($("#selectedLeaves").attr("data-ids")); + ids = JSON.parse($("#selectedLeaves").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) { + e.preventDefault(); + ids = []; + ids.push($("#selectedLeaves").attr("data-ids")); + ids = JSON.parse($("#selectedLeaves").attr("data-ids")); + $.ajax({ + type: "POST", + url: "/leave/assigned-leave-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); + } else { + } + }, + }); } - }); + }); + } + }); }); diff --git a/leave/static/leave_request/action.js b/leave/static/leave_request/action.js index ea05ce9a7..8b166974a 100644 --- a/leave/static/leave_request/action.js +++ b/leave/static/leave_request/action.js @@ -87,7 +87,22 @@ function getCurrentLanguageCode(callback) { if (allowedLanguageCodes.includes(languageCode)) { callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } } diff --git a/leave/static/restrict_days/action.js b/leave/static/restrict_days/action.js index 3e0b40539..742fc8f70 100644 --- a/leave/static/restrict_days/action.js +++ b/leave/static/restrict_days/action.js @@ -28,7 +28,22 @@ function getCurrentLanguageCode(callback) { if (allowedLanguageCodes.includes(languageCode)) { callback(languageCode); } else { - callback("en"); + $.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"); + }, + }); } } @@ -259,33 +274,33 @@ $("#bulkRestrictedDaysDelete").click(function (e) { function bulkRestrictedDaysDelete() { - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteDaysMessages[languageCode]; - var textMessage = noRowsDeleteMessages[languageCode]; - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - var hxVals = JSON.stringify(ids); - $("#bulkDeleteSpan").attr("hx-vals", `{"ids":${hxVals}}`); - $("#bulkDeleteSpan").click(); - } - }); + var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = deleteDaysMessages[languageCode]; + var textMessage = noRowsDeleteMessages[languageCode]; + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "question", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + var hxVals = JSON.stringify(ids); + $("#bulkDeleteSpan").attr("hx-vals", `{"ids":${hxVals}}`); + $("#bulkDeleteSpan").click(); } - }); + }); + } + }); }; diff --git a/leave/templates/cbv/assigned_leave/assigned_leave_detail_actions.html b/leave/templates/cbv/assigned_leave/assigned_leave_detail_actions.html index 78a3116c1..683c09e25 100644 --- a/leave/templates/cbv/assigned_leave/assigned_leave_detail_actions.html +++ b/leave/templates/cbv/assigned_leave/assigned_leave_detail_actions.html @@ -1,38 +1,24 @@ -{% load static i18n %} +{% load i18n %} {% load basefilters %} -{% with is_manager=request.user|is_reportingmanager can_change=perms.leave.change_availableleave can_delete=perms.leave.delete_availableleave %} - {% if is_manager or can_change %} - - - +
    + {% if request.user|is_reportingmanager or perms.leave.change_availableleave %} + + + {% endif %} - - {% if is_manager or can_delete %} - -
    - {% csrf_token %} - -
    - - {% endif %} -{% endwith %} - +
    {% if request.GET.deleted %} - + {% endif %} diff --git a/leave/templates/cbv/leave_allocation_request/leave_detail_action.html b/leave/templates/cbv/leave_allocation_request/leave_detail_action.html index 9dd8568f7..538996979 100644 --- a/leave/templates/cbv/leave_allocation_request/leave_detail_action.html +++ b/leave/templates/cbv/leave_allocation_request/leave_detail_action.html @@ -1,32 +1,39 @@ {% load i18n %} {% load basefilters %} -{% if perms.leave.change_leaveallocationrequest or request.user|is_reportingmanager %} - {% if instance.status == 'requested' %} - - - - {% else %} - - {% endif %} - - {% if instance.status == 'requested' or instance.status == 'approved' %} - - {% else %} - - {% endif %} -{% endif %} +{% if perms.leave.Change_leaveallocationrequest or request.user|is_reportingmanager %} + {% if instance.status == 'requested' %} + + + {% trans "Approve" %} + + {% else %} + + + {% trans "Approve" %} + + {% endif %} + {% if instance.status == 'requested' or instance.status == 'approved' %} + + + {% trans "Reject" %} + + {% else %} + + + {% trans "Reject" %} + + {% endif %} + {% endif %} diff --git a/leave/templates/cbv/leave_requests/confirmation.html b/leave/templates/cbv/leave_requests/confirmation.html index 3d251ee04..cc96bcce5 100644 --- a/leave/templates/cbv/leave_requests/confirmation.html +++ b/leave/templates/cbv/leave_requests/confirmation.html @@ -17,7 +17,7 @@ {% endif %} {% else %} - {% if instance.is_approvable_by_user and instance.status == 'requested' %} + {% if instance.is_approved and instance.status == 'requested' %} current_date.month %} diff --git a/leave/templates/cbv/leave_requests/leave_request_detail_actions.html b/leave/templates/cbv/leave_requests/leave_request_detail_actions.html index a9630c948..d0d54e5b6 100644 --- a/leave/templates/cbv/leave_requests/leave_request_detail_actions.html +++ b/leave/templates/cbv/leave_requests/leave_request_detail_actions.html @@ -1,39 +1,39 @@ {% load i18n %} -{% if instance.is_approvable_by_user and instance.status == 'requested' %} - - +
    +
    + {% if instance.is_approved and instance.status == 'requested' %} + current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{instance.start_date|date:'F'}}. Approval depends on the {{instance.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> + -{% else %} - -{% endif %} - - - -{% if instance.status != 'rejected' and instance.end_date >= current_date %} - -{% else %} - -{% endif %} + {% else %} + + + + {% endif %} + + {% if instance.status != 'rejected' and instance.end_date >= current_date %} + {% comment %} {% if instance.status != 'cancelled' %} {% endcomment %} + + + + {% else %} + + + + {% endif %} +
    +
    diff --git a/leave/templates/cbv/leave_requests/multiple_approval_action.html b/leave/templates/cbv/leave_requests/multiple_approval_action.html index 7ca161ce4..532474c9c 100644 --- a/leave/templates/cbv/leave_requests/multiple_approval_action.html +++ b/leave/templates/cbv/leave_requests/multiple_approval_action.html @@ -1,21 +1,20 @@ {% load i18n %} {% if instance.multiple_approvals %} -
    -
    - {% trans "Multiple Approvals" %} - {% for approval in instance.multiple_approvals.approvals %} -
    {{forloop.counter}}.{{approval.manager_id}} : - {% if approval.is_approved %} - {% trans "Approved" %} - {% else %} - {% if approval.is_rejected %} - {% trans "Rejected" %} +
    +
    + {% trans "Multiple Approvals" %} + {% for approval in instance.multiple_approvals.approvals %} +
    {{forloop.counter}}.{{approval.manager_id}} : + {% if approval.is_approved %}{% trans "Approved" %} {% else %} - {% trans "Not Marked" %} + {% if approval.is_rejected %} + {% trans "Rejected" %} + {% else %} + {% trans "Not Marked" %} + {% endif %} {% endif %} - {% endif %} -
    - {% endfor %} +
    + {% endfor %} +
    -
    -{% endif %} + {% endif %} diff --git a/leave/templates/cbv/leave_types/detail_actions.html b/leave/templates/cbv/leave_types/detail_actions.html index a87bdbe41..1d18947e7 100644 --- a/leave/templates/cbv/leave_types/detail_actions.html +++ b/leave/templates/cbv/leave_types/detail_actions.html @@ -1,46 +1,37 @@ -{% load i18n static %} -{% if perms.leave.change_leavetype %} - - {% if instance.is_compensatory_leave %} - - {% trans 'Edit' %} - {% trans 'Edit' %} - - {% else %} - - {% trans 'Edit' %} - {% trans 'Edit' %} - - {% endif %} - -{% endif %} +{% load i18n %} +
    +{% if perms.leave.change_leavetype and perms.leave.add_availableleave and perms.leave.delete_leavetype %} +
    + {% if compensatory %} + + + {% trans "Edit" %} + + {% else %} + + + {% trans "Edit" %} + + {% if not instance.is_compensatory_leave %} + + + {% trans "Assign" %} + + {% endif %} + + + {% trans "Delete" %} + + {% endif %} +
    + {% endif %} +
    +{% comment %} {{request.GET.deleted}} +{% if request.GET.deleted %} -{% if perms.leave.add_availableleave and not instance.is_compensatory_leave%} - - - -{% endif %} - -{% if perms.leave.delete_leavetype and not instance.is_compensatory_leave %} - -
    - {% csrf_token %} - -
    - -{% endif %} + +{% endif %} {% endcomment %} diff --git a/leave/templates/cbv/leave_types/leave_detail_carryforward.html b/leave/templates/cbv/leave_types/leave_detail_carryforward.html index a65c02fe0..73ac82f3e 100644 --- a/leave/templates/cbv/leave_types/leave_detail_carryforward.html +++ b/leave/templates/cbv/leave_types/leave_detail_carryforward.html @@ -1,31 +1,25 @@ {% load i18n %} -
    - {% trans "Carryforward Type" %} -

    - : {{instance.get_carryforward_type_display}} -

    +
    +
    + {% trans "Carryforward Type" %} +
    {{instance.get_carryforward_type_display}}
    +
    {% if instance.carryforward_max %} -
    - {% trans "Maximum Carryforward" %} -

    - : {{instance.carryforward_max}} -

    -
    +
    + {% trans "Maximum Carryforward" %} + {{instance.carryforward_max}} +
    {% endif %} {% if instance.carryforward_expire_in %} -
    - {% trans "Carryforward Expire in" %} -

    - : {{instance.carryforward_expire_in}} -

    -
    +
    + {% trans "Carryforward Expire in" %} + {{instance.carryforward_expire_in}} +
    {% endif %} {% if instance.carryforward_expire_period %} -
    - {% trans "Carryforward Expire period" %} -

    - : {{instance.carryforward_expire_period}} -

    -
    +
    + {% trans "Carryforward Expire period" %} + {{instance.carryforward_expire_period}} +
    {% endif %} diff --git a/leave/templates/cbv/leave_types/leave_detail_reset.html b/leave/templates/cbv/leave_types/leave_detail_reset.html index b3a1a70fc..5e886b612 100644 --- a/leave/templates/cbv/leave_types/leave_detail_reset.html +++ b/leave/templates/cbv/leave_types/leave_detail_reset.html @@ -1,41 +1,34 @@ {% load i18n %} {% load static %} {% load horillafilters %} -
    - {% trans "Reset" %} -

    - : {{instance.reset|yes_no}} -

    +
    +
    + {% trans "Reset" %} + +
    + {{instance.reset|yes_no}}
    {% if instance.reset_based %} -
    - {% trans "Reset Based" %} -

    - : {{instance.get_reset_based_display}} -

    -
    +
    + {% trans "Reset Based" %} + {{instance.get_reset_based_display}} +
    {% endif %} {% if instance.reset_month %} -
    - {% trans "Reset Month" %} -

    - : {{instance.get_reset_month_display}} -

    -
    +
    + {% trans "Reset Month" %} + {{instance.get_reset_month_display}} +
    {% endif %} {% if instance.reset_day %} -
    - {% trans "Reset Day" %} -

    - : {{instance.reset_day}} -

    -
    +
    + {% trans "Reset Day" %} + {{instance.reset_day}} +
    {% endif %} {% if instance.reset_weekend %} -
    - {% trans "Reset weekend" %} -

    - : {{instance.get_reset_weekend_display}} -

    -
    +
    + {% trans "Reset weekend" %} + {{instance.get_reset_weekend_display}} +
    {% endif %} diff --git a/leave/templates/cbv/my_leave_request/attachment_action.html b/leave/templates/cbv/my_leave_request/attachment_action.html index 5593ca784..dac57fbc5 100644 --- a/leave/templates/cbv/my_leave_request/attachment_action.html +++ b/leave/templates/cbv/my_leave_request/attachment_action.html @@ -12,3 +12,5 @@ {% trans "View attachment" %} {% endif %} + +
    diff --git a/leave/templates/cbv/my_leave_request/detail_leave_actions.html b/leave/templates/cbv/my_leave_request/detail_leave_actions.html index e67342af9..9af94eadc 100644 --- a/leave/templates/cbv/my_leave_request/detail_leave_actions.html +++ b/leave/templates/cbv/my_leave_request/detail_leave_actions.html @@ -1,36 +1,56 @@ {% load basefilters %} -{% load static i18n %} -{% if instance.status == 'requested' %} - - - - -
    - {% csrf_token %} - -
    - -{% else %} - - +{% load i18n %} +{% if instance.status == 'requested'%} + + + + {% else %} + + {% endif %} + {% if instance.status == 'requested'%} +
    + {% csrf_token %} + +
    + {% else %} + {% endif %} + + +{% comment %} +{% load i18n %} +
    + {% if instance.status == 'requested'%} +
    + + + + +
    + {% else %} +
    + + +
    + {% endif %} +
    {% endcomment %} diff --git a/leave/templates/cbv/restricted_days/detail_action.html b/leave/templates/cbv/restricted_days/detail_action.html index 17eecc5eb..f0bb43aa9 100644 --- a/leave/templates/cbv/restricted_days/detail_action.html +++ b/leave/templates/cbv/restricted_days/detail_action.html @@ -1,32 +1,35 @@ -{% load static i18n %} -{% if perms.leave.change_restrictleave %} - - - -{% endif %} - -{% if perms.leave.delete_restrictleave %} - -
    - {% csrf_token %} - -
    - -{% endif %} +{% load i18n %} +{% if perms.leave.change_restrictleave or perms.leave.delete_restrictleave %} +
    + {% if perms.leave.change_restrictleave %} + + {% endif %} {% if perms.leave.delete_restrictleave %} + + + + {% endif %} +
    + {% endif %} {% if request.GET.deleted %} - + {% endif %} diff --git a/leave/templates/cbv/restricted_days/job_position.html b/leave/templates/cbv/restricted_days/job_position.html index 29fb289d5..3c3bdcb7f 100644 --- a/leave/templates/cbv/restricted_days/job_position.html +++ b/leave/templates/cbv/restricted_days/job_position.html @@ -1,7 +1,9 @@ -{% if instance.job_position.all %} - {% for i in instance.job_position.all %} - {{ forloop.counter }}. {{ i }}
    - {% endfor %} -{% else %} - All -{% endif %} +
    + {% if instance.job_position.all %} + {% for i in instance.job_position.all %} + {{forloop.counter}}. {{i}} + {% endfor %} + {% else %} + All + {% endif %} +
    diff --git a/leave/templates/leave/compensatory_leave/comp_leave_form.html b/leave/templates/leave/compensatory_leave/comp_leave_form.html index 16b0112ad..c18727bc7 100644 --- a/leave/templates/leave/compensatory_leave/comp_leave_form.html +++ b/leave/templates/leave/compensatory_leave/comp_leave_form.html @@ -1,43 +1,29 @@ {% load i18n %} {% if form.errors %}
    -
    - {% for error in form.non_field_errors %} -
    {{ error }}
    - {% endfor %} -
    +
    + {% for error in form.non_field_errors %} +
    {{ error }}
    + {% endfor %} +
    {% endif %}
    - - {% if form.instance.id %} - {% trans "Update Compensatory Leave Request" %} - {% else %} - {% trans "Create Compensatory Leave Request" %} - {% endif %} - - + + {% if form.instance.id %} + {% trans "Update Compensatory Leave Request" %} + {% else %} + {% trans "Create Compensatory Leave Request" %} + {% endif %} + +
    -
    - {% csrf_token %} {{form.as_p}} -
    +
    + {% csrf_token %} {{form.as_p}} +
    - diff --git a/leave/templates/leave/dashboard/on_leave.html b/leave/templates/leave/dashboard/on_leave.html index eae4c9a48..9eb473692 100644 --- a/leave/templates/leave/dashboard/on_leave.html +++ b/leave/templates/leave/dashboard/on_leave.html @@ -30,13 +30,9 @@
    {% else %} -
    - -
    -
    - -

    {% trans "No records available at the moment" %}

    -
    +
    + Page not found. 404. +

    {% trans "No Records found." %}

    +

    {% trans "No employees have taken leave today." %}

    -
    {% endif %} diff --git a/leave/templates/leave/leave_assign/available_update_form.html b/leave/templates/leave/leave_assign/available_update_form.html index 46064dd42..ca22823d9 100644 --- a/leave/templates/leave/leave_assign/available_update_form.html +++ b/leave/templates/leave/leave_assign/available_update_form.html @@ -11,7 +11,6 @@
    @@ -24,6 +23,26 @@ {% endfor %}
    +
    + {% endfor %} + +
    +{% endif %} {% if form.errors %} + +
    +
    + {% for error in form.non_field_errors %} +
    {{ error }}
    + {% endfor %} +
    +
    {% endif %}
    {% trans "Update Available Leave" %} diff --git a/leave/templates/leave/leave_request/group_by.html b/leave/templates/leave/leave_request/group_by.html index 0a57592d9..69bdeb4b4 100644 --- a/leave/templates/leave/leave_request/group_by.html +++ b/leave/templates/leave/leave_request/group_by.html @@ -186,7 +186,7 @@ {% endif %} {% else %} - {% if leave_request.is_approvable_by_user and leave_request.status == 'requested' and leave_request.end_date >= current_date %} + {% if leave_request.is_approved and leave_request.status == 'requested' and leave_request.end_date >= current_date %} current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{leave_request.start_date|date:'F'}}. Approval depends on the {{leave_request.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> diff --git a/leave/templates/leave/leave_request/leave_clashes.html b/leave/templates/leave/leave_request/leave_clashes.html index e26f75966..251841aab 100644 --- a/leave/templates/leave/leave_request/leave_clashes.html +++ b/leave/templates/leave/leave_request/leave_clashes.html @@ -66,7 +66,7 @@ {% endif %} {% else %} - {% if leave.is_approvable_by_user and leave.status == 'requested' and leave.end_date >= current_date %} + {% if leave.is_approved and leave.status == 'requested' and leave.end_date >= current_date %} current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{leave.start_date|date:'F'}}. Approval depends on the {{leave.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> diff --git a/leave/templates/leave/leave_request/leave_request_form.html b/leave/templates/leave/leave_request/leave_request_form.html index a79f50d5e..74d0b0d90 100644 --- a/leave/templates/leave/leave_request/leave_request_form.html +++ b/leave/templates/leave/leave_request/leave_request_form.html @@ -17,15 +17,6 @@ {{form.as_p}}
    - - {% if "recruitment"|app_installed %} diff --git a/leave/templates/leave/leave_request/one_request_view.html b/leave/templates/leave/leave_request/one_request_view.html index f854d8c5a..fa23f9993 100644 --- a/leave/templates/leave/leave_request/one_request_view.html +++ b/leave/templates/leave/leave_request/one_request_view.html @@ -98,7 +98,7 @@ {% trans "Multiple Approvals" %} {% for approval in leave_request.multiple_approvals.approvals %}
    {{forloop.counter}}.{{approval.manager_id}} : - {% if approval.is_approvable_by_user %}{% trans "Approved" %} + {% if approval.is_approved %}{% trans "Approved" %} {% else %} {% if approval.is_rejected %} {% trans "Rejected" %} diff --git a/leave/templates/leave/leave_request/request_update_form.html b/leave/templates/leave/leave_request/request_update_form.html index afbc89674..181c21f98 100644 --- a/leave/templates/leave/leave_request/request_update_form.html +++ b/leave/templates/leave/leave_request/request_update_form.html @@ -18,13 +18,6 @@ {% csrf_token %} {{form.as_p}}
    - {% if "recruitment"|app_installed %} {% endblock %} diff --git a/leave/templates/leave/restrict/restrict_form.html b/leave/templates/leave/restrict/restrict_form.html index d4d32385a..94a05f50b 100644 --- a/leave/templates/leave/restrict/restrict_form.html +++ b/leave/templates/leave/restrict/restrict_form.html @@ -107,9 +107,6 @@ " ) + else: + form = LeaveRequestUpdationForm(instance=leave_request) + form = choosesubordinates(request, form, "leave.add_leaverequest") return render( request, diff --git a/load_data/asset_data.json b/load_data/asset_data.json index 3f3251503..d72cf1758 100644 --- a/load_data/asset_data.json +++ b/load_data/asset_data.json @@ -3,7 +3,7 @@ "model": "asset.assetcategory", "pk": 1, "fields": { - "created_at": "2025-03-22T07:32:07.856Z", + "created_at": "2025-06-22T07:32:07.856Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -16,7 +16,7 @@ "model": "asset.assetcategory", "pk": 2, "fields": { - "created_at": "2025-03-22T07:32:09.095Z", + "created_at": "2025-06-22T07:32:09.095Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -29,7 +29,7 @@ "model": "asset.assetcategory", "pk": 3, "fields": { - "created_at": "2025-03-22T07:32:10.260Z", + "created_at": "2025-06-22T07:32:10.260Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -42,7 +42,7 @@ "model": "asset.assetcategory", "pk": 4, "fields": { - "created_at": "2025-03-22T07:32:11.303Z", + "created_at": "2025-06-22T07:32:11.303Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -55,7 +55,7 @@ "model": "asset.assetcategory", "pk": 5, "fields": { - "created_at": "2025-03-22T07:32:11.722Z", + "created_at": "2025-06-22T07:32:11.722Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -68,7 +68,7 @@ "model": "asset.assetcategory", "pk": 6, "fields": { - "created_at": "2025-03-22T07:32:12.276Z", + "created_at": "2025-06-22T07:32:12.276Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -81,7 +81,7 @@ "model": "asset.assetcategory", "pk": 7, "fields": { - "created_at": "2025-03-22T07:32:12.642Z", + "created_at": "2025-06-22T07:32:12.642Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -94,7 +94,7 @@ "model": "asset.assetlot", "pk": 1, "fields": { - "created_at": "2025-03-22T07:32:07.879Z", + "created_at": "2025-06-22T07:32:07.879Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -107,7 +107,7 @@ "model": "asset.assetlot", "pk": 2, "fields": { - "created_at": "2025-03-22T07:32:08.545Z", + "created_at": "2025-06-22T07:32:08.545Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -120,7 +120,7 @@ "model": "asset.assetlot", "pk": 3, "fields": { - "created_at": "2025-03-22T07:32:09.123Z", + "created_at": "2025-06-22T07:32:09.123Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -133,7 +133,7 @@ "model": "asset.assetlot", "pk": 4, "fields": { - "created_at": "2025-03-22T07:32:09.783Z", + "created_at": "2025-06-22T07:32:09.783Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -146,7 +146,7 @@ "model": "asset.assetlot", "pk": 5, "fields": { - "created_at": "2025-03-22T07:32:10.274Z", + "created_at": "2025-06-22T07:32:10.274Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -159,7 +159,7 @@ "model": "asset.assetlot", "pk": 6, "fields": { - "created_at": "2025-03-22T07:32:11.192Z", + "created_at": "2025-06-22T07:32:11.192Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -172,7 +172,7 @@ "model": "asset.assetlot", "pk": 7, "fields": { - "created_at": "2025-03-22T07:32:11.314Z", + "created_at": "2025-06-22T07:32:11.314Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -185,7 +185,7 @@ "model": "asset.assetlot", "pk": 8, "fields": { - "created_at": "2025-03-22T07:32:11.735Z", + "created_at": "2025-06-22T07:32:11.735Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -198,7 +198,7 @@ "model": "asset.assetlot", "pk": 9, "fields": { - "created_at": "2025-03-22T07:32:12.030Z", + "created_at": "2025-06-22T07:32:12.030Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -211,7 +211,7 @@ "model": "asset.assetlot", "pk": 10, "fields": { - "created_at": "2025-03-22T07:32:12.293Z", + "created_at": "2025-06-22T07:32:12.293Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -224,7 +224,7 @@ "model": "asset.assetlot", "pk": 11, "fields": { - "created_at": "2025-03-22T07:32:12.655Z", + "created_at": "2025-06-22T07:32:12.655Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -237,7 +237,7 @@ "model": "asset.asset", "pk": 1, "fields": { - "created_at": "2025-03-22T07:32:07.902Z", + "created_at": "2025-06-22T07:32:07.902Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -258,7 +258,7 @@ "model": "asset.asset", "pk": 2, "fields": { - "created_at": "2025-03-22T07:32:07.954Z", + "created_at": "2025-06-22T07:32:07.954Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -279,7 +279,7 @@ "model": "asset.asset", "pk": 3, "fields": { - "created_at": "2025-03-22T07:32:07.987Z", + "created_at": "2025-06-22T07:32:07.987Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -300,7 +300,7 @@ "model": "asset.asset", "pk": 4, "fields": { - "created_at": "2025-03-22T07:32:08.018Z", + "created_at": "2025-06-22T07:32:08.018Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -321,7 +321,7 @@ "model": "asset.asset", "pk": 5, "fields": { - "created_at": "2025-03-22T07:32:08.056Z", + "created_at": "2025-06-22T07:32:08.056Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -342,7 +342,7 @@ "model": "asset.asset", "pk": 6, "fields": { - "created_at": "2025-03-22T07:32:08.098Z", + "created_at": "2025-06-22T07:32:08.098Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -363,7 +363,7 @@ "model": "asset.asset", "pk": 7, "fields": { - "created_at": "2025-03-22T07:32:08.125Z", + "created_at": "2025-06-22T07:32:08.125Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -384,7 +384,7 @@ "model": "asset.asset", "pk": 8, "fields": { - "created_at": "2025-03-22T07:32:08.153Z", + "created_at": "2025-06-22T07:32:08.153Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -405,7 +405,7 @@ "model": "asset.asset", "pk": 9, "fields": { - "created_at": "2025-03-22T07:32:08.177Z", + "created_at": "2025-06-22T07:32:08.177Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -426,7 +426,7 @@ "model": "asset.asset", "pk": 10, "fields": { - "created_at": "2025-03-22T07:32:08.201Z", + "created_at": "2025-06-22T07:32:08.201Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -447,7 +447,7 @@ "model": "asset.asset", "pk": 11, "fields": { - "created_at": "2025-03-22T07:32:08.226Z", + "created_at": "2025-06-22T07:32:08.226Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -468,7 +468,7 @@ "model": "asset.asset", "pk": 12, "fields": { - "created_at": "2025-03-22T07:32:08.250Z", + "created_at": "2025-06-22T07:32:08.250Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -489,7 +489,7 @@ "model": "asset.asset", "pk": 13, "fields": { - "created_at": "2025-03-22T07:32:08.275Z", + "created_at": "2025-06-22T07:32:08.275Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -510,7 +510,7 @@ "model": "asset.asset", "pk": 14, "fields": { - "created_at": "2025-03-22T07:32:08.298Z", + "created_at": "2025-06-22T07:32:08.298Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -531,7 +531,7 @@ "model": "asset.asset", "pk": 15, "fields": { - "created_at": "2025-03-22T07:32:08.327Z", + "created_at": "2025-06-22T07:32:08.327Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -552,7 +552,7 @@ "model": "asset.asset", "pk": 16, "fields": { - "created_at": "2025-03-22T07:32:08.362Z", + "created_at": "2025-06-22T07:32:08.362Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -573,7 +573,7 @@ "model": "asset.asset", "pk": 17, "fields": { - "created_at": "2025-03-22T07:32:08.392Z", + "created_at": "2025-06-22T07:32:08.392Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -594,7 +594,7 @@ "model": "asset.asset", "pk": 18, "fields": { - "created_at": "2025-03-22T07:32:08.430Z", + "created_at": "2025-06-22T07:32:08.430Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -615,7 +615,7 @@ "model": "asset.asset", "pk": 19, "fields": { - "created_at": "2025-03-22T07:32:08.459Z", + "created_at": "2025-06-22T07:32:08.459Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -636,7 +636,7 @@ "model": "asset.asset", "pk": 20, "fields": { - "created_at": "2025-03-22T07:32:08.481Z", + "created_at": "2025-06-22T07:32:08.481Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -657,7 +657,7 @@ "model": "asset.asset", "pk": 21, "fields": { - "created_at": "2025-03-22T07:32:08.503Z", + "created_at": "2025-06-22T07:32:08.503Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -678,7 +678,7 @@ "model": "asset.asset", "pk": 22, "fields": { - "created_at": "2025-03-22T07:32:08.524Z", + "created_at": "2025-06-22T07:32:08.524Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -699,7 +699,7 @@ "model": "asset.asset", "pk": 23, "fields": { - "created_at": "2025-03-22T07:32:08.558Z", + "created_at": "2025-06-22T07:32:08.558Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -720,7 +720,7 @@ "model": "asset.asset", "pk": 24, "fields": { - "created_at": "2025-03-22T07:32:08.581Z", + "created_at": "2025-06-22T07:32:08.581Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -741,7 +741,7 @@ "model": "asset.asset", "pk": 25, "fields": { - "created_at": "2025-03-22T07:32:08.607Z", + "created_at": "2025-06-22T07:32:08.607Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -762,7 +762,7 @@ "model": "asset.asset", "pk": 26, "fields": { - "created_at": "2025-03-22T07:32:08.637Z", + "created_at": "2025-06-22T07:32:08.637Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -783,7 +783,7 @@ "model": "asset.asset", "pk": 27, "fields": { - "created_at": "2025-03-22T07:32:08.668Z", + "created_at": "2025-06-22T07:32:08.668Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -804,7 +804,7 @@ "model": "asset.asset", "pk": 28, "fields": { - "created_at": "2025-03-22T07:32:08.691Z", + "created_at": "2025-06-22T07:32:08.691Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -825,7 +825,7 @@ "model": "asset.asset", "pk": 29, "fields": { - "created_at": "2025-03-22T07:32:08.715Z", + "created_at": "2025-06-22T07:32:08.715Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -846,7 +846,7 @@ "model": "asset.asset", "pk": 30, "fields": { - "created_at": "2025-03-22T07:32:08.737Z", + "created_at": "2025-06-22T07:32:08.737Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -867,7 +867,7 @@ "model": "asset.asset", "pk": 31, "fields": { - "created_at": "2025-03-22T07:32:08.758Z", + "created_at": "2025-06-22T07:32:08.758Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -888,7 +888,7 @@ "model": "asset.asset", "pk": 32, "fields": { - "created_at": "2025-03-22T07:32:08.781Z", + "created_at": "2025-06-22T07:32:08.781Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -909,7 +909,7 @@ "model": "asset.asset", "pk": 33, "fields": { - "created_at": "2025-03-22T07:32:08.801Z", + "created_at": "2025-06-22T07:32:08.801Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -930,7 +930,7 @@ "model": "asset.asset", "pk": 34, "fields": { - "created_at": "2025-03-22T07:32:08.822Z", + "created_at": "2025-06-22T07:32:08.822Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -951,7 +951,7 @@ "model": "asset.asset", "pk": 35, "fields": { - "created_at": "2025-03-22T07:32:08.841Z", + "created_at": "2025-06-22T07:32:08.841Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -972,7 +972,7 @@ "model": "asset.asset", "pk": 36, "fields": { - "created_at": "2025-03-22T07:32:08.860Z", + "created_at": "2025-06-22T07:32:08.860Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -993,7 +993,7 @@ "model": "asset.asset", "pk": 37, "fields": { - "created_at": "2025-03-22T07:32:08.881Z", + "created_at": "2025-06-22T07:32:08.881Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1014,7 +1014,7 @@ "model": "asset.asset", "pk": 38, "fields": { - "created_at": "2025-03-22T07:32:08.914Z", + "created_at": "2025-06-22T07:32:08.914Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1035,7 +1035,7 @@ "model": "asset.asset", "pk": 39, "fields": { - "created_at": "2025-03-22T07:32:08.944Z", + "created_at": "2025-06-22T07:32:08.944Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1056,7 +1056,7 @@ "model": "asset.asset", "pk": 40, "fields": { - "created_at": "2025-03-22T07:32:09.062Z", + "created_at": "2025-06-22T07:32:09.062Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1077,7 +1077,7 @@ "model": "asset.asset", "pk": 41, "fields": { - "created_at": "2025-03-22T07:32:09.135Z", + "created_at": "2025-06-22T07:32:09.135Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1098,7 +1098,7 @@ "model": "asset.asset", "pk": 42, "fields": { - "created_at": "2025-03-22T07:32:09.170Z", + "created_at": "2025-06-22T07:32:09.170Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1119,7 +1119,7 @@ "model": "asset.asset", "pk": 43, "fields": { - "created_at": "2025-03-22T07:32:09.190Z", + "created_at": "2025-06-22T07:32:09.190Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1140,7 +1140,7 @@ "model": "asset.asset", "pk": 44, "fields": { - "created_at": "2025-03-22T07:32:09.253Z", + "created_at": "2025-06-22T07:32:09.253Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1161,7 +1161,7 @@ "model": "asset.asset", "pk": 45, "fields": { - "created_at": "2025-03-22T07:32:09.306Z", + "created_at": "2025-06-22T07:32:09.306Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1182,7 +1182,7 @@ "model": "asset.asset", "pk": 46, "fields": { - "created_at": "2025-03-22T07:32:09.329Z", + "created_at": "2025-06-22T07:32:09.329Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1203,7 +1203,7 @@ "model": "asset.asset", "pk": 47, "fields": { - "created_at": "2025-03-22T07:32:09.396Z", + "created_at": "2025-06-22T07:32:09.396Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1224,7 +1224,7 @@ "model": "asset.asset", "pk": 48, "fields": { - "created_at": "2025-03-22T07:32:09.419Z", + "created_at": "2025-06-22T07:32:09.419Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1245,7 +1245,7 @@ "model": "asset.asset", "pk": 49, "fields": { - "created_at": "2025-03-22T07:32:09.447Z", + "created_at": "2025-06-22T07:32:09.447Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1266,7 +1266,7 @@ "model": "asset.asset", "pk": 50, "fields": { - "created_at": "2025-03-22T07:32:09.481Z", + "created_at": "2025-06-22T07:32:09.481Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1287,7 +1287,7 @@ "model": "asset.asset", "pk": 51, "fields": { - "created_at": "2025-03-22T07:32:09.506Z", + "created_at": "2025-06-22T07:32:09.506Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1308,7 +1308,7 @@ "model": "asset.asset", "pk": 52, "fields": { - "created_at": "2025-03-22T07:32:09.536Z", + "created_at": "2025-06-22T07:32:09.536Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1329,7 +1329,7 @@ "model": "asset.asset", "pk": 53, "fields": { - "created_at": "2025-03-22T07:32:09.562Z", + "created_at": "2025-06-22T07:32:09.562Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1350,7 +1350,7 @@ "model": "asset.asset", "pk": 54, "fields": { - "created_at": "2025-03-22T07:32:09.586Z", + "created_at": "2025-06-22T07:32:09.586Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1371,7 +1371,7 @@ "model": "asset.asset", "pk": 55, "fields": { - "created_at": "2025-03-22T07:32:09.607Z", + "created_at": "2025-06-22T07:32:09.607Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1392,7 +1392,7 @@ "model": "asset.asset", "pk": 56, "fields": { - "created_at": "2025-03-22T07:32:09.627Z", + "created_at": "2025-06-22T07:32:09.627Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1413,7 +1413,7 @@ "model": "asset.asset", "pk": 57, "fields": { - "created_at": "2025-03-22T07:32:09.647Z", + "created_at": "2025-06-22T07:32:09.647Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1434,7 +1434,7 @@ "model": "asset.asset", "pk": 58, "fields": { - "created_at": "2025-03-22T07:32:09.666Z", + "created_at": "2025-06-22T07:32:09.666Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1455,7 +1455,7 @@ "model": "asset.asset", "pk": 59, "fields": { - "created_at": "2025-03-22T07:32:09.687Z", + "created_at": "2025-06-22T07:32:09.687Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1476,7 +1476,7 @@ "model": "asset.asset", "pk": 60, "fields": { - "created_at": "2025-03-22T07:32:09.710Z", + "created_at": "2025-06-22T07:32:09.710Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1497,7 +1497,7 @@ "model": "asset.asset", "pk": 61, "fields": { - "created_at": "2025-03-22T07:32:09.735Z", + "created_at": "2025-06-22T07:32:09.735Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1518,7 +1518,7 @@ "model": "asset.asset", "pk": 62, "fields": { - "created_at": "2025-03-22T07:32:09.759Z", + "created_at": "2025-06-22T07:32:09.759Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1539,7 +1539,7 @@ "model": "asset.asset", "pk": 63, "fields": { - "created_at": "2025-03-22T07:32:09.797Z", + "created_at": "2025-06-22T07:32:09.797Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1560,7 +1560,7 @@ "model": "asset.asset", "pk": 64, "fields": { - "created_at": "2025-03-22T07:32:09.834Z", + "created_at": "2025-06-22T07:32:09.834Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1581,7 +1581,7 @@ "model": "asset.asset", "pk": 65, "fields": { - "created_at": "2025-03-22T07:32:09.867Z", + "created_at": "2025-06-22T07:32:09.867Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1602,7 +1602,7 @@ "model": "asset.asset", "pk": 66, "fields": { - "created_at": "2025-03-22T07:32:09.909Z", + "created_at": "2025-06-22T07:32:09.909Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1623,7 +1623,7 @@ "model": "asset.asset", "pk": 67, "fields": { - "created_at": "2025-03-22T07:32:09.934Z", + "created_at": "2025-06-22T07:32:09.934Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1644,7 +1644,7 @@ "model": "asset.asset", "pk": 68, "fields": { - "created_at": "2025-03-22T07:32:09.958Z", + "created_at": "2025-06-22T07:32:09.958Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1665,7 +1665,7 @@ "model": "asset.asset", "pk": 69, "fields": { - "created_at": "2025-03-22T07:32:09.979Z", + "created_at": "2025-06-22T07:32:09.979Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1686,7 +1686,7 @@ "model": "asset.asset", "pk": 70, "fields": { - "created_at": "2025-03-22T07:32:10.002Z", + "created_at": "2025-06-22T07:32:10.002Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1707,7 +1707,7 @@ "model": "asset.asset", "pk": 71, "fields": { - "created_at": "2025-03-22T07:32:10.027Z", + "created_at": "2025-06-22T07:32:10.027Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1728,7 +1728,7 @@ "model": "asset.asset", "pk": 72, "fields": { - "created_at": "2025-03-22T07:32:10.052Z", + "created_at": "2025-06-22T07:32:10.052Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1749,7 +1749,7 @@ "model": "asset.asset", "pk": 73, "fields": { - "created_at": "2025-03-22T07:32:10.078Z", + "created_at": "2025-06-22T07:32:10.078Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1770,7 +1770,7 @@ "model": "asset.asset", "pk": 74, "fields": { - "created_at": "2025-03-22T07:32:10.100Z", + "created_at": "2025-06-22T07:32:10.100Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1791,7 +1791,7 @@ "model": "asset.asset", "pk": 75, "fields": { - "created_at": "2025-03-22T07:32:10.123Z", + "created_at": "2025-06-22T07:32:10.123Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1812,7 +1812,7 @@ "model": "asset.asset", "pk": 76, "fields": { - "created_at": "2025-03-22T07:32:10.145Z", + "created_at": "2025-06-22T07:32:10.145Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1833,7 +1833,7 @@ "model": "asset.asset", "pk": 77, "fields": { - "created_at": "2025-03-22T07:32:10.173Z", + "created_at": "2025-06-22T07:32:10.173Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1854,7 +1854,7 @@ "model": "asset.asset", "pk": 78, "fields": { - "created_at": "2025-03-22T07:32:10.196Z", + "created_at": "2025-06-22T07:32:10.196Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1875,7 +1875,7 @@ "model": "asset.asset", "pk": 79, "fields": { - "created_at": "2025-03-22T07:32:10.219Z", + "created_at": "2025-06-22T07:32:10.219Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1896,7 +1896,7 @@ "model": "asset.asset", "pk": 80, "fields": { - "created_at": "2025-03-22T07:32:10.243Z", + "created_at": "2025-06-22T07:32:10.243Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1917,7 +1917,7 @@ "model": "asset.asset", "pk": 81, "fields": { - "created_at": "2025-03-22T07:32:10.287Z", + "created_at": "2025-06-22T07:32:10.287Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1938,7 +1938,7 @@ "model": "asset.asset", "pk": 82, "fields": { - "created_at": "2025-03-22T07:32:10.309Z", + "created_at": "2025-06-22T07:32:10.309Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1959,7 +1959,7 @@ "model": "asset.asset", "pk": 83, "fields": { - "created_at": "2025-03-22T07:32:10.335Z", + "created_at": "2025-06-22T07:32:10.335Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1980,7 +1980,7 @@ "model": "asset.asset", "pk": 84, "fields": { - "created_at": "2025-03-22T07:32:10.360Z", + "created_at": "2025-06-22T07:32:10.360Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2001,7 +2001,7 @@ "model": "asset.asset", "pk": 85, "fields": { - "created_at": "2025-03-22T07:32:10.382Z", + "created_at": "2025-06-22T07:32:10.382Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2022,7 +2022,7 @@ "model": "asset.asset", "pk": 86, "fields": { - "created_at": "2025-03-22T07:32:10.406Z", + "created_at": "2025-06-22T07:32:10.406Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2043,7 +2043,7 @@ "model": "asset.asset", "pk": 87, "fields": { - "created_at": "2025-03-22T07:32:10.427Z", + "created_at": "2025-06-22T07:32:10.427Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2064,7 +2064,7 @@ "model": "asset.asset", "pk": 88, "fields": { - "created_at": "2025-03-22T07:32:10.451Z", + "created_at": "2025-06-22T07:32:10.451Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2085,7 +2085,7 @@ "model": "asset.asset", "pk": 89, "fields": { - "created_at": "2025-03-22T07:32:10.478Z", + "created_at": "2025-06-22T07:32:10.478Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2106,7 +2106,7 @@ "model": "asset.asset", "pk": 90, "fields": { - "created_at": "2025-03-22T07:32:10.503Z", + "created_at": "2025-06-22T07:32:10.503Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2127,7 +2127,7 @@ "model": "asset.asset", "pk": 91, "fields": { - "created_at": "2025-03-22T07:32:10.530Z", + "created_at": "2025-06-22T07:32:10.530Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2148,7 +2148,7 @@ "model": "asset.asset", "pk": 92, "fields": { - "created_at": "2025-03-22T07:32:10.562Z", + "created_at": "2025-06-22T07:32:10.562Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2169,7 +2169,7 @@ "model": "asset.asset", "pk": 93, "fields": { - "created_at": "2025-03-22T07:32:10.592Z", + "created_at": "2025-06-22T07:32:10.592Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2190,7 +2190,7 @@ "model": "asset.asset", "pk": 94, "fields": { - "created_at": "2025-03-22T07:32:10.620Z", + "created_at": "2025-06-22T07:32:10.620Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2211,7 +2211,7 @@ "model": "asset.asset", "pk": 95, "fields": { - "created_at": "2025-03-22T07:32:10.647Z", + "created_at": "2025-06-22T07:32:10.647Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2232,7 +2232,7 @@ "model": "asset.asset", "pk": 96, "fields": { - "created_at": "2025-03-22T07:32:10.680Z", + "created_at": "2025-06-22T07:32:10.680Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2253,7 +2253,7 @@ "model": "asset.asset", "pk": 97, "fields": { - "created_at": "2025-03-22T07:32:10.708Z", + "created_at": "2025-06-22T07:32:10.708Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2274,7 +2274,7 @@ "model": "asset.asset", "pk": 98, "fields": { - "created_at": "2025-03-22T07:32:10.734Z", + "created_at": "2025-06-22T07:32:10.734Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2295,7 +2295,7 @@ "model": "asset.asset", "pk": 99, "fields": { - "created_at": "2025-03-22T07:32:10.757Z", + "created_at": "2025-06-22T07:32:10.757Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2316,7 +2316,7 @@ "model": "asset.asset", "pk": 100, "fields": { - "created_at": "2025-03-22T07:32:10.777Z", + "created_at": "2025-06-22T07:32:10.777Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2337,7 +2337,7 @@ "model": "asset.asset", "pk": 101, "fields": { - "created_at": "2025-03-22T07:32:10.799Z", + "created_at": "2025-06-22T07:32:10.799Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2358,7 +2358,7 @@ "model": "asset.asset", "pk": 102, "fields": { - "created_at": "2025-03-22T07:32:10.821Z", + "created_at": "2025-06-22T07:32:10.821Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2379,7 +2379,7 @@ "model": "asset.asset", "pk": 103, "fields": { - "created_at": "2025-03-22T07:32:10.844Z", + "created_at": "2025-06-22T07:32:10.844Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2400,7 +2400,7 @@ "model": "asset.asset", "pk": 104, "fields": { - "created_at": "2025-03-22T07:32:10.870Z", + "created_at": "2025-06-22T07:32:10.870Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2421,7 +2421,7 @@ "model": "asset.asset", "pk": 105, "fields": { - "created_at": "2025-03-22T07:32:10.898Z", + "created_at": "2025-06-22T07:32:10.898Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2442,7 +2442,7 @@ "model": "asset.asset", "pk": 106, "fields": { - "created_at": "2025-03-22T07:32:10.930Z", + "created_at": "2025-06-22T07:32:10.930Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2463,7 +2463,7 @@ "model": "asset.asset", "pk": 107, "fields": { - "created_at": "2025-03-22T07:32:10.961Z", + "created_at": "2025-06-22T07:32:10.961Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2484,7 +2484,7 @@ "model": "asset.asset", "pk": 108, "fields": { - "created_at": "2025-03-22T07:32:10.990Z", + "created_at": "2025-06-22T07:32:10.990Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2505,7 +2505,7 @@ "model": "asset.asset", "pk": 109, "fields": { - "created_at": "2025-03-22T07:32:11.018Z", + "created_at": "2025-06-22T07:32:11.018Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2526,7 +2526,7 @@ "model": "asset.asset", "pk": 110, "fields": { - "created_at": "2025-03-22T07:32:11.045Z", + "created_at": "2025-06-22T07:32:11.045Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2547,7 +2547,7 @@ "model": "asset.asset", "pk": 111, "fields": { - "created_at": "2025-03-22T07:32:11.071Z", + "created_at": "2025-06-22T07:32:11.071Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2568,7 +2568,7 @@ "model": "asset.asset", "pk": 112, "fields": { - "created_at": "2025-03-22T07:32:11.096Z", + "created_at": "2025-06-22T07:32:11.096Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2589,7 +2589,7 @@ "model": "asset.asset", "pk": 113, "fields": { - "created_at": "2025-03-22T07:32:11.125Z", + "created_at": "2025-06-22T07:32:11.125Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2610,7 +2610,7 @@ "model": "asset.asset", "pk": 114, "fields": { - "created_at": "2025-03-22T07:32:11.148Z", + "created_at": "2025-06-22T07:32:11.148Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2631,7 +2631,7 @@ "model": "asset.asset", "pk": 115, "fields": { - "created_at": "2025-03-22T07:32:11.173Z", + "created_at": "2025-06-22T07:32:11.173Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2652,7 +2652,7 @@ "model": "asset.asset", "pk": 116, "fields": { - "created_at": "2025-03-22T07:32:11.203Z", + "created_at": "2025-06-22T07:32:11.203Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2673,7 +2673,7 @@ "model": "asset.asset", "pk": 117, "fields": { - "created_at": "2025-03-22T07:32:11.223Z", + "created_at": "2025-06-22T07:32:11.223Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2694,7 +2694,7 @@ "model": "asset.asset", "pk": 118, "fields": { - "created_at": "2025-03-22T07:32:11.244Z", + "created_at": "2025-06-22T07:32:11.244Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2715,7 +2715,7 @@ "model": "asset.asset", "pk": 119, "fields": { - "created_at": "2025-03-22T07:32:11.266Z", + "created_at": "2025-06-22T07:32:11.266Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2736,7 +2736,7 @@ "model": "asset.asset", "pk": 120, "fields": { - "created_at": "2025-03-22T07:32:11.287Z", + "created_at": "2025-06-22T07:32:11.287Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2757,7 +2757,7 @@ "model": "asset.asset", "pk": 121, "fields": { - "created_at": "2025-03-22T07:32:11.325Z", + "created_at": "2025-06-22T07:32:11.325Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2778,7 +2778,7 @@ "model": "asset.asset", "pk": 122, "fields": { - "created_at": "2025-03-22T07:32:11.345Z", + "created_at": "2025-06-22T07:32:11.345Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2799,7 +2799,7 @@ "model": "asset.asset", "pk": 123, "fields": { - "created_at": "2025-03-22T07:32:11.363Z", + "created_at": "2025-06-22T07:32:11.363Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2820,7 +2820,7 @@ "model": "asset.asset", "pk": 124, "fields": { - "created_at": "2025-03-22T07:32:11.384Z", + "created_at": "2025-06-22T07:32:11.384Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2841,7 +2841,7 @@ "model": "asset.asset", "pk": 125, "fields": { - "created_at": "2025-03-22T07:32:11.403Z", + "created_at": "2025-06-22T07:32:11.403Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2862,7 +2862,7 @@ "model": "asset.asset", "pk": 126, "fields": { - "created_at": "2025-03-22T07:32:11.424Z", + "created_at": "2025-06-22T07:32:11.424Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2883,7 +2883,7 @@ "model": "asset.asset", "pk": 127, "fields": { - "created_at": "2025-03-22T07:32:11.442Z", + "created_at": "2025-06-22T07:32:11.442Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2904,7 +2904,7 @@ "model": "asset.asset", "pk": 128, "fields": { - "created_at": "2025-03-22T07:32:11.461Z", + "created_at": "2025-06-22T07:32:11.461Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2925,7 +2925,7 @@ "model": "asset.asset", "pk": 129, "fields": { - "created_at": "2025-03-22T07:32:11.479Z", + "created_at": "2025-06-22T07:32:11.479Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2946,7 +2946,7 @@ "model": "asset.asset", "pk": 130, "fields": { - "created_at": "2025-03-22T07:32:11.499Z", + "created_at": "2025-06-22T07:32:11.499Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2967,7 +2967,7 @@ "model": "asset.asset", "pk": 131, "fields": { - "created_at": "2025-03-22T07:32:11.520Z", + "created_at": "2025-06-22T07:32:11.520Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2988,7 +2988,7 @@ "model": "asset.asset", "pk": 132, "fields": { - "created_at": "2025-03-22T07:32:11.541Z", + "created_at": "2025-06-22T07:32:11.541Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3009,7 +3009,7 @@ "model": "asset.asset", "pk": 133, "fields": { - "created_at": "2025-03-22T07:32:11.559Z", + "created_at": "2025-06-22T07:32:11.559Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3030,7 +3030,7 @@ "model": "asset.asset", "pk": 134, "fields": { - "created_at": "2025-03-22T07:32:11.579Z", + "created_at": "2025-06-22T07:32:11.579Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3051,7 +3051,7 @@ "model": "asset.asset", "pk": 135, "fields": { - "created_at": "2025-03-22T07:32:11.599Z", + "created_at": "2025-06-22T07:32:11.599Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3072,7 +3072,7 @@ "model": "asset.asset", "pk": 136, "fields": { - "created_at": "2025-03-22T07:32:11.618Z", + "created_at": "2025-06-22T07:32:11.618Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3093,7 +3093,7 @@ "model": "asset.asset", "pk": 137, "fields": { - "created_at": "2025-03-22T07:32:11.639Z", + "created_at": "2025-06-22T07:32:11.639Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3114,7 +3114,7 @@ "model": "asset.asset", "pk": 138, "fields": { - "created_at": "2025-03-22T07:32:11.657Z", + "created_at": "2025-06-22T07:32:11.657Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3135,7 +3135,7 @@ "model": "asset.asset", "pk": 139, "fields": { - "created_at": "2025-03-22T07:32:11.682Z", + "created_at": "2025-06-22T07:32:11.682Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3156,7 +3156,7 @@ "model": "asset.asset", "pk": 140, "fields": { - "created_at": "2025-03-22T07:32:11.704Z", + "created_at": "2025-06-22T07:32:11.704Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3177,7 +3177,7 @@ "model": "asset.asset", "pk": 141, "fields": { - "created_at": "2025-03-22T07:32:11.750Z", + "created_at": "2025-06-22T07:32:11.750Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3198,7 +3198,7 @@ "model": "asset.asset", "pk": 142, "fields": { - "created_at": "2025-03-22T07:32:11.772Z", + "created_at": "2025-06-22T07:32:11.772Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3219,7 +3219,7 @@ "model": "asset.asset", "pk": 143, "fields": { - "created_at": "2025-03-22T07:32:11.791Z", + "created_at": "2025-06-22T07:32:11.791Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3240,7 +3240,7 @@ "model": "asset.asset", "pk": 144, "fields": { - "created_at": "2025-03-22T07:32:11.811Z", + "created_at": "2025-06-22T07:32:11.811Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3261,7 +3261,7 @@ "model": "asset.asset", "pk": 145, "fields": { - "created_at": "2025-03-22T07:32:11.832Z", + "created_at": "2025-06-22T07:32:11.832Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3282,7 +3282,7 @@ "model": "asset.asset", "pk": 146, "fields": { - "created_at": "2025-03-22T07:32:11.852Z", + "created_at": "2025-06-22T07:32:11.852Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3303,7 +3303,7 @@ "model": "asset.asset", "pk": 147, "fields": { - "created_at": "2025-03-22T07:32:11.872Z", + "created_at": "2025-06-22T07:32:11.872Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3324,7 +3324,7 @@ "model": "asset.asset", "pk": 148, "fields": { - "created_at": "2025-03-22T07:32:11.894Z", + "created_at": "2025-06-22T07:32:11.894Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3345,7 +3345,7 @@ "model": "asset.asset", "pk": 149, "fields": { - "created_at": "2025-03-22T07:32:11.921Z", + "created_at": "2025-06-22T07:32:11.921Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3366,7 +3366,7 @@ "model": "asset.asset", "pk": 150, "fields": { - "created_at": "2025-03-22T07:32:11.946Z", + "created_at": "2025-06-22T07:32:11.946Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3387,7 +3387,7 @@ "model": "asset.asset", "pk": 151, "fields": { - "created_at": "2025-03-22T07:32:11.970Z", + "created_at": "2025-06-22T07:32:11.970Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3408,7 +3408,7 @@ "model": "asset.asset", "pk": 152, "fields": { - "created_at": "2025-03-22T07:32:11.997Z", + "created_at": "2025-06-22T07:32:11.997Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3429,7 +3429,7 @@ "model": "asset.asset", "pk": 153, "fields": { - "created_at": "2025-03-22T07:32:12.045Z", + "created_at": "2025-06-22T07:32:12.045Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3450,7 +3450,7 @@ "model": "asset.asset", "pk": 154, "fields": { - "created_at": "2025-03-22T07:32:12.078Z", + "created_at": "2025-06-22T07:32:12.078Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3471,7 +3471,7 @@ "model": "asset.asset", "pk": 155, "fields": { - "created_at": "2025-03-22T07:32:12.106Z", + "created_at": "2025-06-22T07:32:12.106Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3492,7 +3492,7 @@ "model": "asset.asset", "pk": 156, "fields": { - "created_at": "2025-03-22T07:32:12.138Z", + "created_at": "2025-06-22T07:32:12.138Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3513,7 +3513,7 @@ "model": "asset.asset", "pk": 157, "fields": { - "created_at": "2025-03-22T07:32:12.169Z", + "created_at": "2025-06-22T07:32:12.169Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3534,7 +3534,7 @@ "model": "asset.asset", "pk": 158, "fields": { - "created_at": "2025-03-22T07:32:12.197Z", + "created_at": "2025-06-22T07:32:12.197Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3555,7 +3555,7 @@ "model": "asset.asset", "pk": 159, "fields": { - "created_at": "2025-03-22T07:32:12.225Z", + "created_at": "2025-06-22T07:32:12.225Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3576,7 +3576,7 @@ "model": "asset.asset", "pk": 160, "fields": { - "created_at": "2025-03-22T07:32:12.250Z", + "created_at": "2025-06-22T07:32:12.250Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3597,7 +3597,7 @@ "model": "asset.asset", "pk": 161, "fields": { - "created_at": "2025-03-22T07:32:12.315Z", + "created_at": "2025-06-22T07:32:12.315Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3618,7 +3618,7 @@ "model": "asset.asset", "pk": 162, "fields": { - "created_at": "2025-03-22T07:32:12.346Z", + "created_at": "2025-06-22T07:32:12.346Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3639,7 +3639,7 @@ "model": "asset.asset", "pk": 163, "fields": { - "created_at": "2025-03-22T07:32:12.372Z", + "created_at": "2025-06-22T07:32:12.372Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3660,7 +3660,7 @@ "model": "asset.asset", "pk": 164, "fields": { - "created_at": "2025-03-22T07:32:12.406Z", + "created_at": "2025-06-22T07:32:12.406Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3681,7 +3681,7 @@ "model": "asset.asset", "pk": 165, "fields": { - "created_at": "2025-03-22T07:32:12.442Z", + "created_at": "2025-06-22T07:32:12.442Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3702,7 +3702,7 @@ "model": "asset.asset", "pk": 166, "fields": { - "created_at": "2025-03-22T07:32:12.473Z", + "created_at": "2025-06-22T07:32:12.473Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3723,7 +3723,7 @@ "model": "asset.asset", "pk": 167, "fields": { - "created_at": "2025-03-22T07:32:12.494Z", + "created_at": "2025-06-22T07:32:12.494Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3744,7 +3744,7 @@ "model": "asset.asset", "pk": 168, "fields": { - "created_at": "2025-03-22T07:32:12.519Z", + "created_at": "2025-06-22T07:32:12.519Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3765,7 +3765,7 @@ "model": "asset.asset", "pk": 169, "fields": { - "created_at": "2025-03-22T07:32:12.542Z", + "created_at": "2025-06-22T07:32:12.542Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3786,7 +3786,7 @@ "model": "asset.asset", "pk": 170, "fields": { - "created_at": "2025-03-22T07:32:12.561Z", + "created_at": "2025-06-22T07:32:12.561Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3807,7 +3807,7 @@ "model": "asset.asset", "pk": 171, "fields": { - "created_at": "2025-03-22T07:32:12.582Z", + "created_at": "2025-06-22T07:32:12.582Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3828,7 +3828,7 @@ "model": "asset.asset", "pk": 172, "fields": { - "created_at": "2025-03-22T07:32:12.604Z", + "created_at": "2025-06-22T07:32:12.604Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3849,7 +3849,7 @@ "model": "asset.asset", "pk": 173, "fields": { - "created_at": "2025-03-22T07:32:12.625Z", + "created_at": "2025-06-22T07:32:12.625Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3870,7 +3870,7 @@ "model": "asset.asset", "pk": 174, "fields": { - "created_at": "2025-03-22T07:32:12.667Z", + "created_at": "2025-06-22T07:32:12.667Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3891,7 +3891,7 @@ "model": "asset.asset", "pk": 175, "fields": { - "created_at": "2025-03-22T07:32:12.688Z", + "created_at": "2025-06-22T07:32:12.688Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3912,7 +3912,7 @@ "model": "asset.asset", "pk": 176, "fields": { - "created_at": "2025-03-22T07:32:12.711Z", + "created_at": "2025-06-22T07:32:12.711Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3933,7 +3933,7 @@ "model": "asset.asset", "pk": 177, "fields": { - "created_at": "2025-03-22T07:32:12.732Z", + "created_at": "2025-06-22T07:32:12.732Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3954,7 +3954,7 @@ "model": "asset.asset", "pk": 178, "fields": { - "created_at": "2025-03-22T07:32:12.753Z", + "created_at": "2025-06-22T07:32:12.753Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3975,7 +3975,7 @@ "model": "asset.asset", "pk": 179, "fields": { - "created_at": "2025-03-22T07:32:12.775Z", + "created_at": "2025-06-22T07:32:12.775Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3996,7 +3996,7 @@ "model": "asset.asset", "pk": 180, "fields": { - "created_at": "2025-03-22T07:32:12.796Z", + "created_at": "2025-06-22T07:32:12.796Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4017,7 +4017,7 @@ "model": "asset.asset", "pk": 181, "fields": { - "created_at": "2025-03-22T07:32:12.821Z", + "created_at": "2025-06-22T07:32:12.821Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4038,7 +4038,7 @@ "model": "asset.asset", "pk": 182, "fields": { - "created_at": "2025-03-22T07:32:12.848Z", + "created_at": "2025-06-22T07:32:12.848Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4059,7 +4059,7 @@ "model": "asset.asset", "pk": 183, "fields": { - "created_at": "2025-03-22T07:32:12.877Z", + "created_at": "2025-06-22T07:32:12.877Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4080,7 +4080,7 @@ "model": "asset.asset", "pk": 184, "fields": { - "created_at": "2025-03-22T07:32:12.911Z", + "created_at": "2025-06-22T07:32:12.911Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4101,7 +4101,7 @@ "model": "asset.asset", "pk": 185, "fields": { - "created_at": "2025-03-22T07:32:12.936Z", + "created_at": "2025-06-22T07:32:12.936Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4122,7 +4122,7 @@ "model": "asset.asset", "pk": 186, "fields": { - "created_at": "2025-03-22T07:32:12.960Z", + "created_at": "2025-06-22T07:32:12.960Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4143,7 +4143,7 @@ "model": "asset.asset", "pk": 187, "fields": { - "created_at": "2025-03-22T07:32:12.979Z", + "created_at": "2025-06-22T07:32:12.979Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4164,7 +4164,7 @@ "model": "asset.asset", "pk": 188, "fields": { - "created_at": "2025-03-22T07:32:12.997Z", + "created_at": "2025-06-22T07:32:12.997Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4185,7 +4185,7 @@ "model": "asset.asset", "pk": 189, "fields": { - "created_at": "2025-03-22T07:32:13.016Z", + "created_at": "2025-06-22T07:32:13.016Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4206,7 +4206,7 @@ "model": "asset.asset", "pk": 190, "fields": { - "created_at": "2025-03-22T07:32:13.036Z", + "created_at": "2025-06-22T07:32:13.036Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4227,7 +4227,7 @@ "model": "asset.asset", "pk": 191, "fields": { - "created_at": "2025-03-22T07:32:13.056Z", + "created_at": "2025-06-22T07:32:13.056Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4248,7 +4248,7 @@ "model": "asset.asset", "pk": 192, "fields": { - "created_at": "2025-03-22T07:32:13.076Z", + "created_at": "2025-06-22T07:32:13.076Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4269,7 +4269,7 @@ "model": "asset.asset", "pk": 193, "fields": { - "created_at": "2025-03-22T07:32:13.097Z", + "created_at": "2025-06-22T07:32:13.097Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4290,13 +4290,13 @@ "model": "asset.assetassignment", "pk": 1, "fields": { - "created_at": "2025-03-24T05:26:59.456Z", + "created_at": "2025-06-24T05:26:59.456Z", "created_by": 1, "modified_by": 1, "is_active": true, "asset_id": 177, "assigned_to_employee_id": 1, - "assigned_date": "2025-03-24", + "assigned_date": "2025-06-24", "assigned_by_employee_id": 1, "return_date": null, "return_condition": null, @@ -4310,15 +4310,15 @@ "model": "asset.assetassignment", "pk": 2, "fields": { - "created_at": "2025-03-24T05:28:20.560Z", + "created_at": "2025-06-24T05:28:20.560Z", "created_by": 1, "modified_by": 1, "is_active": true, "asset_id": 64, "assigned_to_employee_id": 67, - "assigned_date": "2025-03-24", + "assigned_date": "2025-06-24", "assigned_by_employee_id": 1, - "return_date": "2025-03-24", + "return_date": "2025-06-24", "return_condition": "good condition", "return_status": "Healthy", "return_request": false, @@ -4330,13 +4330,13 @@ "model": "asset.assetrequest", "pk": 1, "fields": { - "created_at": "2025-03-24T05:25:00.158Z", + "created_at": "2025-06-24T05:25:00.158Z", "created_by": 1, "modified_by": 1, "is_active": true, "requested_employee_id": 1, "asset_category_id": 1, - "asset_request_date": "2025-03-24", + "asset_request_date": "2025-06-24", "description": "i need a laptop", "asset_request_status": "Requested" } @@ -4345,13 +4345,13 @@ "model": "asset.assetrequest", "pk": 2, "fields": { - "created_at": "2025-03-24T05:25:11.332Z", + "created_at": "2025-06-24T05:25:11.332Z", "created_by": 1, "modified_by": 1, "is_active": true, "requested_employee_id": 12, "asset_category_id": 1, - "asset_request_date": "2025-03-24", + "asset_request_date": "2025-06-24", "description": "i need a laptop", "asset_request_status": "Requested" } @@ -4360,13 +4360,13 @@ "model": "asset.assetrequest", "pk": 3, "fields": { - "created_at": "2025-03-24T05:25:24.608Z", + "created_at": "2025-06-24T05:25:24.608Z", "created_by": 1, "modified_by": 1, "is_active": true, "requested_employee_id": 13, "asset_category_id": 1, - "asset_request_date": "2025-03-24", + "asset_request_date": "2025-06-24", "description": "i need a laptop", "asset_request_status": "Requested" } @@ -4375,13 +4375,13 @@ "model": "asset.assetrequest", "pk": 4, "fields": { - "created_at": "2025-03-24T05:25:37.401Z", + "created_at": "2025-06-24T05:25:37.401Z", "created_by": 1, "modified_by": 1, "is_active": true, "requested_employee_id": 1, "asset_category_id": 7, - "asset_request_date": "2025-03-24", + "asset_request_date": "2025-06-24", "description": "i need a car", "asset_request_status": "Approved" } @@ -4390,13 +4390,13 @@ "model": "asset.assetrequest", "pk": 5, "fields": { - "created_at": "2025-03-24T05:25:57.948Z", + "created_at": "2025-06-24T05:25:57.948Z", "created_by": 1, "modified_by": 1, "is_active": true, "requested_employee_id": 67, "asset_category_id": 2, - "asset_request_date": "2025-03-24", + "asset_request_date": "2025-06-24", "description": "i need a headset", "asset_request_status": "Approved" } diff --git a/load_data/attendance_data.json b/load_data/attendance_data.json index 5e1ec6cec..9ec813f6e 100644 --- a/load_data/attendance_data.json +++ b/load_data/attendance_data.json @@ -3,18 +3,18 @@ "model": "attendance.attendanceactivity", "pk": 2, "fields": { - "created_at": "2025-03-24T04:18:24.094Z", + "created_at": "2025-06-24T04:18:24.094Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-24", + "attendance_date": "2025-06-24", "shift_day": 5, - "in_datetime": "2025-03-24T04:18:24.087Z", - "clock_in_date": "2025-03-24", + "in_datetime": "2025-06-24T04:18:24.087Z", + "clock_in_date": "2025-06-24", "clock_in": "09:48:24.087", - "clock_out_date": "2025-03-24", - "out_datetime": "2025-03-24T04:18:27.833Z", + "clock_out_date": "2025-06-24", + "out_datetime": "2025-06-24T04:18:27.833Z", "clock_out": "09:48:27.833" } }, @@ -22,18 +22,18 @@ "model": "attendance.attendanceactivity", "pk": 3, "fields": { - "created_at": "2025-03-24T04:18:33.000Z", + "created_at": "2025-06-24T04:18:33.000Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-24", + "attendance_date": "2025-06-24", "shift_day": 5, - "in_datetime": "2025-03-24T04:18:32.993Z", - "clock_in_date": "2025-03-24", + "in_datetime": "2025-06-24T04:18:32.993Z", + "clock_in_date": "2025-06-24", "clock_in": "09:48:32.993", - "clock_out_date": "2025-03-27", - "out_datetime": "2025-03-27T03:04:33.483Z", + "clock_out_date": "2025-06-27", + "out_datetime": "2025-06-27T03:04:33.483Z", "clock_out": "08:34:33.483" } }, @@ -41,18 +41,18 @@ "model": "attendance.attendanceactivity", "pk": 4, "fields": { - "created_at": "2025-03-21T10:18:07.877Z", + "created_at": "2025-06-21T10:18:07.877Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_day": 3, - "in_datetime": "2025-03-21T10:18:07.794Z", - "clock_in_date": "2025-03-21", + "in_datetime": "2025-06-21T10:18:07.794Z", + "clock_in_date": "2025-06-21", "clock_in": "15:48:07.794", - "clock_out_date": "2025-03-26", - "out_datetime": "2025-03-26T09:40:13.899Z", + "clock_out_date": "2025-06-26", + "out_datetime": "2025-06-26T09:40:13.899Z", "clock_out": "15:10:13.899" } }, @@ -60,18 +60,18 @@ "model": "attendance.attendanceactivity", "pk": 5, "fields": { - "created_at": "2025-03-26T09:40:17.533Z", + "created_at": "2025-06-26T09:40:17.533Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-26", + "attendance_date": "2025-06-26", "shift_day": 1, - "in_datetime": "2025-03-26T09:40:17.451Z", - "clock_in_date": "2025-03-26", + "in_datetime": "2025-06-26T09:40:17.451Z", + "clock_in_date": "2025-06-26", "clock_in": "15:10:17.451", - "clock_out_date": "2025-03-26", - "out_datetime": "2025-03-26T10:45:17.451Z", + "clock_out_date": "2025-06-26", + "out_datetime": "2025-06-26T10:45:17.451Z", "clock_out": "16:15:17.451" } }, @@ -79,18 +79,18 @@ "model": "attendance.attendance", "pk": 1, "fields": { - "created_at": "2025-03-22T08:43:57.176Z", + "created_at": "2025-06-22T08:43:57.176Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-22", + "attendance_date": "2025-06-22", "shift_id": 1, "work_type_id": null, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-22", + "attendance_clock_in_date": "2025-06-22", "attendance_clock_in": "14:13:00", - "attendance_clock_out_date": "2025-03-23", + "attendance_clock_out_date": "2025-06-23", "attendance_clock_out": "08:41:00", "attendance_worked_hour": "18:27", "minimum_hour": "08:15", @@ -113,18 +113,18 @@ "model": "attendance.attendance", "pk": 188, "fields": { - "created_at": "2025-03-24T04:02:59.427Z", + "created_at": "2025-06-24T04:02:59.427Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 50, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -147,18 +147,18 @@ "model": "attendance.attendance", "pk": 189, "fields": { - "created_at": "2025-03-24T04:02:59.676Z", + "created_at": "2025-06-24T04:02:59.676Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 9, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 2, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -181,18 +181,18 @@ "model": "attendance.attendance", "pk": 190, "fields": { - "created_at": "2025-03-24T04:02:59.945Z", + "created_at": "2025-06-24T04:02:59.945Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 48, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "09:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -215,18 +215,18 @@ "model": "attendance.attendance", "pk": 191, "fields": { - "created_at": "2025-03-24T04:03:00.209Z", + "created_at": "2025-06-24T04:03:00.209Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 55, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -249,18 +249,18 @@ "model": "attendance.attendance", "pk": 192, "fields": { - "created_at": "2025-03-24T04:03:00.391Z", + "created_at": "2025-06-24T04:03:00.391Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 7, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -283,18 +283,18 @@ "model": "attendance.attendance", "pk": 193, "fields": { - "created_at": "2025-03-24T04:03:00.614Z", + "created_at": "2025-06-24T04:03:00.614Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 15, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -317,18 +317,18 @@ "model": "attendance.attendance", "pk": 194, "fields": { - "created_at": "2025-03-24T04:03:00.859Z", + "created_at": "2025-06-24T04:03:00.859Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 31, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 2, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -351,18 +351,18 @@ "model": "attendance.attendance", "pk": 195, "fields": { - "created_at": "2025-03-24T04:03:01.077Z", + "created_at": "2025-06-24T04:03:01.077Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 6, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 2, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -385,18 +385,18 @@ "model": "attendance.attendance", "pk": 196, "fields": { - "created_at": "2025-03-24T04:03:01.241Z", + "created_at": "2025-06-24T04:03:01.241Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 43, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -419,18 +419,18 @@ "model": "attendance.attendance", "pk": 197, "fields": { - "created_at": "2025-03-24T04:03:01.554Z", + "created_at": "2025-06-24T04:03:01.554Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 29, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 2, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -453,18 +453,18 @@ "model": "attendance.attendance", "pk": 198, "fields": { - "created_at": "2025-03-24T04:03:01.888Z", + "created_at": "2025-06-24T04:03:01.888Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 51, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -487,18 +487,18 @@ "model": "attendance.attendance", "pk": 199, "fields": { - "created_at": "2025-03-24T04:03:02.111Z", + "created_at": "2025-06-24T04:03:02.111Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 19, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -521,18 +521,18 @@ "model": "attendance.attendance", "pk": 200, "fields": { - "created_at": "2025-03-24T04:03:02.361Z", + "created_at": "2025-06-24T04:03:02.361Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 4, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -555,18 +555,18 @@ "model": "attendance.attendance", "pk": 201, "fields": { - "created_at": "2025-03-24T04:03:02.583Z", + "created_at": "2025-06-24T04:03:02.583Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 40, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -589,18 +589,18 @@ "model": "attendance.attendance", "pk": 202, "fields": { - "created_at": "2025-03-24T04:03:02.781Z", + "created_at": "2025-06-24T04:03:02.781Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 53, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -623,18 +623,18 @@ "model": "attendance.attendance", "pk": 203, "fields": { - "created_at": "2025-03-24T04:03:02.998Z", + "created_at": "2025-06-24T04:03:02.998Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 40, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -657,18 +657,18 @@ "model": "attendance.attendance", "pk": 204, "fields": { - "created_at": "2025-03-24T04:03:03.237Z", + "created_at": "2025-06-24T04:03:03.237Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 25, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -691,18 +691,18 @@ "model": "attendance.attendance", "pk": 205, "fields": { - "created_at": "2025-03-24T04:03:03.392Z", + "created_at": "2025-06-24T04:03:03.392Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 39, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -725,18 +725,18 @@ "model": "attendance.attendance", "pk": 206, "fields": { - "created_at": "2025-03-24T04:03:03.691Z", + "created_at": "2025-06-24T04:03:03.691Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 28, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -759,18 +759,18 @@ "model": "attendance.attendance", "pk": 207, "fields": { - "created_at": "2025-03-24T04:03:03.905Z", + "created_at": "2025-06-24T04:03:03.905Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 60, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -793,18 +793,18 @@ "model": "attendance.attendance", "pk": 208, "fields": { - "created_at": "2025-03-24T04:03:04.158Z", + "created_at": "2025-06-24T04:03:04.158Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 58, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -827,18 +827,18 @@ "model": "attendance.attendance", "pk": 209, "fields": { - "created_at": "2025-03-24T04:03:04.437Z", + "created_at": "2025-06-24T04:03:04.437Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 37, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -861,18 +861,18 @@ "model": "attendance.attendance", "pk": 210, "fields": { - "created_at": "2025-03-24T04:03:04.666Z", + "created_at": "2025-06-24T04:03:04.666Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 73, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -895,18 +895,18 @@ "model": "attendance.attendance", "pk": 211, "fields": { - "created_at": "2025-03-24T04:03:04.858Z", + "created_at": "2025-06-24T04:03:04.858Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 25, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -929,18 +929,18 @@ "model": "attendance.attendance", "pk": 212, "fields": { - "created_at": "2025-03-24T04:03:05.177Z", + "created_at": "2025-06-24T04:03:05.177Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 20, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -963,18 +963,18 @@ "model": "attendance.attendance", "pk": 213, "fields": { - "created_at": "2025-03-24T04:03:05.391Z", + "created_at": "2025-06-24T04:03:05.391Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 7, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -997,18 +997,18 @@ "model": "attendance.attendance", "pk": 214, "fields": { - "created_at": "2025-03-24T04:03:05.672Z", + "created_at": "2025-06-24T04:03:05.672Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 66, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 2, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1031,18 +1031,18 @@ "model": "attendance.attendance", "pk": 215, "fields": { - "created_at": "2025-03-24T04:03:05.975Z", + "created_at": "2025-06-24T04:03:05.975Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 26, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1065,18 +1065,18 @@ "model": "attendance.attendance", "pk": 216, "fields": { - "created_at": "2025-03-24T04:03:06.229Z", + "created_at": "2025-06-24T04:03:06.229Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 38, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1099,18 +1099,18 @@ "model": "attendance.attendance", "pk": 217, "fields": { - "created_at": "2025-03-24T04:03:06.444Z", + "created_at": "2025-06-24T04:03:06.444Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 71, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1133,18 +1133,18 @@ "model": "attendance.attendance", "pk": 218, "fields": { - "created_at": "2025-03-24T04:03:06.690Z", + "created_at": "2025-06-24T04:03:06.690Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 63, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -1167,18 +1167,18 @@ "model": "attendance.attendance", "pk": 219, "fields": { - "created_at": "2025-03-24T04:03:06.925Z", + "created_at": "2025-06-24T04:03:06.925Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 41, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1201,18 +1201,18 @@ "model": "attendance.attendance", "pk": 220, "fields": { - "created_at": "2025-03-24T04:03:07.150Z", + "created_at": "2025-06-24T04:03:07.150Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 56, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1235,18 +1235,18 @@ "model": "attendance.attendance", "pk": 221, "fields": { - "created_at": "2025-03-24T04:03:07.403Z", + "created_at": "2025-06-24T04:03:07.403Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 59, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1269,18 +1269,18 @@ "model": "attendance.attendance", "pk": 222, "fields": { - "created_at": "2025-03-24T04:03:07.711Z", + "created_at": "2025-06-24T04:03:07.711Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 15, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 3, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1303,18 +1303,18 @@ "model": "attendance.attendance", "pk": 223, "fields": { - "created_at": "2025-03-24T04:03:07.959Z", + "created_at": "2025-06-24T04:03:07.959Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 11, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -1337,18 +1337,18 @@ "model": "attendance.attendance", "pk": 224, "fields": { - "created_at": "2025-03-24T04:03:08.160Z", + "created_at": "2025-06-24T04:03:08.160Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 22, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1371,18 +1371,18 @@ "model": "attendance.attendance", "pk": 225, "fields": { - "created_at": "2025-03-24T04:03:08.438Z", + "created_at": "2025-06-24T04:03:08.438Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 57, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1398,25 +1398,25 @@ "request_description": "mked", "request_type": "update_request", "is_holiday": false, - "requested_data": "{\"employee_id\": \"57\", \"attendance_date\": \"2025-03-14\", \"attendance_clock_in_date\": \"2025-03-14\", \"attendance_clock_in\": \"08:30:00\", \"attendance_clock_out\": \"18:00:00\", \"attendance_clock_out_date\": \"2025-03-14\", \"shift_id\": \"1\", \"work_type_id\": \"2\", \"attendance_worked_hour\": \"08:45\", \"minimum_hour\": \"08:15\"}" + "requested_data": "{\"employee_id\": \"57\", \"attendance_date\": \"2025-06-14\", \"attendance_clock_in_date\": \"2025-06-14\", \"attendance_clock_in\": \"08:30:00\", \"attendance_clock_out\": \"18:00:00\", \"attendance_clock_out_date\": \"2025-06-14\", \"shift_id\": \"1\", \"work_type_id\": \"2\", \"attendance_worked_hour\": \"08:45\", \"minimum_hour\": \"08:15\"}" } }, { "model": "attendance.attendance", "pk": 226, "fields": { - "created_at": "2025-03-24T04:03:08.681Z", + "created_at": "2025-06-24T04:03:08.681Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 23, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1439,18 +1439,18 @@ "model": "attendance.attendance", "pk": 227, "fields": { - "created_at": "2025-03-24T04:03:08.905Z", + "created_at": "2025-06-24T04:03:08.905Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 47, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1473,18 +1473,18 @@ "model": "attendance.attendance", "pk": 228, "fields": { - "created_at": "2025-03-24T04:03:09.121Z", + "created_at": "2025-06-24T04:03:09.121Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 59, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -1507,18 +1507,18 @@ "model": "attendance.attendance", "pk": 229, "fields": { - "created_at": "2025-03-24T04:03:09.366Z", + "created_at": "2025-06-24T04:03:09.366Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 64, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1541,18 +1541,18 @@ "model": "attendance.attendance", "pk": 230, "fields": { - "created_at": "2025-03-24T04:03:09.597Z", + "created_at": "2025-06-24T04:03:09.597Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 12, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1575,18 +1575,18 @@ "model": "attendance.attendance", "pk": 231, "fields": { - "created_at": "2025-03-24T04:03:09.838Z", + "created_at": "2025-06-24T04:03:09.838Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 74, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1609,18 +1609,18 @@ "model": "attendance.attendance", "pk": 232, "fields": { - "created_at": "2025-03-24T04:03:10.111Z", + "created_at": "2025-06-24T04:03:10.111Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 3, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1643,18 +1643,18 @@ "model": "attendance.attendance", "pk": 233, "fields": { - "created_at": "2025-03-24T04:03:10.387Z", + "created_at": "2025-06-24T04:03:10.387Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 36, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -1677,18 +1677,18 @@ "model": "attendance.attendance", "pk": 234, "fields": { - "created_at": "2025-03-24T04:03:10.614Z", + "created_at": "2025-06-24T04:03:10.614Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 56, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 3, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1711,18 +1711,18 @@ "model": "attendance.attendance", "pk": 235, "fields": { - "created_at": "2025-03-24T04:03:10.865Z", + "created_at": "2025-06-24T04:03:10.865Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 16, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1745,18 +1745,18 @@ "model": "attendance.attendance", "pk": 236, "fields": { - "created_at": "2025-03-24T04:03:11.081Z", + "created_at": "2025-06-24T04:03:11.081Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 2, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1779,18 +1779,18 @@ "model": "attendance.attendance", "pk": 237, "fields": { - "created_at": "2025-03-24T04:03:11.295Z", + "created_at": "2025-06-24T04:03:11.295Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 33, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1813,18 +1813,18 @@ "model": "attendance.attendance", "pk": 238, "fields": { - "created_at": "2025-03-24T04:03:11.477Z", + "created_at": "2025-06-24T04:03:11.477Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 9, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -1847,18 +1847,18 @@ "model": "attendance.attendance", "pk": 239, "fields": { - "created_at": "2025-03-24T04:03:11.737Z", + "created_at": "2025-06-24T04:03:11.737Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 13, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 3, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -1881,18 +1881,18 @@ "model": "attendance.attendance", "pk": 240, "fields": { - "created_at": "2025-03-24T04:03:12.079Z", + "created_at": "2025-06-24T04:03:12.079Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 18, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -1915,18 +1915,18 @@ "model": "attendance.attendance", "pk": 241, "fields": { - "created_at": "2025-03-24T04:03:12.288Z", + "created_at": "2025-06-24T04:03:12.288Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 76, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -1949,18 +1949,18 @@ "model": "attendance.attendance", "pk": 242, "fields": { - "created_at": "2025-03-24T04:03:12.455Z", + "created_at": "2025-06-24T04:03:12.455Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 14, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -1983,18 +1983,18 @@ "model": "attendance.attendance", "pk": 243, "fields": { - "created_at": "2025-03-24T04:03:12.705Z", + "created_at": "2025-06-24T04:03:12.705Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 6, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2017,18 +2017,18 @@ "model": "attendance.attendance", "pk": 244, "fields": { - "created_at": "2025-03-24T04:03:12.986Z", + "created_at": "2025-06-24T04:03:12.986Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 62, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -2051,18 +2051,18 @@ "model": "attendance.attendance", "pk": 245, "fields": { - "created_at": "2025-03-24T04:03:13.243Z", + "created_at": "2025-06-24T04:03:13.243Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 44, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 3, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2085,18 +2085,18 @@ "model": "attendance.attendance", "pk": 246, "fields": { - "created_at": "2025-03-24T04:03:13.445Z", + "created_at": "2025-06-24T04:03:13.445Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 32, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 2, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2119,18 +2119,18 @@ "model": "attendance.attendance", "pk": 247, "fields": { - "created_at": "2025-03-24T04:03:13.694Z", + "created_at": "2025-06-24T04:03:13.694Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 52, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -2153,18 +2153,18 @@ "model": "attendance.attendance", "pk": 248, "fields": { - "created_at": "2025-03-24T04:03:13.923Z", + "created_at": "2025-06-24T04:03:13.923Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 67, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2187,18 +2187,18 @@ "model": "attendance.attendance", "pk": 249, "fields": { - "created_at": "2025-03-24T04:03:14.190Z", + "created_at": "2025-06-24T04:03:14.190Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 8, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2221,18 +2221,18 @@ "model": "attendance.attendance", "pk": 250, "fields": { - "created_at": "2025-03-24T04:03:14.448Z", + "created_at": "2025-06-24T04:03:14.448Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 69, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2255,18 +2255,18 @@ "model": "attendance.attendance", "pk": 251, "fields": { - "created_at": "2025-03-24T04:03:14.727Z", + "created_at": "2025-06-24T04:03:14.727Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 54, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -2289,18 +2289,18 @@ "model": "attendance.attendance", "pk": 252, "fields": { - "created_at": "2025-03-24T04:03:14.974Z", + "created_at": "2025-06-24T04:03:14.974Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 24, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2323,18 +2323,18 @@ "model": "attendance.attendance", "pk": 253, "fields": { - "created_at": "2025-03-24T04:03:15.458Z", + "created_at": "2025-06-24T04:03:15.458Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 75, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -2357,18 +2357,18 @@ "model": "attendance.attendance", "pk": 254, "fields": { - "created_at": "2025-03-24T04:03:15.798Z", + "created_at": "2025-06-24T04:03:15.798Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 17, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2391,18 +2391,18 @@ "model": "attendance.attendance", "pk": 255, "fields": { - "created_at": "2025-03-24T04:03:16.100Z", + "created_at": "2025-06-24T04:03:16.100Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 58, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2425,18 +2425,18 @@ "model": "attendance.attendance", "pk": 256, "fields": { - "created_at": "2025-03-24T04:03:16.366Z", + "created_at": "2025-06-24T04:03:16.366Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 34, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -2459,18 +2459,18 @@ "model": "attendance.attendance", "pk": 257, "fields": { - "created_at": "2025-03-24T04:03:16.607Z", + "created_at": "2025-06-24T04:03:16.607Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 72, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2493,18 +2493,18 @@ "model": "attendance.attendance", "pk": 258, "fields": { - "created_at": "2025-03-24T04:03:16.859Z", + "created_at": "2025-06-24T04:03:16.859Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 32, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -2527,18 +2527,18 @@ "model": "attendance.attendance", "pk": 259, "fields": { - "created_at": "2025-03-24T04:03:17.091Z", + "created_at": "2025-06-24T04:03:17.091Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 44, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2561,18 +2561,18 @@ "model": "attendance.attendance", "pk": 260, "fields": { - "created_at": "2025-03-24T04:03:17.357Z", + "created_at": "2025-06-24T04:03:17.357Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 42, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -2595,18 +2595,18 @@ "model": "attendance.attendance", "pk": 261, "fields": { - "created_at": "2025-03-24T04:03:17.586Z", + "created_at": "2025-06-24T04:03:17.586Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 68, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2629,18 +2629,18 @@ "model": "attendance.attendance", "pk": 262, "fields": { - "created_at": "2025-03-24T04:03:17.807Z", + "created_at": "2025-06-24T04:03:17.807Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 29, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -2663,18 +2663,18 @@ "model": "attendance.attendance", "pk": 263, "fields": { - "created_at": "2025-03-24T04:03:18.011Z", + "created_at": "2025-06-24T04:03:18.011Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 20, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 3, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2697,18 +2697,18 @@ "model": "attendance.attendance", "pk": 264, "fields": { - "created_at": "2025-03-24T04:03:18.228Z", + "created_at": "2025-06-24T04:03:18.228Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 46, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2731,18 +2731,18 @@ "model": "attendance.attendance", "pk": 265, "fields": { - "created_at": "2025-03-24T04:03:18.443Z", + "created_at": "2025-06-24T04:03:18.443Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 35, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -2765,18 +2765,18 @@ "model": "attendance.attendance", "pk": 266, "fields": { - "created_at": "2025-03-24T04:03:18.658Z", + "created_at": "2025-06-24T04:03:18.658Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 70, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2799,18 +2799,18 @@ "model": "attendance.attendance", "pk": 267, "fields": { - "created_at": "2025-03-24T04:03:18.961Z", + "created_at": "2025-06-24T04:03:18.961Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 27, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2833,18 +2833,18 @@ "model": "attendance.attendance", "pk": 268, "fields": { - "created_at": "2025-03-24T04:03:19.374Z", + "created_at": "2025-06-24T04:03:19.374Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 65, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 2, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -2867,18 +2867,18 @@ "model": "attendance.attendance", "pk": 269, "fields": { - "created_at": "2025-03-24T04:03:19.640Z", + "created_at": "2025-06-24T04:03:19.640Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 30, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -2901,18 +2901,18 @@ "model": "attendance.attendance", "pk": 270, "fields": { - "created_at": "2025-03-24T04:03:19.860Z", + "created_at": "2025-06-24T04:03:19.860Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 13, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -2935,18 +2935,18 @@ "model": "attendance.attendance", "pk": 271, "fields": { - "created_at": "2025-03-24T04:03:20.132Z", + "created_at": "2025-06-24T04:03:20.132Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 29, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 1, "attendance_day": 3, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -2969,18 +2969,18 @@ "model": "attendance.attendance", "pk": 272, "fields": { - "created_at": "2025-03-24T04:03:20.373Z", + "created_at": "2025-06-24T04:03:20.373Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 5, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -3003,18 +3003,18 @@ "model": "attendance.attendance", "pk": 273, "fields": { - "created_at": "2025-03-24T04:03:20.580Z", + "created_at": "2025-06-24T04:03:20.580Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 10, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -3037,18 +3037,18 @@ "model": "attendance.attendance", "pk": 274, "fields": { - "created_at": "2025-03-24T04:03:20.788Z", + "created_at": "2025-06-24T04:03:20.788Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 53, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 2, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -3071,18 +3071,18 @@ "model": "attendance.attendance", "pk": 275, "fields": { - "created_at": "2025-03-24T04:03:21.021Z", + "created_at": "2025-06-24T04:03:21.021Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 66, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 3, "work_type_id": 1, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -3105,18 +3105,18 @@ "model": "attendance.attendance", "pk": 276, "fields": { - "created_at": "2025-03-24T04:03:21.290Z", + "created_at": "2025-06-24T04:03:21.290Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 21, - "attendance_date": "2025-03-13", + "attendance_date": "2025-06-13", "shift_id": 1, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-13", + "attendance_clock_in_date": "2025-06-13", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-13", + "attendance_clock_out_date": "2025-06-13", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "08:15", @@ -3139,18 +3139,18 @@ "model": "attendance.attendance", "pk": 277, "fields": { - "created_at": "2025-03-24T04:03:21.548Z", + "created_at": "2025-06-24T04:03:21.548Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 46, - "attendance_date": "2025-03-21", + "attendance_date": "2025-06-21", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-21", + "attendance_clock_in_date": "2025-06-21", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-21", + "attendance_clock_out_date": "2025-06-21", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "08:15", @@ -3173,18 +3173,18 @@ "model": "attendance.attendance", "pk": 278, "fields": { - "created_at": "2025-03-24T04:03:21.871Z", + "created_at": "2025-06-24T04:03:21.871Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 15, - "attendance_date": "2025-03-01", + "attendance_date": "2025-06-01", "shift_id": 2, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-01", + "attendance_clock_in_date": "2025-06-01", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-01", + "attendance_clock_out_date": "2025-06-01", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "08:15", @@ -3207,18 +3207,18 @@ "model": "attendance.attendance", "pk": 279, "fields": { - "created_at": "2025-03-24T04:03:22.121Z", + "created_at": "2025-06-24T04:03:22.121Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 10, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 3, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "00:00", @@ -3241,18 +3241,18 @@ "model": "attendance.attendance", "pk": 280, "fields": { - "created_at": "2025-03-24T04:03:22.307Z", + "created_at": "2025-06-24T04:03:22.307Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 36, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 1, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "08:15", @@ -3275,18 +3275,18 @@ "model": "attendance.attendance", "pk": 281, "fields": { - "created_at": "2025-03-24T04:03:22.595Z", + "created_at": "2025-06-24T04:03:22.595Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 35, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "00:00", @@ -3309,18 +3309,18 @@ "model": "attendance.attendance", "pk": 282, "fields": { - "created_at": "2025-03-24T04:03:22.934Z", + "created_at": "2025-06-24T04:03:22.934Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 31, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "18:00:00", "attendance_worked_hour": "08:45", "minimum_hour": "00:00", @@ -3343,18 +3343,18 @@ "model": "attendance.attendance", "pk": 283, "fields": { - "created_at": "2025-03-24T04:03:23.280Z", + "created_at": "2025-06-24T04:03:23.280Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 38, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 2, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "00:00", @@ -3377,18 +3377,18 @@ "model": "attendance.attendance", "pk": 284, "fields": { - "created_at": "2025-03-24T04:03:23.555Z", + "created_at": "2025-06-24T04:03:23.555Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 65, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 2, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "00:00", @@ -3411,18 +3411,18 @@ "model": "attendance.attendance", "pk": 285, "fields": { - "created_at": "2025-03-24T04:03:23.827Z", + "created_at": "2025-06-24T04:03:23.827Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 13, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 1, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "19:00:00", "attendance_worked_hour": "10:15", "minimum_hour": "08:15", @@ -3445,18 +3445,18 @@ "model": "attendance.attendance", "pk": 286, "fields": { - "created_at": "2025-03-24T04:03:24.111Z", + "created_at": "2025-06-24T04:03:24.111Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 5, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "17:30:00", "attendance_worked_hour": "08:15", "minimum_hour": "00:00", @@ -3479,18 +3479,18 @@ "model": "attendance.attendance", "pk": 287, "fields": { - "created_at": "2025-03-24T04:03:24.474Z", + "created_at": "2025-06-24T04:03:24.474Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 69, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 2, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "19:30:00", "attendance_worked_hour": "10:45", "minimum_hour": "00:00", @@ -3513,18 +3513,18 @@ "model": "attendance.attendance", "pk": 288, "fields": { - "created_at": "2025-03-24T04:03:24.767Z", + "created_at": "2025-06-24T04:03:24.767Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 46, - "attendance_date": "2025-03-14", + "attendance_date": "2025-06-14", "shift_id": 1, "work_type_id": 2, "attendance_day": 7, - "attendance_clock_in_date": "2025-03-14", + "attendance_clock_in_date": "2025-06-14", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-14", + "attendance_clock_out_date": "2025-06-14", "attendance_clock_out": "18:30:00", "attendance_worked_hour": "09:15", "minimum_hour": "00:00", @@ -3547,18 +3547,18 @@ "model": "attendance.attendance", "pk": 289, "fields": { - "created_at": "2025-03-24T04:03:25.090Z", + "created_at": "2025-06-24T04:03:25.090Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 5, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 2, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3581,18 +3581,18 @@ "model": "attendance.attendance", "pk": 290, "fields": { - "created_at": "2025-03-24T04:03:25.323Z", + "created_at": "2025-06-24T04:03:25.323Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 10, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3615,18 +3615,18 @@ "model": "attendance.attendance", "pk": 291, "fields": { - "created_at": "2025-03-24T04:03:25.549Z", + "created_at": "2025-06-24T04:03:25.549Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 39, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 2, "work_type_id": 2, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3649,18 +3649,18 @@ "model": "attendance.attendance", "pk": 292, "fields": { - "created_at": "2025-03-24T04:03:25.950Z", + "created_at": "2025-06-24T04:03:25.950Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 7, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 3, "work_type_id": 1, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3683,18 +3683,18 @@ "model": "attendance.attendance", "pk": 293, "fields": { - "created_at": "2025-03-24T04:03:26.261Z", + "created_at": "2025-06-24T04:03:26.261Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 17, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 2, "work_type_id": 2, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3717,18 +3717,18 @@ "model": "attendance.attendance", "pk": 294, "fields": { - "created_at": "2025-03-24T04:03:26.501Z", + "created_at": "2025-06-24T04:03:26.501Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 21, - "attendance_date": "2025-03-15", + "attendance_date": "2025-06-15", "shift_id": 1, "work_type_id": 1, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-15", + "attendance_clock_in_date": "2025-06-15", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-15", + "attendance_clock_out_date": "2025-06-15", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3751,18 +3751,18 @@ "model": "attendance.attendance", "pk": 295, "fields": { - "created_at": "2025-03-24T04:03:26.802Z", + "created_at": "2025-06-24T04:03:26.802Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 46, - "attendance_date": "2025-03-24", + "attendance_date": "2025-06-24", "shift_id": 1, "work_type_id": 2, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-24", + "attendance_clock_in_date": "2025-06-24", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-24", + "attendance_clock_out_date": "2025-06-24", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3785,18 +3785,18 @@ "model": "attendance.attendance", "pk": 296, "fields": { - "created_at": "2025-03-24T04:03:27.028Z", + "created_at": "2025-06-24T04:03:27.028Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 2, - "attendance_date": "2025-03-24", + "attendance_date": "2025-06-24", "shift_id": 2, "work_type_id": 1, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-24", + "attendance_clock_in_date": "2025-06-24", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-24", + "attendance_clock_out_date": "2025-06-24", "attendance_clock_out": "15:00:00", "attendance_worked_hour": "07:30", "minimum_hour": "08:15", @@ -3819,18 +3819,18 @@ "model": "attendance.attendance", "pk": 297, "fields": { - "created_at": "2025-03-24T04:12:52.800Z", + "created_at": "2025-06-24T04:12:52.800Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 75, - "attendance_date": "2025-03-03", + "attendance_date": "2025-06-03", "shift_id": 1, "work_type_id": 2, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-03", + "attendance_clock_in_date": "2025-06-03", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-03", + "attendance_clock_out_date": "2025-06-03", "attendance_clock_out": "17:41:00", "attendance_worked_hour": "08:30", "minimum_hour": "08:15", @@ -3853,18 +3853,18 @@ "model": "attendance.attendance", "pk": 298, "fields": { - "created_at": "2025-03-24T04:14:09.931Z", + "created_at": "2025-06-24T04:14:09.931Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 20, - "attendance_date": "2025-03-07", + "attendance_date": "2025-06-07", "shift_id": 1, "work_type_id": 2, "attendance_day": 2, - "attendance_clock_in_date": "2025-03-07", + "attendance_clock_in_date": "2025-06-07", "attendance_clock_in": "08:30:00", - "attendance_clock_out_date": "2025-03-07", + "attendance_clock_out_date": "2025-06-07", "attendance_clock_out": "17:47:00", "attendance_worked_hour": "08:30", "minimum_hour": "08:15", @@ -3887,18 +3887,18 @@ "model": "attendance.attendance", "pk": 299, "fields": { - "created_at": "2025-03-24T04:18:24.120Z", + "created_at": "2025-06-24T04:18:24.120Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, - "attendance_date": "2025-03-24", + "attendance_date": "2025-06-24", "shift_id": 1, "work_type_id": null, "attendance_day": 5, - "attendance_clock_in_date": "2025-03-24", + "attendance_clock_in_date": "2025-06-24", "attendance_clock_in": "09:48:00", - "attendance_clock_out_date": "2025-03-27", + "attendance_clock_out_date": "2025-06-27", "attendance_clock_out": "08:34:00", "attendance_worked_hour": "70:46", "minimum_hour": "08:15", @@ -3921,7 +3921,7 @@ "model": "attendance.attendanceovertime", "pk": 1, "fields": { - "created_at": "2025-03-22T08:43:57.300Z", + "created_at": "2025-06-22T08:43:57.300Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3941,7 +3941,7 @@ "model": "attendance.attendanceovertime", "pk": 2, "fields": { - "created_at": "2025-03-24T03:45:38.410Z", + "created_at": "2025-06-24T03:45:38.410Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3961,7 +3961,7 @@ "model": "attendance.attendanceovertime", "pk": 3, "fields": { - "created_at": "2025-03-24T03:45:38.628Z", + "created_at": "2025-06-24T03:45:38.628Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3981,7 +3981,7 @@ "model": "attendance.attendanceovertime", "pk": 4, "fields": { - "created_at": "2025-03-24T03:45:38.751Z", + "created_at": "2025-06-24T03:45:38.751Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4001,7 +4001,7 @@ "model": "attendance.attendanceovertime", "pk": 5, "fields": { - "created_at": "2025-03-24T03:45:39.017Z", + "created_at": "2025-06-24T03:45:39.017Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4021,7 +4021,7 @@ "model": "attendance.attendanceovertime", "pk": 6, "fields": { - "created_at": "2025-03-24T03:45:39.235Z", + "created_at": "2025-06-24T03:45:39.235Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4041,7 +4041,7 @@ "model": "attendance.attendanceovertime", "pk": 7, "fields": { - "created_at": "2025-03-24T03:45:39.506Z", + "created_at": "2025-06-24T03:45:39.506Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4061,7 +4061,7 @@ "model": "attendance.attendanceovertime", "pk": 8, "fields": { - "created_at": "2025-03-24T03:45:39.771Z", + "created_at": "2025-06-24T03:45:39.771Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4081,7 +4081,7 @@ "model": "attendance.attendanceovertime", "pk": 9, "fields": { - "created_at": "2025-03-24T03:45:40.025Z", + "created_at": "2025-06-24T03:45:40.025Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4101,7 +4101,7 @@ "model": "attendance.attendanceovertime", "pk": 10, "fields": { - "created_at": "2025-03-24T03:45:40.247Z", + "created_at": "2025-06-24T03:45:40.247Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4121,7 +4121,7 @@ "model": "attendance.attendanceovertime", "pk": 11, "fields": { - "created_at": "2025-03-24T03:45:40.470Z", + "created_at": "2025-06-24T03:45:40.470Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4141,7 +4141,7 @@ "model": "attendance.attendanceovertime", "pk": 12, "fields": { - "created_at": "2025-03-24T03:45:40.687Z", + "created_at": "2025-06-24T03:45:40.687Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4161,7 +4161,7 @@ "model": "attendance.attendanceovertime", "pk": 13, "fields": { - "created_at": "2025-03-24T03:45:40.979Z", + "created_at": "2025-06-24T03:45:40.979Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4181,7 +4181,7 @@ "model": "attendance.attendanceovertime", "pk": 14, "fields": { - "created_at": "2025-03-24T03:45:41.207Z", + "created_at": "2025-06-24T03:45:41.207Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4201,7 +4201,7 @@ "model": "attendance.attendanceovertime", "pk": 15, "fields": { - "created_at": "2025-03-24T03:45:41.459Z", + "created_at": "2025-06-24T03:45:41.459Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4221,7 +4221,7 @@ "model": "attendance.attendanceovertime", "pk": 16, "fields": { - "created_at": "2025-03-24T03:45:41.679Z", + "created_at": "2025-06-24T03:45:41.679Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4241,7 +4241,7 @@ "model": "attendance.attendanceovertime", "pk": 17, "fields": { - "created_at": "2025-03-24T03:45:41.974Z", + "created_at": "2025-06-24T03:45:41.974Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4261,7 +4261,7 @@ "model": "attendance.attendanceovertime", "pk": 18, "fields": { - "created_at": "2025-03-24T03:45:42.217Z", + "created_at": "2025-06-24T03:45:42.217Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4281,7 +4281,7 @@ "model": "attendance.attendanceovertime", "pk": 19, "fields": { - "created_at": "2025-03-24T03:45:42.478Z", + "created_at": "2025-06-24T03:45:42.478Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4301,7 +4301,7 @@ "model": "attendance.attendanceovertime", "pk": 20, "fields": { - "created_at": "2025-03-24T03:45:42.704Z", + "created_at": "2025-06-24T03:45:42.704Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4321,7 +4321,7 @@ "model": "attendance.attendanceovertime", "pk": 21, "fields": { - "created_at": "2025-03-24T03:45:42.929Z", + "created_at": "2025-06-24T03:45:42.929Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4341,7 +4341,7 @@ "model": "attendance.attendanceovertime", "pk": 22, "fields": { - "created_at": "2025-03-24T03:45:43.131Z", + "created_at": "2025-06-24T03:45:43.131Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4361,7 +4361,7 @@ "model": "attendance.attendanceovertime", "pk": 23, "fields": { - "created_at": "2025-03-24T03:45:43.359Z", + "created_at": "2025-06-24T03:45:43.359Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4381,7 +4381,7 @@ "model": "attendance.attendanceovertime", "pk": 24, "fields": { - "created_at": "2025-03-24T03:45:43.561Z", + "created_at": "2025-06-24T03:45:43.561Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4401,7 +4401,7 @@ "model": "attendance.attendanceovertime", "pk": 25, "fields": { - "created_at": "2025-03-24T03:45:43.768Z", + "created_at": "2025-06-24T03:45:43.768Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4421,7 +4421,7 @@ "model": "attendance.attendanceovertime", "pk": 26, "fields": { - "created_at": "2025-03-24T03:45:43.992Z", + "created_at": "2025-06-24T03:45:43.992Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4441,7 +4441,7 @@ "model": "attendance.attendanceovertime", "pk": 27, "fields": { - "created_at": "2025-03-24T03:45:44.250Z", + "created_at": "2025-06-24T03:45:44.250Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4461,7 +4461,7 @@ "model": "attendance.attendanceovertime", "pk": 28, "fields": { - "created_at": "2025-03-24T03:45:44.500Z", + "created_at": "2025-06-24T03:45:44.500Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4481,7 +4481,7 @@ "model": "attendance.attendanceovertime", "pk": 29, "fields": { - "created_at": "2025-03-24T03:45:44.714Z", + "created_at": "2025-06-24T03:45:44.714Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4501,7 +4501,7 @@ "model": "attendance.attendanceovertime", "pk": 30, "fields": { - "created_at": "2025-03-24T03:45:44.962Z", + "created_at": "2025-06-24T03:45:44.962Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4521,7 +4521,7 @@ "model": "attendance.attendanceovertime", "pk": 31, "fields": { - "created_at": "2025-03-24T03:45:45.177Z", + "created_at": "2025-06-24T03:45:45.177Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4541,7 +4541,7 @@ "model": "attendance.attendanceovertime", "pk": 32, "fields": { - "created_at": "2025-03-24T03:45:45.755Z", + "created_at": "2025-06-24T03:45:45.755Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4561,7 +4561,7 @@ "model": "attendance.attendanceovertime", "pk": 33, "fields": { - "created_at": "2025-03-24T03:45:45.982Z", + "created_at": "2025-06-24T03:45:45.982Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4581,7 +4581,7 @@ "model": "attendance.attendanceovertime", "pk": 34, "fields": { - "created_at": "2025-03-24T03:45:46.294Z", + "created_at": "2025-06-24T03:45:46.294Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4601,7 +4601,7 @@ "model": "attendance.attendanceovertime", "pk": 35, "fields": { - "created_at": "2025-03-24T03:45:46.480Z", + "created_at": "2025-06-24T03:45:46.480Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4621,7 +4621,7 @@ "model": "attendance.attendanceovertime", "pk": 36, "fields": { - "created_at": "2025-03-24T03:45:46.688Z", + "created_at": "2025-06-24T03:45:46.688Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4641,7 +4641,7 @@ "model": "attendance.attendanceovertime", "pk": 37, "fields": { - "created_at": "2025-03-24T03:45:46.946Z", + "created_at": "2025-06-24T03:45:46.946Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4661,7 +4661,7 @@ "model": "attendance.attendanceovertime", "pk": 38, "fields": { - "created_at": "2025-03-24T03:45:47.163Z", + "created_at": "2025-06-24T03:45:47.163Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4681,7 +4681,7 @@ "model": "attendance.attendanceovertime", "pk": 39, "fields": { - "created_at": "2025-03-24T03:45:47.392Z", + "created_at": "2025-06-24T03:45:47.392Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4701,7 +4701,7 @@ "model": "attendance.attendanceovertime", "pk": 40, "fields": { - "created_at": "2025-03-24T03:45:47.564Z", + "created_at": "2025-06-24T03:45:47.564Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4721,7 +4721,7 @@ "model": "attendance.attendanceovertime", "pk": 41, "fields": { - "created_at": "2025-03-24T03:45:47.821Z", + "created_at": "2025-06-24T03:45:47.821Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4741,7 +4741,7 @@ "model": "attendance.attendanceovertime", "pk": 42, "fields": { - "created_at": "2025-03-24T03:45:48.071Z", + "created_at": "2025-06-24T03:45:48.071Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4761,7 +4761,7 @@ "model": "attendance.attendanceovertime", "pk": 43, "fields": { - "created_at": "2025-03-24T03:45:48.286Z", + "created_at": "2025-06-24T03:45:48.286Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4781,7 +4781,7 @@ "model": "attendance.attendanceovertime", "pk": 44, "fields": { - "created_at": "2025-03-24T03:45:48.509Z", + "created_at": "2025-06-24T03:45:48.509Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4801,7 +4801,7 @@ "model": "attendance.attendanceovertime", "pk": 45, "fields": { - "created_at": "2025-03-24T03:45:48.700Z", + "created_at": "2025-06-24T03:45:48.700Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4821,7 +4821,7 @@ "model": "attendance.attendanceovertime", "pk": 46, "fields": { - "created_at": "2025-03-24T03:45:48.963Z", + "created_at": "2025-06-24T03:45:48.963Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4841,7 +4841,7 @@ "model": "attendance.attendanceovertime", "pk": 47, "fields": { - "created_at": "2025-03-24T03:45:49.292Z", + "created_at": "2025-06-24T03:45:49.292Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4861,7 +4861,7 @@ "model": "attendance.attendanceovertime", "pk": 48, "fields": { - "created_at": "2025-03-24T03:45:49.514Z", + "created_at": "2025-06-24T03:45:49.514Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4881,7 +4881,7 @@ "model": "attendance.attendanceovertime", "pk": 49, "fields": { - "created_at": "2025-03-24T03:45:49.728Z", + "created_at": "2025-06-24T03:45:49.728Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4901,7 +4901,7 @@ "model": "attendance.attendanceovertime", "pk": 50, "fields": { - "created_at": "2025-03-24T03:45:49.925Z", + "created_at": "2025-06-24T03:45:49.925Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4921,7 +4921,7 @@ "model": "attendance.attendanceovertime", "pk": 51, "fields": { - "created_at": "2025-03-24T03:45:50.137Z", + "created_at": "2025-06-24T03:45:50.137Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4941,7 +4941,7 @@ "model": "attendance.attendanceovertime", "pk": 52, "fields": { - "created_at": "2025-03-24T03:45:50.412Z", + "created_at": "2025-06-24T03:45:50.412Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4961,7 +4961,7 @@ "model": "attendance.attendanceovertime", "pk": 53, "fields": { - "created_at": "2025-03-24T03:45:50.660Z", + "created_at": "2025-06-24T03:45:50.660Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4981,7 +4981,7 @@ "model": "attendance.attendanceovertime", "pk": 54, "fields": { - "created_at": "2025-03-24T03:45:50.871Z", + "created_at": "2025-06-24T03:45:50.871Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5001,7 +5001,7 @@ "model": "attendance.attendanceovertime", "pk": 55, "fields": { - "created_at": "2025-03-24T03:45:51.094Z", + "created_at": "2025-06-24T03:45:51.094Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5021,7 +5021,7 @@ "model": "attendance.attendanceovertime", "pk": 56, "fields": { - "created_at": "2025-03-24T03:45:51.333Z", + "created_at": "2025-06-24T03:45:51.333Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5041,7 +5041,7 @@ "model": "attendance.attendanceovertime", "pk": 57, "fields": { - "created_at": "2025-03-24T03:45:51.554Z", + "created_at": "2025-06-24T03:45:51.554Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5061,7 +5061,7 @@ "model": "attendance.attendanceovertime", "pk": 58, "fields": { - "created_at": "2025-03-24T03:45:51.967Z", + "created_at": "2025-06-24T03:45:51.967Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5081,7 +5081,7 @@ "model": "attendance.attendanceovertime", "pk": 59, "fields": { - "created_at": "2025-03-24T03:45:52.300Z", + "created_at": "2025-06-24T03:45:52.300Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5101,7 +5101,7 @@ "model": "attendance.attendanceovertime", "pk": 60, "fields": { - "created_at": "2025-03-24T03:45:52.539Z", + "created_at": "2025-06-24T03:45:52.539Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5121,7 +5121,7 @@ "model": "attendance.attendanceovertime", "pk": 61, "fields": { - "created_at": "2025-03-24T03:45:52.764Z", + "created_at": "2025-06-24T03:45:52.764Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5141,7 +5141,7 @@ "model": "attendance.attendanceovertime", "pk": 62, "fields": { - "created_at": "2025-03-24T03:45:53.008Z", + "created_at": "2025-06-24T03:45:53.008Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5161,7 +5161,7 @@ "model": "attendance.attendanceovertime", "pk": 63, "fields": { - "created_at": "2025-03-24T03:45:53.342Z", + "created_at": "2025-06-24T03:45:53.342Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5181,7 +5181,7 @@ "model": "attendance.attendanceovertime", "pk": 64, "fields": { - "created_at": "2025-03-24T03:45:53.545Z", + "created_at": "2025-06-24T03:45:53.545Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5201,7 +5201,7 @@ "model": "attendance.attendanceovertime", "pk": 65, "fields": { - "created_at": "2025-03-24T03:45:53.805Z", + "created_at": "2025-06-24T03:45:53.805Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5221,7 +5221,7 @@ "model": "attendance.attendanceovertime", "pk": 66, "fields": { - "created_at": "2025-03-24T03:45:54.041Z", + "created_at": "2025-06-24T03:45:54.041Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5241,7 +5241,7 @@ "model": "attendance.attendanceovertime", "pk": 67, "fields": { - "created_at": "2025-03-24T03:45:54.299Z", + "created_at": "2025-06-24T03:45:54.299Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5261,7 +5261,7 @@ "model": "attendance.attendanceovertime", "pk": 68, "fields": { - "created_at": "2025-03-24T03:45:54.530Z", + "created_at": "2025-06-24T03:45:54.530Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5281,7 +5281,7 @@ "model": "attendance.attendanceovertime", "pk": 69, "fields": { - "created_at": "2025-03-24T03:45:54.800Z", + "created_at": "2025-06-24T03:45:54.800Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5301,7 +5301,7 @@ "model": "attendance.attendanceovertime", "pk": 70, "fields": { - "created_at": "2025-03-24T03:45:55.396Z", + "created_at": "2025-06-24T03:45:55.396Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5321,7 +5321,7 @@ "model": "attendance.attendanceovertime", "pk": 71, "fields": { - "created_at": "2025-03-24T03:45:55.727Z", + "created_at": "2025-06-24T03:45:55.727Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5341,7 +5341,7 @@ "model": "attendance.attendanceovertime", "pk": 72, "fields": { - "created_at": "2025-03-24T03:45:56.210Z", + "created_at": "2025-06-24T03:45:56.210Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5361,7 +5361,7 @@ "model": "attendance.attendanceovertime", "pk": 73, "fields": { - "created_at": "2025-03-24T03:45:56.543Z", + "created_at": "2025-06-24T03:45:56.543Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5381,7 +5381,7 @@ "model": "attendance.attendanceovertime", "pk": 74, "fields": { - "created_at": "2025-03-24T03:45:56.801Z", + "created_at": "2025-06-24T03:45:56.801Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5401,7 +5401,7 @@ "model": "attendance.attendanceovertime", "pk": 75, "fields": { - "created_at": "2025-03-24T03:45:57.175Z", + "created_at": "2025-06-24T03:45:57.175Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5421,7 +5421,7 @@ "model": "attendance.attendanceovertime", "pk": 76, "fields": { - "created_at": "2025-03-24T03:45:57.541Z", + "created_at": "2025-06-24T03:45:57.541Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5441,7 +5441,7 @@ "model": "attendance.attendanceovertime", "pk": 77, "fields": { - "created_at": "2025-03-24T03:58:28.482Z", + "created_at": "2025-06-24T03:58:28.482Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5461,7 +5461,7 @@ "model": "attendance.attendanceovertime", "pk": 78, "fields": { - "created_at": "2025-03-24T03:58:30.599Z", + "created_at": "2025-06-24T03:58:30.599Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5481,7 +5481,7 @@ "model": "attendance.attendanceovertime", "pk": 79, "fields": { - "created_at": "2025-03-24T03:58:34.327Z", + "created_at": "2025-06-24T03:58:34.327Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5501,7 +5501,7 @@ "model": "attendance.attendanceovertime", "pk": 80, "fields": { - "created_at": "2025-03-24T03:58:35.113Z", + "created_at": "2025-06-24T03:58:35.113Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5521,7 +5521,7 @@ "model": "attendance.attendanceovertime", "pk": 81, "fields": { - "created_at": "2025-03-24T03:58:40.146Z", + "created_at": "2025-06-24T03:58:40.146Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5541,7 +5541,7 @@ "model": "attendance.attendanceovertime", "pk": 82, "fields": { - "created_at": "2025-03-24T03:58:43.070Z", + "created_at": "2025-06-24T03:58:43.070Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5561,7 +5561,7 @@ "model": "attendance.attendanceovertime", "pk": 83, "fields": { - "created_at": "2025-03-24T03:58:43.588Z", + "created_at": "2025-06-24T03:58:43.588Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5581,7 +5581,7 @@ "model": "attendance.attendanceovertime", "pk": 84, "fields": { - "created_at": "2025-03-24T03:58:44.084Z", + "created_at": "2025-06-24T03:58:44.084Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5601,7 +5601,7 @@ "model": "attendance.attendanceovertime", "pk": 85, "fields": { - "created_at": "2025-03-24T03:58:46.948Z", + "created_at": "2025-06-24T03:58:46.948Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5621,7 +5621,7 @@ "model": "attendance.attendanceovertime", "pk": 86, "fields": { - "created_at": "2025-03-24T03:58:48.649Z", + "created_at": "2025-06-24T03:58:48.649Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5641,7 +5641,7 @@ "model": "attendance.attendanceovertime", "pk": 87, "fields": { - "created_at": "2025-03-24T03:58:50.196Z", + "created_at": "2025-06-24T03:58:50.196Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5661,7 +5661,7 @@ "model": "attendance.attendanceovertime", "pk": 88, "fields": { - "created_at": "2025-03-24T03:58:50.436Z", + "created_at": "2025-06-24T03:58:50.436Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5681,7 +5681,7 @@ "model": "attendance.attendanceovertime", "pk": 89, "fields": { - "created_at": "2025-03-24T03:58:51.179Z", + "created_at": "2025-06-24T03:58:51.179Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5701,7 +5701,7 @@ "model": "attendance.attendanceovertime", "pk": 90, "fields": { - "created_at": "2025-03-24T03:58:51.428Z", + "created_at": "2025-06-24T03:58:51.428Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5721,7 +5721,7 @@ "model": "attendance.attendanceovertime", "pk": 91, "fields": { - "created_at": "2025-03-24T03:58:51.710Z", + "created_at": "2025-06-24T03:58:51.710Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5741,7 +5741,7 @@ "model": "attendance.attendanceovertime", "pk": 92, "fields": { - "created_at": "2025-03-24T03:58:52.590Z", + "created_at": "2025-06-24T03:58:52.590Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5761,7 +5761,7 @@ "model": "attendance.attendanceovertime", "pk": 93, "fields": { - "created_at": "2025-03-24T03:58:52.931Z", + "created_at": "2025-06-24T03:58:52.931Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5781,7 +5781,7 @@ "model": "attendance.attendanceovertime", "pk": 94, "fields": { - "created_at": "2025-03-24T03:58:53.832Z", + "created_at": "2025-06-24T03:58:53.832Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5801,7 +5801,7 @@ "model": "attendance.attendanceovertime", "pk": 95, "fields": { - "created_at": "2025-03-24T03:58:54.921Z", + "created_at": "2025-06-24T03:58:54.921Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5821,7 +5821,7 @@ "model": "attendance.attendanceovertime", "pk": 96, "fields": { - "created_at": "2025-03-24T03:58:55.183Z", + "created_at": "2025-06-24T03:58:55.183Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5841,7 +5841,7 @@ "model": "attendance.attendanceovertime", "pk": 97, "fields": { - "created_at": "2025-03-24T03:58:55.445Z", + "created_at": "2025-06-24T03:58:55.445Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5861,7 +5861,7 @@ "model": "attendance.attendanceovertime", "pk": 98, "fields": { - "created_at": "2025-03-24T03:58:56.432Z", + "created_at": "2025-06-24T03:58:56.432Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5881,7 +5881,7 @@ "model": "attendance.attendanceovertime", "pk": 99, "fields": { - "created_at": "2025-03-24T04:12:52.873Z", + "created_at": "2025-06-24T04:12:52.873Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5901,7 +5901,7 @@ "model": "attendance.attendanceovertime", "pk": 100, "fields": { - "created_at": "2025-03-21T10:18:08.462Z", + "created_at": "2025-06-21T10:18:08.462Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5927,7 +5927,7 @@ "attendance_id": 1, "employee_id": 1, "type": "late_come", - "created_at": "2025-03-22T08:43:57.412Z" + "created_at": "2025-06-22T08:43:57.412Z" } }, { @@ -5940,14 +5940,14 @@ "attendance_id": 299, "employee_id": 1, "type": "late_come", - "created_at": "2025-03-24T04:18:24.245Z" + "created_at": "2025-06-24T04:18:24.245Z" } }, { "model": "attendance.attendancevalidationcondition", "pk": 1, "fields": { - "created_at": "2025-03-22T08:34:03.318Z", + "created_at": "2025-06-22T08:34:03.318Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5961,7 +5961,7 @@ "model": "attendance.gracetime", "pk": 1, "fields": { - "created_at": "2025-03-22T08:34:40.921Z", + "created_at": "2025-06-22T08:34:40.921Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5977,7 +5977,7 @@ "model": "attendance.gracetime", "pk": 2, "fields": { - "created_at": "2025-03-22T08:34:47.746Z", + "created_at": "2025-06-22T08:34:47.746Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -5993,7 +5993,7 @@ "model": "attendance.gracetime", "pk": 3, "fields": { - "created_at": "2025-03-22T08:34:56.149Z", + "created_at": "2025-06-22T08:34:56.149Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -6009,7 +6009,7 @@ "model": "attendance.attendancegeneralsetting", "pk": 1, "fields": { - "created_at": "2025-03-24T04:16:15.566Z", + "created_at": "2025-06-24T04:16:15.566Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -6024,7 +6024,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 1, - "date": "2025-03-22", + "date": "2025-06-22", "at_work": "18:27", "min_hour": "08:15", "at_work_second": 66420, @@ -6034,7 +6034,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.072Z" + "last_update": "2025-06-05T09:39:14.072Z" } }, { @@ -6044,7 +6044,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 50, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6054,7 +6054,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.100Z" + "last_update": "2025-06-05T09:39:14.100Z" } }, { @@ -6064,7 +6064,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 9, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6074,7 +6074,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.120Z" + "last_update": "2025-06-05T09:39:14.120Z" } }, { @@ -6084,7 +6084,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 48, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6094,7 +6094,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.137Z" + "last_update": "2025-06-05T09:39:14.137Z" } }, { @@ -6104,7 +6104,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 55, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6114,7 +6114,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.157Z" + "last_update": "2025-06-05T09:39:14.157Z" } }, { @@ -6124,7 +6124,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 7, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6134,7 +6134,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.177Z" + "last_update": "2025-06-05T09:39:14.177Z" } }, { @@ -6144,7 +6144,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 15, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6154,7 +6154,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.195Z" + "last_update": "2025-06-05T09:39:14.195Z" } }, { @@ -6164,7 +6164,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 31, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6174,7 +6174,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.213Z" + "last_update": "2025-06-05T09:39:14.213Z" } }, { @@ -6184,7 +6184,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 6, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6194,7 +6194,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.233Z" + "last_update": "2025-06-05T09:39:14.233Z" } }, { @@ -6204,7 +6204,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 43, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6214,7 +6214,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.252Z" + "last_update": "2025-06-05T09:39:14.252Z" } }, { @@ -6224,7 +6224,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 29, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6234,7 +6234,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.272Z" + "last_update": "2025-06-05T09:39:14.272Z" } }, { @@ -6244,7 +6244,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 51, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6254,7 +6254,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.288Z" + "last_update": "2025-06-05T09:39:14.288Z" } }, { @@ -6264,7 +6264,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 19, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6274,7 +6274,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.306Z" + "last_update": "2025-06-05T09:39:14.306Z" } }, { @@ -6284,7 +6284,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 4, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6294,7 +6294,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.325Z" + "last_update": "2025-06-05T09:39:14.325Z" } }, { @@ -6304,7 +6304,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 40, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6314,7 +6314,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.349Z" + "last_update": "2025-06-05T09:39:14.349Z" } }, { @@ -6324,7 +6324,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 53, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6334,7 +6334,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.370Z" + "last_update": "2025-06-05T09:39:14.370Z" } }, { @@ -6344,7 +6344,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 40, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6354,7 +6354,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.393Z" + "last_update": "2025-06-05T09:39:14.393Z" } }, { @@ -6364,7 +6364,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 25, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6374,7 +6374,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.414Z" + "last_update": "2025-06-05T09:39:14.414Z" } }, { @@ -6384,7 +6384,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 39, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6394,7 +6394,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.433Z" + "last_update": "2025-06-05T09:39:14.433Z" } }, { @@ -6404,7 +6404,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 28, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6414,7 +6414,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.454Z" + "last_update": "2025-06-05T09:39:14.454Z" } }, { @@ -6424,7 +6424,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 60, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6434,7 +6434,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.469Z" + "last_update": "2025-06-05T09:39:14.469Z" } }, { @@ -6444,7 +6444,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 58, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6454,7 +6454,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.494Z" + "last_update": "2025-06-05T09:39:14.494Z" } }, { @@ -6464,7 +6464,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 37, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6474,7 +6474,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.516Z" + "last_update": "2025-06-05T09:39:14.516Z" } }, { @@ -6484,7 +6484,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 73, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6494,7 +6494,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.534Z" + "last_update": "2025-06-05T09:39:14.534Z" } }, { @@ -6504,7 +6504,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 25, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6514,7 +6514,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.552Z" + "last_update": "2025-06-05T09:39:14.552Z" } }, { @@ -6524,7 +6524,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 20, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6534,7 +6534,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.572Z" + "last_update": "2025-06-05T09:39:14.572Z" } }, { @@ -6544,7 +6544,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 7, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6554,7 +6554,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.588Z" + "last_update": "2025-06-05T09:39:14.588Z" } }, { @@ -6564,7 +6564,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 66, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6574,7 +6574,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.614Z" + "last_update": "2025-06-05T09:39:14.614Z" } }, { @@ -6584,7 +6584,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 26, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6594,7 +6594,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.632Z" + "last_update": "2025-06-05T09:39:14.632Z" } }, { @@ -6604,7 +6604,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 38, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6614,7 +6614,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.648Z" + "last_update": "2025-06-05T09:39:14.648Z" } }, { @@ -6624,7 +6624,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 71, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6634,7 +6634,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.670Z" + "last_update": "2025-06-05T09:39:14.670Z" } }, { @@ -6644,7 +6644,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 63, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6654,7 +6654,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.688Z" + "last_update": "2025-06-05T09:39:14.688Z" } }, { @@ -6664,7 +6664,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 41, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6674,7 +6674,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.707Z" + "last_update": "2025-06-05T09:39:14.707Z" } }, { @@ -6684,7 +6684,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 56, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6694,7 +6694,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.730Z" + "last_update": "2025-06-05T09:39:14.730Z" } }, { @@ -6704,7 +6704,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 59, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6714,7 +6714,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.751Z" + "last_update": "2025-06-05T09:39:14.751Z" } }, { @@ -6724,7 +6724,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 15, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6734,7 +6734,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.766Z" + "last_update": "2025-06-05T09:39:14.766Z" } }, { @@ -6744,7 +6744,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 11, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6754,7 +6754,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.789Z" + "last_update": "2025-06-05T09:39:14.789Z" } }, { @@ -6764,7 +6764,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 22, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6774,7 +6774,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.844Z" + "last_update": "2025-06-05T09:39:14.844Z" } }, { @@ -6784,7 +6784,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 57, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6794,7 +6794,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.860Z" + "last_update": "2025-06-05T09:39:14.860Z" } }, { @@ -6804,7 +6804,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 23, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6814,7 +6814,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.882Z" + "last_update": "2025-06-05T09:39:14.882Z" } }, { @@ -6824,7 +6824,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 47, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6834,7 +6834,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.910Z" + "last_update": "2025-06-05T09:39:14.910Z" } }, { @@ -6844,7 +6844,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 59, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6854,7 +6854,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:14.941Z" + "last_update": "2025-06-05T09:39:14.941Z" } }, { @@ -6864,7 +6864,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 64, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6874,7 +6874,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.974Z" + "last_update": "2025-06-05T09:39:14.974Z" } }, { @@ -6884,7 +6884,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 12, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6894,7 +6894,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:14.997Z" + "last_update": "2025-06-05T09:39:14.997Z" } }, { @@ -6904,7 +6904,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 74, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -6914,7 +6914,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.021Z" + "last_update": "2025-06-05T09:39:15.021Z" } }, { @@ -6924,7 +6924,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 3, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -6934,7 +6934,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.042Z" + "last_update": "2025-06-05T09:39:15.042Z" } }, { @@ -6944,7 +6944,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 36, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -6954,7 +6954,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.067Z" + "last_update": "2025-06-05T09:39:15.067Z" } }, { @@ -6964,7 +6964,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 56, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -6974,7 +6974,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.086Z" + "last_update": "2025-06-05T09:39:15.086Z" } }, { @@ -6984,7 +6984,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 16, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -6994,7 +6994,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.107Z" + "last_update": "2025-06-05T09:39:15.107Z" } }, { @@ -7004,7 +7004,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 2, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7014,7 +7014,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.132Z" + "last_update": "2025-06-05T09:39:15.132Z" } }, { @@ -7024,7 +7024,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 33, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7034,7 +7034,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.152Z" + "last_update": "2025-06-05T09:39:15.152Z" } }, { @@ -7044,7 +7044,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 9, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7054,7 +7054,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.172Z" + "last_update": "2025-06-05T09:39:15.172Z" } }, { @@ -7064,7 +7064,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 13, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7074,7 +7074,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.195Z" + "last_update": "2025-06-05T09:39:15.195Z" } }, { @@ -7084,7 +7084,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 18, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7094,7 +7094,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.214Z" + "last_update": "2025-06-05T09:39:15.214Z" } }, { @@ -7104,7 +7104,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 76, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7114,7 +7114,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.239Z" + "last_update": "2025-06-05T09:39:15.239Z" } }, { @@ -7124,7 +7124,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 14, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7134,7 +7134,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.264Z" + "last_update": "2025-06-05T09:39:15.264Z" } }, { @@ -7144,7 +7144,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 6, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7154,7 +7154,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.287Z" + "last_update": "2025-06-05T09:39:15.287Z" } }, { @@ -7164,7 +7164,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 62, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7174,7 +7174,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.305Z" + "last_update": "2025-06-05T09:39:15.305Z" } }, { @@ -7184,7 +7184,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 44, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7194,7 +7194,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.331Z" + "last_update": "2025-06-05T09:39:15.331Z" } }, { @@ -7204,7 +7204,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 32, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7214,7 +7214,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.357Z" + "last_update": "2025-06-05T09:39:15.357Z" } }, { @@ -7224,7 +7224,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 52, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7234,7 +7234,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.377Z" + "last_update": "2025-06-05T09:39:15.377Z" } }, { @@ -7244,7 +7244,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 67, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7254,7 +7254,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.399Z" + "last_update": "2025-06-05T09:39:15.399Z" } }, { @@ -7264,7 +7264,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 8, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7274,7 +7274,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.423Z" + "last_update": "2025-06-05T09:39:15.423Z" } }, { @@ -7284,7 +7284,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 69, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7294,7 +7294,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.457Z" + "last_update": "2025-06-05T09:39:15.457Z" } }, { @@ -7304,7 +7304,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 54, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7314,7 +7314,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.482Z" + "last_update": "2025-06-05T09:39:15.482Z" } }, { @@ -7324,7 +7324,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 24, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7334,7 +7334,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.513Z" + "last_update": "2025-06-05T09:39:15.513Z" } }, { @@ -7344,7 +7344,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 75, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7354,7 +7354,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.540Z" + "last_update": "2025-06-05T09:39:15.540Z" } }, { @@ -7364,7 +7364,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 17, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7374,7 +7374,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.564Z" + "last_update": "2025-06-05T09:39:15.564Z" } }, { @@ -7384,7 +7384,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 58, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7394,7 +7394,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.584Z" + "last_update": "2025-06-05T09:39:15.584Z" } }, { @@ -7404,7 +7404,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 34, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7414,7 +7414,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.609Z" + "last_update": "2025-06-05T09:39:15.609Z" } }, { @@ -7424,7 +7424,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 72, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7434,7 +7434,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.624Z" + "last_update": "2025-06-05T09:39:15.624Z" } }, { @@ -7444,7 +7444,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 32, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7454,7 +7454,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.643Z" + "last_update": "2025-06-05T09:39:15.643Z" } }, { @@ -7464,7 +7464,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 44, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7474,7 +7474,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.666Z" + "last_update": "2025-06-05T09:39:15.666Z" } }, { @@ -7484,7 +7484,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 42, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7494,7 +7494,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.688Z" + "last_update": "2025-06-05T09:39:15.688Z" } }, { @@ -7504,7 +7504,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 68, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7514,7 +7514,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.706Z" + "last_update": "2025-06-05T09:39:15.706Z" } }, { @@ -7524,7 +7524,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 29, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7534,7 +7534,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.725Z" + "last_update": "2025-06-05T09:39:15.725Z" } }, { @@ -7544,7 +7544,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 20, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7554,7 +7554,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.748Z" + "last_update": "2025-06-05T09:39:15.748Z" } }, { @@ -7564,7 +7564,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 46, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7574,7 +7574,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.763Z" + "last_update": "2025-06-05T09:39:15.763Z" } }, { @@ -7584,7 +7584,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 35, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7594,7 +7594,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.786Z" + "last_update": "2025-06-05T09:39:15.786Z" } }, { @@ -7604,7 +7604,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 70, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7614,7 +7614,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.807Z" + "last_update": "2025-06-05T09:39:15.807Z" } }, { @@ -7624,7 +7624,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 27, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7634,7 +7634,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.832Z" + "last_update": "2025-06-05T09:39:15.832Z" } }, { @@ -7644,7 +7644,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 65, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7654,7 +7654,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.852Z" + "last_update": "2025-06-05T09:39:15.852Z" } }, { @@ -7664,7 +7664,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 30, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7674,7 +7674,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.878Z" + "last_update": "2025-06-05T09:39:15.878Z" } }, { @@ -7684,7 +7684,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 13, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7694,7 +7694,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.899Z" + "last_update": "2025-06-05T09:39:15.899Z" } }, { @@ -7704,7 +7704,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 29, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7714,7 +7714,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.927Z" + "last_update": "2025-06-05T09:39:15.927Z" } }, { @@ -7724,7 +7724,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 5, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7734,7 +7734,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:15.958Z" + "last_update": "2025-06-05T09:39:15.958Z" } }, { @@ -7744,7 +7744,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 10, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7754,7 +7754,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:15.982Z" + "last_update": "2025-06-05T09:39:15.982Z" } }, { @@ -7764,7 +7764,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 53, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7774,7 +7774,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.001Z" + "last_update": "2025-06-05T09:39:16.001Z" } }, { @@ -7784,7 +7784,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 66, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -7794,7 +7794,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.017Z" + "last_update": "2025-06-05T09:39:16.017Z" } }, { @@ -7804,7 +7804,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 21, - "date": "2025-03-13", + "date": "2025-06-13", "at_work": "08:15", "min_hour": "08:15", "at_work_second": 29700, @@ -7814,7 +7814,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.050Z" + "last_update": "2025-06-05T09:39:16.050Z" } }, { @@ -7824,7 +7824,7 @@ "record_name": null, "work_record_type": "FDP", "employee_id": 46, - "date": "2025-03-21", + "date": "2025-06-21", "at_work": "09:15", "min_hour": "08:15", "at_work_second": 33300, @@ -7834,7 +7834,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 1.0, - "last_update": "2025-03-05T09:39:16.067Z" + "last_update": "2025-06-05T09:39:16.067Z" } }, { @@ -7844,7 +7844,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 15, - "date": "2025-03-01", + "date": "2025-06-01", "at_work": "08:45", "min_hour": "08:15", "at_work_second": 31500, @@ -7854,7 +7854,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.090Z" + "last_update": "2025-06-05T09:39:16.090Z" } }, { @@ -7864,7 +7864,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 10, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "00:00", "at_work_second": 36900, @@ -7874,7 +7874,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.106Z" + "last_update": "2025-06-05T09:39:16.106Z" } }, { @@ -7884,7 +7884,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 36, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:45", "min_hour": "08:15", "at_work_second": 38700, @@ -7894,7 +7894,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.128Z" + "last_update": "2025-06-05T09:39:16.128Z" } }, { @@ -7904,7 +7904,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 35, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "08:15", "min_hour": "00:00", "at_work_second": 29700, @@ -7914,7 +7914,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.147Z" + "last_update": "2025-06-05T09:39:16.147Z" } }, { @@ -7924,7 +7924,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 31, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "08:45", "min_hour": "00:00", "at_work_second": 31500, @@ -7934,7 +7934,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.168Z" + "last_update": "2025-06-05T09:39:16.168Z" } }, { @@ -7944,7 +7944,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 38, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:45", "min_hour": "00:00", "at_work_second": 38700, @@ -7954,7 +7954,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.201Z" + "last_update": "2025-06-05T09:39:16.201Z" } }, { @@ -7964,7 +7964,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 65, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "09:15", "min_hour": "00:00", "at_work_second": 33300, @@ -7974,7 +7974,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.230Z" + "last_update": "2025-06-05T09:39:16.230Z" } }, { @@ -7984,7 +7984,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 13, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:15", "min_hour": "00:00", "at_work_second": 36900, @@ -7994,7 +7994,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.248Z" + "last_update": "2025-06-05T09:39:16.248Z" } }, { @@ -8004,7 +8004,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 5, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "08:15", "min_hour": "00:00", "at_work_second": 29700, @@ -8014,7 +8014,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.273Z" + "last_update": "2025-06-05T09:39:16.273Z" } }, { @@ -8024,7 +8024,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 69, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "10:45", "min_hour": "00:00", "at_work_second": 38700, @@ -8034,7 +8034,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.297Z" + "last_update": "2025-06-05T09:39:16.297Z" } }, { @@ -8044,7 +8044,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 46, - "date": "2025-03-14", + "date": "2025-06-14", "at_work": "09:15", "min_hour": "00:00", "at_work_second": 33300, @@ -8054,7 +8054,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.324Z" + "last_update": "2025-06-05T09:39:16.324Z" } }, { @@ -8064,7 +8064,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 5, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8074,7 +8074,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.335Z" + "last_update": "2025-06-05T09:39:16.335Z" } }, { @@ -8084,7 +8084,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 10, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8094,7 +8094,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.366Z" + "last_update": "2025-06-05T09:39:16.366Z" } }, { @@ -8104,7 +8104,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 39, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8114,7 +8114,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.384Z" + "last_update": "2025-06-05T09:39:16.384Z" } }, { @@ -8124,7 +8124,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 7, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8134,7 +8134,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.404Z" + "last_update": "2025-06-05T09:39:16.404Z" } }, { @@ -8144,7 +8144,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 17, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8154,7 +8154,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.424Z" + "last_update": "2025-06-05T09:39:16.424Z" } }, { @@ -8164,7 +8164,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 21, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8174,7 +8174,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.447Z" + "last_update": "2025-06-05T09:39:16.447Z" } }, { @@ -8184,7 +8184,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 46, - "date": "2025-03-24", + "date": "2025-06-24", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8194,7 +8194,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.472Z" + "last_update": "2025-06-05T09:39:16.472Z" } }, { @@ -8204,7 +8204,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 2, - "date": "2025-03-24", + "date": "2025-06-24", "at_work": "07:30", "min_hour": "08:15", "at_work_second": 27000, @@ -8214,7 +8214,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.493Z" + "last_update": "2025-06-05T09:39:16.493Z" } }, { @@ -8224,7 +8224,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 13, - "date": "2025-03-15", + "date": "2025-06-15", "at_work": "10:15", "min_hour": "08:15", "at_work_second": 36900, @@ -8234,7 +8234,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.513Z" + "last_update": "2025-06-05T09:39:16.513Z" } }, { @@ -8244,7 +8244,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 75, - "date": "2025-03-03", + "date": "2025-06-03", "at_work": "08:30", "min_hour": "08:15", "at_work_second": 30600, @@ -8254,7 +8254,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.535Z" + "last_update": "2025-06-05T09:39:16.535Z" } }, { @@ -8264,7 +8264,7 @@ "record_name": null, "work_record_type": "CONF", "employee_id": 20, - "date": "2025-03-07", + "date": "2025-06-07", "at_work": "08:30", "min_hour": "08:15", "at_work_second": 30600, @@ -8274,7 +8274,7 @@ "is_attendance_record": true, "is_leave_record": false, "day_percentage": 0.0, - "last_update": "2025-03-05T09:39:16.557Z" + "last_update": "2025-06-05T09:39:16.557Z" } } ] diff --git a/load_data/base_data.json b/load_data/base_data.json index 701d79c5c..3e90c0015 100644 --- a/load_data/base_data.json +++ b/load_data/base_data.json @@ -3,7 +3,7 @@ "model": "base.company", "pk": 1, "fields": { - "created_at": "2025-03-22T08:21:11.031Z", + "created_at": "2025-06-22T08:21:11.031Z", "created_by": 1, "modified_by": 1, "is_active": false, @@ -23,7 +23,7 @@ "model": "base.company", "pk": 2, "fields": { - "created_at": "2025-03-16T05:03:00.993Z", + "created_at": "2025-06-16T05:03:00.993Z", "created_by": 1, "modified_by": 1, "is_active": false, @@ -43,7 +43,7 @@ "model": "base.company", "pk": 3, "fields": { - "created_at": "2025-03-16T05:04:50.728Z", + "created_at": "2025-06-16T05:04:50.728Z", "created_by": 1, "modified_by": 1, "is_active": false, @@ -63,7 +63,7 @@ "model": "base.department", "pk": 1, "fields": { - "created_at": "2025-03-22T04:47:23.606Z", + "created_at": "2025-06-22T04:47:23.606Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -75,7 +75,7 @@ "model": "base.department", "pk": 2, "fields": { - "created_at": "2025-03-22T04:47:28.319Z", + "created_at": "2025-06-22T04:47:28.319Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -87,7 +87,7 @@ "model": "base.department", "pk": 3, "fields": { - "created_at": "2025-03-22T04:47:33.893Z", + "created_at": "2025-06-22T04:47:33.893Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -99,7 +99,7 @@ "model": "base.department", "pk": 4, "fields": { - "created_at": "2025-03-22T04:47:40.208Z", + "created_at": "2025-06-22T04:47:40.208Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -111,7 +111,7 @@ "model": "base.department", "pk": 5, "fields": { - "created_at": "2025-03-22T04:47:42.609Z", + "created_at": "2025-06-22T04:47:42.609Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -123,19 +123,19 @@ "model": "base.department", "pk": 6, "fields": { - "created_at": "2025-03-21T09:20:48.130Z", + "created_at": "2025-06-21T09:20:48.130Z", "created_by": 1, "modified_by": 1, "is_active": true, "department": "Managers", - "company_id": [1] + "company_id": [1, 2, 3] } }, { "model": "base.jobposition", "pk": 1, "fields": { - "created_at": "2025-03-22T04:47:23.622Z", + "created_at": "2025-06-22T04:47:23.622Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -148,7 +148,7 @@ "model": "base.jobposition", "pk": 2, "fields": { - "created_at": "2025-03-22T04:47:25.943Z", + "created_at": "2025-06-22T04:47:25.943Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -161,7 +161,7 @@ "model": "base.jobposition", "pk": 3, "fields": { - "created_at": "2025-03-22T04:47:28.333Z", + "created_at": "2025-06-22T04:47:28.333Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -174,7 +174,7 @@ "model": "base.jobposition", "pk": 4, "fields": { - "created_at": "2025-03-22T04:47:33.908Z", + "created_at": "2025-06-22T04:47:33.908Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -187,7 +187,7 @@ "model": "base.jobposition", "pk": 5, "fields": { - "created_at": "2025-03-22T04:47:34.486Z", + "created_at": "2025-06-22T04:47:34.486Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -200,7 +200,7 @@ "model": "base.jobposition", "pk": 6, "fields": { - "created_at": "2025-03-22T04:47:35.070Z", + "created_at": "2025-06-22T04:47:35.070Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -213,7 +213,7 @@ "model": "base.jobposition", "pk": 7, "fields": { - "created_at": "2025-03-22T04:47:40.222Z", + "created_at": "2025-06-22T04:47:40.222Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -226,7 +226,7 @@ "model": "base.jobposition", "pk": 8, "fields": { - "created_at": "2025-03-22T04:47:40.779Z", + "created_at": "2025-06-22T04:47:40.779Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -239,7 +239,7 @@ "model": "base.jobposition", "pk": 9, "fields": { - "created_at": "2025-03-22T04:47:41.392Z", + "created_at": "2025-06-22T04:47:41.392Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -252,7 +252,7 @@ "model": "base.jobposition", "pk": 10, "fields": { - "created_at": "2025-03-22T04:47:41.984Z", + "created_at": "2025-06-22T04:47:41.984Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -265,7 +265,7 @@ "model": "base.jobposition", "pk": 11, "fields": { - "created_at": "2025-03-22T04:47:42.624Z", + "created_at": "2025-06-22T04:47:42.624Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -278,7 +278,7 @@ "model": "base.jobposition", "pk": 12, "fields": { - "created_at": "2025-03-22T04:47:43.202Z", + "created_at": "2025-06-22T04:47:43.202Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -291,7 +291,7 @@ "model": "base.jobposition", "pk": 13, "fields": { - "created_at": "2025-03-22T04:47:46.093Z", + "created_at": "2025-06-22T04:47:46.093Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -304,7 +304,7 @@ "model": "base.jobposition", "pk": 14, "fields": { - "created_at": "2025-03-22T04:47:47.486Z", + "created_at": "2025-06-22T04:47:47.486Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -317,7 +317,7 @@ "model": "base.jobposition", "pk": 15, "fields": { - "created_at": "2025-03-22T04:47:49.834Z", + "created_at": "2025-06-22T04:47:49.834Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -330,7 +330,7 @@ "model": "base.jobposition", "pk": 16, "fields": { - "created_at": "2025-03-22T04:47:50.983Z", + "created_at": "2025-06-22T04:47:50.983Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -343,7 +343,7 @@ "model": "base.jobposition", "pk": 17, "fields": { - "created_at": "2025-03-22T04:47:58.482Z", + "created_at": "2025-06-22T04:47:58.482Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -356,7 +356,7 @@ "model": "base.jobposition", "pk": 18, "fields": { - "created_at": "2025-03-16T04:50:47.287Z", + "created_at": "2025-06-16T04:50:47.287Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -369,7 +369,7 @@ "model": "base.jobposition", "pk": 19, "fields": { - "created_at": "2025-03-16T04:51:09.169Z", + "created_at": "2025-06-16T04:51:09.169Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -382,7 +382,7 @@ "model": "base.jobposition", "pk": 20, "fields": { - "created_at": "2025-03-16T04:51:35.632Z", + "created_at": "2025-06-16T04:51:35.632Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -395,7 +395,7 @@ "model": "base.jobposition", "pk": 21, "fields": { - "created_at": "2025-03-16T04:52:08.734Z", + "created_at": "2025-06-16T04:52:08.734Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -408,7 +408,7 @@ "model": "base.jobposition", "pk": 22, "fields": { - "created_at": "2025-03-16T04:53:52.535Z", + "created_at": "2025-06-16T04:53:52.535Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -421,7 +421,7 @@ "model": "base.jobposition", "pk": 23, "fields": { - "created_at": "2025-03-16T04:54:44.109Z", + "created_at": "2025-06-16T04:54:44.109Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -434,11 +434,11 @@ "model": "base.jobposition", "pk": 24, "fields": { - "created_at": "2025-03-21T09:21:05.334Z", + "created_at": "2025-06-21T09:21:05.334Z", "created_by": 1, "modified_by": 1, "is_active": true, - "job_position": "Senoir Manager", + "job_position": "Senior Manager", "department_id": 6, "company_id": [] } @@ -447,7 +447,7 @@ "model": "base.jobrole", "pk": 1, "fields": { - "created_at": "2025-03-22T04:47:23.637Z", + "created_at": "2025-06-22T04:47:23.637Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -460,7 +460,7 @@ "model": "base.jobrole", "pk": 2, "fields": { - "created_at": "2025-03-22T04:47:25.955Z", + "created_at": "2025-06-22T04:47:25.955Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -473,7 +473,7 @@ "model": "base.jobrole", "pk": 3, "fields": { - "created_at": "2025-03-22T04:47:28.345Z", + "created_at": "2025-06-22T04:47:28.345Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -486,7 +486,7 @@ "model": "base.jobrole", "pk": 4, "fields": { - "created_at": "2025-03-22T04:47:31.671Z", + "created_at": "2025-06-22T04:47:31.671Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -499,7 +499,7 @@ "model": "base.jobrole", "pk": 5, "fields": { - "created_at": "2025-03-22T04:47:32.226Z", + "created_at": "2025-06-22T04:47:32.226Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -512,7 +512,7 @@ "model": "base.jobrole", "pk": 6, "fields": { - "created_at": "2025-03-22T04:47:33.920Z", + "created_at": "2025-06-22T04:47:33.920Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -525,7 +525,7 @@ "model": "base.jobrole", "pk": 7, "fields": { - "created_at": "2025-03-22T04:47:34.501Z", + "created_at": "2025-06-22T04:47:34.501Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -538,7 +538,7 @@ "model": "base.jobrole", "pk": 8, "fields": { - "created_at": "2025-03-22T04:47:35.084Z", + "created_at": "2025-06-22T04:47:35.084Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -551,7 +551,7 @@ "model": "base.jobrole", "pk": 9, "fields": { - "created_at": "2025-03-22T04:47:36.825Z", + "created_at": "2025-06-22T04:47:36.825Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -564,7 +564,7 @@ "model": "base.jobrole", "pk": 10, "fields": { - "created_at": "2025-03-22T04:47:37.423Z", + "created_at": "2025-06-22T04:47:37.423Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -577,7 +577,7 @@ "model": "base.jobrole", "pk": 11, "fields": { - "created_at": "2025-03-22T04:47:40.235Z", + "created_at": "2025-06-22T04:47:40.235Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -590,7 +590,7 @@ "model": "base.jobrole", "pk": 12, "fields": { - "created_at": "2025-03-22T04:47:40.792Z", + "created_at": "2025-06-22T04:47:40.792Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -603,7 +603,7 @@ "model": "base.jobrole", "pk": 13, "fields": { - "created_at": "2025-03-22T04:47:41.404Z", + "created_at": "2025-06-22T04:47:41.404Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -616,7 +616,7 @@ "model": "base.jobrole", "pk": 14, "fields": { - "created_at": "2025-03-22T04:47:41.996Z", + "created_at": "2025-06-22T04:47:41.996Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -629,7 +629,7 @@ "model": "base.jobrole", "pk": 15, "fields": { - "created_at": "2025-03-22T04:47:42.639Z", + "created_at": "2025-06-22T04:47:42.639Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -642,7 +642,7 @@ "model": "base.jobrole", "pk": 16, "fields": { - "created_at": "2025-03-22T04:47:43.218Z", + "created_at": "2025-06-22T04:47:43.218Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -655,7 +655,7 @@ "model": "base.jobrole", "pk": 17, "fields": { - "created_at": "2025-03-22T04:47:46.107Z", + "created_at": "2025-06-22T04:47:46.107Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -668,7 +668,7 @@ "model": "base.jobrole", "pk": 18, "fields": { - "created_at": "2025-03-22T04:47:47.516Z", + "created_at": "2025-06-22T04:47:47.516Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -681,7 +681,7 @@ "model": "base.jobrole", "pk": 19, "fields": { - "created_at": "2025-03-22T04:47:49.845Z", + "created_at": "2025-06-22T04:47:49.845Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -694,7 +694,7 @@ "model": "base.jobrole", "pk": 20, "fields": { - "created_at": "2025-03-22T04:47:50.391Z", + "created_at": "2025-06-22T04:47:50.391Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -707,7 +707,7 @@ "model": "base.jobrole", "pk": 21, "fields": { - "created_at": "2025-03-22T04:47:50.997Z", + "created_at": "2025-06-22T04:47:50.997Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -720,7 +720,7 @@ "model": "base.jobrole", "pk": 22, "fields": { - "created_at": "2025-03-22T04:47:55.588Z", + "created_at": "2025-06-22T04:47:55.588Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -733,7 +733,7 @@ "model": "base.jobrole", "pk": 23, "fields": { - "created_at": "2025-03-22T04:47:57.905Z", + "created_at": "2025-06-22T04:47:57.905Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -746,7 +746,7 @@ "model": "base.jobrole", "pk": 24, "fields": { - "created_at": "2025-03-22T04:47:58.494Z", + "created_at": "2025-06-22T04:47:58.494Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -759,7 +759,7 @@ "model": "base.jobrole", "pk": 25, "fields": { - "created_at": "2025-03-22T04:47:59.074Z", + "created_at": "2025-06-22T04:47:59.074Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -772,7 +772,7 @@ "model": "base.jobrole", "pk": 26, "fields": { - "created_at": "2025-03-22T04:47:59.681Z", + "created_at": "2025-06-22T04:47:59.681Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -785,7 +785,7 @@ "model": "base.jobrole", "pk": 27, "fields": { - "created_at": "2025-03-22T04:48:00.400Z", + "created_at": "2025-06-22T04:48:00.400Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -798,7 +798,7 @@ "model": "base.jobrole", "pk": 28, "fields": { - "created_at": "2025-03-22T04:48:01.233Z", + "created_at": "2025-06-22T04:48:01.233Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -811,7 +811,7 @@ "model": "base.jobrole", "pk": 29, "fields": { - "created_at": "2025-03-22T04:52:53.339Z", + "created_at": "2025-06-22T04:52:53.339Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -824,7 +824,7 @@ "model": "base.jobrole", "pk": 30, "fields": { - "created_at": "2025-03-22T08:25:17.947Z", + "created_at": "2025-06-22T08:25:17.947Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -837,7 +837,7 @@ "model": "base.jobrole", "pk": 31, "fields": { - "created_at": "2025-03-22T08:25:34.639Z", + "created_at": "2025-06-22T08:25:34.639Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -850,7 +850,7 @@ "model": "base.jobrole", "pk": 32, "fields": { - "created_at": "2025-03-22T08:25:46.596Z", + "created_at": "2025-06-22T08:25:46.596Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -863,7 +863,7 @@ "model": "base.jobrole", "pk": 33, "fields": { - "created_at": "2025-03-22T08:26:09.648Z", + "created_at": "2025-06-22T08:26:09.648Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -876,7 +876,7 @@ "model": "base.jobrole", "pk": 34, "fields": { - "created_at": "2025-03-16T04:56:45.891Z", + "created_at": "2025-06-16T04:56:45.891Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -889,7 +889,7 @@ "model": "base.jobrole", "pk": 35, "fields": { - "created_at": "2025-03-16T04:56:45.903Z", + "created_at": "2025-06-16T04:56:45.903Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -902,7 +902,7 @@ "model": "base.jobrole", "pk": 36, "fields": { - "created_at": "2025-03-16T04:56:45.913Z", + "created_at": "2025-06-16T04:56:45.913Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -915,7 +915,7 @@ "model": "base.jobrole", "pk": 37, "fields": { - "created_at": "2025-03-16T04:56:45.925Z", + "created_at": "2025-06-16T04:56:45.925Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -928,7 +928,7 @@ "model": "base.jobrole", "pk": 38, "fields": { - "created_at": "2025-03-16T04:56:45.934Z", + "created_at": "2025-06-16T04:56:45.934Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -941,7 +941,7 @@ "model": "base.jobrole", "pk": 39, "fields": { - "created_at": "2025-03-16T04:56:45.945Z", + "created_at": "2025-06-16T04:56:45.945Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -954,7 +954,7 @@ "model": "base.jobrole", "pk": 40, "fields": { - "created_at": "2025-03-16T04:57:46.629Z", + "created_at": "2025-06-16T04:57:46.629Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -967,7 +967,7 @@ "model": "base.jobrole", "pk": 41, "fields": { - "created_at": "2025-03-16T04:57:46.641Z", + "created_at": "2025-06-16T04:57:46.641Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -980,7 +980,7 @@ "model": "base.jobrole", "pk": 42, "fields": { - "created_at": "2025-03-16T04:57:46.650Z", + "created_at": "2025-06-16T04:57:46.650Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -993,7 +993,7 @@ "model": "base.jobrole", "pk": 43, "fields": { - "created_at": "2025-03-16T04:57:46.659Z", + "created_at": "2025-06-16T04:57:46.659Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1006,7 +1006,7 @@ "model": "base.jobrole", "pk": 44, "fields": { - "created_at": "2025-03-16T04:57:46.670Z", + "created_at": "2025-06-16T04:57:46.670Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1019,7 +1019,7 @@ "model": "base.jobrole", "pk": 45, "fields": { - "created_at": "2025-03-16T04:57:46.679Z", + "created_at": "2025-06-16T04:57:46.679Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1032,7 +1032,7 @@ "model": "base.jobrole", "pk": 46, "fields": { - "created_at": "2025-03-21T09:21:23.481Z", + "created_at": "2025-06-21T09:21:23.481Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1045,7 +1045,7 @@ "model": "base.worktype", "pk": 1, "fields": { - "created_at": "2025-03-22T08:28:42.978Z", + "created_at": "2025-06-22T08:28:42.978Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1057,7 +1057,7 @@ "model": "base.worktype", "pk": 2, "fields": { - "created_at": "2025-03-22T08:28:55.690Z", + "created_at": "2025-06-22T08:28:55.690Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1069,7 +1069,7 @@ "model": "base.worktype", "pk": 3, "fields": { - "created_at": "2025-03-22T08:29:04.529Z", + "created_at": "2025-06-22T08:29:04.529Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1081,7 +1081,7 @@ "model": "base.worktype", "pk": 4, "fields": { - "created_at": "2025-03-22T08:29:11.796Z", + "created_at": "2025-06-22T08:29:11.796Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1093,7 +1093,7 @@ "model": "base.rotatingworktype", "pk": 1, "fields": { - "created_at": "2025-03-22T08:29:31.860Z", + "created_at": "2025-06-22T08:29:31.860Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1107,7 +1107,7 @@ "model": "base.rotatingworktype", "pk": 2, "fields": { - "created_at": "2025-03-22T08:29:47.665Z", + "created_at": "2025-06-22T08:29:47.665Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1121,14 +1121,14 @@ "model": "base.rotatingworktypeassign", "pk": 1, "fields": { - "created_at": "2025-03-05T09:54:25.663Z", + "created_at": "2025-06-05T09:54:25.663Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 37, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1142,14 +1142,14 @@ "model": "base.rotatingworktypeassign", "pk": 2, "fields": { - "created_at": "2025-03-05T09:54:25.749Z", + "created_at": "2025-06-05T09:54:25.749Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 36, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1163,14 +1163,14 @@ "model": "base.rotatingworktypeassign", "pk": 3, "fields": { - "created_at": "2025-03-05T09:54:25.793Z", + "created_at": "2025-06-05T09:54:25.793Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 9, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1184,14 +1184,14 @@ "model": "base.rotatingworktypeassign", "pk": 4, "fields": { - "created_at": "2025-03-05T09:54:25.845Z", + "created_at": "2025-06-05T09:54:25.845Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 71, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1205,14 +1205,14 @@ "model": "base.rotatingworktypeassign", "pk": 5, "fields": { - "created_at": "2025-03-05T09:54:25.892Z", + "created_at": "2025-06-05T09:54:25.892Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 58, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1226,14 +1226,14 @@ "model": "base.rotatingworktypeassign", "pk": 6, "fields": { - "created_at": "2025-03-05T09:54:25.938Z", + "created_at": "2025-06-05T09:54:25.938Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 44, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1247,14 +1247,14 @@ "model": "base.rotatingworktypeassign", "pk": 7, "fields": { - "created_at": "2025-03-05T09:54:25.991Z", + "created_at": "2025-06-05T09:54:25.991Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 8, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1268,14 +1268,14 @@ "model": "base.rotatingworktypeassign", "pk": 8, "fields": { - "created_at": "2025-03-05T09:54:26.038Z", + "created_at": "2025-06-05T09:54:26.038Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 39, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1289,14 +1289,14 @@ "model": "base.rotatingworktypeassign", "pk": 9, "fields": { - "created_at": "2025-03-05T09:54:26.087Z", + "created_at": "2025-06-05T09:54:26.087Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 75, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1310,14 +1310,14 @@ "model": "base.rotatingworktypeassign", "pk": 10, "fields": { - "created_at": "2025-03-05T09:54:26.135Z", + "created_at": "2025-06-05T09:54:26.135Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 43, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1331,14 +1331,14 @@ "model": "base.rotatingworktypeassign", "pk": 11, "fields": { - "created_at": "2025-03-05T09:54:26.181Z", + "created_at": "2025-06-05T09:54:26.181Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 70, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1352,14 +1352,14 @@ "model": "base.rotatingworktypeassign", "pk": 12, "fields": { - "created_at": "2025-03-05T09:54:26.220Z", + "created_at": "2025-06-05T09:54:26.220Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 66, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1373,14 +1373,14 @@ "model": "base.rotatingworktypeassign", "pk": 13, "fields": { - "created_at": "2025-03-05T09:54:26.277Z", + "created_at": "2025-06-05T09:54:26.277Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 20, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1394,14 +1394,14 @@ "model": "base.rotatingworktypeassign", "pk": 14, "fields": { - "created_at": "2025-03-05T09:54:26.319Z", + "created_at": "2025-06-05T09:54:26.319Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 32, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1415,14 +1415,14 @@ "model": "base.rotatingworktypeassign", "pk": 15, "fields": { - "created_at": "2025-03-05T09:54:26.376Z", + "created_at": "2025-06-05T09:54:26.376Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 6, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1436,14 +1436,14 @@ "model": "base.rotatingworktypeassign", "pk": 16, "fields": { - "created_at": "2025-03-05T09:54:26.425Z", + "created_at": "2025-06-05T09:54:26.425Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 10, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1457,14 +1457,14 @@ "model": "base.rotatingworktypeassign", "pk": 17, "fields": { - "created_at": "2025-03-05T09:54:26.467Z", + "created_at": "2025-06-05T09:54:26.467Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 2, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1478,14 +1478,14 @@ "model": "base.rotatingworktypeassign", "pk": 18, "fields": { - "created_at": "2025-03-05T09:54:26.514Z", + "created_at": "2025-06-05T09:54:26.514Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 17, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1499,14 +1499,14 @@ "model": "base.rotatingworktypeassign", "pk": 19, "fields": { - "created_at": "2025-03-05T09:54:26.554Z", + "created_at": "2025-06-05T09:54:26.554Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 42, "rotating_work_type_id": 2, - "start_date": "2025-03-05", - "next_change_date": "2025-03-11", + "start_date": "2025-06-05", + "next_change_date": "2025-06-11", "current_work_type": 1, "next_work_type": 1, "based_on": "after", @@ -1520,7 +1520,7 @@ "model": "base.employeetype", "pk": 1, "fields": { - "created_at": "2025-03-22T04:47:23.670Z", + "created_at": "2025-06-22T04:47:23.670Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1532,7 +1532,7 @@ "model": "base.employeetype", "pk": 2, "fields": { - "created_at": "2025-03-22T04:47:24.275Z", + "created_at": "2025-06-22T04:47:24.275Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1544,7 +1544,7 @@ "model": "base.employeetype", "pk": 3, "fields": { - "created_at": "2025-03-22T04:47:24.846Z", + "created_at": "2025-06-22T04:47:24.846Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1591,7 +1591,7 @@ "model": "base.employeeshift", "pk": 1, "fields": { - "created_at": "2025-03-22T04:47:23.654Z", + "created_at": "2025-06-22T04:47:23.654Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1605,7 +1605,7 @@ "model": "base.employeeshift", "pk": 2, "fields": { - "created_at": "2025-03-22T04:48:00.417Z", + "created_at": "2025-06-22T04:48:00.417Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1619,7 +1619,7 @@ "model": "base.employeeshift", "pk": 3, "fields": { - "created_at": "2025-03-22T08:31:14.326Z", + "created_at": "2025-06-22T08:31:14.326Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1633,7 +1633,7 @@ "model": "base.employeeshiftschedule", "pk": 1, "fields": { - "created_at": "2025-03-22T08:18:22.683Z", + "created_at": "2025-06-22T08:18:22.683Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1652,7 +1652,7 @@ "model": "base.employeeshiftschedule", "pk": 2, "fields": { - "created_at": "2025-03-22T08:18:22.724Z", + "created_at": "2025-06-22T08:18:22.724Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1671,7 +1671,7 @@ "model": "base.employeeshiftschedule", "pk": 3, "fields": { - "created_at": "2025-03-22T08:18:22.770Z", + "created_at": "2025-06-22T08:18:22.770Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1690,7 +1690,7 @@ "model": "base.employeeshiftschedule", "pk": 4, "fields": { - "created_at": "2025-03-22T08:18:22.797Z", + "created_at": "2025-06-22T08:18:22.797Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1709,7 +1709,7 @@ "model": "base.employeeshiftschedule", "pk": 5, "fields": { - "created_at": "2025-03-22T08:18:22.813Z", + "created_at": "2025-06-22T08:18:22.813Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1728,7 +1728,7 @@ "model": "base.employeeshiftschedule", "pk": 6, "fields": { - "created_at": "2025-03-22T08:23:24.519Z", + "created_at": "2025-06-22T08:23:24.519Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1747,7 +1747,7 @@ "model": "base.employeeshiftschedule", "pk": 7, "fields": { - "created_at": "2025-03-22T08:23:24.560Z", + "created_at": "2025-06-22T08:23:24.560Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1766,7 +1766,7 @@ "model": "base.employeeshiftschedule", "pk": 8, "fields": { - "created_at": "2025-03-22T08:23:24.595Z", + "created_at": "2025-06-22T08:23:24.595Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1785,7 +1785,7 @@ "model": "base.employeeshiftschedule", "pk": 9, "fields": { - "created_at": "2025-03-22T08:23:24.629Z", + "created_at": "2025-06-22T08:23:24.629Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1804,7 +1804,7 @@ "model": "base.employeeshiftschedule", "pk": 10, "fields": { - "created_at": "2025-03-22T08:23:24.648Z", + "created_at": "2025-06-22T08:23:24.648Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1823,7 +1823,7 @@ "model": "base.employeeshiftschedule", "pk": 11, "fields": { - "created_at": "2025-03-22T08:24:04.634Z", + "created_at": "2025-06-22T08:24:04.634Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1842,7 +1842,7 @@ "model": "base.employeeshiftschedule", "pk": 12, "fields": { - "created_at": "2025-03-22T08:32:11.181Z", + "created_at": "2025-06-22T08:32:11.181Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1861,7 +1861,7 @@ "model": "base.employeeshiftschedule", "pk": 13, "fields": { - "created_at": "2025-03-22T08:32:11.211Z", + "created_at": "2025-06-22T08:32:11.211Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1880,7 +1880,7 @@ "model": "base.employeeshiftschedule", "pk": 14, "fields": { - "created_at": "2025-03-22T08:32:11.237Z", + "created_at": "2025-06-22T08:32:11.237Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1899,7 +1899,7 @@ "model": "base.employeeshiftschedule", "pk": 15, "fields": { - "created_at": "2025-03-22T08:32:11.261Z", + "created_at": "2025-06-22T08:32:11.261Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1918,7 +1918,7 @@ "model": "base.employeeshiftschedule", "pk": 16, "fields": { - "created_at": "2025-03-22T08:32:11.281Z", + "created_at": "2025-06-22T08:32:11.281Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1937,7 +1937,7 @@ "model": "base.rotatingshift", "pk": 1, "fields": { - "created_at": "2025-03-22T08:30:28.174Z", + "created_at": "2025-06-22T08:30:28.174Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1951,7 +1951,7 @@ "model": "base.rotatingshift", "pk": 2, "fields": { - "created_at": "2025-03-22T08:30:44.634Z", + "created_at": "2025-06-22T08:30:44.634Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1965,14 +1965,14 @@ "model": "base.rotatingshiftassign", "pk": 1, "fields": { - "created_at": "2025-03-05T09:48:38.892Z", + "created_at": "2025-06-05T09:48:38.892Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 12, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -1986,14 +1986,14 @@ "model": "base.rotatingshiftassign", "pk": 2, "fields": { - "created_at": "2025-03-05T09:48:38.967Z", + "created_at": "2025-06-05T09:48:38.967Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 13, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -2007,14 +2007,14 @@ "model": "base.rotatingshiftassign", "pk": 3, "fields": { - "created_at": "2025-03-05T09:48:39.015Z", + "created_at": "2025-06-05T09:48:39.015Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 11, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -2028,14 +2028,14 @@ "model": "base.rotatingshiftassign", "pk": 4, "fields": { - "created_at": "2025-03-05T09:48:39.058Z", + "created_at": "2025-06-05T09:48:39.058Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 16, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-01", + "start_date": "2025-06-05", + "next_change_date": "2025-06-01", "current_shift": 1, "next_shift": 3, "based_on": "monthly", @@ -2049,14 +2049,14 @@ "model": "base.rotatingshiftassign", "pk": 5, "fields": { - "created_at": "2025-03-05T09:48:39.109Z", + "created_at": "2025-06-05T09:48:39.109Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 18, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-12", + "start_date": "2025-06-05", + "next_change_date": "2025-06-12", "current_shift": 3, "next_shift": 2, "based_on": "weekly", @@ -2070,14 +2070,14 @@ "model": "base.rotatingshiftassign", "pk": 6, "fields": { - "created_at": "2025-03-05T09:48:39.154Z", + "created_at": "2025-06-05T09:48:39.154Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 14, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -2091,14 +2091,14 @@ "model": "base.rotatingshiftassign", "pk": 7, "fields": { - "created_at": "2025-03-05T09:48:39.212Z", + "created_at": "2025-06-05T09:48:39.212Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 15, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-12", + "start_date": "2025-06-05", + "next_change_date": "2025-06-12", "current_shift": 3, "next_shift": 2, "based_on": "weekly", @@ -2112,14 +2112,14 @@ "model": "base.rotatingshiftassign", "pk": 8, "fields": { - "created_at": "2025-03-05T09:48:39.262Z", + "created_at": "2025-06-05T09:48:39.262Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 10, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -2133,14 +2133,14 @@ "model": "base.rotatingshiftassign", "pk": 9, "fields": { - "created_at": "2025-03-05T09:48:39.313Z", + "created_at": "2025-06-05T09:48:39.313Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 17, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-12", + "start_date": "2025-06-05", + "next_change_date": "2025-06-12", "current_shift": 3, "next_shift": 2, "based_on": "weekly", @@ -2154,14 +2154,14 @@ "model": "base.rotatingshiftassign", "pk": 10, "fields": { - "created_at": "2025-03-05T09:48:39.363Z", + "created_at": "2025-06-05T09:48:39.363Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 19, "rotating_shift_id": 1, - "start_date": "2025-03-05", - "next_change_date": "2025-03-06", + "start_date": "2025-06-05", + "next_change_date": "2025-06-06", "current_shift": 1, "next_shift": 3, "based_on": "after", @@ -2175,15 +2175,15 @@ "model": "base.worktyperequest", "pk": 1, "fields": { - "created_at": "2025-03-23T03:42:49.581Z", + "created_at": "2025-06-23T03:42:49.581Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 1, "work_type_id": 2, "previous_work_type_id": null, - "requested_date": "2025-03-01", - "requested_till": "2025-03-30", + "requested_date": "2025-06-01", + "requested_till": "2025-06-30", "description": "need work from home for a month", "is_permanent_work_type": false, "approved": false, @@ -2195,15 +2195,15 @@ "model": "base.worktyperequest", "pk": 2, "fields": { - "created_at": "2025-03-23T03:43:59.915Z", + "created_at": "2025-06-23T03:43:59.915Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 37, "work_type_id": 2, "previous_work_type_id": null, - "requested_date": "2025-03-10", - "requested_till": "2025-03-15", + "requested_date": "2025-06-10", + "requested_till": "2025-06-15", "description": "requesting for work from home", "is_permanent_work_type": false, "approved": false, @@ -2215,15 +2215,15 @@ "model": "base.worktyperequest", "pk": 3, "fields": { - "created_at": "2025-03-23T03:44:35.523Z", + "created_at": "2025-06-23T03:44:35.523Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 13, "work_type_id": 1, "previous_work_type_id": null, - "requested_date": "2025-03-01", - "requested_till": "2025-03-10", + "requested_date": "2025-06-01", + "requested_till": "2025-06-10", "description": "need a work type change", "is_permanent_work_type": false, "approved": false, @@ -2235,15 +2235,15 @@ "model": "base.worktyperequest", "pk": 4, "fields": { - "created_at": "2025-03-23T03:45:05.899Z", + "created_at": "2025-06-23T03:45:05.899Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 32, "work_type_id": 2, "previous_work_type_id": null, - "requested_date": "2025-03-04", - "requested_till": "2025-03-15", + "requested_date": "2025-06-04", + "requested_till": "2025-06-15", "description": "requesting for work from home", "is_permanent_work_type": false, "approved": false, @@ -2255,15 +2255,15 @@ "model": "base.worktyperequest", "pk": 5, "fields": { - "created_at": "2025-03-23T03:46:16.058Z", + "created_at": "2025-06-23T03:46:16.058Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 20, "work_type_id": 4, "previous_work_type_id": null, - "requested_date": "2025-03-01", - "requested_till": "2025-03-30", + "requested_date": "2025-06-01", + "requested_till": "2025-06-30", "description": "remote work type for a month", "is_permanent_work_type": false, "approved": false, @@ -2276,15 +2276,15 @@ "pk": 1, "fields": { "id": 7, - "created_at": "2025-03-05T03:53:28.081Z", + "created_at": "2025-06-05T03:53:28.081Z", "is_active": true, "history_title": null, "history_description": null, "history_highlight": false, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy)", "is_permanent_shift": false, "approved": false, @@ -2296,7 +2296,7 @@ "shift_id": 1, "previous_shift_id": 1, "reallocate_to": null, - "history_date": "2025-03-05T03:53:28.092Z", + "history_date": "2025-06-05T03:53:28.092Z", "history_change_reason": null, "history_type": "+", "history_relation": 7, @@ -2309,15 +2309,15 @@ "pk": 2, "fields": { "id": 8, - "created_at": "2025-03-05T03:53:37.953Z", + "created_at": "2025-06-05T03:53:37.953Z", "is_active": true, "history_title": null, "history_description": null, "history_highlight": false, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2329,7 +2329,7 @@ "shift_id": 1, "previous_shift_id": 1, "reallocate_to": null, - "history_date": "2025-03-05T03:53:37.959Z", + "history_date": "2025-06-05T03:53:37.959Z", "history_change_reason": null, "history_type": "+", "history_relation": 8, @@ -2342,15 +2342,15 @@ "pk": 3, "fields": { "id": 9, - "created_at": "2025-03-05T03:53:52.978Z", + "created_at": "2025-06-05T03:53:52.978Z", "is_active": true, "history_title": null, "history_description": null, "history_highlight": false, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2362,7 +2362,7 @@ "shift_id": 1, "previous_shift_id": 1, "reallocate_to": null, - "history_date": "2025-03-05T03:53:52.986Z", + "history_date": "2025-06-05T03:53:52.986Z", "history_change_reason": null, "history_type": "+", "history_relation": 9, @@ -2375,15 +2375,15 @@ "pk": 4, "fields": { "id": 10, - "created_at": "2025-03-05T03:54:02.742Z", + "created_at": "2025-06-05T03:54:02.742Z", "is_active": true, "history_title": null, "history_description": null, "history_highlight": false, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy) (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2395,7 +2395,7 @@ "shift_id": 1, "previous_shift_id": 1, "reallocate_to": null, - "history_date": "2025-03-05T03:54:02.752Z", + "history_date": "2025-06-05T03:54:02.752Z", "history_change_reason": null, "history_type": "+", "history_relation": 10, @@ -2407,18 +2407,18 @@ "model": "base.shiftrequest", "pk": 1, "fields": { - "created_at": "2025-03-22T11:08:54.434Z", + "created_at": "2025-06-22T11:08:54.434Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 68, "shift_id": 1, "previous_shift_id": 2, - "requested_date": "2025-03-22", + "requested_date": "2025-06-22", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-28", + "requested_till": "2025-06-28", "description": "need a shift change", "is_permanent_shift": false, "approved": false, @@ -2430,18 +2430,18 @@ "model": "base.shiftrequest", "pk": 2, "fields": { - "created_at": "2025-03-22T11:10:20.608Z", + "created_at": "2025-06-22T11:10:20.608Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 68, "shift_id": 2, "previous_shift_id": null, - "requested_date": "2025-03-11", + "requested_date": "2025-06-11", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-18", + "requested_till": "2025-06-18", "description": "need night shift", "is_permanent_shift": false, "approved": true, @@ -2453,18 +2453,18 @@ "model": "base.shiftrequest", "pk": 3, "fields": { - "created_at": "2025-03-22T11:24:28.127Z", + "created_at": "2025-06-22T11:24:28.127Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 22, "shift_id": 1, "previous_shift_id": 2, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change", "is_permanent_shift": false, "approved": true, @@ -2476,18 +2476,18 @@ "model": "base.shiftrequest", "pk": 4, "fields": { - "created_at": "2025-03-22T11:25:36.885Z", + "created_at": "2025-06-22T11:25:36.885Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 53, "shift_id": 1, "previous_shift_id": 2, - "requested_date": "2025-03-12", + "requested_date": "2025-06-12", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-22", + "requested_till": "2025-06-22", "description": "shift change", "is_permanent_shift": false, "approved": false, @@ -2499,18 +2499,18 @@ "model": "base.shiftrequest", "pk": 5, "fields": { - "created_at": "2025-03-22T11:26:22.665Z", + "created_at": "2025-06-22T11:26:22.665Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 69, "shift_id": 2, "previous_shift_id": 1, - "requested_date": "2025-03-10", + "requested_date": "2025-06-10", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-22", + "requested_till": "2025-06-22", "description": "shift change", "is_permanent_shift": false, "approved": false, @@ -2522,18 +2522,18 @@ "model": "base.shiftrequest", "pk": 6, "fields": { - "created_at": "2025-03-22T11:27:15.333Z", + "created_at": "2025-06-22T11:27:15.333Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 45, "shift_id": 1, "previous_shift_id": 3, - "requested_date": "2025-03-01", + "requested_date": "2025-06-01", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-30", + "requested_till": "2025-06-30", "description": "shift change", "is_permanent_shift": false, "approved": false, @@ -2545,18 +2545,18 @@ "model": "base.shiftrequest", "pk": 7, "fields": { - "created_at": "2025-03-05T03:53:28.081Z", + "created_at": "2025-06-05T03:53:28.081Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 12, "shift_id": 1, "previous_shift_id": 1, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy)", "is_permanent_shift": false, "approved": false, @@ -2568,18 +2568,18 @@ "model": "base.shiftrequest", "pk": 8, "fields": { - "created_at": "2025-03-05T03:53:37.953Z", + "created_at": "2025-06-05T03:53:37.953Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 3, "shift_id": 1, "previous_shift_id": 1, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2591,18 +2591,18 @@ "model": "base.shiftrequest", "pk": 9, "fields": { - "created_at": "2025-03-05T03:53:52.978Z", + "created_at": "2025-06-05T03:53:52.978Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 31, "shift_id": 1, "previous_shift_id": 1, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2614,18 +2614,18 @@ "model": "base.shiftrequest", "pk": 10, "fields": { - "created_at": "2025-03-05T03:54:02.742Z", + "created_at": "2025-06-05T03:54:02.742Z", "created_by": 1, "modified_by": 1, "is_active": true, "employee_id": 2, "shift_id": 1, "previous_shift_id": 1, - "requested_date": "2025-03-03", + "requested_date": "2025-06-03", "reallocate_to": null, "reallocate_approved": false, "reallocate_canceled": false, - "requested_till": "2025-03-29", + "requested_till": "2025-06-29", "description": "shift change (copy) (copy) (copy) (copy)", "is_permanent_shift": false, "approved": false, @@ -2637,7 +2637,7 @@ "model": "base.tags", "pk": 1, "fields": { - "created_at": "2025-03-22T08:42:08.218Z", + "created_at": "2025-06-22T08:42:08.218Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2650,7 +2650,7 @@ "model": "base.tags", "pk": 2, "fields": { - "created_at": "2025-03-22T08:42:23.547Z", + "created_at": "2025-06-22T08:42:23.547Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2663,7 +2663,7 @@ "model": "base.tags", "pk": 3, "fields": { - "created_at": "2025-03-22T08:42:39.708Z", + "created_at": "2025-06-22T08:42:39.708Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2676,7 +2676,7 @@ "model": "base.tags", "pk": 4, "fields": { - "created_at": "2025-03-24T05:31:23.654Z", + "created_at": "2025-06-24T05:31:23.654Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2689,7 +2689,7 @@ "model": "base.tags", "pk": 5, "fields": { - "created_at": "2025-03-24T05:42:45.721Z", + "created_at": "2025-06-24T05:42:45.721Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2702,7 +2702,7 @@ "model": "base.tags", "pk": 6, "fields": { - "created_at": "2025-03-12T03:26:32.592Z", + "created_at": "2025-06-12T03:26:32.592Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2715,7 +2715,7 @@ "model": "base.tags", "pk": 7, "fields": { - "created_at": "2025-03-12T03:49:46.452Z", + "created_at": "2025-06-12T03:49:46.452Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2728,7 +2728,7 @@ "model": "base.tags", "pk": 17, "fields": { - "created_at": "2025-03-12T06:48:51.312Z", + "created_at": "2025-06-12T06:48:51.312Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2741,7 +2741,7 @@ "model": "base.tags", "pk": 18, "fields": { - "created_at": "2025-03-12T06:49:10.165Z", + "created_at": "2025-06-12T06:49:10.165Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2754,7 +2754,7 @@ "model": "base.tags", "pk": 19, "fields": { - "created_at": "2025-03-12T06:49:42.695Z", + "created_at": "2025-06-12T06:49:42.695Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2767,7 +2767,7 @@ "model": "base.tags", "pk": 20, "fields": { - "created_at": "2025-03-12T06:50:12.441Z", + "created_at": "2025-06-12T06:50:12.441Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2780,7 +2780,7 @@ "model": "base.tags", "pk": 21, "fields": { - "created_at": "2025-03-12T06:50:50.090Z", + "created_at": "2025-06-12T06:50:50.090Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2793,7 +2793,7 @@ "model": "base.tags", "pk": 22, "fields": { - "created_at": "2025-03-12T06:51:04.892Z", + "created_at": "2025-06-12T06:51:04.892Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2806,7 +2806,7 @@ "model": "base.tags", "pk": 23, "fields": { - "created_at": "2025-03-12T07:05:58.903Z", + "created_at": "2025-06-12T07:05:58.903Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2819,7 +2819,7 @@ "model": "base.tags", "pk": 24, "fields": { - "created_at": "2025-03-12T07:06:07.247Z", + "created_at": "2025-06-12T07:06:07.247Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2832,7 +2832,7 @@ "model": "base.tags", "pk": 25, "fields": { - "created_at": "2025-03-12T07:08:52.033Z", + "created_at": "2025-06-12T07:08:52.033Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2845,7 +2845,7 @@ "model": "base.tags", "pk": 26, "fields": { - "created_at": "2025-03-12T07:12:53.694Z", + "created_at": "2025-06-12T07:12:53.694Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2858,7 +2858,7 @@ "model": "base.tags", "pk": 27, "fields": { - "created_at": "2025-03-12T07:13:16.506Z", + "created_at": "2025-06-12T07:13:16.506Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2871,7 +2871,7 @@ "model": "base.tags", "pk": 28, "fields": { - "created_at": "2025-03-12T07:13:38.071Z", + "created_at": "2025-06-12T07:13:38.071Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2884,7 +2884,7 @@ "model": "base.tags", "pk": 29, "fields": { - "created_at": "2025-03-12T07:14:05.035Z", + "created_at": "2025-06-12T07:14:05.035Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2927,7 +2927,7 @@ "model": "base.dashboardemployeecharts", "pk": 1, "fields": { - "created_at": "2025-03-21T11:23:17.664Z", + "created_at": "2025-06-21T11:23:17.664Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2949,7 +2949,7 @@ "model": "base.announcement", "pk": 1, "fields": { - "created_at": "2025-03-17T10:34:52.749Z", + "created_at": "2025-06-17T10:34:52.749Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2972,7 +2972,7 @@ "model": "base.holidays", "pk": 1, "fields": { - "created_at": "2025-03-05T09:39:13.776Z", + "created_at": "2025-06-05T09:39:13.776Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3137,7 +3137,7 @@ "model": "base.companyleaves", "pk": 1, "fields": { - "created_at": "2025-03-05T09:39:13.993Z", + "created_at": "2025-06-05T09:39:13.993Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3150,7 +3150,7 @@ "model": "base.companyleaves", "pk": 2, "fields": { - "created_at": "2025-03-05T09:39:14.027Z", + "created_at": "2025-06-05T09:39:14.027Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3163,7 +3163,7 @@ "model": "base.companyleaves", "pk": 3, "fields": { - "created_at": "2025-03-05T09:39:14.044Z", + "created_at": "2025-06-05T09:39:14.044Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3176,7 +3176,7 @@ "model": "base.multipleapprovalcondition", "pk": 1, "fields": { - "created_at": "2025-03-12T10:22:43.982Z", + "created_at": "2025-06-12T10:22:43.982Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3193,7 +3193,7 @@ "model": "base.horillamailtemplate", "pk": 1, "fields": { - "created_at": "2025-03-05T09:39:13.733Z", + "created_at": "2025-06-05T09:39:13.733Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3206,7 +3206,7 @@ "model": "base.horillamailtemplate", "pk": 2, "fields": { - "created_at": "2025-03-12T10:23:52.188Z", + "created_at": "2025-06-12T10:23:52.188Z", "created_by": 1, "modified_by": 1, "is_active": false, diff --git a/load_data/employee_info_data.json b/load_data/employee_info_data.json index b44b9697c..a25679f61 100644 --- a/load_data/employee_info_data.json +++ b/load_data/employee_info_data.json @@ -3909,7 +3909,7 @@ "model": "employee.actiontype", "pk": 1, "fields": { - "created_at": "2025-03-16T05:07:05.173Z", + "created_at": "2025-06-16T05:07:05.173Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3922,7 +3922,7 @@ "model": "employee.actiontype", "pk": 2, "fields": { - "created_at": "2025-03-16T05:07:24.317Z", + "created_at": "2025-06-16T05:07:24.317Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3935,7 +3935,7 @@ "model": "employee.actiontype", "pk": 3, "fields": { - "created_at": "2025-03-16T05:07:53.560Z", + "created_at": "2025-06-16T05:07:53.560Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3948,7 +3948,7 @@ "model": "employee.actiontype", "pk": 4, "fields": { - "created_at": "2025-03-16T05:08:19.145Z", + "created_at": "2025-06-16T05:08:19.145Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3961,7 +3961,7 @@ "model": "employee.employeetag", "pk": 1, "fields": { - "created_at": "2025-03-16T05:10:01.047Z", + "created_at": "2025-06-16T05:10:01.047Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3973,7 +3973,7 @@ "model": "employee.employeetag", "pk": 2, "fields": { - "created_at": "2025-03-16T05:10:25.133Z", + "created_at": "2025-06-16T05:10:25.133Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3985,7 +3985,7 @@ "model": "horilla_documents.documentrequest", "pk": 1, "fields": { - "created_at": "2025-03-21T05:19:33.069Z", + "created_at": "2025-06-21T05:19:33.069Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4000,7 +4000,7 @@ "model": "horilla_documents.documentrequest", "pk": 2, "fields": { - "created_at": "2025-03-21T05:20:12.150Z", + "created_at": "2025-06-21T05:20:12.150Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4015,7 +4015,7 @@ "model": "horilla_documents.document", "pk": 1, "fields": { - "created_at": "2025-03-21T05:19:33.102Z", + "created_at": "2025-06-21T05:19:33.102Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4034,7 +4034,7 @@ "model": "horilla_documents.document", "pk": 2, "fields": { - "created_at": "2025-03-21T05:19:33.109Z", + "created_at": "2025-06-21T05:19:33.109Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4053,7 +4053,7 @@ "model": "horilla_documents.document", "pk": 3, "fields": { - "created_at": "2025-03-21T05:19:33.114Z", + "created_at": "2025-06-21T05:19:33.114Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4072,7 +4072,7 @@ "model": "horilla_documents.document", "pk": 4, "fields": { - "created_at": "2025-03-21T05:19:33.118Z", + "created_at": "2025-06-21T05:19:33.118Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4091,7 +4091,7 @@ "model": "horilla_documents.document", "pk": 5, "fields": { - "created_at": "2025-03-21T05:19:33.123Z", + "created_at": "2025-06-21T05:19:33.123Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4110,7 +4110,7 @@ "model": "horilla_documents.document", "pk": 6, "fields": { - "created_at": "2025-03-21T05:19:33.129Z", + "created_at": "2025-06-21T05:19:33.129Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4129,7 +4129,7 @@ "model": "horilla_documents.document", "pk": 7, "fields": { - "created_at": "2025-03-21T05:19:33.134Z", + "created_at": "2025-06-21T05:19:33.134Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4148,7 +4148,7 @@ "model": "horilla_documents.document", "pk": 8, "fields": { - "created_at": "2025-03-21T05:19:33.138Z", + "created_at": "2025-06-21T05:19:33.138Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4167,7 +4167,7 @@ "model": "horilla_documents.document", "pk": 9, "fields": { - "created_at": "2025-03-21T05:19:33.144Z", + "created_at": "2025-06-21T05:19:33.144Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4186,7 +4186,7 @@ "model": "horilla_documents.document", "pk": 10, "fields": { - "created_at": "2025-03-21T05:19:33.149Z", + "created_at": "2025-06-21T05:19:33.149Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4205,7 +4205,7 @@ "model": "horilla_documents.document", "pk": 11, "fields": { - "created_at": "2025-03-21T05:20:12.181Z", + "created_at": "2025-06-21T05:20:12.181Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4224,7 +4224,7 @@ "model": "horilla_documents.document", "pk": 12, "fields": { - "created_at": "2025-03-21T05:20:12.186Z", + "created_at": "2025-06-21T05:20:12.186Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4243,7 +4243,7 @@ "model": "horilla_documents.document", "pk": 13, "fields": { - "created_at": "2025-03-21T05:20:12.193Z", + "created_at": "2025-06-21T05:20:12.193Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4262,7 +4262,7 @@ "model": "horilla_documents.document", "pk": 14, "fields": { - "created_at": "2025-03-21T05:20:12.197Z", + "created_at": "2025-06-21T05:20:12.197Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4281,7 +4281,7 @@ "model": "horilla_documents.document", "pk": 15, "fields": { - "created_at": "2025-03-21T05:20:12.201Z", + "created_at": "2025-06-21T05:20:12.201Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4300,7 +4300,7 @@ "model": "horilla_documents.document", "pk": 16, "fields": { - "created_at": "2025-03-21T05:20:12.206Z", + "created_at": "2025-06-21T05:20:12.206Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4319,7 +4319,7 @@ "model": "horilla_documents.document", "pk": 17, "fields": { - "created_at": "2025-03-21T05:20:12.211Z", + "created_at": "2025-06-21T05:20:12.211Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4338,7 +4338,7 @@ "model": "horilla_documents.document", "pk": 18, "fields": { - "created_at": "2025-03-21T05:20:12.216Z", + "created_at": "2025-06-21T05:20:12.216Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4357,7 +4357,7 @@ "model": "horilla_documents.document", "pk": 19, "fields": { - "created_at": "2025-03-21T05:20:12.220Z", + "created_at": "2025-06-21T05:20:12.220Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4376,7 +4376,7 @@ "model": "horilla_documents.document", "pk": 20, "fields": { - "created_at": "2025-03-21T05:20:12.227Z", + "created_at": "2025-06-21T05:20:12.227Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4395,7 +4395,7 @@ "model": "horilla_documents.document", "pk": 21, "fields": { - "created_at": "2025-03-21T05:20:12.231Z", + "created_at": "2025-06-21T05:20:12.231Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -4414,7 +4414,7 @@ "model": "horilla_documents.document", "pk": 22, "fields": { - "created_at": "2025-03-21T05:20:12.235Z", + "created_at": "2025-06-21T05:20:12.235Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/faq.json b/load_data/faq.json index a7144f3ea..10769d4ee 100644 --- a/load_data/faq.json +++ b/load_data/faq.json @@ -3,7 +3,7 @@ "model": "helpdesk.faq", "pk": 1, "fields": { - "created_at": "2025-05-05T11:31:40.360Z", + "created_at": "2025-06-05T11:31:40.360Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -18,7 +18,7 @@ "model": "helpdesk.faq", "pk": 2, "fields": { - "created_at": "2025-05-05T11:31:40.424Z", + "created_at": "2025-06-05T11:31:40.424Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -33,7 +33,7 @@ "model": "helpdesk.faq", "pk": 3, "fields": { - "created_at": "2025-05-05T11:31:40.474Z", + "created_at": "2025-06-05T11:31:40.474Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -48,7 +48,7 @@ "model": "helpdesk.faq", "pk": 4, "fields": { - "created_at": "2025-05-05T11:31:40.529Z", + "created_at": "2025-06-05T11:31:40.529Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -63,7 +63,7 @@ "model": "helpdesk.faq", "pk": 5, "fields": { - "created_at": "2025-05-05T11:31:40.580Z", + "created_at": "2025-06-05T11:31:40.580Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -78,7 +78,7 @@ "model": "helpdesk.faq", "pk": 6, "fields": { - "created_at": "2025-05-05T11:31:40.615Z", + "created_at": "2025-06-05T11:31:40.615Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -93,7 +93,7 @@ "model": "helpdesk.faq", "pk": 7, "fields": { - "created_at": "2025-05-05T11:31:40.666Z", + "created_at": "2025-06-05T11:31:40.666Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -108,7 +108,7 @@ "model": "helpdesk.faq", "pk": 8, "fields": { - "created_at": "2025-05-05T11:31:40.718Z", + "created_at": "2025-06-05T11:31:40.718Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -123,7 +123,7 @@ "model": "helpdesk.faq", "pk": 9, "fields": { - "created_at": "2025-05-05T11:31:40.772Z", + "created_at": "2025-06-05T11:31:40.772Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -138,7 +138,7 @@ "model": "helpdesk.faq", "pk": 10, "fields": { - "created_at": "2025-05-05T11:31:40.826Z", + "created_at": "2025-06-05T11:31:40.826Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -153,7 +153,7 @@ "model": "helpdesk.faq", "pk": 11, "fields": { - "created_at": "2025-05-05T11:31:40.881Z", + "created_at": "2025-06-05T11:31:40.881Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -168,7 +168,7 @@ "model": "helpdesk.faq", "pk": 12, "fields": { - "created_at": "2025-05-05T11:31:40.932Z", + "created_at": "2025-06-05T11:31:40.932Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -183,7 +183,7 @@ "model": "helpdesk.faq", "pk": 13, "fields": { - "created_at": "2025-05-05T11:31:40.991Z", + "created_at": "2025-06-05T11:31:40.991Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -198,7 +198,7 @@ "model": "helpdesk.faq", "pk": 14, "fields": { - "created_at": "2025-05-05T11:31:41.066Z", + "created_at": "2025-06-05T11:31:41.066Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -213,7 +213,7 @@ "model": "helpdesk.faq", "pk": 15, "fields": { - "created_at": "2025-05-05T11:31:41.162Z", + "created_at": "2025-06-05T11:31:41.162Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -228,7 +228,7 @@ "model": "helpdesk.faq", "pk": 16, "fields": { - "created_at": "2025-05-05T11:31:41.242Z", + "created_at": "2025-06-05T11:31:41.242Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -243,7 +243,7 @@ "model": "helpdesk.faq", "pk": 17, "fields": { - "created_at": "2025-05-05T11:31:41.308Z", + "created_at": "2025-06-05T11:31:41.308Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -258,7 +258,7 @@ "model": "helpdesk.faq", "pk": 18, "fields": { - "created_at": "2025-05-05T11:31:41.361Z", + "created_at": "2025-06-05T11:31:41.361Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -273,7 +273,7 @@ "model": "helpdesk.faq", "pk": 19, "fields": { - "created_at": "2025-05-05T11:31:41.431Z", + "created_at": "2025-06-05T11:31:41.431Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -288,7 +288,7 @@ "model": "helpdesk.faq", "pk": 20, "fields": { - "created_at": "2025-05-05T11:31:41.502Z", + "created_at": "2025-06-05T11:31:41.502Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -303,7 +303,7 @@ "model": "helpdesk.faq", "pk": 21, "fields": { - "created_at": "2025-05-05T11:31:41.637Z", + "created_at": "2025-06-05T11:31:41.637Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -318,7 +318,7 @@ "model": "helpdesk.faq", "pk": 22, "fields": { - "created_at": "2025-05-05T11:31:41.698Z", + "created_at": "2025-06-05T11:31:41.698Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -333,7 +333,7 @@ "model": "helpdesk.faq", "pk": 23, "fields": { - "created_at": "2025-05-05T11:31:41.762Z", + "created_at": "2025-06-05T11:31:41.762Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -348,7 +348,7 @@ "model": "helpdesk.faq", "pk": 24, "fields": { - "created_at": "2025-05-05T11:31:41.819Z", + "created_at": "2025-06-05T11:31:41.819Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -363,7 +363,7 @@ "model": "helpdesk.faq", "pk": 25, "fields": { - "created_at": "2025-05-05T11:31:41.886Z", + "created_at": "2025-06-05T11:31:41.886Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -378,7 +378,7 @@ "model": "helpdesk.faq", "pk": 26, "fields": { - "created_at": "2025-05-05T11:31:41.950Z", + "created_at": "2025-06-05T11:31:41.950Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -393,7 +393,7 @@ "model": "helpdesk.faq", "pk": 27, "fields": { - "created_at": "2025-05-05T11:31:42.017Z", + "created_at": "2025-06-05T11:31:42.017Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -408,7 +408,7 @@ "model": "helpdesk.faq", "pk": 28, "fields": { - "created_at": "2025-05-05T11:31:42.078Z", + "created_at": "2025-06-05T11:31:42.078Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -423,7 +423,7 @@ "model": "helpdesk.faq", "pk": 29, "fields": { - "created_at": "2025-05-05T11:31:42.137Z", + "created_at": "2025-06-05T11:31:42.137Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -438,7 +438,7 @@ "model": "helpdesk.faq", "pk": 30, "fields": { - "created_at": "2025-05-05T11:31:42.188Z", + "created_at": "2025-06-05T11:31:42.188Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -453,7 +453,7 @@ "model": "helpdesk.faq", "pk": 31, "fields": { - "created_at": "2025-05-05T11:31:42.238Z", + "created_at": "2025-06-05T11:31:42.238Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -468,7 +468,7 @@ "model": "helpdesk.faq", "pk": 32, "fields": { - "created_at": "2025-05-05T11:31:42.289Z", + "created_at": "2025-06-05T11:31:42.289Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -483,7 +483,7 @@ "model": "helpdesk.faq", "pk": 33, "fields": { - "created_at": "2025-05-05T11:31:42.341Z", + "created_at": "2025-06-05T11:31:42.341Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -498,7 +498,7 @@ "model": "helpdesk.faq", "pk": 34, "fields": { - "created_at": "2025-05-05T11:31:42.395Z", + "created_at": "2025-06-05T11:31:42.395Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -513,7 +513,7 @@ "model": "helpdesk.faq", "pk": 35, "fields": { - "created_at": "2025-05-05T11:31:42.440Z", + "created_at": "2025-06-05T11:31:42.440Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -528,7 +528,7 @@ "model": "helpdesk.faq", "pk": 36, "fields": { - "created_at": "2025-05-05T11:31:42.493Z", + "created_at": "2025-06-05T11:31:42.493Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -543,7 +543,7 @@ "model": "helpdesk.faq", "pk": 37, "fields": { - "created_at": "2025-05-05T11:31:42.542Z", + "created_at": "2025-06-05T11:31:42.542Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -558,7 +558,7 @@ "model": "helpdesk.faq", "pk": 38, "fields": { - "created_at": "2025-05-05T11:31:42.610Z", + "created_at": "2025-06-05T11:31:42.610Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -573,7 +573,7 @@ "model": "helpdesk.faq", "pk": 39, "fields": { - "created_at": "2025-05-05T11:31:42.664Z", + "created_at": "2025-06-05T11:31:42.664Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -588,7 +588,7 @@ "model": "helpdesk.faq", "pk": 40, "fields": { - "created_at": "2025-05-05T11:31:42.734Z", + "created_at": "2025-06-05T11:31:42.734Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -603,7 +603,7 @@ "model": "helpdesk.faq", "pk": 41, "fields": { - "created_at": "2025-05-05T11:31:42.797Z", + "created_at": "2025-06-05T11:31:42.797Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -618,7 +618,7 @@ "model": "helpdesk.faq", "pk": 42, "fields": { - "created_at": "2025-05-05T11:31:42.850Z", + "created_at": "2025-06-05T11:31:42.850Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -633,7 +633,7 @@ "model": "helpdesk.faq", "pk": 43, "fields": { - "created_at": "2025-05-05T11:31:42.903Z", + "created_at": "2025-06-05T11:31:42.903Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -648,7 +648,7 @@ "model": "helpdesk.faq", "pk": 44, "fields": { - "created_at": "2025-05-05T11:31:42.964Z", + "created_at": "2025-06-05T11:31:42.964Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -663,7 +663,7 @@ "model": "helpdesk.faq", "pk": 45, "fields": { - "created_at": "2025-05-05T11:31:43.039Z", + "created_at": "2025-06-05T11:31:43.039Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -678,7 +678,7 @@ "model": "helpdesk.faq", "pk": 46, "fields": { - "created_at": "2025-05-05T11:31:43.114Z", + "created_at": "2025-06-05T11:31:43.114Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -693,7 +693,7 @@ "model": "helpdesk.faq", "pk": 47, "fields": { - "created_at": "2025-05-05T11:31:43.212Z", + "created_at": "2025-06-05T11:31:43.212Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -708,7 +708,7 @@ "model": "helpdesk.faq", "pk": 48, "fields": { - "created_at": "2025-05-05T11:31:43.308Z", + "created_at": "2025-06-05T11:31:43.308Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -723,7 +723,7 @@ "model": "helpdesk.faq", "pk": 49, "fields": { - "created_at": "2025-05-05T11:31:43.367Z", + "created_at": "2025-06-05T11:31:43.367Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -738,7 +738,7 @@ "model": "helpdesk.faq", "pk": 50, "fields": { - "created_at": "2025-05-05T11:31:43.430Z", + "created_at": "2025-06-05T11:31:43.430Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -753,7 +753,7 @@ "model": "helpdesk.faq", "pk": 51, "fields": { - "created_at": "2025-05-05T11:31:43.484Z", + "created_at": "2025-06-05T11:31:43.484Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -768,7 +768,7 @@ "model": "helpdesk.faq", "pk": 52, "fields": { - "created_at": "2025-05-05T11:31:43.543Z", + "created_at": "2025-06-05T11:31:43.543Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -783,7 +783,7 @@ "model": "helpdesk.faq", "pk": 53, "fields": { - "created_at": "2025-05-05T11:31:43.604Z", + "created_at": "2025-06-05T11:31:43.604Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -798,7 +798,7 @@ "model": "helpdesk.faq", "pk": 54, "fields": { - "created_at": "2025-05-05T11:31:43.657Z", + "created_at": "2025-06-05T11:31:43.657Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -813,7 +813,7 @@ "model": "helpdesk.faq", "pk": 55, "fields": { - "created_at": "2025-05-05T11:31:43.713Z", + "created_at": "2025-06-05T11:31:43.713Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -828,7 +828,7 @@ "model": "helpdesk.faq", "pk": 56, "fields": { - "created_at": "2025-05-05T11:31:43.772Z", + "created_at": "2025-06-05T11:31:43.772Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -843,7 +843,7 @@ "model": "helpdesk.faq", "pk": 57, "fields": { - "created_at": "2025-05-05T11:31:43.869Z", + "created_at": "2025-06-05T11:31:43.869Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -858,7 +858,7 @@ "model": "helpdesk.faq", "pk": 58, "fields": { - "created_at": "2025-05-05T11:31:43.992Z", + "created_at": "2025-06-05T11:31:43.992Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -873,7 +873,7 @@ "model": "helpdesk.faq", "pk": 59, "fields": { - "created_at": "2025-05-05T11:31:44.121Z", + "created_at": "2025-06-05T11:31:44.121Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -888,7 +888,7 @@ "model": "helpdesk.faq", "pk": 60, "fields": { - "created_at": "2025-05-05T11:31:44.217Z", + "created_at": "2025-06-05T11:31:44.217Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -903,7 +903,7 @@ "model": "helpdesk.faq", "pk": 61, "fields": { - "created_at": "2025-05-05T11:31:44.308Z", + "created_at": "2025-06-05T11:31:44.308Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -918,7 +918,7 @@ "model": "helpdesk.faq", "pk": 62, "fields": { - "created_at": "2025-05-05T11:31:44.382Z", + "created_at": "2025-06-05T11:31:44.382Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -933,7 +933,7 @@ "model": "helpdesk.faq", "pk": 63, "fields": { - "created_at": "2025-05-05T11:31:44.453Z", + "created_at": "2025-06-05T11:31:44.453Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -948,7 +948,7 @@ "model": "helpdesk.faq", "pk": 64, "fields": { - "created_at": "2025-05-05T11:31:44.502Z", + "created_at": "2025-06-05T11:31:44.502Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -963,7 +963,7 @@ "model": "helpdesk.faq", "pk": 65, "fields": { - "created_at": "2025-05-05T11:31:44.556Z", + "created_at": "2025-06-05T11:31:44.556Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/faq_category.json b/load_data/faq_category.json index 5efb4408e..8a3f7872c 100644 --- a/load_data/faq_category.json +++ b/load_data/faq_category.json @@ -3,7 +3,7 @@ "model": "helpdesk.faqcategory", "pk": 1, "fields": { - "created_at": "2025-05-05T11:31:39.594Z", + "created_at": "2025-06-05T11:31:39.594Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -15,7 +15,7 @@ "model": "helpdesk.faqcategory", "pk": 2, "fields": { - "created_at": "2025-05-05T11:31:39.660Z", + "created_at": "2025-06-05T11:31:39.660Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -27,7 +27,7 @@ "model": "helpdesk.faqcategory", "pk": 3, "fields": { - "created_at": "2025-05-05T11:31:39.686Z", + "created_at": "2025-06-05T11:31:39.686Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -39,7 +39,7 @@ "model": "helpdesk.faqcategory", "pk": 4, "fields": { - "created_at": "2025-05-05T11:31:39.712Z", + "created_at": "2025-06-05T11:31:39.712Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -51,7 +51,7 @@ "model": "helpdesk.faqcategory", "pk": 5, "fields": { - "created_at": "2025-05-05T11:31:39.737Z", + "created_at": "2025-06-05T11:31:39.737Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -63,7 +63,7 @@ "model": "helpdesk.faqcategory", "pk": 6, "fields": { - "created_at": "2025-05-05T11:31:39.761Z", + "created_at": "2025-06-05T11:31:39.761Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -75,7 +75,7 @@ "model": "helpdesk.faqcategory", "pk": 7, "fields": { - "created_at": "2025-05-05T11:31:39.787Z", + "created_at": "2025-06-05T11:31:39.787Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/leave_data.json b/load_data/leave_data.json index fbebdaefb..d8beb914c 100644 --- a/load_data/leave_data.json +++ b/load_data/leave_data.json @@ -3,7 +3,7 @@ "model": "leave.leavetype", "pk": 1, "fields": { - "created_at": "2025-03-22T08:40:47.352Z", + "created_at": "2025-06-22T08:40:47.352Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -37,7 +37,7 @@ "model": "leave.leavetype", "pk": 2, "fields": { - "created_at": "2025-03-22T10:22:18.995Z", + "created_at": "2025-06-22T10:22:18.995Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -71,7 +71,7 @@ "model": "leave.leavetype", "pk": 3, "fields": { - "created_at": "2025-03-22T10:23:27.333Z", + "created_at": "2025-06-22T10:23:27.333Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -105,7 +105,7 @@ "model": "leave.leavetype", "pk": 4, "fields": { - "created_at": "2025-03-22T10:24:19.925Z", + "created_at": "2025-06-22T10:24:19.925Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -139,7 +139,7 @@ "model": "leave.availableleave", "pk": 1, "fields": { - "created_at": "2025-03-22T10:35:05.363Z", + "created_at": "2025-06-22T10:35:05.363Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -148,8 +148,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -157,7 +157,7 @@ "model": "leave.availableleave", "pk": 2, "fields": { - "created_at": "2025-03-22T10:35:05.580Z", + "created_at": "2025-06-22T10:35:05.580Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -166,8 +166,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -175,7 +175,7 @@ "model": "leave.availableleave", "pk": 3, "fields": { - "created_at": "2025-03-22T10:35:05.678Z", + "created_at": "2025-06-22T10:35:05.678Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -184,8 +184,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -193,7 +193,7 @@ "model": "leave.availableleave", "pk": 4, "fields": { - "created_at": "2025-03-22T10:35:05.755Z", + "created_at": "2025-06-22T10:35:05.755Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -202,8 +202,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -211,7 +211,7 @@ "model": "leave.availableleave", "pk": 5, "fields": { - "created_at": "2025-03-22T10:35:05.828Z", + "created_at": "2025-06-22T10:35:05.828Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -220,8 +220,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -229,7 +229,7 @@ "model": "leave.availableleave", "pk": 6, "fields": { - "created_at": "2025-03-22T10:35:05.911Z", + "created_at": "2025-06-22T10:35:05.911Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -238,8 +238,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -247,7 +247,7 @@ "model": "leave.availableleave", "pk": 7, "fields": { - "created_at": "2025-03-22T10:35:06.018Z", + "created_at": "2025-06-22T10:35:06.018Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -256,8 +256,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -265,7 +265,7 @@ "model": "leave.availableleave", "pk": 8, "fields": { - "created_at": "2025-03-22T10:35:06.122Z", + "created_at": "2025-06-22T10:35:06.122Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -274,8 +274,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -283,7 +283,7 @@ "model": "leave.availableleave", "pk": 9, "fields": { - "created_at": "2025-03-22T10:35:06.213Z", + "created_at": "2025-06-22T10:35:06.213Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -292,8 +292,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -301,7 +301,7 @@ "model": "leave.availableleave", "pk": 10, "fields": { - "created_at": "2025-03-22T10:35:06.281Z", + "created_at": "2025-06-22T10:35:06.281Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -310,8 +310,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -319,7 +319,7 @@ "model": "leave.availableleave", "pk": 11, "fields": { - "created_at": "2025-03-22T10:35:06.350Z", + "created_at": "2025-06-22T10:35:06.350Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -328,8 +328,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -337,7 +337,7 @@ "model": "leave.availableleave", "pk": 12, "fields": { - "created_at": "2025-03-22T10:35:06.422Z", + "created_at": "2025-06-22T10:35:06.422Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -346,8 +346,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -355,7 +355,7 @@ "model": "leave.availableleave", "pk": 13, "fields": { - "created_at": "2025-03-22T10:35:06.494Z", + "created_at": "2025-06-22T10:35:06.494Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -364,8 +364,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -373,7 +373,7 @@ "model": "leave.availableleave", "pk": 14, "fields": { - "created_at": "2025-03-22T10:35:06.564Z", + "created_at": "2025-06-22T10:35:06.564Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -382,8 +382,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -391,7 +391,7 @@ "model": "leave.availableleave", "pk": 15, "fields": { - "created_at": "2025-03-22T10:35:06.639Z", + "created_at": "2025-06-22T10:35:06.639Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -400,8 +400,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -409,7 +409,7 @@ "model": "leave.availableleave", "pk": 16, "fields": { - "created_at": "2025-03-22T10:35:06.714Z", + "created_at": "2025-06-22T10:35:06.714Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -418,8 +418,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -427,7 +427,7 @@ "model": "leave.availableleave", "pk": 17, "fields": { - "created_at": "2025-03-22T10:35:06.785Z", + "created_at": "2025-06-22T10:35:06.785Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -436,8 +436,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -445,7 +445,7 @@ "model": "leave.availableleave", "pk": 18, "fields": { - "created_at": "2025-03-22T10:35:06.850Z", + "created_at": "2025-06-22T10:35:06.850Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -454,8 +454,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -463,7 +463,7 @@ "model": "leave.availableleave", "pk": 19, "fields": { - "created_at": "2025-03-22T10:35:06.911Z", + "created_at": "2025-06-22T10:35:06.911Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -472,8 +472,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -481,7 +481,7 @@ "model": "leave.availableleave", "pk": 20, "fields": { - "created_at": "2025-03-22T10:35:06.981Z", + "created_at": "2025-06-22T10:35:06.981Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -490,8 +490,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -499,7 +499,7 @@ "model": "leave.availableleave", "pk": 21, "fields": { - "created_at": "2025-03-22T10:35:07.040Z", + "created_at": "2025-06-22T10:35:07.040Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -508,8 +508,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -517,7 +517,7 @@ "model": "leave.availableleave", "pk": 22, "fields": { - "created_at": "2025-03-22T10:35:07.103Z", + "created_at": "2025-06-22T10:35:07.103Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -526,8 +526,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -535,7 +535,7 @@ "model": "leave.availableleave", "pk": 23, "fields": { - "created_at": "2025-03-22T10:35:07.161Z", + "created_at": "2025-06-22T10:35:07.161Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -544,8 +544,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -553,7 +553,7 @@ "model": "leave.availableleave", "pk": 24, "fields": { - "created_at": "2025-03-22T10:35:07.230Z", + "created_at": "2025-06-22T10:35:07.230Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -562,8 +562,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -571,7 +571,7 @@ "model": "leave.availableleave", "pk": 25, "fields": { - "created_at": "2025-03-22T10:35:07.288Z", + "created_at": "2025-06-22T10:35:07.288Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -580,8 +580,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -589,7 +589,7 @@ "model": "leave.availableleave", "pk": 26, "fields": { - "created_at": "2025-03-22T10:35:07.344Z", + "created_at": "2025-06-22T10:35:07.344Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -598,8 +598,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -607,7 +607,7 @@ "model": "leave.availableleave", "pk": 27, "fields": { - "created_at": "2025-03-22T10:35:07.411Z", + "created_at": "2025-06-22T10:35:07.411Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -616,8 +616,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -625,7 +625,7 @@ "model": "leave.availableleave", "pk": 28, "fields": { - "created_at": "2025-03-22T10:35:07.464Z", + "created_at": "2025-06-22T10:35:07.464Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -634,8 +634,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -643,7 +643,7 @@ "model": "leave.availableleave", "pk": 29, "fields": { - "created_at": "2025-03-22T10:35:07.614Z", + "created_at": "2025-06-22T10:35:07.614Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -652,8 +652,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -661,7 +661,7 @@ "model": "leave.availableleave", "pk": 30, "fields": { - "created_at": "2025-03-22T10:35:07.801Z", + "created_at": "2025-06-22T10:35:07.801Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -670,8 +670,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -679,7 +679,7 @@ "model": "leave.availableleave", "pk": 31, "fields": { - "created_at": "2025-03-22T10:35:07.881Z", + "created_at": "2025-06-22T10:35:07.881Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -688,8 +688,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -697,7 +697,7 @@ "model": "leave.availableleave", "pk": 32, "fields": { - "created_at": "2025-03-22T10:35:07.955Z", + "created_at": "2025-06-22T10:35:07.955Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -706,8 +706,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -715,7 +715,7 @@ "model": "leave.availableleave", "pk": 33, "fields": { - "created_at": "2025-03-22T10:35:08.035Z", + "created_at": "2025-06-22T10:35:08.035Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -724,8 +724,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -733,7 +733,7 @@ "model": "leave.availableleave", "pk": 34, "fields": { - "created_at": "2025-03-22T10:35:08.101Z", + "created_at": "2025-06-22T10:35:08.101Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -742,8 +742,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -751,7 +751,7 @@ "model": "leave.availableleave", "pk": 35, "fields": { - "created_at": "2025-03-22T10:35:08.161Z", + "created_at": "2025-06-22T10:35:08.161Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -760,8 +760,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -769,7 +769,7 @@ "model": "leave.availableleave", "pk": 36, "fields": { - "created_at": "2025-03-22T10:35:08.214Z", + "created_at": "2025-06-22T10:35:08.214Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -778,8 +778,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -787,7 +787,7 @@ "model": "leave.availableleave", "pk": 37, "fields": { - "created_at": "2025-03-22T10:35:08.280Z", + "created_at": "2025-06-22T10:35:08.280Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -796,8 +796,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -805,7 +805,7 @@ "model": "leave.availableleave", "pk": 38, "fields": { - "created_at": "2025-03-22T10:35:08.344Z", + "created_at": "2025-06-22T10:35:08.344Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -814,8 +814,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -823,7 +823,7 @@ "model": "leave.availableleave", "pk": 39, "fields": { - "created_at": "2025-03-22T10:35:08.405Z", + "created_at": "2025-06-22T10:35:08.405Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -832,8 +832,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -841,7 +841,7 @@ "model": "leave.availableleave", "pk": 40, "fields": { - "created_at": "2025-03-22T10:35:08.461Z", + "created_at": "2025-06-22T10:35:08.461Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -850,8 +850,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -859,7 +859,7 @@ "model": "leave.availableleave", "pk": 41, "fields": { - "created_at": "2025-03-22T10:35:08.531Z", + "created_at": "2025-06-22T10:35:08.531Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -868,8 +868,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -877,7 +877,7 @@ "model": "leave.availableleave", "pk": 42, "fields": { - "created_at": "2025-03-22T10:35:08.587Z", + "created_at": "2025-06-22T10:35:08.587Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -886,8 +886,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -895,7 +895,7 @@ "model": "leave.availableleave", "pk": 43, "fields": { - "created_at": "2025-03-22T10:35:08.644Z", + "created_at": "2025-06-22T10:35:08.644Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -904,8 +904,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -913,7 +913,7 @@ "model": "leave.availableleave", "pk": 44, "fields": { - "created_at": "2025-03-22T10:35:08.711Z", + "created_at": "2025-06-22T10:35:08.711Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -922,8 +922,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -931,7 +931,7 @@ "model": "leave.availableleave", "pk": 45, "fields": { - "created_at": "2025-03-22T10:35:08.765Z", + "created_at": "2025-06-22T10:35:08.765Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -940,8 +940,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -949,7 +949,7 @@ "model": "leave.availableleave", "pk": 46, "fields": { - "created_at": "2025-03-22T10:35:08.831Z", + "created_at": "2025-06-22T10:35:08.831Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -958,8 +958,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -967,7 +967,7 @@ "model": "leave.availableleave", "pk": 47, "fields": { - "created_at": "2025-03-22T10:35:08.887Z", + "created_at": "2025-06-22T10:35:08.887Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -976,8 +976,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -985,7 +985,7 @@ "model": "leave.availableleave", "pk": 48, "fields": { - "created_at": "2025-03-22T10:35:08.958Z", + "created_at": "2025-06-22T10:35:08.958Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -994,8 +994,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1003,7 +1003,7 @@ "model": "leave.availableleave", "pk": 49, "fields": { - "created_at": "2025-03-22T10:35:09.021Z", + "created_at": "2025-06-22T10:35:09.021Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1012,8 +1012,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1021,7 +1021,7 @@ "model": "leave.availableleave", "pk": 50, "fields": { - "created_at": "2025-03-22T10:35:09.095Z", + "created_at": "2025-06-22T10:35:09.095Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1030,8 +1030,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1039,7 +1039,7 @@ "model": "leave.availableleave", "pk": 51, "fields": { - "created_at": "2025-03-22T10:35:09.230Z", + "created_at": "2025-06-22T10:35:09.230Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1048,8 +1048,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1057,7 +1057,7 @@ "model": "leave.availableleave", "pk": 52, "fields": { - "created_at": "2025-03-22T10:35:09.315Z", + "created_at": "2025-06-22T10:35:09.315Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1066,8 +1066,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1075,7 +1075,7 @@ "model": "leave.availableleave", "pk": 53, "fields": { - "created_at": "2025-03-22T10:35:09.398Z", + "created_at": "2025-06-22T10:35:09.398Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1084,8 +1084,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1093,7 +1093,7 @@ "model": "leave.availableleave", "pk": 54, "fields": { - "created_at": "2025-03-22T10:35:09.464Z", + "created_at": "2025-06-22T10:35:09.464Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1102,8 +1102,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1111,7 +1111,7 @@ "model": "leave.availableleave", "pk": 55, "fields": { - "created_at": "2025-03-22T10:35:09.535Z", + "created_at": "2025-06-22T10:35:09.535Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1120,8 +1120,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1129,7 +1129,7 @@ "model": "leave.availableleave", "pk": 56, "fields": { - "created_at": "2025-03-22T10:35:09.614Z", + "created_at": "2025-06-22T10:35:09.614Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1138,8 +1138,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1147,7 +1147,7 @@ "model": "leave.availableleave", "pk": 57, "fields": { - "created_at": "2025-03-22T10:35:09.683Z", + "created_at": "2025-06-22T10:35:09.683Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1156,8 +1156,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1165,7 +1165,7 @@ "model": "leave.availableleave", "pk": 58, "fields": { - "created_at": "2025-03-22T10:35:09.746Z", + "created_at": "2025-06-22T10:35:09.746Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1174,8 +1174,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1183,7 +1183,7 @@ "model": "leave.availableleave", "pk": 59, "fields": { - "created_at": "2025-03-22T10:35:09.806Z", + "created_at": "2025-06-22T10:35:09.806Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1192,8 +1192,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1201,7 +1201,7 @@ "model": "leave.availableleave", "pk": 60, "fields": { - "created_at": "2025-03-22T10:35:09.882Z", + "created_at": "2025-06-22T10:35:09.882Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1210,8 +1210,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1219,7 +1219,7 @@ "model": "leave.availableleave", "pk": 61, "fields": { - "created_at": "2025-03-22T10:35:09.950Z", + "created_at": "2025-06-22T10:35:09.950Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1228,8 +1228,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1237,7 +1237,7 @@ "model": "leave.availableleave", "pk": 62, "fields": { - "created_at": "2025-03-22T10:35:10.016Z", + "created_at": "2025-06-22T10:35:10.016Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1246,8 +1246,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1255,7 +1255,7 @@ "model": "leave.availableleave", "pk": 63, "fields": { - "created_at": "2025-03-22T10:35:10.078Z", + "created_at": "2025-06-22T10:35:10.078Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1264,8 +1264,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1273,7 +1273,7 @@ "model": "leave.availableleave", "pk": 64, "fields": { - "created_at": "2025-03-22T10:35:10.147Z", + "created_at": "2025-06-22T10:35:10.147Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1282,8 +1282,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1291,7 +1291,7 @@ "model": "leave.availableleave", "pk": 65, "fields": { - "created_at": "2025-03-22T10:35:10.213Z", + "created_at": "2025-06-22T10:35:10.213Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1300,8 +1300,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1309,7 +1309,7 @@ "model": "leave.availableleave", "pk": 66, "fields": { - "created_at": "2025-03-22T10:35:10.278Z", + "created_at": "2025-06-22T10:35:10.278Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1318,8 +1318,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1327,7 +1327,7 @@ "model": "leave.availableleave", "pk": 67, "fields": { - "created_at": "2025-03-22T10:35:10.339Z", + "created_at": "2025-06-22T10:35:10.339Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1336,8 +1336,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1345,7 +1345,7 @@ "model": "leave.availableleave", "pk": 68, "fields": { - "created_at": "2025-03-22T10:35:10.396Z", + "created_at": "2025-06-22T10:35:10.396Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1354,8 +1354,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1363,7 +1363,7 @@ "model": "leave.availableleave", "pk": 69, "fields": { - "created_at": "2025-03-22T10:35:10.461Z", + "created_at": "2025-06-22T10:35:10.461Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1372,8 +1372,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1381,7 +1381,7 @@ "model": "leave.availableleave", "pk": 70, "fields": { - "created_at": "2025-03-22T10:35:10.530Z", + "created_at": "2025-06-22T10:35:10.530Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1390,8 +1390,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1399,7 +1399,7 @@ "model": "leave.availableleave", "pk": 71, "fields": { - "created_at": "2025-03-22T10:35:10.594Z", + "created_at": "2025-06-22T10:35:10.594Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1408,8 +1408,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1417,7 +1417,7 @@ "model": "leave.availableleave", "pk": 72, "fields": { - "created_at": "2025-03-22T10:35:10.670Z", + "created_at": "2025-06-22T10:35:10.670Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1426,8 +1426,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1435,7 +1435,7 @@ "model": "leave.availableleave", "pk": 73, "fields": { - "created_at": "2025-03-22T10:35:10.737Z", + "created_at": "2025-06-22T10:35:10.737Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1444,8 +1444,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1453,7 +1453,7 @@ "model": "leave.availableleave", "pk": 74, "fields": { - "created_at": "2025-03-22T10:35:10.794Z", + "created_at": "2025-06-22T10:35:10.794Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1462,8 +1462,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1471,7 +1471,7 @@ "model": "leave.availableleave", "pk": 75, "fields": { - "created_at": "2025-03-22T10:35:10.865Z", + "created_at": "2025-06-22T10:35:10.865Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1480,8 +1480,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1489,7 +1489,7 @@ "model": "leave.availableleave", "pk": 76, "fields": { - "created_at": "2025-03-22T10:35:10.940Z", + "created_at": "2025-06-22T10:35:10.940Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1498,8 +1498,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1507,7 +1507,7 @@ "model": "leave.availableleave", "pk": 77, "fields": { - "created_at": "2025-03-22T10:35:11.029Z", + "created_at": "2025-06-22T10:35:11.029Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1516,8 +1516,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1525,7 +1525,7 @@ "model": "leave.availableleave", "pk": 78, "fields": { - "created_at": "2025-03-22T10:35:11.111Z", + "created_at": "2025-06-22T10:35:11.111Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1534,8 +1534,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1543,7 +1543,7 @@ "model": "leave.availableleave", "pk": 79, "fields": { - "created_at": "2025-03-22T10:35:11.178Z", + "created_at": "2025-06-22T10:35:11.178Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1552,8 +1552,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1561,7 +1561,7 @@ "model": "leave.availableleave", "pk": 80, "fields": { - "created_at": "2025-03-22T10:35:11.258Z", + "created_at": "2025-06-22T10:35:11.258Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1570,8 +1570,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1579,7 +1579,7 @@ "model": "leave.availableleave", "pk": 81, "fields": { - "created_at": "2025-03-22T10:35:11.315Z", + "created_at": "2025-06-22T10:35:11.315Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1588,8 +1588,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1597,7 +1597,7 @@ "model": "leave.availableleave", "pk": 82, "fields": { - "created_at": "2025-03-22T10:35:11.382Z", + "created_at": "2025-06-22T10:35:11.382Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1606,8 +1606,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1615,7 +1615,7 @@ "model": "leave.availableleave", "pk": 83, "fields": { - "created_at": "2025-03-22T10:35:11.434Z", + "created_at": "2025-06-22T10:35:11.434Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1624,8 +1624,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1633,7 +1633,7 @@ "model": "leave.availableleave", "pk": 84, "fields": { - "created_at": "2025-03-22T10:35:11.496Z", + "created_at": "2025-06-22T10:35:11.496Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1642,8 +1642,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1651,7 +1651,7 @@ "model": "leave.availableleave", "pk": 85, "fields": { - "created_at": "2025-03-22T10:35:11.566Z", + "created_at": "2025-06-22T10:35:11.566Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1660,8 +1660,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1669,7 +1669,7 @@ "model": "leave.availableleave", "pk": 86, "fields": { - "created_at": "2025-03-22T10:35:11.640Z", + "created_at": "2025-06-22T10:35:11.640Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1678,8 +1678,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1687,7 +1687,7 @@ "model": "leave.availableleave", "pk": 87, "fields": { - "created_at": "2025-03-22T10:35:11.697Z", + "created_at": "2025-06-22T10:35:11.697Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1696,8 +1696,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1705,7 +1705,7 @@ "model": "leave.availableleave", "pk": 88, "fields": { - "created_at": "2025-03-22T10:35:11.774Z", + "created_at": "2025-06-22T10:35:11.774Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1714,8 +1714,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1723,7 +1723,7 @@ "model": "leave.availableleave", "pk": 89, "fields": { - "created_at": "2025-03-22T10:35:11.838Z", + "created_at": "2025-06-22T10:35:11.838Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1732,8 +1732,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1741,7 +1741,7 @@ "model": "leave.availableleave", "pk": 90, "fields": { - "created_at": "2025-03-22T10:35:11.961Z", + "created_at": "2025-06-22T10:35:11.961Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1750,8 +1750,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1759,7 +1759,7 @@ "model": "leave.availableleave", "pk": 91, "fields": { - "created_at": "2025-03-22T10:35:12.038Z", + "created_at": "2025-06-22T10:35:12.038Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1768,8 +1768,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1777,7 +1777,7 @@ "model": "leave.availableleave", "pk": 92, "fields": { - "created_at": "2025-03-22T10:35:12.111Z", + "created_at": "2025-06-22T10:35:12.111Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1786,8 +1786,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1795,7 +1795,7 @@ "model": "leave.availableleave", "pk": 93, "fields": { - "created_at": "2025-03-22T10:35:12.182Z", + "created_at": "2025-06-22T10:35:12.182Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1804,8 +1804,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1813,7 +1813,7 @@ "model": "leave.availableleave", "pk": 94, "fields": { - "created_at": "2025-03-22T10:35:12.241Z", + "created_at": "2025-06-22T10:35:12.241Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1822,8 +1822,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1831,7 +1831,7 @@ "model": "leave.availableleave", "pk": 95, "fields": { - "created_at": "2025-03-22T10:35:12.312Z", + "created_at": "2025-06-22T10:35:12.312Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1840,8 +1840,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1849,7 +1849,7 @@ "model": "leave.availableleave", "pk": 96, "fields": { - "created_at": "2025-03-22T10:35:12.371Z", + "created_at": "2025-06-22T10:35:12.371Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1858,8 +1858,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1867,7 +1867,7 @@ "model": "leave.availableleave", "pk": 97, "fields": { - "created_at": "2025-03-22T10:35:12.430Z", + "created_at": "2025-06-22T10:35:12.430Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1876,8 +1876,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1885,7 +1885,7 @@ "model": "leave.availableleave", "pk": 98, "fields": { - "created_at": "2025-03-22T10:35:12.496Z", + "created_at": "2025-06-22T10:35:12.496Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1894,8 +1894,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1903,7 +1903,7 @@ "model": "leave.availableleave", "pk": 99, "fields": { - "created_at": "2025-03-22T10:35:12.566Z", + "created_at": "2025-06-22T10:35:12.566Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1912,8 +1912,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1921,7 +1921,7 @@ "model": "leave.availableleave", "pk": 100, "fields": { - "created_at": "2025-03-22T10:35:12.631Z", + "created_at": "2025-06-22T10:35:12.631Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1930,8 +1930,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1939,7 +1939,7 @@ "model": "leave.availableleave", "pk": 101, "fields": { - "created_at": "2025-03-22T10:35:12.694Z", + "created_at": "2025-06-22T10:35:12.694Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1948,8 +1948,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1957,7 +1957,7 @@ "model": "leave.availableleave", "pk": 102, "fields": { - "created_at": "2025-03-22T10:35:12.749Z", + "created_at": "2025-06-22T10:35:12.749Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1966,8 +1966,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1975,7 +1975,7 @@ "model": "leave.availableleave", "pk": 103, "fields": { - "created_at": "2025-03-22T10:35:12.822Z", + "created_at": "2025-06-22T10:35:12.822Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1984,8 +1984,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -1993,7 +1993,7 @@ "model": "leave.availableleave", "pk": 104, "fields": { - "created_at": "2025-03-22T10:35:12.902Z", + "created_at": "2025-06-22T10:35:12.902Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2002,8 +2002,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2011,7 +2011,7 @@ "model": "leave.availableleave", "pk": 105, "fields": { - "created_at": "2025-03-22T10:35:12.961Z", + "created_at": "2025-06-22T10:35:12.961Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2020,8 +2020,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2029,7 +2029,7 @@ "model": "leave.availableleave", "pk": 106, "fields": { - "created_at": "2025-03-22T10:35:13.028Z", + "created_at": "2025-06-22T10:35:13.028Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2038,8 +2038,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2047,7 +2047,7 @@ "model": "leave.availableleave", "pk": 107, "fields": { - "created_at": "2025-03-22T10:35:13.099Z", + "created_at": "2025-06-22T10:35:13.099Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2056,8 +2056,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2065,7 +2065,7 @@ "model": "leave.availableleave", "pk": 108, "fields": { - "created_at": "2025-03-22T10:35:13.161Z", + "created_at": "2025-06-22T10:35:13.161Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2074,8 +2074,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2083,7 +2083,7 @@ "model": "leave.availableleave", "pk": 109, "fields": { - "created_at": "2025-03-22T10:35:13.244Z", + "created_at": "2025-06-22T10:35:13.244Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2092,8 +2092,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2101,7 +2101,7 @@ "model": "leave.availableleave", "pk": 110, "fields": { - "created_at": "2025-03-22T10:35:13.297Z", + "created_at": "2025-06-22T10:35:13.297Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2110,8 +2110,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2119,7 +2119,7 @@ "model": "leave.availableleave", "pk": 111, "fields": { - "created_at": "2025-03-22T10:35:13.364Z", + "created_at": "2025-06-22T10:35:13.364Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2128,8 +2128,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2137,7 +2137,7 @@ "model": "leave.availableleave", "pk": 112, "fields": { - "created_at": "2025-03-22T10:35:13.428Z", + "created_at": "2025-06-22T10:35:13.428Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2146,8 +2146,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2155,7 +2155,7 @@ "model": "leave.availableleave", "pk": 113, "fields": { - "created_at": "2025-03-22T10:35:13.480Z", + "created_at": "2025-06-22T10:35:13.480Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2164,8 +2164,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2173,7 +2173,7 @@ "model": "leave.availableleave", "pk": 114, "fields": { - "created_at": "2025-03-22T10:35:13.547Z", + "created_at": "2025-06-22T10:35:13.547Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2182,8 +2182,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2191,7 +2191,7 @@ "model": "leave.availableleave", "pk": 115, "fields": { - "created_at": "2025-03-22T10:35:13.606Z", + "created_at": "2025-06-22T10:35:13.606Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2200,8 +2200,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2209,7 +2209,7 @@ "model": "leave.availableleave", "pk": 116, "fields": { - "created_at": "2025-03-22T10:35:13.663Z", + "created_at": "2025-06-22T10:35:13.663Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2218,8 +2218,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2227,7 +2227,7 @@ "model": "leave.availableleave", "pk": 117, "fields": { - "created_at": "2025-03-22T10:35:13.727Z", + "created_at": "2025-06-22T10:35:13.727Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2236,8 +2236,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2245,7 +2245,7 @@ "model": "leave.availableleave", "pk": 118, "fields": { - "created_at": "2025-03-22T10:35:13.779Z", + "created_at": "2025-06-22T10:35:13.779Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2254,8 +2254,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2263,7 +2263,7 @@ "model": "leave.availableleave", "pk": 119, "fields": { - "created_at": "2025-03-22T10:35:13.837Z", + "created_at": "2025-06-22T10:35:13.837Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2272,8 +2272,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2281,7 +2281,7 @@ "model": "leave.availableleave", "pk": 120, "fields": { - "created_at": "2025-03-22T10:35:13.897Z", + "created_at": "2025-06-22T10:35:13.897Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2290,8 +2290,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2299,7 +2299,7 @@ "model": "leave.availableleave", "pk": 121, "fields": { - "created_at": "2025-03-22T10:35:13.974Z", + "created_at": "2025-06-22T10:35:13.974Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2308,8 +2308,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2317,7 +2317,7 @@ "model": "leave.availableleave", "pk": 122, "fields": { - "created_at": "2025-03-22T10:35:14.031Z", + "created_at": "2025-06-22T10:35:14.031Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2326,8 +2326,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2335,7 +2335,7 @@ "model": "leave.availableleave", "pk": 123, "fields": { - "created_at": "2025-03-22T10:35:14.099Z", + "created_at": "2025-06-22T10:35:14.099Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2344,8 +2344,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2353,7 +2353,7 @@ "model": "leave.availableleave", "pk": 124, "fields": { - "created_at": "2025-03-22T10:35:14.163Z", + "created_at": "2025-06-22T10:35:14.163Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2362,8 +2362,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2371,7 +2371,7 @@ "model": "leave.availableleave", "pk": 125, "fields": { - "created_at": "2025-03-22T10:35:14.246Z", + "created_at": "2025-06-22T10:35:14.246Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2380,8 +2380,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2389,7 +2389,7 @@ "model": "leave.availableleave", "pk": 126, "fields": { - "created_at": "2025-03-22T10:35:14.312Z", + "created_at": "2025-06-22T10:35:14.312Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2398,8 +2398,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2407,7 +2407,7 @@ "model": "leave.availableleave", "pk": 127, "fields": { - "created_at": "2025-03-22T10:35:14.378Z", + "created_at": "2025-06-22T10:35:14.378Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2416,8 +2416,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2425,7 +2425,7 @@ "model": "leave.availableleave", "pk": 128, "fields": { - "created_at": "2025-03-22T10:35:14.428Z", + "created_at": "2025-06-22T10:35:14.428Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2434,8 +2434,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2443,7 +2443,7 @@ "model": "leave.availableleave", "pk": 129, "fields": { - "created_at": "2025-03-22T10:35:14.493Z", + "created_at": "2025-06-22T10:35:14.493Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2452,8 +2452,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2461,7 +2461,7 @@ "model": "leave.availableleave", "pk": 130, "fields": { - "created_at": "2025-03-22T10:35:14.547Z", + "created_at": "2025-06-22T10:35:14.547Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2470,8 +2470,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2479,7 +2479,7 @@ "model": "leave.availableleave", "pk": 131, "fields": { - "created_at": "2025-03-22T10:35:14.594Z", + "created_at": "2025-06-22T10:35:14.594Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2488,8 +2488,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2497,7 +2497,7 @@ "model": "leave.availableleave", "pk": 132, "fields": { - "created_at": "2025-03-22T10:35:14.646Z", + "created_at": "2025-06-22T10:35:14.646Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2506,8 +2506,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2515,7 +2515,7 @@ "model": "leave.availableleave", "pk": 133, "fields": { - "created_at": "2025-03-22T10:35:14.696Z", + "created_at": "2025-06-22T10:35:14.696Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2524,8 +2524,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2533,7 +2533,7 @@ "model": "leave.availableleave", "pk": 134, "fields": { - "created_at": "2025-03-22T10:35:14.744Z", + "created_at": "2025-06-22T10:35:14.744Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2542,8 +2542,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2551,7 +2551,7 @@ "model": "leave.availableleave", "pk": 135, "fields": { - "created_at": "2025-03-22T10:35:14.794Z", + "created_at": "2025-06-22T10:35:14.794Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2560,8 +2560,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2569,7 +2569,7 @@ "model": "leave.availableleave", "pk": 136, "fields": { - "created_at": "2025-03-22T10:35:14.846Z", + "created_at": "2025-06-22T10:35:14.846Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2578,8 +2578,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2587,7 +2587,7 @@ "model": "leave.availableleave", "pk": 137, "fields": { - "created_at": "2025-03-22T10:35:14.896Z", + "created_at": "2025-06-22T10:35:14.896Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2596,8 +2596,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2605,7 +2605,7 @@ "model": "leave.availableleave", "pk": 138, "fields": { - "created_at": "2025-03-22T10:35:14.944Z", + "created_at": "2025-06-22T10:35:14.944Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2614,8 +2614,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2623,7 +2623,7 @@ "model": "leave.availableleave", "pk": 139, "fields": { - "created_at": "2025-03-22T10:35:15.011Z", + "created_at": "2025-06-22T10:35:15.011Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2632,8 +2632,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2641,7 +2641,7 @@ "model": "leave.availableleave", "pk": 140, "fields": { - "created_at": "2025-03-22T10:35:15.061Z", + "created_at": "2025-06-22T10:35:15.061Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2650,8 +2650,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2659,7 +2659,7 @@ "model": "leave.availableleave", "pk": 141, "fields": { - "created_at": "2025-03-22T10:35:15.113Z", + "created_at": "2025-06-22T10:35:15.113Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2668,8 +2668,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2677,7 +2677,7 @@ "model": "leave.availableleave", "pk": 142, "fields": { - "created_at": "2025-03-22T10:35:15.162Z", + "created_at": "2025-06-22T10:35:15.162Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2686,8 +2686,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2695,7 +2695,7 @@ "model": "leave.availableleave", "pk": 143, "fields": { - "created_at": "2025-03-22T10:35:15.212Z", + "created_at": "2025-06-22T10:35:15.212Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2704,8 +2704,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2713,7 +2713,7 @@ "model": "leave.availableleave", "pk": 144, "fields": { - "created_at": "2025-03-22T10:35:15.278Z", + "created_at": "2025-06-22T10:35:15.278Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2722,8 +2722,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2731,7 +2731,7 @@ "model": "leave.availableleave", "pk": 145, "fields": { - "created_at": "2025-03-22T10:35:15.338Z", + "created_at": "2025-06-22T10:35:15.338Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2740,8 +2740,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2749,7 +2749,7 @@ "model": "leave.availableleave", "pk": 146, "fields": { - "created_at": "2025-03-22T10:35:15.388Z", + "created_at": "2025-06-22T10:35:15.388Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2758,8 +2758,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2767,7 +2767,7 @@ "model": "leave.availableleave", "pk": 147, "fields": { - "created_at": "2025-03-22T10:35:15.444Z", + "created_at": "2025-06-22T10:35:15.444Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2776,8 +2776,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2785,7 +2785,7 @@ "model": "leave.availableleave", "pk": 148, "fields": { - "created_at": "2025-03-22T10:35:15.504Z", + "created_at": "2025-06-22T10:35:15.504Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2794,8 +2794,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2803,7 +2803,7 @@ "model": "leave.availableleave", "pk": 149, "fields": { - "created_at": "2025-03-22T10:35:15.578Z", + "created_at": "2025-06-22T10:35:15.578Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2812,8 +2812,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2821,7 +2821,7 @@ "model": "leave.availableleave", "pk": 150, "fields": { - "created_at": "2025-03-22T10:35:15.628Z", + "created_at": "2025-06-22T10:35:15.628Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2830,8 +2830,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2839,7 +2839,7 @@ "model": "leave.availableleave", "pk": 151, "fields": { - "created_at": "2025-03-22T10:35:15.685Z", + "created_at": "2025-06-22T10:35:15.685Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2848,8 +2848,8 @@ "available_days": 10.0, "carryforward_days": 0.0, "total_leave_days": 10.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2857,7 +2857,7 @@ "model": "leave.availableleave", "pk": 152, "fields": { - "created_at": "2025-03-22T10:35:15.743Z", + "created_at": "2025-06-22T10:35:15.743Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -2866,8 +2866,8 @@ "available_days": 1.0, "carryforward_days": 0.0, "total_leave_days": 1.0, - "assigned_date": "2025-03-22", - "reset_date": "2025-03-01", + "assigned_date": "2025-06-22", + "reset_date": "2025-06-01", "expired_date": null } }, @@ -2875,21 +2875,21 @@ "model": "leave.leaverequest", "pk": 1, "fields": { - "created_at": "2025-03-23T12:02:05.620Z", + "created_at": "2025-06-23T12:02:05.620Z", "modified_by": 1, "is_active": true, "employee_id": 13, "leave_type_id": 2, - "start_date": "2025-03-08", + "start_date": "2025-06-08", "start_date_breakdown": "full_day", - "end_date": "2025-03-08", + "end_date": "2025-06-08", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "i have to go to the bank", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -2900,21 +2900,21 @@ "model": "leave.leaverequest", "pk": 2, "fields": { - "created_at": "2025-03-23T12:02:42.988Z", + "created_at": "2025-06-23T12:02:42.988Z", "modified_by": 1, "is_active": true, "employee_id": 68, "leave_type_id": 2, - "start_date": "2025-03-15", + "start_date": "2025-06-15", "start_date_breakdown": "full_day", - "end_date": "2025-03-15", + "end_date": "2025-06-15", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "i need a break", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -2925,21 +2925,21 @@ "model": "leave.leaverequest", "pk": 3, "fields": { - "created_at": "2025-03-23T12:05:12.635Z", + "created_at": "2025-06-23T12:05:12.635Z", "modified_by": 1, "is_active": true, "employee_id": 62, "leave_type_id": 3, - "start_date": "2025-03-10", + "start_date": "2025-06-10", "start_date_breakdown": "full_day", - "end_date": "2025-03-10", + "end_date": "2025-06-10", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "i have a fever", "attachment": "leave/leave_attachment/prescription.webp", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -2950,21 +2950,21 @@ "model": "leave.leaverequest", "pk": 4, "fields": { - "created_at": "2025-03-23T12:05:56.346Z", + "created_at": "2025-06-23T12:05:56.346Z", "modified_by": 1, "is_active": true, "employee_id": 36, "leave_type_id": 2, - "start_date": "2025-03-14", + "start_date": "2025-06-14", "start_date_breakdown": "full_day", - "end_date": "2025-03-14", + "end_date": "2025-06-14", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -2975,21 +2975,21 @@ "model": "leave.leaverequest", "pk": 5, "fields": { - "created_at": "2025-03-23T12:06:39.604Z", + "created_at": "2025-06-23T12:06:39.604Z", "modified_by": 1, "is_active": true, "employee_id": 65, "leave_type_id": 2, - "start_date": "2025-03-13", + "start_date": "2025-06-13", "start_date_breakdown": "full_day", - "end_date": "2025-03-13", + "end_date": "2025-06-13", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3000,21 +3000,21 @@ "model": "leave.leaverequest", "pk": 6, "fields": { - "created_at": "2025-03-23T12:07:03.890Z", + "created_at": "2025-06-23T12:07:03.890Z", "modified_by": 1, "is_active": true, "employee_id": 39, "leave_type_id": 2, - "start_date": "2025-03-30", + "start_date": "2025-06-30", "start_date_breakdown": "full_day", - "end_date": "2025-03-30", + "end_date": "2025-06-30", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "i need a leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3025,21 +3025,21 @@ "model": "leave.leaverequest", "pk": 7, "fields": { - "created_at": "2025-03-23T12:07:27.352Z", + "created_at": "2025-06-23T12:07:27.352Z", "modified_by": 1, "is_active": true, "employee_id": 13, "leave_type_id": 2, - "start_date": "2025-03-28", + "start_date": "2025-06-28", "start_date_breakdown": "full_day", - "end_date": "2025-03-28", + "end_date": "2025-06-28", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "hello", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3050,21 +3050,21 @@ "model": "leave.leaverequest", "pk": 8, "fields": { - "created_at": "2025-03-23T12:07:48.842Z", + "created_at": "2025-06-23T12:07:48.842Z", "modified_by": 1, "is_active": true, "employee_id": 63, "leave_type_id": 2, - "start_date": "2025-03-17", + "start_date": "2025-06-17", "start_date_breakdown": "full_day", - "end_date": "2025-03-17", + "end_date": "2025-06-17", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "hello", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3075,21 +3075,21 @@ "model": "leave.leaverequest", "pk": 9, "fields": { - "created_at": "2025-03-23T12:08:17.706Z", + "created_at": "2025-06-23T12:08:17.706Z", "modified_by": 1, "is_active": true, "employee_id": 61, "leave_type_id": 3, - "start_date": "2025-03-08", + "start_date": "2025-06-08", "start_date_breakdown": "full_day", - "end_date": "2025-03-08", + "end_date": "2025-06-08", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "hello", "attachment": "leave/leave_attachment/prescription_KXla4rB.webp", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3100,21 +3100,21 @@ "model": "leave.leaverequest", "pk": 10, "fields": { - "created_at": "2025-03-23T12:08:45.359Z", + "created_at": "2025-06-23T12:08:45.359Z", "modified_by": 1, "is_active": true, "employee_id": 42, "leave_type_id": 2, - "start_date": "2025-03-29", + "start_date": "2025-06-29", "start_date_breakdown": "full_day", - "end_date": "2025-03-29", + "end_date": "2025-06-29", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3125,21 +3125,21 @@ "model": "leave.leaverequest", "pk": 11, "fields": { - "created_at": "2025-03-23T12:09:26.321Z", + "created_at": "2025-06-23T12:09:26.321Z", "modified_by": 1, "is_active": true, "employee_id": 3, "leave_type_id": 2, - "start_date": "2025-03-28", + "start_date": "2025-06-28", "start_date_breakdown": "full_day", - "end_date": "2025-03-28", + "end_date": "2025-06-28", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3150,21 +3150,21 @@ "model": "leave.leaverequest", "pk": 12, "fields": { - "created_at": "2025-03-23T12:09:58.526Z", + "created_at": "2025-06-23T12:09:58.526Z", "modified_by": 1, "is_active": true, "employee_id": 1, "leave_type_id": 2, - "start_date": "2025-03-25", + "start_date": "2025-06-25", "start_date_breakdown": "full_day", - "end_date": "2025-03-25", + "end_date": "2025-06-25", "end_date_breakdown": "full_day", "requested_days": 0.0, "leave_clashes_count": 0, "description": "on a trip", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3175,21 +3175,21 @@ "model": "leave.leaverequest", "pk": 13, "fields": { - "created_at": "2025-03-23T12:10:23.607Z", + "created_at": "2025-06-23T12:10:23.607Z", "modified_by": 1, "is_active": true, "employee_id": 66, "leave_type_id": 2, - "start_date": "2025-03-29", + "start_date": "2025-06-29", "start_date_breakdown": "full_day", - "end_date": "2025-03-29", + "end_date": "2025-06-29", "end_date_breakdown": "full_day", "requested_days": 1.0, "leave_clashes_count": 0, "description": "leave", "attachment": "", "status": "requested", - "requested_date": "2025-03-23", + "requested_date": "2025-06-23", "approved_available_days": 0.0, "approved_carryforward_days": 0.0, "reject_reason": "", @@ -3200,14 +3200,14 @@ "model": "leave.leaveallocationrequest", "pk": 1, "fields": { - "created_at": "2025-03-16T08:00:42.965Z", + "created_at": "2025-06-16T08:00:42.965Z", "created_by": 1, "modified_by": 1, "is_active": true, "leave_type_id": 4, "employee_id": 12, "requested_days": 10.0, - "requested_date": "2025-03-16", + "requested_date": "2025-06-16", "description": "Kindly request to allocate this leave type", "attachment": "", "status": "requested", @@ -3218,14 +3218,14 @@ "model": "leave.leaveallocationrequest", "pk": 2, "fields": { - "created_at": "2025-03-16T08:01:28.674Z", + "created_at": "2025-06-16T08:01:28.674Z", "created_by": 1, "modified_by": 1, "is_active": true, "leave_type_id": 3, "employee_id": 63, "requested_days": 10.0, - "requested_date": "2025-03-16", + "requested_date": "2025-06-16", "description": "Request to allcoate some additional available leaves for this leave type", "attachment": "", "status": "requested", @@ -3236,14 +3236,14 @@ "model": "leave.leaveallocationrequest", "pk": 3, "fields": { - "created_at": "2025-03-16T08:01:53.526Z", + "created_at": "2025-06-16T08:01:53.526Z", "created_by": 1, "modified_by": 1, "is_active": true, "leave_type_id": 4, "employee_id": 8, "requested_days": 30.0, - "requested_date": "2025-03-16", + "requested_date": "2025-06-16", "description": "Kindly request to allocate this leave type", "attachment": "", "status": "requested", @@ -3254,13 +3254,13 @@ "model": "leave.restrictleave", "pk": 2, "fields": { - "created_at": "2025-03-16T08:06:27.474Z", + "created_at": "2025-06-16T08:06:27.474Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Critical Projects", - "start_date": "2025-03-16", - "end_date": "2025-03-16", + "start_date": "2025-06-16", + "end_date": "2025-06-16", "department": 1, "include_all": true, "description": "Horilla Project Installation", @@ -3274,13 +3274,13 @@ "model": "leave.restrictleave", "pk": 3, "fields": { - "created_at": "2025-03-16T08:07:02.327Z", + "created_at": "2025-06-16T08:07:02.327Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Product launch week", - "start_date": "2025-03-23", - "end_date": "2025-03-27", + "start_date": "2025-06-23", + "end_date": "2025-06-27", "department": 2, "include_all": true, "description": "Luanch Horilla", @@ -3294,13 +3294,13 @@ "model": "leave.restrictleave", "pk": 4, "fields": { - "created_at": "2025-03-16T08:07:48.937Z", + "created_at": "2025-06-16T08:07:48.937Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Sales Days", - "start_date": "2025-03-24", - "end_date": "2025-03-26", + "start_date": "2025-06-24", + "end_date": "2025-06-26", "department": 2, "include_all": true, "description": "Chirstmas Sales", @@ -3314,13 +3314,13 @@ "model": "leave.restrictleave", "pk": 5, "fields": { - "created_at": "2025-03-12T10:25:21.388Z", + "created_at": "2025-06-12T10:25:21.388Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "S/W Dept. Restriction", - "start_date": "2025-03-01", - "end_date": "2025-03-30", + "start_date": "2025-06-01", + "end_date": "2025-06-30", "department": 1, "include_all": true, "description": "Description", @@ -3334,7 +3334,7 @@ "model": "leave.employeepastleaverestrict", "pk": 1, "fields": { - "created_at": "2025-03-21T04:40:18.153Z", + "created_at": "2025-06-21T04:40:18.153Z", "created_by": null, "modified_by": null, "is_active": true, diff --git a/load_data/mail_automations.json b/load_data/mail_automations.json index fcf024ed2..34511472b 100644 --- a/load_data/mail_automations.json +++ b/load_data/mail_automations.json @@ -1,314 +1,338 @@ [ - { - "model": "horilla_automations.mailautomation", - "pk": 1, - "fields": { - "created_at": "2025-04-30T06:35:03.533Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Leave Request Automation", - "method_title": "leave_request_automation", - "model": "leave.models.LeaveRequest", - "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", - "mail_details": "employee_id__employee_work_info__reporting_manager_id__pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 1, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 2, - "fields": { - "created_at": "2025-04-30T06:35:03.555Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Leave Allocation Automation", - "method_title": "leave_allocation_automation", - "model": "leave.models.LeaveAllocationRequest", - "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", - "mail_details": "employee_id__pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 2, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 3, - "fields": { - "created_at": "2025-04-30T06:35:03.575Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "New Candidate Automation", - "method_title": "new_candidate_automation", - "model": "recruitment.models.Candidate", - "mail_to": "['recruitment_id__recruitment_managers__get_mail', 'stage_id__stage_managers__get_mail']", - "mail_details": "referral__employee_work_info__reporting_manager_id__pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 3, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 4, - "fields": { - "created_at": "2025-04-30T06:35:03.600Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Interview Automation", - "method_title": "interview_automation", - "model": "recruitment.models.InterviewSchedule", - "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", - "mail_details": "candidate_id__pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 4, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 5, - "fields": { - "created_at": "2025-04-30T06:35:03.620Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Recruitment Manager Automation", - "method_title": "recruitment_manager_automation", - "model": "recruitment.models.Recruitment", - "mail_to": "['recruitment_managers__employee_work_info__reporting_manager_id__get_email']", - "mail_details": "description", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 5, - "delivery_channel": "notification", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    C2Recruitment managers\r\n !=\r\n
    \r\n Or\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and&automation_multiple_condition=automation_multiple_recruitment_managers&condition=!%3D&automation_multiple_condition=&logic=or", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    C2Recruitment managers\r\n !=\r\n
    \r\n Or\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 6, - "fields": { - "created_at": "2025-04-30T06:35:03.644Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Stage Manager Automation", - "method_title": "stage_manager_automation", - "model": "recruitment.models.Stage", - "mail_to": "['stage_managers__get_email']", - "mail_details": "recruitment_id__description", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 6, - "delivery_channel": "both", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage managers\r\n !=\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_stage_managers&condition=!%3D&automation_multiple_condition=&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 7, - "fields": { - "created_at": "2025-05-02T09:28:27.362Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Offer of Employment at {{nstance.get_company}}", - "method_title": "offer_of_employment_at_{{instance.get_company}}", - "model": "recruitment.models.Candidate", - "mail_to": "['get_email']", - "mail_details": "pk", - "mail_detail_choice": "", - "trigger": "on_update", - "mail_template": 7, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Hired\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=hired&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 8, - "fields": { - "created_at": "2025-05-02T09:48:13.418Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Candidate {{instance.get_full_name}} is Hired.", - "method_title": "new_hired_candidate", - "model": "recruitment.models.Candidate", - "mail_to": "['recruitment_id__recruitment_managers__get_mail']", - "mail_details": "pk", - "mail_detail_choice": "", - "trigger": "on_update", - "mail_template": 8, - "delivery_channel": "notification", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Hired\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=hired&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 9, - "fields": { - "created_at": "2025-05-02T10:28:32.477Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Application Received – {{instance.get_job_position}} at {{instance.get_company}}", - "method_title": "application_received_–_{{instance.get_job_position}}_at_{{instance.get_company}}", - "model": "recruitment.models.Candidate", - "mail_to": "['get_email']", - "mail_details": "pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 9, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Applied\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=applied&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 10, - "fields": { - "created_at": "2025-05-07T08:25:05.235Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "OKR for {{instance.employee_id}} has been updated by {{self.get_full_name}}", - "method_title": "okr_updated", - "model": "pms.models.EmployeeKeyResult", - "mail_to": "['employee_objective_id__objective_id__managers__get_email']", - "mail_details": "employee_objective_id__employee_id__pk", - "mail_detail_choice": "", - "trigger": "on_update", - "mail_template": 10, - "delivery_channel": "notification", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Current value\r\n !=\r\n \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_current_value&condition=!%3D&automation_multiple_condition=0&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 11, - "fields": { - "created_at": "2025-05-09T10:53:19.511Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Access your Horilla Portl", - "method_title": "access_your_horilla_portl", - "model": "employee.models.Employee", - "mail_to": "['get_email']", - "mail_details": "pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 11, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 12, - "fields": { - "created_at": "2025-05-09T11:43:48.332Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "Track your recruitment progress at {{instance.get_company}}", - "method_title": "track_your_recruitment_progress_at_{{instance.get_company}}", - "model": "recruitment.models.Candidate", - "mail_to": "['get_email']", - "mail_details": "pk", - "mail_detail_choice": "", - "trigger": "on_update", - "mail_template": 12, - "delivery_channel": "email", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Stage type | Stage\r\n ==\r\n Initial\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=initial&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Stage type | Stage\r\n ==\r\n Initial\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } - }, - { - "model": "horilla_automations.mailautomation", - "pk": 13, - "fields": { - "created_at": "2025-07-03T09:46:31.557Z", - "created_by": 1, - "modified_by": 1, - "is_active": true, - "title": "{{model_instance.employee_objective_id.employee_id}} Got A comment inside {{model_instance.employee_objective_id.objective_id}}", - "method_title": "{{model_instance.employee_objective_id.employee_id}}_got_a_comment_inside_{{model_instance.employee_objective_id.objective_id}}", - "model": "pms.models.Comment", - "mail_to": "['employee_objective_id__employee_id__get_email', 'employee_objective_id__objective_id__managers__get_email']", - "mail_details": "employee_id__pk", - "mail_detail_choice": "", - "trigger": "on_create", - "mail_template": 13, - "delivery_channel": "both", - "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Comment\r\n !=\r\n \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", - "condition_querystring": "automation_multiple_condition=automation_multiple_comment&condition=!%3D&automation_multiple_condition=&logic=and", - "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Comment\r\n !=\r\n \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n ", - "also_sent_to": [], - "template_attachments": [] - } + { + "model": "horilla_automations.mailautomation", + "pk": 1, + "fields": { + "created_at": "2025-07-24T07:30:08.899Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Review Leave Request - {{ instance.employee_id }} ({{ instance.requested_days }} Days)", + "method_title": "review_leave_request_-_{{_instance.employee_id_}}_({{_instance.requested_days_}}_days)", + "model": "leave.models.LeaveRequest", + "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "employee_id__employee_work_info__reporting_manager_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 3, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 2, + "fields": { + "created_at": "2025-07-24T07:30:08.931Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Review Leave Allocation Request - {{ instance.employee_id }}", + "method_title": "review_leave_allocation_request_π╗_{{_instance.employee_id_}}", + "model": "leave.models.LeaveAllocationRequest", + "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "employee_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 4, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 3, + "fields": { + "created_at": "2025-07-24T07:30:08.957Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "New Candidate Automation", + "method_title": "new_candidate_automation", + "model": "recruitment.models.Candidate", + "mail_to": "['recruitment_id__recruitment_managers__get_mail', 'stage_id__stage_managers__get_mail']", + "mail_details": "referral__employee_work_info__reporting_manager_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 5, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 4, + "fields": { + "created_at": "2025-07-24T07:30:08.983Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Interview Automation", + "method_title": "interview_automation", + "model": "recruitment.models.InterviewSchedule", + "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "candidate_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 6, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 5, + "fields": { + "created_at": "2025-07-24T07:30:09.008Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Recruitment Manager Automation", + "method_title": "recruitment_manager_automation", + "model": "recruitment.models.Recruitment", + "mail_to": "['recruitment_managers__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "description", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 7, + "delivery_channel": "notification", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    C2Recruitment managers\r\n !=\r\n
    \r\n Or\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and&automation_multiple_condition=automation_multiple_recruitment_managers&condition=!%3D&automation_multiple_condition=&logic=or", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    C2Recruitment managers\r\n !=\r\n
    \r\n Or\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 6, + "fields": { + "created_at": "2025-07-24T07:30:09.036Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Stage Manager Automation", + "method_title": "stage_manager_automation", + "model": "recruitment.models.Stage", + "mail_to": "['stage_managers__get_email']", + "mail_details": "recruitment_id__description", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 8, + "delivery_channel": "both", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage managers\r\n !=\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_stage_managers&condition=!%3D&automation_multiple_condition=&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 7, + "fields": { + "created_at": "2025-07-24T07:30:09.060Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Offer of Employment at {{nstance.get_company}}", + "method_title": "offer_of_employment_at_{{nstance.get_company}}", + "model": "recruitment.models.Candidate", + "mail_to": "['get_email']", + "mail_details": "pk", + "mail_detail_choice": "", + "trigger": "on_update", + "mail_template": 9, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Hired\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=hired&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 8, + "fields": { + "created_at": "2025-07-24T07:30:09.084Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Candidate {{instance.get_full_name}} is Hired.", + "method_title": "candidate_{{instance.get_full_name}}_is_hired.", + "model": "recruitment.models.Candidate", + "mail_to": "['recruitment_id__recruitment_managers__get_mail']", + "mail_details": "pk", + "mail_detail_choice": "", + "trigger": "on_update", + "mail_template": 10, + "delivery_channel": "notification", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Hired\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=hired&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 9, + "fields": { + "created_at": "2025-07-24T07:30:09.114Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Application Received for {{ instance.get_job_position}} - {{ instance.get_company }}", + "method_title": "application_received_for_{{_instance.get_job_position}}_π╗_{{_instance.get_company_}}", + "model": "recruitment.models.Candidate", + "mail_to": "['get_email']", + "mail_details": "pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 11, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1Stage type | Stage\r\n ==\r\n Applied\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=applied&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 10, + "fields": { + "created_at": "2025-05-07T08:25:05.235Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "OKR for {{instance.employee_id}} has been updated by {{self.get_full_name}}", + "method_title": "okr_updated", + "model": "pms.models.EmployeeKeyResult", + "mail_to": "['employee_objective_id__objective_id__managers__get_email']", + "mail_details": "employee_objective_id__employee_id__pk", + "mail_detail_choice": "", + "trigger": "on_update", + "mail_template": 12, + "delivery_channel": "notification", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Current value\r\n !=\r\n \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_current_value&condition=!%3D&automation_multiple_condition=0&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 11, + "fields": { + "created_at": "2025-07-24T07:30:09.167Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Access your HRMS Portal", + "method_title": "access_your_hrms_portal", + "model": "employee.models.Employee", + "mail_to": "['get_email']", + "mail_details": "pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 13, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Is active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 12, + "fields": { + "created_at": "2025-07-24T07:30:09.196Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Track your recruitment progress at {{instance.get_company}}", + "method_title": "track_your_recruitment_progress_at_{{instance.get_company}}", + "model": "recruitment.models.Candidate", + "mail_to": "['get_email']", + "mail_details": "pk", + "mail_detail_choice": "", + "trigger": "on_update", + "mail_template": 14, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Stage type | Stage\r\n ==\r\n Initial\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_stage_id__stage_type&condition=%3D%3D&automation_multiple_condition=initial&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Stage type | Stage\r\n ==\r\n Initial\r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 13, + "fields": { + "created_at": "2025-07-24T07:30:09.226Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Review Work Type Request - {{instance.employee_id}}", + "method_title": "review_work_type_request_-_{{instance.employee_id}}", + "model": "base.models.WorkTypeRequest", + "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "employee_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 15, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + }, + { + "model": "horilla_automations.mailautomation", + "pk": 14, + "fields": { + "created_at": "2025-07-24T07:30:09.247Z", + "created_by": 1, + "modified_by": 1, + "is_active": true, + "title": "Review Shift Request - {{instance.employee_id}}", + "method_title": "review_shift_request_-_{{instance.employee_id}}", + "model": "base.models.ShiftRequest", + "mail_to": "['employee_id__employee_work_info__reporting_manager_id__get_email']", + "mail_details": "employee_id__pk", + "mail_detail_choice": "", + "trigger": "on_create", + "mail_template": 16, + "delivery_channel": "email", + "condition_html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    C1\r\n \r\n Is Active\r\n ==\r\n
    \r\n And\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ", + "condition_querystring": "automation_multiple_condition=automation_multiple_is_active&condition=%3D%3D&automation_multiple_condition=on&logic=and", + "condition": "
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    CodeFieldConditionValueLogic\r\n Action \r\n \r\n \r\n \r\n
    \r\n
    \r\n ", + "also_sent_to": [], + "template_attachments": [] + } + } ] diff --git a/load_data/mail_templates.json b/load_data/mail_templates.json index 85fdaed79..140fc11eb 100644 --- a/load_data/mail_templates.json +++ b/load_data/mail_templates.json @@ -1,171 +1,210 @@ [ - { - "model": "base.horillamailtemplate", - "pk": 1, - "fields": { - "created_at": "2025-04-30T06:35:03.434Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Leave Request Template", - "body": "

    This is to inform you that {{ model_instance.employee_id }} has submitted a leave request for {{model_instance.requested_days}} days. Please take the necessary actions to review and process the request at your earliest convenience.


    If you require any additional information or updates, feel free to communicate directly with {{ model_instance.employee_id }}.

    Thank you for your prompt attention to this matter.

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 2, - "fields": { - "created_at": "2025-04-30T06:35:03.460Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Leave Allocation Request Template", - "body": "

    This is to inform you that {{ model_instance.employee_id }} has submitted a leave allocation request for {{model_instance.requested_days}} days. Please take the necessary actions to review and process the request at your earliest convenience.


    If you require any additional information or updates, feel free to communicate directly with {{ model_instance.employee_id }}.

    Thank you for your prompt attention to this matter. 

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 3, - "fields": { - "created_at": "2025-04-30T06:35:03.478Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Candidate Added Template", - "body": "

    This is to inform you that {{ model_instance}} has been added to the recruitment {{model_instance.recruitment_id}}. Please take the necessary actions.


    If you require any additional information or updates, feel free to communicate directly with {{ model_instance}}.

    Thank you for your prompt attention to this matter.

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 4, - "fields": { - "created_at": "2025-04-30T06:35:03.497Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Interview Template", - "body": "

    This is to inform you that an interview has been scheduled for {{model_instance.candidate_id}} on {{model_instance.interview_date}} at {{model_instance.interview_time}}.

    Kindly take the necessary steps to prepare for or facilitate this interview as appropriate.

    Thank you for your prompt attention to this matter.

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 5, - "fields": { - "created_at": "2025-04-30T06:35:03.515Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Add As Recruitment Manager Template", - "body": "

    We are pleased to inform you that you have been assigned as the Recruitment Manager for {{ model_instance}}.

    You may now proceed with the necessary steps to manage the recruitment process. Should you require any additional information or resources, please don't hesitate to reach out.

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 6, - "fields": { - "created_at": "2025-04-30T06:36:05.669Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Add As Stage Manager Template", - "body": "

    We are pleased to inform you that you have been assigned as the Stage Manager for {{ model_instance}}.

    You may now proceed with the necessary steps to manage the recruitment stage process. Should you require any additional information or resources, please don't hesitate to reach out.

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 7, - "fields": { - "created_at": "2025-05-02T08:56:53.382Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Offer letter Automation", - "body": "

    Dear {{instance.get_full_name}},

    We are pleased to extend to you an offer of employment for the position of {{instance.get_job_position}} at {{instance.get_company}}. We were very impressed by your qualifications and believe you will be a valuable addition to our team.

    Offer Details:

    • Position: {{instance.get_job_position}}
    • Department: {{instance.get_job_position.department_id}}

    Warm regards,

    {{self.get_full_name}}

    {{self.get_job_position}} | {{self.get_company}}

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 8, - "fields": { - "created_at": "2025-05-02T09:03:19.682Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Candidate Hired Notification Automation", - "body": "

    Candidate {{instance.get_full_name}} is Hired

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 9, - "fields": { - "created_at": "2025-05-02T09:21:40.929Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Application Received Automation", - "body": "

    Dear {{instance.get_full_name}},

    Thank you for applying for the {{instance.get_job_position}} position at {{instance.get_company}}. We have received your application, and our team will be reviewing your profile shortly. 

    If your qualifications match our requirements, we will reach out to you to discuss the next steps in the hiring process. Regardless of the outcome, we appreciate your interest in joining our team.

    Thank you again for considering {{instance.get_company}}. We wish you all the best!

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 10, - "fields": { - "created_at": "2025-05-03T06:48:48.607Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "OKR Updated Automation", - "body": "

    OKR has been updated

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 11, - "fields": { - "created_at": "2025-05-09T10:21:25.298Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Employee Portal Access Automation", - "body": "

    Hi {{instance.get_full_name}},

    Access following link {{ request.scheme }}://{{ request.get_host }} to access Horilla HR employee self service portal

    Username: {{instance.employee_user_id.username}}
    Initial Password: {{instance.phone}}

    Reset after first login
    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 12, - "fields": { - "created_at": "2025-05-09T11:03:19.494Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Candidate Self Tracking Portal Automation", - "body": "

    Hi {{instance.get_full_name}},

    Follow the link {{ request.scheme }}://{{ request.get_host }}/recruitment/candidate-login to track you progress

    Username/email: {{instance.get_mail }}

    Passsword/mobile: {{ instance.mobile }}

    {% if request.user.employee_get %}

    Regards

    {{self.get_full_name}} | {{self.get_department}} | {{self.get_company }}

    {% endif %}

    ", - "company_id": null - } - }, - { - "model": "base.horillamailtemplate", - "pk": 13, - "fields": { - "created_at": "2025-07-03T09:41:18.923Z", - "created_by": 1, - "modified_by": 1, - "is_active": false, - "title": "Got a Key Result Comment", - "body": "

    {{self.get_full_name}} added a comment inside {{model_instance.employee_objective_id.objective_id.title}} {{model_instance.employee_objective_id.employee_id}}'s OKR

    ", - "company_id": 1 - } + { + "model": "base.horillamailtemplate", + "pk": 1, + "fields": { + "created_at": "2025-06-05T09:39:13.733Z", + "created_by": null, + "modified_by": null, + "is_active": true, + "title": "Offer letter", + "body": "

    Congratulations! Job Offer at {{instance.get_company}}

    username:{{instance.get_email}}

    password:{{instance.phone}}

    Dear {{instance.get_full_name}},

                                                        I am delighted to extend an official offer of employment to you for the position of [Job Title] at [Company Name]. We were thoroughly impressed with your skills, experience, and the passion you demonstrated during the interview process.

    Here are the details of your job offer: 

        Job Position: {{instance.get_job_position}}

    We believe that your unique talents will make a significant contribution to our team, and we are thrilled about the prospect of you joining us. Please take the time to review the attached detailed job description, as well as the terms and conditions outlined in the employment contract.

    To signify your acceptance of this job offer, please confirm your agreement by [Date to Respond]. If you have any questions or need further clarification, feel free to contact me directly

    We are excited about the value you will bring to [Company Name], and we eagerly anticipate the positive impact you'll have on our team.

    Welcome aboard, and we look forward to a successful and fulfilling working relationship!

    Warm regards,

    ", + "company_id": null } + }, + { + "model": "base.horillamailtemplate", + "pk": 2, + "fields": { + "created_at": "2025-06-12T10:23:52.188Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Leave Request Mail", + "body": "

    Dear,

    This is to inform you that {{ model_instance.employee_id }} has submitted a leave request for {{model_instance.requested_days}} days. Please take the necessary actions to review and process the request at your earliest convenience.

    If you require any additional information or updates, feel free to communicate directly with {{ model_instance.employee_id }}.

    Thank you for your prompt attention to this matter.

    ", + "company_id": 1 + } + }, + { + "model": "base.horillamailtemplate", + "pk": 3, + "fields": { + "created_at": "2025-07-24T07:30:08.679Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Leave Request Template", + "body": "
    \n
    \n

    Leave Request

    \n\n

    \n Dear {{ model_instance.employee_id.get_reporting_manager }},\n

    \n\n

    \n {{ model_instance.employee_id }} has submitted a leave request. Please find the details below.\n

    \n\n
    \n

    Leave Type: {{ model_instance.leave_type_id }}

    \n

    From Date: {{ model_instance.start_date }} ({{ model_instance.get_start_date_breakdown_display }})

    \n

    To Date: {{ model_instance.end_date }} ({{ model_instance.get_end_date_breakdown_display }})

    \n

    Total Days: {{ model_instance.requested_days }}

    \n

    Description: {{ model_instance.description }}

    \n
    \n\n

    \n Please log in to the HRMS system to review and take necessary action on this request.\n

    \n\n \n\n
    \n\n

    \n This is an automated message from the HRMS system.
    \n Regards, {{ model_instance.employee_id.get_company }}\n

    \n
    \n
    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 4, + "fields": { + "created_at": "2025-07-24T07:30:08.701Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Leave Allocation Request Template", + "body": "
    \n
    \n

    Leave Allocation Request

    \n\n

    \n Dear {{ model_instance.employee_id.get_reporting_manager }},\n

    \n\n

    \n {{ model_instance.employee_id }} has submitted a leave allocation request for {{ model_instance.requested_days }} days.\n

    \n\n
    \n

    Leave Type: {{ model_instance.leave_type_id }}

    \n

    Requested Days: {{ model_instance.requested_days }}

    \n

    Requested Date: {{ model_instance.requested_date }}

    \n

    Description: {{ model_instance.description }}

    \n
    \n\n

    \n Please log in to the HRMS to review and take appropriate action.\n

    \n\n \n\n
    \n\n

    \n This is an automated message from the HRMS system.
    \n Regards, {{ model_instance.employee_id.get_company }}\n

    \n
    \n
    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 5, + "fields": { + "created_at": "2025-07-24T07:30:08.716Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Candidate Added Template", + "body": "

    This is to inform you that {{ model_instance}} has been added to the recruitment {{model_instance.recruitment_id}}. Please take the necessary actions.


    If you require any additional information or updates, feel free to communicate directly with {{ model_instance}}.

    Thank you for your prompt attention to this matter.

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 6, + "fields": { + "created_at": "2025-07-24T07:30:08.729Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Interview Template", + "body": "

    This is to inform you that an interview has been scheduled for {{model_instance.candidate_id}} on {{model_instance.interview_date}} at {{model_instance.interview_time}}.

    Kindly take the necessary steps to prepare for or facilitate this interview as appropriate.

    Thank you for your prompt attention to this matter.

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 7, + "fields": { + "created_at": "2025-07-24T07:30:08.741Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Add As Recruitment Manager Template", + "body": "

    We are pleased to inform you that you have been assigned as the Recruitment Manager for {{ model_instance}}.

    You may now proceed with the necessary steps to manage the recruitment process. Should you require any additional information or resources, please don't hesitate to reach out.

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 8, + "fields": { + "created_at": "2025-07-24T07:30:08.756Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Add As Stage Manager Template", + "body": "

    We are pleased to inform you that you have been assigned as the Stage Manager for {{ model_instance}}.

    You may now proceed with the necessary steps to manage the recruitment stage process. Should you require any additional information or resources, please don't hesitate to reach out.

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 9, + "fields": { + "created_at": "2025-07-24T07:30:08.769Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Offer letter Automation", + "body": "

    Dear {{instance.get_full_name}},

    We are pleased to extend to you an offer of employment for the position of {{instance.get_job_position}} at {{instance.get_company}}. We were very impressed by your qualifications and believe you will be a valuable addition to our team.

    Offer Details:

    • Position: {{instance.get_job_position}}
    • Department: {{instance.get_job_position.department_id}}

    Warm regards,

    {{self.get_full_name}}

    {{self.get_job_position}} | {{self.get_company}}

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 10, + "fields": { + "created_at": "2025-07-24T07:30:08.783Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Candidate Hired Notification Automation", + "body": "

    Candidate {{instance.get_full_name}} is Hired

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 11, + "fields": { + "created_at": "2025-07-24T07:30:08.795Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Application Received Template", + "body": "

    Dear {{ instance.name }},

    \n\n

    Thank you for applying for the {{ instance.job_position_id }} position at \n{% if instance.recruitment_id.company_id %}\n{{ instance.recruitment_id.company_id }}.\n{% else %}\nour company.\n{% endif %}

    \n\n

    We have received your application and our recruitment team is currently reviewing your profile.

    \n\n

    If your qualifications align with our current requirements, we will contact you for the next steps in the hiring process. In the meantime, feel free to visit our portal for any updates or communication.

    \n\n

    We appreciate your interest in joining our team and taking the time to apply.

    \n\n

    Best regards,
    \n{% if instance.recruitment_id.company_id %}\n{{ instance.recruitment_id.company_id }}
    \n{% endif %}\nRecruitment Team

    \n\n
    \n\n

    \nThis is an automated message from the HRMS system.\n

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 12, + "fields": { + "created_at": "2025-07-24T07:30:08.810Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "OKR Updated Automation", + "body": "

    OKR has been updated

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 13, + "fields": { + "created_at": "2025-07-24T07:30:08.824Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Employee Portal Access Template", + "body": "
    \n
    \n \n

    \n Access Your HRMS Portal\n

    \n\n

    \n Hi {{ instance.get_full_name }},\n

    \n\n

    \n You can now access the HRMS Portal using the details below:\n

    \n\n
    \n

    \n Portal Link: \n \n {{ request.scheme }}://{{ request.get_host }}\n \n

    \n

    \n Username: \n {{ instance.email }}\n

    \n

    \n Initial Password: \n {{ instance.phone }}\n

    \n

    \n Please reset your password after first login.\n

    \n
    \n\n
    \n\n

    \n This is an automated message from the HRMS system.
    \n Regards, {% if instance.get_company %}{{ instance.get_company }}{% endif %}

    \n
    \n
    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 14, + "fields": { + "created_at": "2025-07-24T07:30:08.840Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Candidate Self Tracking Portal Automation", + "body": "

    Hi {{instance.get_full_name}},

    Follow the link {{ request.scheme }}://{{ request.get_host }}/recruitment/candidate-login to track you progress

    Username/email: {{instance.get_mail }}

    Passsword/mobile: {{ instance.mobile }}

    {% if request.user.employee_get %}

    Regards

    {{self.get_full_name}} | {{self.get_department}} | {{self.get_company }}

    {% endif %}

    ", + "company_id": null + } + }, + { + "model": "base.horillamailtemplate", + "pk": 15, + "fields": { + "created_at": "2025-07-24T07:30:08.858Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Work Type Request Template", + "body": "
    \n
    \n

    Work Type Change Request

    \n\n

    \n Dear {{ model_instance.employee_id.get_reporting_manager }},\n

    \n\n

    \n A new work type change request has been submitted by {{ model_instance.employee_id }}.\n

    \n\n
    \n

    Current Work Type: {{ model_instance.previous_work_type_id }}

    \n

    Requested Work Type: {{ model_instance.work_type_id }}

    \n

    From: {{ model_instance.requested_date }}

    \n

    Till: {{ model_instance.requested_till }}

    \n

    Description: {{ model_instance.description }}

    \n
    \n\n

    \n Please review and process this request from your HRMS dashboard.\n

    \n\n \n\n
    \n\n

    \n This is an automated message from the HRMS system.
    \n Regards, {{ model_instance.employee_id.get_company }}\n

    \n
    \n
    ", + "company_id": 1 + } + }, + { + "model": "base.horillamailtemplate", + "pk": 16, + "fields": { + "created_at": "2025-07-24T07:30:08.874Z", + "created_by": 1, + "modified_by": 1, + "is_active": false, + "title": "Shift Request Template", + "body": "
    \n
    \n

    Shift Change Request

    \n\n

    \n Dear {{ model_instance.employee_id.get_reporting_manager }},\n

    \n\n

    \n {{ model_instance.employee_id }} has submitted a shift change request. Please find the details below.\n

    \n\n
    \n

    Previous Shift: {{ model_instance.previous_shift_id }}

    \n

    Requested Shift: {{ model_instance.shift_id }}

    \n

    Requested From: {{ model_instance.requested_date }}

    \n {% if model_instance.requested_till %}\n

    Requested Till: {{ model_instance.requested_till }}

    \n {% endif %}\n

    Permanent Change: {% if model_instance.is_permanent_shift %}Yes{% else %}No{% endif %}

    \n {% if model_instance.reallocate_to %}\n

    Reallocate To: {{ model_instance.reallocate_to }}

    \n {% endif %}\n {% if model_instance.description %}\n

    Description: {{ model_instance.description }}

    \n {% endif %}\n
    \n\n

    \n Please log in to the HRMS system to review and take necessary action on this request.\n

    \n\n \n\n
    \n\n

    \n This is an automated message from the HRMS system.
    \n Regards, {% if model_instance.employee_id.get_company %}{{ model_instance.employee_id.get_company }}{% else %}HRMS{% endif %}\n

    \n
    \n
    ", + "company_id": 1 + } + } ] diff --git a/load_data/offboarding_data.json b/load_data/offboarding_data.json index a6c5b86d5..2ced4fbca 100644 --- a/load_data/offboarding_data.json +++ b/load_data/offboarding_data.json @@ -3,7 +3,7 @@ "model": "offboarding.offboarding", "pk": 1, "fields": { - "created_at": "2025-03-12T09:48:40.988Z", + "created_at": "2025-06-12T09:48:40.988Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -18,7 +18,7 @@ "model": "offboarding.offboardingstage", "pk": 13, "fields": { - "created_at": "2025-03-12T09:48:41.001Z", + "created_at": "2025-06-12T09:48:41.001Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -33,7 +33,7 @@ "model": "offboarding.offboardingstage", "pk": 14, "fields": { - "created_at": "2025-03-12T09:48:41.028Z", + "created_at": "2025-06-12T09:48:41.028Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -48,7 +48,7 @@ "model": "offboarding.offboardingstage", "pk": 15, "fields": { - "created_at": "2025-03-12T09:48:41.045Z", + "created_at": "2025-06-12T09:48:41.045Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -63,7 +63,7 @@ "model": "offboarding.offboardingstage", "pk": 16, "fields": { - "created_at": "2025-03-12T09:48:41.063Z", + "created_at": "2025-06-12T09:48:41.063Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -78,7 +78,7 @@ "model": "offboarding.offboardingstage", "pk": 17, "fields": { - "created_at": "2025-03-12T09:48:41.080Z", + "created_at": "2025-06-12T09:48:41.080Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -93,7 +93,7 @@ "model": "offboarding.offboardingstage", "pk": 18, "fields": { - "created_at": "2025-03-12T09:48:41.097Z", + "created_at": "2025-06-12T09:48:41.097Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -108,14 +108,14 @@ "model": "offboarding.resignationletter", "pk": 1, "fields": { - "created_at": "2025-03-15T03:45:33.566Z", + "created_at": "2025-06-15T03:45:33.566Z", "created_by": 13, "modified_by": 13, "is_active": true, "employee_id": 12, "title": "Resignation", "description": "

    After much consideration, I have decided to pursue a new opportunity that aligns with my career goals and personal aspirations. Working at Horilla has been an incredibly rewarding experience, and I deeply appreciate the support, guidance, and opportunities for growth provided by the company and my colleagues.

    I am committed to ensuring a smooth transition and will do my best to complete my ongoing tasks and assist in handing over responsibilities. Please let me know how I can support the transition process.

    I want to express my gratitude to the entire team at Horilla for the collaboration, learning, and support throughout my time here. I will cherish the experience and the relationships I have built.

    Thank you once again for the opportunity to be a part of Horilla, and I wish the company continued success in the future.

    ", - "planned_to_leave_on": "2025-03-30", + "planned_to_leave_on": "2025-06-30", "status": "requested", "offboarding_employee_id": null } @@ -124,14 +124,14 @@ "model": "offboarding.resignationletter", "pk": 2, "fields": { - "created_at": "2025-03-15T03:46:37.925Z", + "created_at": "2025-06-15T03:46:37.925Z", "created_by": 29, "modified_by": 29, "is_active": true, "employee_id": 28, "title": "Resignation Letter", "description": "

    This was not an easy decision, but after careful thought, I believe it is the right time for me to explore new professional challenges. My time at Horilla has been an enriching journey, and I am truly grateful for the opportunities I have had to contribute and grow, both professionally and personally.

    I will do my best to ensure a smooth transition and am happy to assist in handing over my current projects or training a replacement if necessary. Please feel free to guide me on how I can assist during this period.

    Thank you once again for the support and for allowing me to be part of such a fantastic team. I wish Horilla continued growth and success, and I look forward to staying connected in the future.

    ", - "planned_to_leave_on": "2025-03-30", + "planned_to_leave_on": "2025-06-30", "status": "requested", "offboarding_employee_id": null } @@ -140,7 +140,7 @@ "model": "offboarding.offboardinggeneralsetting", "pk": 1, "fields": { - "created_at": "2025-03-15T03:43:33.290Z", + "created_at": "2025-06-15T03:43:33.290Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/onboarding_data.json b/load_data/onboarding_data.json index 7d29685e5..abb3b84f7 100644 --- a/load_data/onboarding_data.json +++ b/load_data/onboarding_data.json @@ -3,7 +3,7 @@ "model": "onboarding.onboardingstage", "pk": 1, "fields": { - "created_at": "2025-03-15T04:25:05.927Z", + "created_at": "2025-06-15T04:25:05.927Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -18,7 +18,7 @@ "model": "onboarding.onboardingstage", "pk": 2, "fields": { - "created_at": "2025-03-15T04:25:05.946Z", + "created_at": "2025-06-15T04:25:05.946Z", "created_by": null, "modified_by": null, "is_active": true, @@ -33,7 +33,7 @@ "model": "onboarding.onboardingstage", "pk": 3, "fields": { - "created_at": "2025-03-15T04:25:05.959Z", + "created_at": "2025-06-15T04:25:05.959Z", "created_by": null, "modified_by": null, "is_active": true, @@ -48,7 +48,7 @@ "model": "onboarding.onboardingstage", "pk": 4, "fields": { - "created_at": "2025-03-15T04:27:30.582Z", + "created_at": "2025-06-15T04:27:30.582Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -63,7 +63,7 @@ "model": "onboarding.onboardingstage", "pk": 5, "fields": { - "created_at": "2025-03-15T04:27:47.767Z", + "created_at": "2025-06-15T04:27:47.767Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -78,7 +78,7 @@ "model": "onboarding.onboardingstage", "pk": 6, "fields": { - "created_at": "2025-03-15T04:28:04.122Z", + "created_at": "2025-06-15T04:28:04.122Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -93,7 +93,7 @@ "model": "onboarding.onboardingstage", "pk": 7, "fields": { - "created_at": "2025-03-15T04:28:32.569Z", + "created_at": "2025-06-15T04:28:32.569Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/payroll_data.json b/load_data/payroll_data.json index fc36f5fdc..8636238d7 100644 --- a/load_data/payroll_data.json +++ b/load_data/payroll_data.json @@ -3,7 +3,7 @@ "model": "payroll.filingstatus", "pk": 1, "fields": { - "created_at": "2025-03-21T08:42:22.725Z", + "created_at": "2025-06-21T08:42:22.725Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -19,7 +19,7 @@ "model": "payroll.filingstatus", "pk": 2, "fields": { - "created_at": "2025-03-21T08:42:28.019Z", + "created_at": "2025-06-21T08:42:28.019Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -35,7 +35,7 @@ "model": "payroll.filingstatus", "pk": 3, "fields": { - "created_at": "2025-03-21T08:42:34.764Z", + "created_at": "2025-06-21T08:42:34.764Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -51,7 +51,7 @@ "model": "payroll.filingstatus", "pk": 4, "fields": { - "created_at": "2025-03-21T08:42:40.096Z", + "created_at": "2025-06-21T08:42:40.096Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -67,7 +67,7 @@ "model": "payroll.allowance", "pk": 1, "fields": { - "created_at": "2025-03-21T08:35:27.289Z", + "created_at": "2025-06-21T08:35:27.289Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -110,7 +110,7 @@ "model": "payroll.allowance", "pk": 2, "fields": { - "created_at": "2025-03-21T08:36:39.003Z", + "created_at": "2025-06-21T08:36:39.003Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -153,7 +153,7 @@ "model": "payroll.allowance", "pk": 3, "fields": { - "created_at": "2025-03-21T08:37:32.308Z", + "created_at": "2025-06-21T08:37:32.308Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -196,12 +196,12 @@ "model": "payroll.allowance", "pk": 4, "fields": { - "created_at": "2025-03-21T08:40:56.185Z", + "created_at": "2025-06-21T08:40:56.185Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Emergency Loan", - "one_time_date": "2025-03-10", + "one_time_date": "2025-06-10", "include_active_employees": false, "is_taxable": true, "is_condition_based": false, @@ -239,7 +239,7 @@ "model": "payroll.deduction", "pk": 1, "fields": { - "created_at": "2025-03-21T08:38:13.177Z", + "created_at": "2025-06-21T08:38:13.177Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -278,7 +278,7 @@ "model": "payroll.deduction", "pk": 2, "fields": { - "created_at": "2025-03-21T08:38:56.869Z", + "created_at": "2025-06-21T08:38:56.869Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -317,7 +317,7 @@ "model": "payroll.deduction", "pk": 3, "fields": { - "created_at": "2025-03-21T08:39:35.476Z", + "created_at": "2025-06-21T08:39:35.476Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -356,12 +356,12 @@ "model": "payroll.deduction", "pk": 4, "fields": { - "created_at": "2025-03-21T08:40:56.257Z", + "created_at": "2025-06-21T08:40:56.257Z", "created_by": 1, "modified_by": 1, "is_active": true, - "title": "Emergency Loan - 2025-03-01", - "one_time_date": "2025-03-01", + "title": "Emergency Loan - 2025-06-01", + "one_time_date": "2025-06-01", "include_active_employees": false, "is_tax": false, "is_pretax": true, @@ -395,12 +395,12 @@ "model": "payroll.deduction", "pk": 5, "fields": { - "created_at": "2025-03-21T08:40:56.311Z", + "created_at": "2025-06-21T08:40:56.311Z", "created_by": 1, "modified_by": 1, "is_active": true, - "title": "Emergency Loan - 2025-03-01", - "one_time_date": "2025-03-01", + "title": "Emergency Loan - 2025-06-01", + "one_time_date": "2025-06-01", "include_active_employees": false, "is_tax": false, "is_pretax": true, @@ -434,12 +434,12 @@ "model": "payroll.deduction", "pk": 6, "fields": { - "created_at": "2025-03-21T08:40:56.359Z", + "created_at": "2025-06-21T08:40:56.359Z", "created_by": 1, "modified_by": 1, "is_active": true, - "title": "Emergency Loan - 2025-01-01", - "one_time_date": "2025-01-01", + "title": "Emergency Loan - 2025-06-01", + "one_time_date": "2025-06-01", "include_active_employees": false, "is_tax": false, "is_pretax": true, @@ -473,7 +473,7 @@ "model": "payroll.deduction", "pk": 7, "fields": { - "created_at": "2025-03-21T08:40:56.407Z", + "created_at": "2025-06-21T08:40:56.407Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -512,12 +512,12 @@ "model": "payroll.deduction", "pk": 8, "fields": { - "created_at": "2025-03-21T08:40:56.455Z", + "created_at": "2025-06-21T08:40:56.455Z", "created_by": 1, "modified_by": 1, "is_active": true, - "title": "Emergency Loan - 2025-03-01", - "one_time_date": "2025-03-01", + "title": "Emergency Loan - 2025-06-01", + "one_time_date": "2025-06-01", "include_active_employees": false, "is_tax": false, "is_pretax": true, @@ -551,7 +551,7 @@ "model": "payroll.deduction", "pk": 9, "fields": { - "created_at": "2025-03-21T08:40:56.506Z", + "created_at": "2025-06-21T08:40:56.506Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -590,7 +590,7 @@ "model": "payroll.deduction", "pk": 10, "fields": { - "created_at": "2025-03-21T08:40:56.557Z", + "created_at": "2025-06-21T08:40:56.557Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -629,7 +629,7 @@ "model": "payroll.deduction", "pk": 11, "fields": { - "created_at": "2025-03-21T08:40:56.608Z", + "created_at": "2025-06-21T08:40:56.608Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -668,7 +668,7 @@ "model": "payroll.deduction", "pk": 12, "fields": { - "created_at": "2025-03-21T08:40:56.657Z", + "created_at": "2025-06-21T08:40:56.657Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -707,7 +707,7 @@ "model": "payroll.deduction", "pk": 13, "fields": { - "created_at": "2025-03-21T08:40:56.708Z", + "created_at": "2025-06-21T08:40:56.708Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -746,7 +746,7 @@ "model": "payroll.deduction", "pk": 14, "fields": { - "created_at": "2025-03-21T08:40:56.758Z", + "created_at": "2025-06-21T08:40:56.758Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -785,7 +785,7 @@ "model": "payroll.deduction", "pk": 15, "fields": { - "created_at": "2025-03-21T08:40:56.822Z", + "created_at": "2025-06-21T08:40:56.822Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -824,7 +824,7 @@ "model": "payroll.deduction", "pk": 16, "fields": { - "created_at": "2025-03-21T08:40:56.903Z", + "created_at": "2025-06-21T08:40:56.903Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -863,7 +863,7 @@ "model": "payroll.deduction", "pk": 17, "fields": { - "created_at": "2025-03-21T08:40:56.970Z", + "created_at": "2025-06-21T08:40:56.970Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -902,7 +902,7 @@ "model": "payroll.deduction", "pk": 18, "fields": { - "created_at": "2025-03-21T08:40:57.023Z", + "created_at": "2025-06-21T08:40:57.023Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -941,7 +941,7 @@ "model": "payroll.deduction", "pk": 19, "fields": { - "created_at": "2025-03-21T08:40:57.089Z", + "created_at": "2025-06-21T08:40:57.089Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -980,7 +980,7 @@ "model": "payroll.deduction", "pk": 20, "fields": { - "created_at": "2025-03-21T08:40:57.139Z", + "created_at": "2025-06-21T08:40:57.139Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1019,7 +1019,7 @@ "model": "payroll.deduction", "pk": 21, "fields": { - "created_at": "2025-03-21T08:40:57.185Z", + "created_at": "2025-06-21T08:40:57.185Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1063,14 +1063,14 @@ "model": "payroll.reimbursement", "pk": 1, "fields": { - "created_at": "2025-03-21T08:42:06.139Z", + "created_at": "2025-06-21T08:42:06.139Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Reimbursment For Travel", "type": "reimbursement", "employee_id": 11, - "allowance_on": "2025-03-01", + "allowance_on": "2025-06-01", "attachment": "payroll/reimbursements/Passport_yHUaQ2e.pdf", "ad_to_encash": 0.0, "cfd_to_encash": 0.0, @@ -1087,7 +1087,7 @@ "model": "payroll.payrollsettings", "pk": 1, "fields": { - "created_at": "2025-03-21T07:16:03.794Z", + "created_at": "2025-06-21T07:16:03.794Z", "created_by": null, "modified_by": null, "is_active": true, @@ -1100,7 +1100,7 @@ "model": "payroll.taxbracket", "pk": 1, "fields": { - "created_at": "2025-03-21T08:44:26.050Z", + "created_at": "2025-06-21T08:44:26.050Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1114,7 +1114,7 @@ "model": "payroll.taxbracket", "pk": 2, "fields": { - "created_at": "2025-03-21T08:44:36.408Z", + "created_at": "2025-06-21T08:44:36.408Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1128,7 +1128,7 @@ "model": "payroll.taxbracket", "pk": 3, "fields": { - "created_at": "2025-03-21T08:44:45.023Z", + "created_at": "2025-06-21T08:44:45.023Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1142,7 +1142,7 @@ "model": "payroll.taxbracket", "pk": 4, "fields": { - "created_at": "2025-03-21T08:45:07.251Z", + "created_at": "2025-06-21T08:45:07.251Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1156,7 +1156,7 @@ "model": "payroll.taxbracket", "pk": 5, "fields": { - "created_at": "2025-03-21T08:45:28.220Z", + "created_at": "2025-06-21T08:45:28.220Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1170,7 +1170,7 @@ "model": "payroll.taxbracket", "pk": 6, "fields": { - "created_at": "2025-03-21T08:45:42.610Z", + "created_at": "2025-06-21T08:45:42.610Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1184,7 +1184,7 @@ "model": "payroll.taxbracket", "pk": 7, "fields": { - "created_at": "2025-03-21T08:45:58.234Z", + "created_at": "2025-06-21T08:45:58.234Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1198,7 +1198,7 @@ "model": "payroll.taxbracket", "pk": 8, "fields": { - "created_at": "2025-03-21T08:46:40.497Z", + "created_at": "2025-06-21T08:46:40.497Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1212,7 +1212,7 @@ "model": "payroll.taxbracket", "pk": 9, "fields": { - "created_at": "2025-03-21T08:46:49.039Z", + "created_at": "2025-06-21T08:46:49.039Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1226,7 +1226,7 @@ "model": "payroll.taxbracket", "pk": 10, "fields": { - "created_at": "2025-03-21T08:46:59.265Z", + "created_at": "2025-06-21T08:46:59.265Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1240,7 +1240,7 @@ "model": "payroll.taxbracket", "pk": 11, "fields": { - "created_at": "2025-03-21T08:47:12.204Z", + "created_at": "2025-06-21T08:47:12.204Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1254,7 +1254,7 @@ "model": "payroll.taxbracket", "pk": 12, "fields": { - "created_at": "2025-03-21T08:47:26.068Z", + "created_at": "2025-06-21T08:47:26.068Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1268,7 +1268,7 @@ "model": "payroll.taxbracket", "pk": 13, "fields": { - "created_at": "2025-03-21T08:47:40.309Z", + "created_at": "2025-06-21T08:47:40.309Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1282,7 +1282,7 @@ "model": "payroll.taxbracket", "pk": 14, "fields": { - "created_at": "2025-03-21T08:47:48.308Z", + "created_at": "2025-06-21T08:47:48.308Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1296,7 +1296,7 @@ "model": "payroll.taxbracket", "pk": 15, "fields": { - "created_at": "2025-03-21T08:48:13.578Z", + "created_at": "2025-06-21T08:48:13.578Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1310,7 +1310,7 @@ "model": "payroll.taxbracket", "pk": 16, "fields": { - "created_at": "2025-03-21T08:48:22.948Z", + "created_at": "2025-06-21T08:48:22.948Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1324,7 +1324,7 @@ "model": "payroll.taxbracket", "pk": 17, "fields": { - "created_at": "2025-03-21T08:48:38.104Z", + "created_at": "2025-06-21T08:48:38.104Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1338,7 +1338,7 @@ "model": "payroll.taxbracket", "pk": 18, "fields": { - "created_at": "2025-03-21T08:48:52.625Z", + "created_at": "2025-06-21T08:48:52.625Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1352,7 +1352,7 @@ "model": "payroll.taxbracket", "pk": 19, "fields": { - "created_at": "2025-03-21T08:49:09.192Z", + "created_at": "2025-06-21T08:49:09.192Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1366,7 +1366,7 @@ "model": "payroll.taxbracket", "pk": 20, "fields": { - "created_at": "2025-03-21T08:49:23.918Z", + "created_at": "2025-06-21T08:49:23.918Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1380,7 +1380,7 @@ "model": "payroll.taxbracket", "pk": 21, "fields": { - "created_at": "2025-03-21T08:49:32.982Z", + "created_at": "2025-06-21T08:49:32.982Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1394,7 +1394,7 @@ "model": "payroll.taxbracket", "pk": 22, "fields": { - "created_at": "2025-03-21T08:49:55.138Z", + "created_at": "2025-06-21T08:49:55.138Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1408,7 +1408,7 @@ "model": "payroll.taxbracket", "pk": 23, "fields": { - "created_at": "2025-03-21T08:50:07.112Z", + "created_at": "2025-06-21T08:50:07.112Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1422,7 +1422,7 @@ "model": "payroll.taxbracket", "pk": 24, "fields": { - "created_at": "2025-03-21T08:50:16.831Z", + "created_at": "2025-06-21T08:50:16.831Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1436,7 +1436,7 @@ "model": "payroll.taxbracket", "pk": 25, "fields": { - "created_at": "2025-03-21T08:50:44.001Z", + "created_at": "2025-06-21T08:50:44.001Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1450,7 +1450,7 @@ "model": "payroll.taxbracket", "pk": 26, "fields": { - "created_at": "2025-03-21T08:50:56.700Z", + "created_at": "2025-06-21T08:50:56.700Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1464,7 +1464,7 @@ "model": "payroll.taxbracket", "pk": 27, "fields": { - "created_at": "2025-03-21T08:51:10.920Z", + "created_at": "2025-06-21T08:51:10.920Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1478,7 +1478,7 @@ "model": "payroll.taxbracket", "pk": 28, "fields": { - "created_at": "2025-03-21T08:51:25.104Z", + "created_at": "2025-06-21T08:51:25.104Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1492,14 +1492,14 @@ "model": "payroll.reimbursement", "pk": 1, "fields": { - "created_at": "2025-03-21T08:42:06.139Z", + "created_at": "2025-06-21T08:42:06.139Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Reimbursment For Travel", "type": "reimbursement", "employee_id": 11, - "allowance_on": "2025-03-01", + "allowance_on": "2025-06-01", "attachment": "payroll/reimbursements/Passport_yHUaQ2e.pdf", "ad_to_encash": 0.0, "cfd_to_encash": 0.0, diff --git a/load_data/payroll_loanaccount_data.json b/load_data/payroll_loanaccount_data.json index 3ab5c949a..19ba292cf 100644 --- a/load_data/payroll_loanaccount_data.json +++ b/load_data/payroll_loanaccount_data.json @@ -3,7 +3,7 @@ "model": "payroll.loanaccount", "pk": 1, "fields": { - "created_at": "2025-03-12T09:45:26.097Z", + "created_at": "2025-06-12T09:45:26.097Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -11,7 +11,7 @@ "title": "Medical Loan", "employee_id": 18, "loan_amount": 60000.0, - "provided_date": "2025-03-01", + "provided_date": "2025-06-01", "allowance_id": 5, "description": "Loan for parents medical case", "is_fixed": true, diff --git a/load_data/pms_data.json b/load_data/pms_data.json index 37b9dc216..fefa87ba1 100644 --- a/load_data/pms_data.json +++ b/load_data/pms_data.json @@ -3,7 +3,7 @@ "model": "pms.period", "pk": 1, "fields": { - "created_at": "2025-03-10T03:18:54.928Z", + "created_at": "2025-06-10T03:18:54.928Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -17,13 +17,13 @@ "model": "pms.period", "pk": 2, "fields": { - "created_at": "2025-03-10T03:20:01.039Z", + "created_at": "2025-06-10T03:20:01.039Z", "created_by": 1, "modified_by": 1, "is_active": true, "period_name": "Second Half 2024", "start_date": "2024-07-01", - "end_date": "2025-03-30", + "end_date": "2025-06-30", "company_id": [1, 2, 3] } }, @@ -46,7 +46,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T03:56:31.268Z", + "history_date": "2025-06-09T03:56:31.268Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -72,7 +72,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:06:25.161Z", + "history_date": "2025-06-09T04:06:25.161Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -98,7 +98,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:07:56.768Z", + "history_date": "2025-06-09T04:07:56.768Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -124,7 +124,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:08:22.171Z", + "history_date": "2025-06-09T04:08:22.171Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -150,7 +150,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:08:35.727Z", + "history_date": "2025-06-09T04:08:35.727Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -176,7 +176,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:09:07.671Z", + "history_date": "2025-06-09T04:09:07.671Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -202,7 +202,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:12:17.507Z", + "history_date": "2025-06-09T04:12:17.507Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -228,7 +228,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:12:25.983Z", + "history_date": "2025-06-09T04:12:25.983Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -254,7 +254,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:26:23.522Z", + "history_date": "2025-06-09T04:26:23.522Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -280,7 +280,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:26:43.184Z", + "history_date": "2025-06-09T04:26:43.184Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -306,7 +306,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:27:06.415Z", + "history_date": "2025-06-09T04:27:06.415Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -332,7 +332,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:28:09.360Z", + "history_date": "2025-06-09T04:28:09.360Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -358,7 +358,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:29:04.330Z", + "history_date": "2025-06-09T04:29:04.330Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -384,7 +384,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:31:04.038Z", + "history_date": "2025-06-09T04:31:04.038Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -410,7 +410,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:43:23.982Z", + "history_date": "2025-06-09T04:43:23.982Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -436,7 +436,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T04:57:27.561Z", + "history_date": "2025-06-09T04:57:27.561Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -462,7 +462,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:08:11.324Z", + "history_date": "2025-06-09T05:08:11.324Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -488,7 +488,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:08:23.570Z", + "history_date": "2025-06-09T05:08:23.570Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -514,7 +514,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:08:37.172Z", + "history_date": "2025-06-09T05:08:37.172Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -540,7 +540,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:09:12.127Z", + "history_date": "2025-06-09T05:09:12.127Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -566,7 +566,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:09:30.817Z", + "history_date": "2025-06-09T05:09:30.817Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -592,7 +592,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:09:55.938Z", + "history_date": "2025-06-09T05:09:55.938Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -618,7 +618,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:28:30.867Z", + "history_date": "2025-06-09T05:28:30.867Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -644,7 +644,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:29:44.623Z", + "history_date": "2025-06-09T05:29:44.623Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -670,7 +670,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:36:32.069Z", + "history_date": "2025-06-09T05:36:32.069Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -696,7 +696,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:36:37.670Z", + "history_date": "2025-06-09T05:36:37.670Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -722,7 +722,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:41:32.527Z", + "history_date": "2025-06-09T05:41:32.527Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -748,7 +748,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:41:49.267Z", + "history_date": "2025-06-09T05:41:49.267Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -774,7 +774,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:42:06.763Z", + "history_date": "2025-06-09T05:42:06.763Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -800,7 +800,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T05:42:11.592Z", + "history_date": "2025-06-09T05:42:11.592Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -826,7 +826,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T11:05:35.708Z", + "history_date": "2025-06-09T11:05:35.708Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -852,7 +852,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T11:06:37.940Z", + "history_date": "2025-06-09T11:06:37.940Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -878,7 +878,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T11:22:34.873Z", + "history_date": "2025-06-09T11:22:34.873Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -904,7 +904,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-09T11:22:40.444Z", + "history_date": "2025-06-09T11:22:40.444Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -930,7 +930,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-10T03:06:08.373Z", + "history_date": "2025-06-10T03:06:08.373Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -956,7 +956,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-10T03:06:17.492Z", + "history_date": "2025-06-10T03:06:17.492Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -982,7 +982,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-10T03:22:10.140Z", + "history_date": "2025-06-10T03:22:10.140Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -1008,7 +1008,7 @@ "created_by": 1, "modified_by": 1, "company_id": 1, - "history_date": "2025-03-10T03:22:31.426Z", + "history_date": "2025-06-10T03:22:31.426Z", "history_change_reason": null, "history_type": "~", "history_user": null, @@ -1393,7 +1393,7 @@ "model": "pms.questiontemplate", "pk": 1, "fields": { - "created_at": "2025-03-10T03:12:56.357Z", + "created_at": "2025-06-10T03:12:56.357Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1405,7 +1405,7 @@ "model": "pms.question", "pk": 1, "fields": { - "created_at": "2025-03-10T03:14:44.788Z", + "created_at": "2025-06-10T03:14:44.788Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1418,7 +1418,7 @@ "model": "pms.question", "pk": 2, "fields": { - "created_at": "2025-03-10T03:15:07.690Z", + "created_at": "2025-06-10T03:15:07.690Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1431,7 +1431,7 @@ "model": "pms.question", "pk": 3, "fields": { - "created_at": "2025-03-10T03:16:18.905Z", + "created_at": "2025-06-10T03:16:18.905Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1444,7 +1444,7 @@ "model": "pms.questionoptions", "pk": 1, "fields": { - "created_at": "2025-03-10T03:16:18.925Z", + "created_at": "2025-06-10T03:16:18.925Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1459,7 +1459,7 @@ "model": "pms.feedback", "pk": 1, "fields": { - "created_at": "2025-03-10T03:17:18.931Z", + "created_at": "2025-06-10T03:17:18.931Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1469,8 +1469,8 @@ "question_template_id": 1, "status": "Not Started", "archive": false, - "start_date": "2025-03-01", - "end_date": "2025-03-30", + "start_date": "2025-06-01", + "end_date": "2025-06-30", "cyclic_feedback": false, "cyclic_feedback_days_count": null, "cyclic_feedback_period": null, @@ -1485,12 +1485,12 @@ "model": "pms.meetings", "pk": 1, "fields": { - "created_at": "2025-03-10T03:20:51.009Z", + "created_at": "2025-06-10T03:20:51.009Z", "created_by": 1, "modified_by": 1, "is_active": true, "title": "Horilla Technical Meeting", - "date": "2025-03-12T04:30:00Z", + "date": "2025-06-12T04:30:00Z", "question_template": 1, "response": null, "show_response": false, diff --git a/load_data/project_data.json b/load_data/project_data.json index a1f66eb0c..22a8ff207 100644 --- a/load_data/project_data.json +++ b/load_data/project_data.json @@ -5,7 +5,7 @@ "fields": { "title": "Horilla OpenSource HRMS", "status": "new", - "start_date": "2025-04-01", + "start_date": "2025-06-01", "end_date": "2025-12-31", "document": "", "is_active": true, diff --git a/load_data/recruitment_data.json b/load_data/recruitment_data.json index 8937b6f9e..167e0a829 100644 --- a/load_data/recruitment_data.json +++ b/load_data/recruitment_data.json @@ -3,7 +3,7 @@ "model": "recruitment.recruitment", "pk": 1, "fields": { - "created_at": "2025-03-22T08:48:40.136Z", + "created_at": "2025-06-22T08:48:40.136Z", "created_by": 1, "modified_by": 1, "title": "Recruitment Drive", @@ -15,8 +15,8 @@ "job_position_id": null, "vacancy": 15, "company_id": 1, - "start_date": "2025-03-01", - "end_date": "2025-03-30", + "start_date": "2025-06-01", + "end_date": "2025-06-30", "optional_profile_image": false, "optional_resume": false, "open_positions": [1, 2], @@ -29,7 +29,7 @@ "model": "recruitment.recruitment", "pk": 2, "fields": { - "created_at": "2025-03-22T08:55:43.899Z", + "created_at": "2025-06-22T08:55:43.899Z", "created_by": 1, "modified_by": 1, "title": "FutureForce Recruitment", @@ -41,8 +41,8 @@ "job_position_id": null, "vacancy": 10, "company_id": 1, - "start_date": "2025-03-01", - "end_date": "2025-03-30", + "start_date": "2025-06-01", + "end_date": "2025-06-30", "optional_profile_image": false, "optional_resume": false, "open_positions": [3], @@ -55,7 +55,7 @@ "model": "recruitment.recruitment", "pk": 3, "fields": { - "created_at": "2025-03-22T09:03:26.892Z", + "created_at": "2025-06-22T09:03:26.892Z", "created_by": 1, "modified_by": 1, "title": "Hiring Employees", @@ -67,8 +67,8 @@ "job_position_id": null, "vacancy": 5, "company_id": null, - "start_date": "2025-03-01", - "end_date": "2025-03-30", + "start_date": "2025-06-01", + "end_date": "2025-06-30", "optional_profile_image": false, "optional_resume": false, "open_positions": [1, 2, 4], @@ -81,7 +81,7 @@ "model": "recruitment.stage", "pk": 4, "fields": { - "created_at": "2025-03-22T09:15:46.474Z", + "created_at": "2025-06-22T09:15:46.474Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -96,7 +96,7 @@ "model": "recruitment.stage", "pk": 5, "fields": { - "created_at": "2025-03-22T09:16:06.315Z", + "created_at": "2025-06-22T09:16:06.315Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -111,7 +111,7 @@ "model": "recruitment.stage", "pk": 6, "fields": { - "created_at": "2025-03-22T09:16:23.112Z", + "created_at": "2025-06-22T09:16:23.112Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -126,7 +126,7 @@ "model": "recruitment.stage", "pk": 7, "fields": { - "created_at": "2025-03-22T09:50:57.811Z", + "created_at": "2025-06-22T09:50:57.811Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -141,7 +141,7 @@ "model": "recruitment.candidate", "pk": 1, "fields": { - "created_at": "2025-03-22T09:15:26.692Z", + "created_at": "2025-06-22T09:15:26.692Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -172,14 +172,14 @@ "sequence": 0, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-21" + "last_updated": "2025-06-21" } }, { "model": "recruitment.candidate", "pk": 2, "fields": { - "created_at": "2025-03-22T09:17:20.896Z", + "created_at": "2025-06-22T09:17:20.896Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -210,14 +210,14 @@ "sequence": 1, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 3, "fields": { - "created_at": "2025-03-22T09:18:12.908Z", + "created_at": "2025-06-22T09:18:12.908Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -248,14 +248,14 @@ "sequence": 0, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 4, "fields": { - "created_at": "2025-03-22T09:19:04.142Z", + "created_at": "2025-06-22T09:19:04.142Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -286,14 +286,14 @@ "sequence": 0, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 5, "fields": { - "created_at": "2025-03-22T09:27:04.406Z", + "created_at": "2025-06-22T09:27:04.406Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -324,14 +324,14 @@ "sequence": 2, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 6, "fields": { - "created_at": "2025-03-22T09:28:20.410Z", + "created_at": "2025-06-22T09:28:20.410Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -362,14 +362,14 @@ "sequence": 0, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 7, "fields": { - "created_at": "2025-03-22T09:29:03.806Z", + "created_at": "2025-06-22T09:29:03.806Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -396,18 +396,18 @@ "start_onboard": true, "hired": true, "canceled": false, - "joining_date": "2025-03-15", + "joining_date": "2025-06-15", "sequence": 0, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-21" + "last_updated": "2025-06-21" } }, { "model": "recruitment.candidate", "pk": 8, "fields": { - "created_at": "2025-03-22T09:30:53.508Z", + "created_at": "2025-06-22T09:30:53.508Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -434,18 +434,18 @@ "start_onboard": true, "hired": true, "canceled": false, - "joining_date": "2025-03-15", + "joining_date": "2025-06-15", "sequence": 2, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-21" + "last_updated": "2025-06-21" } }, { "model": "recruitment.candidate", "pk": 9, "fields": { - "created_at": "2025-03-22T09:32:33.155Z", + "created_at": "2025-06-22T09:32:33.155Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -472,18 +472,18 @@ "start_onboard": true, "hired": true, "canceled": false, - "joining_date": "2025-03-15", + "joining_date": "2025-06-15", "sequence": 1, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 10, "fields": { - "created_at": "2025-03-22T09:35:18.587Z", + "created_at": "2025-06-22T09:35:18.587Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -510,18 +510,18 @@ "start_onboard": false, "hired": true, "canceled": false, - "joining_date": "2025-03-17", + "joining_date": "2025-06-17", "sequence": 1, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 11, "fields": { - "created_at": "2025-03-22T09:39:58.366Z", + "created_at": "2025-06-22T09:39:58.366Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -548,18 +548,18 @@ "start_onboard": false, "hired": true, "canceled": false, - "joining_date": "2025-03-17", + "joining_date": "2025-06-17", "sequence": 3, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 12, "fields": { - "created_at": "2025-03-22T09:41:43.261Z", + "created_at": "2025-06-22T09:41:43.261Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -590,14 +590,14 @@ "sequence": 3, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 13, "fields": { - "created_at": "2025-03-22T09:42:23.436Z", + "created_at": "2025-06-22T09:42:23.436Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -628,14 +628,14 @@ "sequence": 1, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 14, "fields": { - "created_at": "2025-03-22T09:43:13.951Z", + "created_at": "2025-06-22T09:43:13.951Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -666,14 +666,14 @@ "sequence": 4, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 15, "fields": { - "created_at": "2025-03-22T09:44:42.216Z", + "created_at": "2025-06-22T09:44:42.216Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -704,14 +704,14 @@ "sequence": 5, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 16, "fields": { - "created_at": "2025-03-22T09:45:16.185Z", + "created_at": "2025-06-22T09:45:16.185Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -742,14 +742,14 @@ "sequence": 6, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.candidate", "pk": 17, "fields": { - "created_at": "2025-03-22T09:45:47.746Z", + "created_at": "2025-06-22T09:45:47.746Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -780,14 +780,14 @@ "sequence": 7, "probation_end": null, "offer_letter_status": "not_sent", - "last_updated": "2025-03-22" + "last_updated": "2025-06-22" } }, { "model": "recruitment.rejectreason", "pk": 1, "fields": { - "created_at": "2025-03-22T08:27:14.458Z", + "created_at": "2025-06-22T08:27:14.458Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -800,7 +800,7 @@ "model": "recruitment.rejectreason", "pk": 2, "fields": { - "created_at": "2025-03-22T08:28:07.731Z", + "created_at": "2025-06-22T08:28:07.731Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -813,7 +813,7 @@ "model": "recruitment.skillzone", "pk": 1, "fields": { - "created_at": "2025-03-22T10:10:06.363Z", + "created_at": "2025-06-22T10:10:06.363Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -826,7 +826,7 @@ "model": "recruitment.skillzone", "pk": 2, "fields": { - "created_at": "2025-03-22T10:11:06.363Z", + "created_at": "2025-06-22T10:11:06.363Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -839,21 +839,21 @@ "model": "recruitment.skillzonecandidate", "pk": 1, "fields": { - "created_at": "2025-03-22T10:10:37.109Z", + "created_at": "2025-06-22T10:10:37.109Z", "created_by": 1, "modified_by": 1, "is_active": true, "skill_zone_id": 1, "candidate_id": 3, "reason": "better design knowledge", - "added_on": "2025-03-22" + "added_on": "2025-06-22" } }, { "model": "recruitment.candidaterating", "pk": 1, "fields": { - "created_at": "2025-03-21T08:38:48.996Z", + "created_at": "2025-06-21T08:38:48.996Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -866,12 +866,12 @@ "model": "recruitment.interviewschedule", "pk": 1, "fields": { - "created_at": "2025-03-22T09:59:26.359Z", + "created_at": "2025-06-22T09:59:26.359Z", "created_by": 1, "modified_by": 1, "is_active": true, "candidate_id": 15, - "interview_date": "2025-03-24", + "interview_date": "2025-06-24", "interview_time": "10:30:00", "description": "", "completed": false, @@ -882,7 +882,7 @@ "model": "recruitment.surveytemplate", "pk": 1, "fields": { - "created_at": "2025-03-17T09:03:25.711Z", + "created_at": "2025-06-17T09:03:25.711Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -896,7 +896,7 @@ "model": "recruitment.surveytemplate", "pk": 2, "fields": { - "created_at": "2025-03-15T04:08:07.657Z", + "created_at": "2025-06-15T04:08:07.657Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -910,7 +910,7 @@ "model": "recruitment.surveytemplate", "pk": 3, "fields": { - "created_at": "2025-03-15T04:13:08.737Z", + "created_at": "2025-06-15T04:13:08.737Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -924,7 +924,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 1, "fields": { - "created_at": "2025-03-17T09:06:47.055Z", + "created_at": "2025-06-17T09:06:47.055Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -942,7 +942,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 2, "fields": { - "created_at": "2025-03-17T09:07:14.100Z", + "created_at": "2025-06-17T09:07:14.100Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -960,7 +960,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 3, "fields": { - "created_at": "2025-03-15T04:08:37.429Z", + "created_at": "2025-06-15T04:08:37.429Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -978,7 +978,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 4, "fields": { - "created_at": "2025-03-15T04:09:33.102Z", + "created_at": "2025-06-15T04:09:33.102Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -996,7 +996,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 5, "fields": { - "created_at": "2025-03-15T04:10:25.767Z", + "created_at": "2025-06-15T04:10:25.767Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1014,7 +1014,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 6, "fields": { - "created_at": "2025-03-15T04:10:47.869Z", + "created_at": "2025-06-15T04:10:47.869Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1032,7 +1032,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 7, "fields": { - "created_at": "2025-03-15T04:11:01.784Z", + "created_at": "2025-06-15T04:11:01.784Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1050,7 +1050,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 8, "fields": { - "created_at": "2025-03-15T04:11:20.757Z", + "created_at": "2025-06-15T04:11:20.757Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1068,7 +1068,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 9, "fields": { - "created_at": "2025-03-15T04:11:41.456Z", + "created_at": "2025-06-15T04:11:41.456Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1086,7 +1086,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 10, "fields": { - "created_at": "2025-03-15T04:13:39.132Z", + "created_at": "2025-06-15T04:13:39.132Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1104,7 +1104,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 11, "fields": { - "created_at": "2025-03-15T04:14:26.896Z", + "created_at": "2025-06-15T04:14:26.896Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1122,7 +1122,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 12, "fields": { - "created_at": "2025-03-15T04:15:18.850Z", + "created_at": "2025-06-15T04:15:18.850Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -1140,7 +1140,7 @@ "model": "recruitment.recruitmentsurvey", "pk": 13, "fields": { - "created_at": "2025-03-15T04:15:35.442Z", + "created_at": "2025-06-15T04:15:35.442Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/tags.json b/load_data/tags.json index 5eb1bb320..c548ff428 100644 --- a/load_data/tags.json +++ b/load_data/tags.json @@ -3,7 +3,7 @@ "model": "base.tags", "pk": 1, "fields": { - "created_at": "2025-05-05T11:31:39.815Z", + "created_at": "2025-06-05T11:31:39.815Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -16,7 +16,7 @@ "model": "base.tags", "pk": 2, "fields": { - "created_at": "2025-05-05T11:31:39.846Z", + "created_at": "2025-06-05T11:31:39.846Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -29,7 +29,7 @@ "model": "base.tags", "pk": 3, "fields": { - "created_at": "2025-05-05T11:31:39.871Z", + "created_at": "2025-06-05T11:31:39.871Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -42,7 +42,7 @@ "model": "base.tags", "pk": 4, "fields": { - "created_at": "2025-05-05T11:31:39.904Z", + "created_at": "2025-06-05T11:31:39.904Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -55,7 +55,7 @@ "model": "base.tags", "pk": 5, "fields": { - "created_at": "2025-05-05T11:31:39.935Z", + "created_at": "2025-06-05T11:31:39.935Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -68,7 +68,7 @@ "model": "base.tags", "pk": 6, "fields": { - "created_at": "2025-05-05T11:31:39.963Z", + "created_at": "2025-06-05T11:31:39.963Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -81,7 +81,7 @@ "model": "base.tags", "pk": 7, "fields": { - "created_at": "2025-05-05T11:31:39.989Z", + "created_at": "2025-06-05T11:31:39.989Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -94,7 +94,7 @@ "model": "base.tags", "pk": 8, "fields": { - "created_at": "2025-05-05T11:31:40.013Z", + "created_at": "2025-06-05T11:31:40.013Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -107,7 +107,7 @@ "model": "base.tags", "pk": 9, "fields": { - "created_at": "2025-05-05T11:31:40.042Z", + "created_at": "2025-06-05T11:31:40.042Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -120,7 +120,7 @@ "model": "base.tags", "pk": 10, "fields": { - "created_at": "2025-05-05T11:31:40.065Z", + "created_at": "2025-06-05T11:31:40.065Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -133,7 +133,7 @@ "model": "base.tags", "pk": 11, "fields": { - "created_at": "2025-05-05T11:31:40.091Z", + "created_at": "2025-06-05T11:31:40.091Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -146,7 +146,7 @@ "model": "base.tags", "pk": 12, "fields": { - "created_at": "2025-05-05T11:31:40.117Z", + "created_at": "2025-06-05T11:31:40.117Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -159,7 +159,7 @@ "model": "base.tags", "pk": 13, "fields": { - "created_at": "2025-05-05T11:31:40.144Z", + "created_at": "2025-06-05T11:31:40.144Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -172,7 +172,7 @@ "model": "base.tags", "pk": 14, "fields": { - "created_at": "2025-05-05T11:31:40.170Z", + "created_at": "2025-06-05T11:31:40.170Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -185,7 +185,7 @@ "model": "base.tags", "pk": 15, "fields": { - "created_at": "2025-05-05T11:31:40.190Z", + "created_at": "2025-06-05T11:31:40.190Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -198,7 +198,7 @@ "model": "base.tags", "pk": 16, "fields": { - "created_at": "2025-05-05T11:31:40.220Z", + "created_at": "2025-06-05T11:31:40.220Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -211,7 +211,7 @@ "model": "base.tags", "pk": 17, "fields": { - "created_at": "2025-05-05T11:31:40.245Z", + "created_at": "2025-06-05T11:31:40.245Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -224,7 +224,7 @@ "model": "base.tags", "pk": 18, "fields": { - "created_at": "2025-05-05T11:31:40.272Z", + "created_at": "2025-06-05T11:31:40.272Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -237,7 +237,7 @@ "model": "base.tags", "pk": 19, "fields": { - "created_at": "2025-05-05T11:31:40.298Z", + "created_at": "2025-06-05T11:31:40.298Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -250,7 +250,7 @@ "model": "base.tags", "pk": 20, "fields": { - "created_at": "2025-05-05T11:31:40.325Z", + "created_at": "2025-06-05T11:31:40.325Z", "created_by": 1, "modified_by": 1, "is_active": true, diff --git a/load_data/user_data.json b/load_data/user_data.json index 201ab6b00..29e1532f9 100644 --- a/load_data/user_data.json +++ b/load_data/user_data.json @@ -12,7 +12,7 @@ "email": "adam.luis@horilla.com", "is_staff": true, "is_active": true, - "date_joined": "2025-03-21T11:22:30Z", + "date_joined": "2025-06-21T11:22:30Z", "groups": [], "user_permissions": [] } @@ -30,7 +30,7 @@ "email": "", "is_staff": false, "is_active": true, - "date_joined": "2025-03-21T11:22:31.280Z", + "date_joined": "2025-06-21T11:22:31.280Z", "groups": [], "user_permissions": [] } @@ -48,7 +48,7 @@ "email": "michael.brown@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:23.080Z", + "date_joined": "2025-06-22T04:47:23.080Z", "groups": [], "user_permissions": [] } @@ -66,7 +66,7 @@ "email": "sarah.anderson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:23.771Z", + "date_joined": "2025-06-22T04:47:23.771Z", "groups": [], "user_permissions": [] } @@ -84,7 +84,7 @@ "email": "emily.clark@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:24.351Z", + "date_joined": "2025-06-22T04:47:24.351Z", "groups": [], "user_permissions": [] } @@ -102,7 +102,7 @@ "email": "jessica.evans@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:24.916Z", + "date_joined": "2025-06-22T04:47:24.916Z", "groups": [], "user_permissions": [] } @@ -120,7 +120,7 @@ "email": "matthew.harris@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:25.467Z", + "date_joined": "2025-06-22T04:47:25.467Z", "groups": [], "user_permissions": [] } @@ -138,7 +138,7 @@ "email": "david.king@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:26.035Z", + "date_joined": "2025-06-22T04:47:26.035Z", "groups": [], "user_permissions": [] } @@ -156,7 +156,7 @@ "email": "emma.lee@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:26.602Z", + "date_joined": "2025-06-22T04:47:26.602Z", "groups": [], "user_permissions": [] } @@ -174,7 +174,7 @@ "email": "christopher.miller@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:27.218Z", + "date_joined": "2025-06-22T04:47:27.218Z", "groups": [], "user_permissions": [] } @@ -192,7 +192,7 @@ "email": "mia.nelson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:27.791Z", + "date_joined": "2025-06-22T04:47:27.791Z", "groups": [], "user_permissions": [] } @@ -210,7 +210,7 @@ "email": "benjamin.parker@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:28.417Z", + "date_joined": "2025-06-22T04:47:28.417Z", "groups": [], "user_permissions": [] } @@ -228,7 +228,7 @@ "email": "abigail.roberts@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:28.954Z", + "date_joined": "2025-06-22T04:47:28.954Z", "groups": [], "user_permissions": [] } @@ -246,7 +246,7 @@ "email": "alexander.smith@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:29.514Z", + "date_joined": "2025-06-22T04:47:29.514Z", "groups": [], "user_permissions": [] } @@ -264,7 +264,7 @@ "email": "isabella.thompson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:30.069Z", + "date_joined": "2025-06-22T04:47:30.069Z", "groups": [], "user_permissions": [] } @@ -282,7 +282,7 @@ "email": "jacob.walker@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:30.618Z", + "date_joined": "2025-06-22T04:47:30.618Z", "groups": [], "user_permissions": [] } @@ -300,7 +300,7 @@ "email": "charlotte.white@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:31.170Z", + "date_joined": "2025-06-22T04:47:31.170Z", "groups": [], "user_permissions": [] } @@ -318,7 +318,7 @@ "email": "noah.young@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:31.744Z", + "date_joined": "2025-06-22T04:47:31.744Z", "groups": [], "user_permissions": [] } @@ -336,7 +336,7 @@ "email": "grace.allen@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:32.306Z", + "date_joined": "2025-06-22T04:47:32.306Z", "groups": [], "user_permissions": [] } @@ -354,7 +354,7 @@ "email": "samuel.baker@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:32.873Z", + "date_joined": "2025-06-22T04:47:32.873Z", "groups": [], "user_permissions": [] } @@ -372,7 +372,7 @@ "email": "lily.campbell@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:33.415Z", + "date_joined": "2025-06-22T04:47:33.415Z", "groups": [], "user_permissions": [] } @@ -390,7 +390,7 @@ "email": "lucas.carter@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:33.997Z", + "date_joined": "2025-06-22T04:47:33.997Z", "groups": [], "user_permissions": [] } @@ -408,7 +408,7 @@ "email": "amelia.cooper@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:34.577Z", + "date_joined": "2025-06-22T04:47:34.577Z", "groups": [], "user_permissions": [] } @@ -426,7 +426,7 @@ "email": "mason.diaz@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:35.180Z", + "date_joined": "2025-06-22T04:47:35.180Z", "groups": [], "user_permissions": [] } @@ -444,7 +444,7 @@ "email": "harper.edwards@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:35.724Z", + "date_joined": "2025-06-22T04:47:35.724Z", "groups": [], "user_permissions": [] } @@ -462,7 +462,7 @@ "email": "logan.flores@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:36.305Z", + "date_joined": "2025-06-22T04:47:36.305Z", "groups": [], "user_permissions": [] } @@ -480,7 +480,7 @@ "email": "evelyn.garcia@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:36.905Z", + "date_joined": "2025-06-22T04:47:36.905Z", "groups": [], "user_permissions": [] } @@ -498,7 +498,7 @@ "email": "ethan.gonzalez@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:37.528Z", + "date_joined": "2025-06-22T04:47:37.528Z", "groups": [], "user_permissions": [] } @@ -516,7 +516,7 @@ "email": "avery.hill@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:38.085Z", + "date_joined": "2025-06-22T04:47:38.085Z", "groups": [], "user_permissions": [] } @@ -534,7 +534,7 @@ "email": "william.hughes@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:38.641Z", + "date_joined": "2025-06-22T04:47:38.641Z", "groups": [], "user_permissions": [] } @@ -552,7 +552,7 @@ "email": "ella.jackson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:39.181Z", + "date_joined": "2025-06-22T04:47:39.181Z", "groups": [], "user_permissions": [] } @@ -570,7 +570,7 @@ "email": "owen.jenkins@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:39.723Z", + "date_joined": "2025-06-22T04:47:39.723Z", "groups": [], "user_permissions": [] } @@ -588,7 +588,7 @@ "email": "madison.kelly@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:40.309Z", + "date_joined": "2025-06-22T04:47:40.309Z", "groups": [], "user_permissions": [] } @@ -606,7 +606,7 @@ "email": "henry.lewis@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:40.871Z", + "date_joined": "2025-06-22T04:47:40.871Z", "groups": [], "user_permissions": [] } @@ -624,7 +624,7 @@ "email": "scarlett.martinez@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:41.493Z", + "date_joined": "2025-06-22T04:47:41.493Z", "groups": [], "user_permissions": [] } @@ -642,7 +642,7 @@ "email": "sebastian.mitchell@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:42.084Z", + "date_joined": "2025-06-22T04:47:42.084Z", "groups": [], "user_permissions": [] } @@ -660,7 +660,7 @@ "email": "chloe.morgan@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:42.722Z", + "date_joined": "2025-06-22T04:47:42.722Z", "groups": [], "user_permissions": [] } @@ -678,7 +678,7 @@ "email": "aiden.murphy@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:43.356Z", + "date_joined": "2025-06-22T04:47:43.356Z", "groups": [], "user_permissions": [] } @@ -696,7 +696,7 @@ "email": "mila.perez@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:43.906Z", + "date_joined": "2025-06-22T04:47:43.906Z", "groups": [], "user_permissions": [] } @@ -714,7 +714,7 @@ "email": "gabriel.phillips@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:44.466Z", + "date_joined": "2025-06-22T04:47:44.466Z", "groups": [], "user_permissions": [] } @@ -732,7 +732,7 @@ "email": "aria.powell@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:45.023Z", + "date_joined": "2025-06-22T04:47:45.023Z", "groups": [], "user_permissions": [] } @@ -750,7 +750,7 @@ "email": "wyatt.ramirez@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:45.586Z", + "date_joined": "2025-06-22T04:47:45.586Z", "groups": [], "user_permissions": [] } @@ -768,7 +768,7 @@ "email": "nora.reed@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:46.194Z", + "date_joined": "2025-06-22T04:47:46.194Z", "groups": [], "user_permissions": [] } @@ -786,7 +786,7 @@ "email": "jack.rivera@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:46.963Z", + "date_joined": "2025-06-22T04:47:46.963Z", "groups": [], "user_permissions": [] } @@ -804,7 +804,7 @@ "email": "ellie.rogers@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:47.622Z", + "date_joined": "2025-06-22T04:47:47.622Z", "groups": [], "user_permissions": [] } @@ -822,7 +822,7 @@ "email": "levi.sanders@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:48.228Z", + "date_joined": "2025-06-22T04:47:48.228Z", "groups": [], "user_permissions": [] } @@ -840,7 +840,7 @@ "email": "penelope.scott@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:48.774Z", + "date_joined": "2025-06-22T04:47:48.774Z", "groups": [], "user_permissions": [] } @@ -858,7 +858,7 @@ "email": "carter.stewart@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:49.333Z", + "date_joined": "2025-06-22T04:47:49.333Z", "groups": [], "user_permissions": [] } @@ -876,7 +876,7 @@ "email": "victoria.turner@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:49.920Z", + "date_joined": "2025-06-22T04:47:49.920Z", "groups": [], "user_permissions": [] } @@ -894,7 +894,7 @@ "email": "zoey.watson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:50.482Z", + "date_joined": "2025-06-22T04:47:50.482Z", "groups": [], "user_permissions": [] } @@ -912,7 +912,7 @@ "email": "nathaniel.wright@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:51.077Z", + "date_joined": "2025-06-22T04:47:51.077Z", "groups": [], "user_permissions": [] } @@ -930,7 +930,7 @@ "email": "hazel.adams@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:51.649Z", + "date_joined": "2025-06-22T04:47:51.649Z", "groups": [], "user_permissions": [] } @@ -948,7 +948,7 @@ "email": "julian.barnes@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:52.231Z", + "date_joined": "2025-06-22T04:47:52.231Z", "groups": [], "user_permissions": [] } @@ -966,7 +966,7 @@ "email": "stella.bell@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:52.847Z", + "date_joined": "2025-06-22T04:47:52.847Z", "groups": [], "user_permissions": [] } @@ -984,7 +984,7 @@ "email": "ryan.bennett@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:53.395Z", + "date_joined": "2025-06-22T04:47:53.395Z", "groups": [], "user_permissions": [] } @@ -1002,7 +1002,7 @@ "email": "hannah.brooks@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:53.953Z", + "date_joined": "2025-06-22T04:47:53.953Z", "groups": [], "user_permissions": [] } @@ -1020,7 +1020,7 @@ "email": "hunter.butler@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:54.513Z", + "date_joined": "2025-06-22T04:47:54.513Z", "groups": [], "user_permissions": [] } @@ -1038,7 +1038,7 @@ "email": "ruby.cook@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:55.086Z", + "date_joined": "2025-06-22T04:47:55.086Z", "groups": [], "user_permissions": [] } @@ -1056,7 +1056,7 @@ "email": "elijah.cox@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:55.668Z", + "date_joined": "2025-06-22T04:47:55.668Z", "groups": [], "user_permissions": [] } @@ -1074,7 +1074,7 @@ "email": "lucy.cruz@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:56.228Z", + "date_joined": "2025-06-22T04:47:56.228Z", "groups": [], "user_permissions": [] } @@ -1092,7 +1092,7 @@ "email": "joseph.diaz@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:56.830Z", + "date_joined": "2025-06-22T04:47:56.830Z", "groups": [], "user_permissions": [] } @@ -1110,7 +1110,7 @@ "email": "sadie.ellis@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:57.373Z", + "date_joined": "2025-06-22T04:47:57.373Z", "groups": [], "user_permissions": [] } @@ -1128,7 +1128,7 @@ "email": "caleb.fisher@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:58.004Z", + "date_joined": "2025-06-22T04:47:58.004Z", "groups": [], "user_permissions": [] } @@ -1146,7 +1146,7 @@ "email": "alice.foster@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:58.569Z", + "date_joined": "2025-06-22T04:47:58.569Z", "groups": [], "user_permissions": [] } @@ -1164,7 +1164,7 @@ "email": "nicholas.george@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:59.163Z", + "date_joined": "2025-06-22T04:47:59.163Z", "groups": [], "user_permissions": [] } @@ -1182,7 +1182,7 @@ "email": "layla.gonzales@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:47:59.787Z", + "date_joined": "2025-06-22T04:47:59.787Z", "groups": [], "user_permissions": [] } @@ -1200,7 +1200,7 @@ "email": "jonathan.gray@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:48:00.544Z", + "date_joined": "2025-06-22T04:48:00.544Z", "groups": [], "user_permissions": [] } @@ -1218,7 +1218,7 @@ "email": "violet.griffin@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:48:01.394Z", + "date_joined": "2025-06-22T04:48:01.394Z", "groups": [], "user_permissions": [] } @@ -1236,7 +1236,7 @@ "email": "andrew.hayes@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:48:02.032Z", + "date_joined": "2025-06-22T04:48:02.032Z", "groups": [], "user_permissions": [] } @@ -1254,7 +1254,7 @@ "email": "sofia.howard@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:48:02.683Z", + "date_joined": "2025-06-22T04:48:02.683Z", "groups": [], "user_permissions": [] } @@ -1272,7 +1272,7 @@ "email": "james.davis@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:50.411Z", + "date_joined": "2025-06-22T04:52:50.411Z", "groups": [], "user_permissions": [] } @@ -1290,7 +1290,7 @@ "email": "daniel.foster@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:51.064Z", + "date_joined": "2025-06-22T04:52:51.064Z", "groups": [], "user_permissions": [] } @@ -1308,7 +1308,7 @@ "email": "olivia.green@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:51.663Z", + "date_joined": "2025-06-22T04:52:51.663Z", "groups": [], "user_permissions": [] } @@ -1326,7 +1326,7 @@ "email": "sophia.johnson@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:52.232Z", + "date_joined": "2025-06-22T04:52:52.232Z", "groups": [], "user_permissions": [] } @@ -1344,7 +1344,7 @@ "email": "riley.taylor@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:52.829Z", + "date_joined": "2025-06-22T04:52:52.829Z", "groups": [], "user_permissions": [] } @@ -1362,7 +1362,7 @@ "email": "isaac.torres@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:53.422Z", + "date_joined": "2025-06-22T04:52:53.422Z", "groups": [], "user_permissions": [] } @@ -1380,7 +1380,7 @@ "email": "dylan.ward@horilla.com", "is_staff": false, "is_active": true, - "date_joined": "2025-03-22T04:52:53.994Z", + "date_joined": "2025-06-22T04:52:53.994Z", "groups": [], "user_permissions": [] } diff --git a/load_data/work_info_data.json b/load_data/work_info_data.json index 50f5bdc1e..f33b21227 100644 --- a/load_data/work_info_data.json +++ b/load_data/work_info_data.json @@ -3333,7 +3333,7 @@ "model": "helpdesk.faqcategory", "pk": 1, "fields": { - "created_at": "2025-03-12T03:19:37.526Z", + "created_at": "2025-06-12T03:19:37.526Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3345,7 +3345,7 @@ "model": "helpdesk.faqcategory", "pk": 2, "fields": { - "created_at": "2025-03-12T03:19:37.542Z", + "created_at": "2025-06-12T03:19:37.542Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3357,7 +3357,7 @@ "model": "helpdesk.faqcategory", "pk": 3, "fields": { - "created_at": "2025-03-12T03:19:37.558Z", + "created_at": "2025-06-12T03:19:37.558Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3369,7 +3369,7 @@ "model": "helpdesk.faqcategory", "pk": 4, "fields": { - "created_at": "2025-03-12T03:19:37.570Z", + "created_at": "2025-06-12T03:19:37.570Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3381,7 +3381,7 @@ "model": "helpdesk.faqcategory", "pk": 5, "fields": { - "created_at": "2025-03-12T03:19:37.583Z", + "created_at": "2025-06-12T03:19:37.583Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3393,7 +3393,7 @@ "model": "helpdesk.faqcategory", "pk": 6, "fields": { - "created_at": "2025-03-12T06:16:05.685Z", + "created_at": "2025-06-12T06:16:05.685Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3405,7 +3405,7 @@ "model": "helpdesk.faqcategory", "pk": 7, "fields": { - "created_at": "2025-03-12T06:46:44.110Z", + "created_at": "2025-06-12T06:46:44.110Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3417,7 +3417,7 @@ "model": "helpdesk.faq", "pk": 1, "fields": { - "created_at": "2025-03-12T03:19:37.597Z", + "created_at": "2025-06-12T03:19:37.597Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3432,7 +3432,7 @@ "model": "helpdesk.faq", "pk": 2, "fields": { - "created_at": "2025-03-12T03:19:38.034Z", + "created_at": "2025-06-12T03:19:38.034Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3447,7 +3447,7 @@ "model": "helpdesk.faq", "pk": 3, "fields": { - "created_at": "2025-03-12T03:19:38.147Z", + "created_at": "2025-06-12T03:19:38.147Z", "created_by": null, "modified_by": null, "is_active": true, @@ -3462,7 +3462,7 @@ "model": "helpdesk.faq", "pk": 4, "fields": { - "created_at": "2025-03-12T03:19:38.278Z", + "created_at": "2025-06-12T03:19:38.278Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3477,7 +3477,7 @@ "model": "helpdesk.faq", "pk": 5, "fields": { - "created_at": "2025-03-12T03:19:38.394Z", + "created_at": "2025-06-12T03:19:38.394Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3492,7 +3492,7 @@ "model": "helpdesk.faq", "pk": 6, "fields": { - "created_at": "2025-03-12T03:19:38.503Z", + "created_at": "2025-06-12T03:19:38.503Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3507,7 +3507,7 @@ "model": "helpdesk.faq", "pk": 7, "fields": { - "created_at": "2025-03-12T03:26:34.988Z", + "created_at": "2025-06-12T03:26:34.988Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3522,7 +3522,7 @@ "model": "helpdesk.faq", "pk": 8, "fields": { - "created_at": "2025-03-12T03:31:56.975Z", + "created_at": "2025-06-12T03:31:56.975Z", "created_by": 1, "modified_by": 1, "is_active": true, @@ -3537,7 +3537,7 @@ "model": "helpdesk.faq", "pk": 9, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3552,7 +3552,7 @@ "model": "helpdesk.faq", "pk": 10, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3567,7 +3567,7 @@ "model": "helpdesk.faq", "pk": 11, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3582,7 +3582,7 @@ "model": "helpdesk.faq", "pk": 12, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3597,7 +3597,7 @@ "model": "helpdesk.faq", "pk": 13, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3612,7 +3612,7 @@ "model": "helpdesk.faq", "pk": 14, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3627,7 +3627,7 @@ "model": "helpdesk.faq", "pk": 15, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3642,7 +3642,7 @@ "model": "helpdesk.faq", "pk": 16, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3657,7 +3657,7 @@ "model": "helpdesk.faq", "pk": 17, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3672,7 +3672,7 @@ "model": "helpdesk.faq", "pk": 18, "fields": { - "created_at": "2025-03-12T03:45:00Z", + "created_at": "2025-06-12T03:45:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3687,7 +3687,7 @@ "model": "helpdesk.faq", "pk": 19, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3702,7 +3702,7 @@ "model": "helpdesk.faq", "pk": 20, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3717,7 +3717,7 @@ "model": "helpdesk.faq", "pk": 21, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3732,7 +3732,7 @@ "model": "helpdesk.faq", "pk": 22, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3747,7 +3747,7 @@ "model": "helpdesk.faq", "pk": 23, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3762,7 +3762,7 @@ "model": "helpdesk.faq", "pk": 24, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3777,7 +3777,7 @@ "model": "helpdesk.faq", "pk": 25, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3792,7 +3792,7 @@ "model": "helpdesk.faq", "pk": 26, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3807,7 +3807,7 @@ "model": "helpdesk.faq", "pk": 27, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3822,7 +3822,7 @@ "model": "helpdesk.faq", "pk": 28, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3837,7 +3837,7 @@ "model": "helpdesk.faq", "pk": 29, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3852,7 +3852,7 @@ "model": "helpdesk.faq", "pk": 30, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3867,7 +3867,7 @@ "model": "helpdesk.faq", "pk": 31, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3882,7 +3882,7 @@ "model": "helpdesk.faq", "pk": 32, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3897,7 +3897,7 @@ "model": "helpdesk.faq", "pk": 33, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3912,7 +3912,7 @@ "model": "helpdesk.faq", "pk": 34, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3927,7 +3927,7 @@ "model": "helpdesk.faq", "pk": 35, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3942,7 +3942,7 @@ "model": "helpdesk.faq", "pk": 36, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3957,7 +3957,7 @@ "model": "helpdesk.faq", "pk": 37, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3972,7 +3972,7 @@ "model": "helpdesk.faq", "pk": 38, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -3987,7 +3987,7 @@ "model": "helpdesk.faq", "pk": 39, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4002,7 +4002,7 @@ "model": "helpdesk.faq", "pk": 40, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4017,7 +4017,7 @@ "model": "helpdesk.faq", "pk": 41, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4032,7 +4032,7 @@ "model": "helpdesk.faq", "pk": 42, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4047,7 +4047,7 @@ "model": "helpdesk.faq", "pk": 43, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4062,7 +4062,7 @@ "model": "helpdesk.faq", "pk": 44, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4077,7 +4077,7 @@ "model": "helpdesk.faq", "pk": 45, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4092,7 +4092,7 @@ "model": "helpdesk.faq", "pk": 46, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4107,7 +4107,7 @@ "model": "helpdesk.faq", "pk": 47, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4122,7 +4122,7 @@ "model": "helpdesk.faq", "pk": 48, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4137,7 +4137,7 @@ "model": "helpdesk.faq", "pk": 49, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4152,7 +4152,7 @@ "model": "helpdesk.faq", "pk": 50, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4167,7 +4167,7 @@ "model": "helpdesk.faq", "pk": 51, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4182,7 +4182,7 @@ "model": "helpdesk.faq", "pk": 52, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4197,7 +4197,7 @@ "model": "helpdesk.faq", "pk": 53, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4212,7 +4212,7 @@ "model": "helpdesk.faq", "pk": 54, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4227,7 +4227,7 @@ "model": "helpdesk.faq", "pk": 55, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, @@ -4242,7 +4242,7 @@ "model": "helpdesk.faq", "pk": 56, "fields": { - "created_at": "2025-03-12T04:00:00Z", + "created_at": "2025-06-12T04:00:00Z", "created_by": null, "modified_by": 1, "is_active": true, diff --git a/notifications/base/models.py b/notifications/base/models.py index b4b183437..ee274f545 100644 --- a/notifications/base/models.py +++ b/notifications/base/models.py @@ -225,11 +225,7 @@ class AbstractNotification(models.Model): abstract = True ordering = ("-timestamp",) # speed up notifications count query - # index_together = ("recipient", "unread") - - indexes = [ - models.Index(fields=["recipient", "unread"]), - ] + index_together = ("recipient", "unread") def __str__(self): ctx = { diff --git a/offboarding/cbv/exit_process.py b/offboarding/cbv/exit_process.py index e77c81c1b..a57b65041 100644 --- a/offboarding/cbv/exit_process.py +++ b/offboarding/cbv/exit_process.py @@ -4,10 +4,8 @@ This page handles the cbv methods for existing process import re from datetime import datetime, timedelta -from typing import Any from django import forms -from django.apps import apps from django.contrib import messages from django.http import HttpResponse from django.urls import reverse, reverse_lazy @@ -16,7 +14,6 @@ from django.utils.translation import gettext_lazy as _ from base.context_processors import intial_notice_period from base.methods import eval_validate -from horilla.methods import get_horilla_model_class from horilla_views.cbv_methods import login_required, permission_required from horilla_views.generic.cbv.pipeline import Pipeline from horilla_views.generic.cbv.views import ( @@ -622,134 +619,3 @@ class OffboardingEmployeeList(HorillaListView): employee_id__in=instance_ids, task_id=pk ).update(status=status) return response - - -@method_decorator(login_required, name="dispatch") -class DashboardTaskListview(HorillaListView): - """ - For dashboard task status table - """ - - # view_id = "view-container" - - model = OffboardingEmployee - filter_class = PipelineEmployeeFilter - bulk_select_option = False - view_id = "dashboard_task_status" - - def get_queryset(self): - """ - Returns a filtered queryset of records assigned to a specific employee - """ - - qs = OffboardingEmployee.objects.entire() - queryset = super().get_queryset(queryset=qs) - return queryset - - columns = [ - ("Employee", "employee_id", "employee_id__get_avatar"), - ("Stage", "stage_id"), - ("Task Status", "get_task_status_col"), - ] - - -if apps.is_installed("asset"): - - @method_decorator(login_required, name="dispatch") - @method_decorator( - any_manager_can_enter("offboarding.view_offboarding"), name="dispatch" - ) - class DashboardNotReturndAsssets(HorillaListView): - """ - For dashboard task status table - """ - - bulk_select_option = False - view_id = "dashboard_task_status" - - def __init__(self, *args, **kwargs): - self.AssetAssignment = get_horilla_model_class( - app_label="asset", model="assetassignment" - ) - self.model = self.AssetAssignment # 809 - super().__init__(*args, **kwargs) - - def get_queryset(self): - """ - Returns a filtered queryset of records assigned to a specific employee - """ - - offboarding_employees = OffboardingEmployee.objects.entire().values_list( - "employee_id__id", flat=True - ) - qs = self.model.objects.entire().filter( - return_status__isnull=True, - assigned_to_employee_id__in=offboarding_employees, - ) - queryset = ( - super().get_queryset().filter(id__in=qs.values_list("id", flat=True)) - ) - return queryset - - columns = [ - ( - "Employee", - "assigned_to_employee_id__get_full_name", - "assigned_to_employee_id__get_avatar", - ), - ("Asset", "asset_id__asset_name"), - ("Reminder", "get_send_mail_employee_link"), - ] - - row_attrs = """ - onclick=" - localStorage.setItem('activeTabAsset','#tab_2'); - window.location.href='{get_asset_of_offboarding_employee}'" - """ - - -if apps.is_installed("pms"): - - @method_decorator(login_required, name="dispatch") - @method_decorator( - any_manager_can_enter("offboarding.view_offboarding"), name="dispatch" - ) - class DashboardFeedbackView(HorillaListView): - """ - For dashboard task status table - """ - - bulk_select_option = False - view_id = "dashboard_task_status" - columns = [ - ("Employee", "employee_id__get_full_name", "employee_id__get_avatar"), - ("Feedback", "review_cycle"), - ("Status", "status"), - ] - - def __init__(self, *args, **kwargs): - self.Feedback = get_horilla_model_class(app_label="pms", model="feedback") - self.model = self.Feedback # 809 - super().__init__(*args, **kwargs) - - def get_queryset(self): - """ - Returns a filtered queryset of records assigned to a specific employee - """ - offboarding_employees = OffboardingEmployee.objects.entire().values_list( - "employee_id__id", "notice_period_starts" - ) - if offboarding_employees: - id_list, date_list = map(list, zip(*offboarding_employees)) - else: - id_list, date_list = [], [] - - qs = ( - self.model.objects.entire() - .filter(employee_id__in=id_list) - .exclude(status="Closed") - ) - queryset = ( - super().get_queryset().filter(id__in=qs.values_list("id", flat=True)) - ) - return queryset diff --git a/offboarding/models.py b/offboarding/models.py index 2097b9b25..2765978f5 100644 --- a/offboarding/models.py +++ b/offboarding/models.py @@ -17,7 +17,7 @@ from employee.models import Employee from horilla import horilla_middlewares from horilla.horilla_middlewares import _thread_locals from horilla.methods import get_horilla_model_class -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template from notifications.signals import notify @@ -135,7 +135,7 @@ class OffboardingStageMultipleFile(HorillaModel): OffboardingStageMultipleFile """ - attachment = models.FileField(upload_to="offboarding/attachments") + attachment = models.FileField(upload_to=upload_path) class OffboardingEmployee(HorillaModel): diff --git a/offboarding/static/offboarding/dashboard.js b/offboarding/static/offboarding/dashboard.js index 09c1276bc..8806f77a7 100644 --- a/offboarding/static/offboarding/dashboard.js +++ b/offboarding/static/offboarding/dashboard.js @@ -11,76 +11,29 @@ $(document).ready(function () { if (departmentChart) { departmentChart.destroy(); } - - // Extract colors and create visibility array for dynamic datasets - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#34d399', '#fbbf24', '#c084fc', '#fb7185']; - const visibility = data.datasets.map(() => true); - - // Apply the new styling to datasets - const styledDatasets = data.datasets.map((dataset, index) => ({ - ...dataset, - backgroundColor: colors[index % colors.length], - borderRadius: 20, - barPercentage: 0.6, - categoryPercentage: 0.6 - })); - departmentChart = new Chart(ctx, { type: "bar", data: { labels: data.labels, - datasets: styledDatasets + datasets: data.datasets, }, options: { responsive: true, maintainAspectRatio: false, - plugins: { - legend: { display: false }, - tooltip: { enabled: true } - }, scales: { x: { - ticks: { display: true }, - grid: { display: false }, - border: { display: true, color: '#d1d5db' } + stacked: true, }, y: { - beginAtZero: true, - ticks: { stepSize: 10 }, - grid: { drawBorder: false, color: '#e5e7eb' } - } - } - } - }); - - // Create clickable legend dynamically for multiple datasets - const legendContainer = $("#departmentLegend"); - legendContainer.empty(); // Clear existing legend - - data.datasets.forEach((dataset, i) => { - const item = $(` -
    - - ${dataset.label} -
    - `); - - item.on('click', function () { - const index = parseInt($(this).data('index')); - visibility[index] = !visibility[index]; - - // Use Chart.js built-in visibility toggle - departmentChart.setDatasetVisibility(index, visibility[index]); - departmentChart.update(); - - // Update legend visuals - const dot = $(this).find('.legend-dot'); - const text = $(this).find('.legend-text'); - dot.css('opacity', visibility[index] ? '1' : '0.4'); - text.css('text-decoration', visibility[index] ? 'none' : 'line-through'); - }); - - legendContainer.append(item); + stacked: true, + }, + }, + }, + plugins: [ + { + afterRender: (chart) => emptyChart(chart), + }, + ], }); }, error: function (xhr, status, error) { @@ -98,88 +51,30 @@ $(document).ready(function () { if (joinChart) { joinChart.destroy(); } - - // Colors for join chart - const colors = ['#a5b4fc', '#fca5a5', '#fdba74', '#34d399', '#fbbf24', '#c084fc', '#fb7185']; - - // Style the dataset based on chart type - const styledDataset = { - label: "Employees", - data: data.items, - backgroundColor: type === 'line' ? '#a5b4fc' : colors.slice(0, data.items.length), - borderColor: type === 'line' ? '#a5b4fc' : undefined, - borderWidth: type === 'line' ? 2 : undefined, - borderRadius: (type === 'bar') ? 20 : undefined, - barPercentage: (type === 'bar') ? 0.6 : undefined, - categoryPercentage: (type === 'bar') ? 0.6 : undefined, - fill: type === 'line' ? false : undefined, - tension: type === 'line' ? 0.4 : undefined - }; - joinChart = new Chart(ctx, { type: type, data: { labels: data.labels, - datasets: [styledDataset], + datasets: [ + { + label: "Employees", + data: data.items, + }, + ], }, options: { responsive: true, maintainAspectRatio: false, - plugins: { - // Disable default legend for all chart types - legend: { display: false }, - tooltip: { enabled: true } + }, + plugins: [ + { + afterRender: (chart) => emptyChart(chart), }, - scales: (type === 'pie' || type === 'doughnut') ? {} : { - x: { - ticks: { display: true }, - grid: { display: false }, - border: { display: true, color: '#d1d5db' } - }, - y: { - beginAtZero: true, - ticks: { stepSize: 10 }, - grid: { drawBorder: false, color: '#e5e7eb' } - } - } - } - }); - - // Create custom legend for all chart types - const joinLegendContainer = $("#joinLegend"); - joinLegendContainer.empty(); // Clear existing legend - - data.labels.forEach((label, i) => { - const item = $(` -
    - - ${label} -
    - `); - - item.on('click', function () { - const index = parseInt($(this).data('index')); - const currentData = [...joinChart.data.datasets[0].data]; - const originalValue = data.items[index]; - - // Toggle visibility by setting data to 0 or original value - currentData[index] = currentData[index] === 0 ? originalValue : 0; - joinChart.data.datasets[0].data = currentData; - joinChart.update(); - - // Update legend visuals - const dot = $(this).find('.legend-dot'); - const text = $(this).find('.legend-text'); - const isVisible = currentData[index] !== 0; - dot.css('opacity', isVisible ? '1' : '0.4'); - text.css('text-decoration', isVisible ? 'none' : 'line-through'); - }); - - joinLegendContainer.append(item); + ], }); }, error: function (xhr, status, error) { - console.error("Error fetching join chart data:", error); + console.error("Error fetching department chart data:", error); }, }); }; @@ -198,105 +93,6 @@ $(document).ready(function () { join_chart(chartType); }); - department_chart(); + department_chart("pie"); join_chart("bar"); }); - -// $(document).ready(function () { -// var departmentChart; -// var joinChart; - -// var department_chart = () => { -// $.ajax({ -// url: "/offboarding/dashboard-department-chart", -// type: "GET", -// success: function (data) { -// var ctx = $("#departmentChart"); -// if (departmentChart) { -// departmentChart.destroy(); -// } -// departmentChart = new Chart(ctx, { -// type: "bar", -// data: { -// labels: data.labels, -// datasets: data.datasets, -// }, -// options: { -// responsive: true, -// maintainAspectRatio: false, -// scales: { -// x: { -// stacked: true, -// }, -// y: { -// stacked: true, -// }, -// }, -// }, -// plugins: [ -// { -// afterRender: (chart) => emptyChart(chart), -// }, -// ], -// }); -// }, -// error: function (xhr, status, error) { -// console.error("Error fetching department chart data:", error); -// }, -// }); -// }; - -// var join_chart = (type) => { -// $.ajax({ -// url: "/offboarding/dashboard-join-chart", -// type: "GET", -// success: function (data) { -// var ctx = $("#joinChart"); -// if (joinChart) { -// joinChart.destroy(); -// } -// joinChart = new Chart(ctx, { -// type: type, -// data: { -// labels: data.labels, -// datasets: [ -// { -// label: "Employees", -// data: data.items, -// }, -// ], -// }, -// options: { -// responsive: true, -// maintainAspectRatio: false, -// }, -// plugins: [ -// { -// afterRender: (chart) => emptyChart(chart), -// }, -// ], -// }); -// }, -// error: function (xhr, status, error) { -// console.error("Error fetching department chart data:", error); -// }, -// }); -// }; - -// $("#joinChartChange").click(function (e) { -// var chartType = joinChart.config.type; -// if (chartType === "line") { -// chartType = "bar"; -// } else if (chartType === "bar") { -// chartType = "doughnut"; -// } else if (chartType === "doughnut") { -// chartType = "pie"; -// } else if (chartType === "pie") { -// chartType = "line"; -// } -// join_chart(chartType); -// }); - -// department_chart("pie"); -// join_chart("bar"); -// }); diff --git a/offboarding/templates/cbv/resignation/resignation_tab.html b/offboarding/templates/cbv/resignation/resignation_tab.html index 1bd7f9121..22c57dafa 100644 --- a/offboarding/templates/cbv/resignation/resignation_tab.html +++ b/offboarding/templates/cbv/resignation/resignation_tab.html @@ -1,19 +1,14 @@ + {% load i18n %}
    - {% if enabled_resignation_request %} - - {% endif %} -
    - {% include "generic/horilla_list_table.html" %} + {% if enabled_resignation_request %} + +{% endif %} +
    +{% include "generic/horilla_list.html" %}
    diff --git a/offboarding/urls.py b/offboarding/urls.py index d831e4cb7..9c26f909a 100644 --- a/offboarding/urls.py +++ b/offboarding/urls.py @@ -256,11 +256,6 @@ urlpatterns = [ views.dashboard_join_chart, name="dashboard-join-chart", ), - path( - "list-dashboard-task-status/", - exit_process.DashboardTaskListview.as_view(), - name="list-dashboard-task-status", - ), ] if apps.is_installed("asset"): @@ -270,14 +265,8 @@ if apps.is_installed("asset"): views.dashboard_asset_table, name="dashboard-asset-table", ), - path( - "dashboard-asset-table-cbv", - exit_process.DashboardNotReturndAsssets.as_view(), - name="dashboard-asset-table-cbv", - ), ] - if apps.is_installed("pms"): urlpatterns += [ path( @@ -285,9 +274,4 @@ if apps.is_installed("pms"): views.dashboard_feedback_table, name="dashboard-feedback-table", ), - path( - "dashboard-feedback-table-cbv/", - exit_process.DashboardFeedbackView.as_view(), - name="dashboard-feedback-table-cbv", - ), ] diff --git a/onboarding/cbv/pipeline.py b/onboarding/cbv/pipeline.py index d1bc572e8..fb2132e0d 100644 --- a/onboarding/cbv/pipeline.py +++ b/onboarding/cbv/pipeline.py @@ -356,7 +356,6 @@ class CandidateList(HorillaListView): filter_selected = False quick_export = False next_prev = False - show_filter_tags = False filter_keys_to_remove = ["onboarding_stage_id", "rec_id", "recruitment_id"] custom_empty_template = "cbv/pipeline/empty.html" header_attrs = { diff --git a/onboarding/models.py b/onboarding/models.py index bca22c872..3b8fbdaf1 100644 --- a/onboarding/models.py +++ b/onboarding/models.py @@ -119,7 +119,7 @@ class OnboardingTask(HorillaModel): class OnboardingCandidate(Candidate): class Meta: - proxy = True # 808 + proxy = True verbose_name = _("Onboarding Candidate") verbose_name_plural = _("Onboarding Candidates") app_label = "onboarding" diff --git a/onboarding/sidebar.py b/onboarding/sidebar.py index f102177a1..7affc254b 100644 --- a/onboarding/sidebar.py +++ b/onboarding/sidebar.py @@ -6,21 +6,22 @@ To set Horilla sidebar for onboarding from django.contrib.auth.context_processors import PermWrapper from django.urls import reverse +from django.utils.translation import gettext_lazy as _ from onboarding.templatetags.onboardingfilters import is_taskmanager -MENU = "Onboarding" +MENU = _("Onboarding") ACCESSIBILITY = "onboarding.sidebar.menu_accessibilty" IMG_SRC = "images/ui/rocket.svg" SUBMENUS = [ { - "menu": "Onboarding view", + "menu": _("Onboarding view"), "redirect": reverse("cbv-pipeline-onboarding") + "?closed=false", "accessibility": "onboarding.sidebar.onboarding_view_accessibility", }, { - "menu": "Candidates view", + "menu": _("Candidates view"), "redirect": reverse("candidates-view"), "accessibility": "onboarding.sidebar.candidates_view_accessibility", }, @@ -41,7 +42,7 @@ def onboarding_view_accessibility( request, _submenu: dict = {}, user_perms: PermWrapper = [], *args, **kwargs ) -> bool: return is_taskmanager(request.user) or request.user.has_perm( - "onboarding.view_onboarding" + "onboarding.view_onboardingstage" ) diff --git a/onboarding/static/dashboard/onboardChart.js b/onboarding/static/dashboard/onboardChart.js index dd713229e..1e79005ed 100644 --- a/onboarding/static/dashboard/onboardChart.js +++ b/onboarding/static/dashboard/onboardChart.js @@ -1,181 +1,59 @@ $(document).ready(function () { + //Hired candididates recruitment wise chart + + + //onboarding started candidate chart $.ajax({ type: "GET", url: "/onboarding/onboard-candidate-chart", success: function (response) { - const ctx = document.getElementById("onboardCandidate")?.getContext("2d"); - if (!ctx || !response?.data || !response?.labels) return; - - const labels = response.labels; - const values = response.data; - const colors = [ - "#a5b4fc", "#fca5a5", "#fdba74", "#8de5b3", "#fcd34d", "#c2c7cc" - ]; - const visibility = Array(labels.length).fill(true); - - const onboardChartInstance = new Chart(ctx, { - type: "bar", - data: { - labels: labels, - datasets: [{ - label: "Onboarding Candidates", - data: values, - backgroundColor: colors, - borderRadius: 20, - barPercentage: 0.8, - categoryPercentage: 0.8, - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - onClick: (e, activeEls) => { - if (!activeEls.length) return; - const dataIndex = activeEls[0].index; - const label = labels[dataIndex]; - - localStorage.removeItem("savedFilters"); - window.location.href = `/recruitment/candidate-view?recruitment=${encodeURIComponent(label)}&start_onboard=true`; + const ctx = document.getElementById("onboardCandidate"); + if (ctx) { + new Chart(ctx, { + type: "bar", + data: { + labels: response.labels, + datasets: [ + { + label: "#onboarding candidates", + data: response.data, + backgroundColor: response.background_color, + borderColor: response.border_color, + borderWidth: 1, + }, + ], + // message:response.message, + // emptyImageSrc:'/static/images/ui/sunbed.png' }, - plugins: { - legend: { display: false }, - tooltip: { - enabled: true, - callbacks: { - title: tooltipItems => labels[tooltipItems[0].dataIndex], - label: tooltipItem => `Onboarding Candidates: ${tooltipItem.raw}` - } - } - }, - scales: { - y: { - beginAtZero: true, - ticks: { stepSize: 1, color: "#6b7280" }, - grid: { drawBorder: false, color: "#e5e7eb" } + options: { + responsive: true, + + scales: { + y: { + beginAtZero: true, + }, }, - x: { - ticks: { display: false }, - grid: { display: false }, - border: { display: true, color: "#d1d5db" } - } - } - }, - plugins: [{ - afterRender: (chart) => { - if (typeof emptyChart === "function") emptyChart(chart); - } - }] - }); - - // 🧩 Generate Custom Legend (same style as departmentChart) - const $legendContainer = $("#onboardCandidateLegend"); - $legendContainer.empty(); - - labels.forEach((label, index) => { - const color = colors[index % colors.length]; - - const $item = $(` -
    - - ${label} -
    - `); - - $legendContainer.append($item); - - $item.on("click", function () { - visibility[index] = !visibility[index]; - - onboardChartInstance.data.datasets[0].data = values.map((val, i) => - visibility[i] ? val : 0 - ); - - const $dot = $(this).find("span").first(); - const $label = $(this).find(".legend-label"); - - if (visibility[index]) { - $dot.css("opacity", "1"); - $label.css("text-decoration", "none"); - } else { - $dot.css("opacity", "0.4"); - $label.css("text-decoration", "line-through"); - } - - onboardChartInstance.update(); + onClick: (e, activeEls) => { + let datasetIndex = activeEls[0].datasetIndex; + let dataIndex = activeEls[0].index; + let datasetLabel = e.chart.data.datasets[datasetIndex].label; + let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; + let label = e.chart.data.labels[dataIndex]; + localStorage.removeItem("savedFilters"); + window.location.href = + "/recruitment/candidate-view" + + "?recruitment=" + + label + + "&start_onboard=true"; + }, + }, + plugins: [ + { + afterRender: (chart) => emptyChart(chart), + }, + ], }); - }); + } }, - error: function (xhr, status, error) { - console.error("Error fetching data:", error); - } }); - }); - -// $(document).ready(function () { -// //Hired candididates recruitment wise chart - - -// //onboarding started candidate chart -// $.ajax({ -// type: "GET", -// url: "/onboarding/onboard-candidate-chart", -// success: function (response) { -// const ctx = document.getElementById("onboardCandidate"); -// if (ctx) { -// new Chart(ctx, { -// type: "bar", -// data: { -// labels: response.labels, -// datasets: [ -// { -// label: "#onboarding candidates", -// data: response.data, -// backgroundColor: response.background_color, -// borderColor: response.border_color, -// borderWidth: 1, -// }, -// ], -// // message:response.message, -// // emptyImageSrc:'/static/images/ui/sunbed.png' -// }, -// options: { -// responsive: true, - -// scales: { -// y: { -// beginAtZero: true, -// }, -// }, -// onClick: (e, activeEls) => { -// let datasetIndex = activeEls[0].datasetIndex; -// let dataIndex = activeEls[0].index; -// let datasetLabel = e.chart.data.datasets[datasetIndex].label; -// let value = e.chart.data.datasets[datasetIndex].data[dataIndex]; -// let label = e.chart.data.labels[dataIndex]; -// localStorage.removeItem("savedFilters"); -// window.location.href = -// "/recruitment/candidate-view" + -// "?recruitment=" + -// label + -// "&start_onboard=true"; -// }, -// }, -// plugins: [ -// { -// afterRender: (chart) => emptyChart(chart), -// }, -// ], -// }); -// } -// }, -// }); -// }); diff --git a/onboarding/templates/cbv/dashboard/my_onboarding_task.html b/onboarding/templates/cbv/dashboard/my_onboarding_task.html index eebb82e02..2fac920c8 100644 --- a/onboarding/templates/cbv/dashboard/my_onboarding_task.html +++ b/onboarding/templates/cbv/dashboard/my_onboarding_task.html @@ -2,5 +2,5 @@
    {{ candidate_tasks.first.onboarding_task_id.task_title }}
    - {% include "generic/horilla_list_table.html" %} + {% include "generic/horilla_list.html" %}
    diff --git a/onboarding/views.py b/onboarding/views.py index 5894a5a35..f1d5ff86b 100644 --- a/onboarding/views.py +++ b/onboarding/views.py @@ -461,7 +461,7 @@ def candidate_delete(request, obj_id): Parameters: request (HttpRequest): The HTTP request object. - obj_id : recruitment id + obj_id : candidate id Returns: GET : return candidate view @@ -827,7 +827,7 @@ def onboarding_view(request): filter_obj = RecruitmentFilter(request.GET) # is active filteration not providing on pipeline recruitments = filter_obj.qs - if not request.user.has_perm("onboarding.view_candidatestage"): + if not request.user.has_perm("onboarding.view_onboardingstage"): recruitments = recruitments.filter( is_active=True, recruitment_managers__in=[request.user.employee_get] ) | recruitments.filter( diff --git a/payroll/apps.py b/payroll/apps.py index bf26cc568..06439646c 100644 --- a/payroll/apps.py +++ b/payroll/apps.py @@ -4,8 +4,6 @@ App configuration for the 'payroll' app. from django.apps import AppConfig from django.db.models.signals import post_migrate -from django.urls import reverse_lazy -from django.utils.translation import gettext_lazy as _ class PayrollConfig(AppConfig): @@ -20,11 +18,9 @@ class PayrollConfig(AppConfig): ready = super().ready() from django.urls import include, path - from employee.cbv.employees import WorkTab from horilla.horilla_settings import APPS from horilla.urls import urlpatterns from payroll import signals - from payroll.cbv.contracts import ContractsTabList APPS.append("payroll") urlpatterns.append( @@ -39,10 +35,4 @@ class PayrollConfig(AppConfig): Migrations are not affected """ - WorkTab.additional_tabs += [ - { - "title": _("Contracts"), - "url": f"{reverse_lazy('contract-tab')}", - } - ] return ready diff --git a/payroll/cbv/allowance_deduction.py b/payroll/cbv/allowance_deduction.py index 0712cff68..13c916271 100644 --- a/payroll/cbv/allowance_deduction.py +++ b/payroll/cbv/allowance_deduction.py @@ -211,7 +211,7 @@ class DeductionTab(DeductionListView): not in ( "specific_employees_col", "excluded_employees_col", - "condition_based_col", + "condition_bsed_col", "rate", ) ] @@ -315,9 +315,9 @@ class DeductionDetailView(HorillaDetailedView): } body = [ - "is_tax", + (_("Tax"), "tax_col", True), (_("One Time deduction"), "get_one_time_deduction"), - (_("Condition Based"), "condition_based_col"), + (_("Condition Based"), "condition_bsed_col"), (_("Amount"), "amount_col"), (_("Has Maximum Limit"), "has_maximum_limit_col"), (_("Deduction Eligibility"), "deduction_eligibility"), @@ -341,7 +341,7 @@ class AllowanceDetailView(HorillaDetailedView): } body = [ - "is_taxable", + (_("Taxable"), "get_is_taxable_display"), (_("One Time Allowance"), "one_time_date_display"), (_("Condition Based"), "condition_based_display"), (_("Amount"), "based_on_amount"), diff --git a/payroll/cbv/allowances.py b/payroll/cbv/allowances.py index 0f3179dba..758f56d55 100644 --- a/payroll/cbv/allowances.py +++ b/payroll/cbv/allowances.py @@ -62,16 +62,16 @@ class AllowanceListView(HorillaListView): self.action_method = None columns = [ - "title", + (_("Allowance"), "title"), (_("Specific Employees"), "get_specific_employees"), (_("Excluded Employees"), "get_exclude_employees"), - "is_taxable", - "is_condition_based", + (_("Is Taxable"), "get_is_taxable_display"), + (_("Is Condition Based"), "get_is_condition_based"), (_("Condition"), "condition_based_display"), - "is_fixed", - "amount", - "get_based_on_display", - "rate", + (_("Is Fixed"), "get_is_fixed"), + (_("Amount"), "amount"), + (_("Based On"), "get_based_on_display"), + (_("Rate"), "rate"), ] sortby_mapping = [ @@ -196,6 +196,7 @@ class AllowanceNavView(HorillaNavView): }, ] + nav_title = _("Allowances") filter_instance = AllowanceFilter() filter_body_template = "cbv/allowances/allowance_filter.html" filter_form_context_name = "form" @@ -324,7 +325,7 @@ class AllowanceDetailView(HorillaDetailedView): } body = [ - "is_taxable", + (_("Taxable"), "get_is_taxable_display"), (_("One Time Allowance"), "one_time_date_display"), (_("Condition Based"), "condition_based_display"), (_("Amount"), "based_on_amount"), diff --git a/payroll/cbv/contracts.py b/payroll/cbv/contracts.py index b388c11c8..e7928e1a0 100644 --- a/payroll/cbv/contracts.py +++ b/payroll/cbv/contracts.py @@ -55,13 +55,13 @@ class ContractsList(HorillaListView): filter_class = ContractFilter columns = [ - "contract_name", - "employee_id", - "contract_start_date", - "contract_end_date", - "get_wage_type_display", - "wage", - "filing_status", + (_("Contract"), "contract_name"), + (_("Employee"), "employee_id"), + (_("Start Date"), "contract_start_date"), + (_("End Date"), "contract_end_date"), + (_("Wage Type"), "get_wage_type_display"), + (_("Basic Salary"), "wage"), + (_("Filing Status"), "filing_status"), (_("Status"), "status_col"), ] @@ -138,50 +138,6 @@ class ContractsList(HorillaListView): """ -@method_decorator(login_required, name="dispatch") -class ContractsTabList(HorillaListView): - """ - List view for self contracts - """ - - model = Contract - filter_class = ContractFilter - # bulk_select_option = False - filter_selected = False - show_filter_tags = False - row_attrs = """ - hx-get='{contracts_detail}?instance_ids={ordered_ids}' - hx-target="#genericModalBody" - data-target="#genericModal" - data-toggle="oh-modal-toggle" - """ - - columns = [ - "contract_name", - "contract_start_date", - "contract_end_date", - "get_wage_type_display", - "wage", - "filing_status", - (_("Status"), "status_col"), - ] - - def get_queryset(self): - """ - Get Queryset - """ - if self.request.user.has_perm("employee.view_employee"): - return ( - super() - .get_queryset() - .filter(employee_id__id=self.request.GET.get("pk")) - ) - - return self.model.objects.filter( - employee_id__employee_user_id=self.request.user.id - ) - - @method_decorator(login_required, name="dispatch") @method_decorator(permission_required(perm="payroll.view_contract"), name="dispatch") class ContractsNav(HorillaNavView): @@ -218,6 +174,7 @@ class ContractsNav(HorillaNavView): }, ] + nav_title = _("Contracts") filter_body_template = "cbv/contracts/filter.html" filter_instance = ContractFilter() filter_form_context_name = "form" @@ -278,6 +235,7 @@ class ContractsDetailView(HorillaDetailedView): return context model = Contract + # title = _("Details") header = { "title": "employee_id__get_full_name", @@ -286,22 +244,22 @@ class ContractsDetailView(HorillaDetailedView): } body = [ - "contract_start_date", - "contract_end_date", - "get_wage_type_display", - "get_pay_frequency_display", - "wage", - "filing_status", - "department", - "job_position", - "job_role", - "shift", - "work_type", - "deduct_leave_from_basic_pay", - "get_status_display", + (_("Start Date"), "contract_start_date"), + (_("End Date"), "contract_end_date"), + (_("Wage Type"), "get_wage_type_display"), + (_("Basic Salary"), "wage"), + (_("Deduct From Basic Pay"), "deduct_leave_from_basic_pay_col"), + (_("Department"), "department"), + (_("Job Position"), "job_position"), + (_("Job Role"), "job_role"), + (_("Shift"), "shift"), + (_("Work Type"), "work_type"), + (_("Filing Status"), "filing_status"), + (_("Pay Frequency"), "get_pay_frequency_display"), + (_("Status"), "get_status_display"), (_("Calculate Leave Amount"), "cal_leave_amount", True), (_("Note"), "note_col", True), - (_("Document"), "document_col", True), + (_("Document"), "edocument_col", True), ] action_method = "detail_action" diff --git a/payroll/cbv/dashboard.py b/payroll/cbv/dashboard.py index fe2f3390f..28e8d17ba 100644 --- a/payroll/cbv/dashboard.py +++ b/payroll/cbv/dashboard.py @@ -14,7 +14,7 @@ from base.filters import DepartmentViewFilter from base.models import Department from horilla_views.generic.cbv.views import HorillaListView from payroll.filters import ContractFilter -from payroll.models.models import Contract, Payslip +from payroll.models.models import Contract class DashboardDepartmentPayslip(HorillaListView): @@ -29,7 +29,7 @@ class DashboardDepartmentPayslip(HorillaListView): def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) - self.search_url = reverse("dashboard-department-chart-list") + self.search_url = reverse("dashboard-department-chart") self.view_id = "dashboadDepartment" def get_queryset(self): diff --git a/payroll/cbv/deduction.py b/payroll/cbv/deduction.py index 4f5993e48..d38f1a82b 100644 --- a/payroll/cbv/deduction.py +++ b/payroll/cbv/deduction.py @@ -29,11 +29,6 @@ class DeductionNav(HorillaNavView): Nav bar """ - filter_form_context_name = "form" - filter_instance = DeductionFilter() - search_swap_target = "#listContainer" - filter_body_template = "cbv/deduction/filter.html" - def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("deduction-view-list") @@ -59,6 +54,12 @@ class DeductionNav(HorillaNavView): }, ] + nav_title = _("Deductions") + filter_body_template = "cbv/deduction/filter.html" + filter_instance = DeductionFilter() + filter_form_context_name = "form" + search_swap_target = "#listContainer" + @method_decorator(login_required, name="dispatch") @method_decorator(permission_required(perm="payroll.view_deduction"), name="dispatch") @@ -140,16 +141,16 @@ class DeductionListView(HorillaListView): # row_status_class = "pretax-{is_pretax} fixed-{is_fixed}" columns = [ - "title", + (_("Deduction"), "title"), (_("Specific Employees"), "specific_employees_col"), (_("Excluded Employees"), "excluded_employees_col"), - "is_pretax", - "is_condition_based", - (_("Condition"), "condition_based_col"), - "is_fixed", - "amount", - "get_based_on_display", - "rate", + (_("Is Pretax"), "get_is_pretax_display"), + (_("Is Condition Based"), "get_is_condition_based_display"), + (_("Condition"), "condition_bsed_col"), + (_("Is Fixed"), "get_is_fixed_display"), + (_("Amount"), "amount"), + (_("Based On"), "get_based_on_display"), + (_("Rate"), "rate"), ] header_attrs = { diff --git a/payroll/cbv/federal_tax.py b/payroll/cbv/federal_tax.py index c4a535b17..99c1956e3 100644 --- a/payroll/cbv/federal_tax.py +++ b/payroll/cbv/federal_tax.py @@ -3,66 +3,24 @@ This page handles the cbv methods for federal tax """ import math +from typing import Any +from django import forms from django.contrib import messages from django.http import HttpResponse from django.template.loader import render_to_string -from django.urls import reverse, reverse_lazy +from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ +from base.models import Holidays from horilla_views.cbv_methods import login_required, permission_required -from horilla_views.generic.cbv.views import ( - HorillaFormView, - HorillaListView, - HorillaNavView, -) -from payroll.filters import FilingStatusFilter +from horilla_views.generic.cbv.views import HorillaFormView from payroll.forms.tax_forms import FilingStatusForm, TaxBracketForm from payroll.models.models import FilingStatus from payroll.models.tax_models import TaxBracket -@method_decorator(login_required, name="dispatch") -@method_decorator(permission_required("payroll.view_filingstatus"), name="dispatch") -class FilingStatusNav(HorillaNavView): - nav_title = _("Filing Status") - filter_form_context_name = "form" - filter_instance = FilingStatusFilter() - search_swap_target = "#accordionWrapper" - search_url = reverse_lazy("filing-status-search") - - def __init__(self, **kwargs): - super().__init__(**kwargs) - self.create_attrs = f""" - data-toggle="oh-modal-toggle" - data-target="#genericModal" - hx-get="{reverse('create-filing-status')}" - hx-target="#genericModalBody" - """ - - -@method_decorator(login_required, name="dispatch") -@method_decorator(permission_required("asset.view_assetlot"), name="dispatch") -class TaxBracketListView(HorillaListView): - """ - list view for batch number - """ - - model = TaxBracket - columns = ["tax_rate", "min_income", "max_income"] - show_filter_tags = False - bulk_select_option = False - action_method = "action_column" - - def get_queryset(self, queryset=None, filtered=False, *args, **kwargs): - return ( - super() - .get_queryset(queryset, filtered, *args, **kwargs) - .filter(filing_status_id=self.kwargs["pk"]) - ) - - @method_decorator(login_required, name="dispatch") @method_decorator(permission_required("payroll.add_filingstatus"), name="dispatch") class FederalTaxFormView(HorillaFormView): diff --git a/payroll/cbv/payslip.py b/payroll/cbv/payslip.py index 025c74f36..aef554973 100644 --- a/payroll/cbv/payslip.py +++ b/payroll/cbv/payslip.py @@ -53,128 +53,18 @@ class PayslipView(TemplateView): template_name = "cbv/payslip/payslip_home.html" -@method_decorator(login_required, name="dispatch") -class PayslipNav(HorillaNavView): - """ - navbar - """ - - filter_form_context_name = "form" - filter_instance = PayslipFilter() - search_swap_target = "#listContainer" - filter_body_template = "cbv/payslip/payslip_filter.html" - - def __init__(self, **kwargs: Any) -> None: - super().__init__(**kwargs) - self.search_url = reverse("payslip-list") - if self.request.user.has_perm("payroll.add_payslip"): - self.create_attrs = f""" - data-target="#genericModal" - data-toggle="oh-modal-toggle" - hx-get="{reverse('payroll-create-form-view')}" - hx-target="#genericModalBody" - """ - - self.actions = [ - { - "action": _("Generate"), - "attrs": """ - data-toggle = "oh-modal-toggle" - data-target = "#bulkPayslipModal" - style="cursor: pointer;" - """, - }, - { - "action": _("Payslip Report"), - "attrs": f""" - data-toggle = "oh-modal-toggle" - data-target = "#genericModal" - hx-target="#genericModalBody" - hx-get ="{reverse('payslip-detailed-export')}" - style="cursor: pointer;" - """, - }, - { - "action": _("Send Via Mail"), - "attrs": """ - onclick="bulkSendViaMail()" - style="cursor: pointer;" - """, - }, - { - "action": _("Export"), - "attrs": f""" - data-toggle = "oh-modal-toggle" - data-target = "#payslipExport" - hx-target="#payslipExportForm" - hx-get ="{reverse('payslip-bulk-export-data')}" - style="cursor: pointer;" - """, - }, - { - "action": _("Delete"), - "attrs": """ - onclick="payslipBulkDelete()" - data-action ="delete" - style="cursor: pointer; color:red !important" - """, - }, - ] - else: - self.create_attrs = None - self.actions = None - - group_by_fields = [ - ("employee_id", _("Employee")), - ("group_name", _("Pay Slip Batch")), - ("start_date", _("Start date")), - ("end_date", _("End Date")), - ("basic_pay", _("Basic Pay")), - ("gross_pay", _("Gross Pay")), - ("net_pay", _("Net Pay")), - ("status", _("Status")), - ("employee_id__employee_work_info__department_id", _("Department")), - ("employee_id__employee_work_info__job_position_id", _("Job Position")), - ("employee_id__employee_work_info__job_role_id", _("Job Role")), - ("employee_id__employee_work_info__company_id", _("Company")), - ] - - @method_decorator(login_required, name="dispatch") class PayslipList(HorillaListView): """ list view """ - model = Payslip - records_per_page = 5 - filter_class = PayslipFilter - action_method = "custom_actions_col" selected_instances_key_id = "selectedInstances" bulk_update_fields = [ "status", "start_date", "end_date", ] - columns = [ - (_("Employee"), "employee_id", "employee_id__get_avatar"), - "start_date", - "end_date", - "group_name", - "gross_pay", - "deduction", - "net_pay", - (_("Status"), "custom_status_col"), - ] - sortby_mapping = [ - ("Employee", "employee_id__get_full_name", "employee_id__get_avatar"), - ("Start date", "start_date"), - ("End Date", "end_date"), - ("Gross Pay", "gross_pay_display"), - ("Deduction", "deduction_display"), - ("Net Pay", "net_pay_display"), - ("Status", "custom_status_col"), - ] def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) @@ -190,6 +80,31 @@ class PayslipList(HorillaListView): queryset = queryset.filter(employee_id__employee_user_id=self.request.user) return queryset + model = Payslip + filter_class = PayslipFilter + columns = [ + (_("Employee"), "employee_id", "employee_id__get_avatar"), + (_("Start date"), "start_date"), + (_("End Date"), "end_date"), + (_("Batch"), "group_name"), + (_("Gross Pay"), "gross_pay_display"), + (_("Deduction"), "deduction_display"), + (_("Net Pay"), "net_pay_display"), + (_("Status"), "custom_status_col"), + ] + + sortby_mapping = [ + ("Employee", "employee_id__get_full_name", "employee_id__get_avatar"), + ("Start date", "start_date"), + ("End Date", "end_date"), + ("Gross Pay", "gross_pay_display"), + ("Deduction", "deduction_display"), + ("Net Pay", "net_pay_display"), + ("Status", "custom_status_col"), + ] + records_per_page = 5 + action_method = "custom_actions_col" + row_status_indications = [ ( "draft--dot", @@ -256,6 +171,94 @@ class PayslipList(HorillaListView): row_status_class = "status-{status} sent_to_employee-{sent_to_employee}" +@method_decorator(login_required, name="dispatch") +class PayslipNav(HorillaNavView): + """ + navbar + """ + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.search_url = reverse("payslip-list") + if self.request.user.has_perm("payroll.add_payslip"): + self.create_attrs = f""" + data-target="#genericModal" + data-toggle="oh-modal-toggle" + hx-get="{reverse('payroll-create-form-view')}" + hx-target="#genericModalBody" + """ + + self.actions = [ + { + "action": _("Generate"), + "attrs": """ + data-toggle = "oh-modal-toggle" + data-target = "#bulkPayslipModal" + style="cursor: pointer;" + """, + }, + { + "action": _("Payslip Report"), + "attrs": f""" + data-toggle = "oh-modal-toggle" + data-target = "#genericModal" + hx-target="#genericModalBody" + hx-get ="{reverse('payslip-detailed-export')}" + style="cursor: pointer;" + """, + }, + { + "action": _("Send Via Mail"), + "attrs": """ + onclick="bulkSendViaMail()" + style="cursor: pointer;" + """, + }, + { + "action": _("Export"), + "attrs": f""" + data-toggle = "oh-modal-toggle" + data-target = "#payslipExport" + hx-target="#payslipExportForm" + hx-get ="{reverse('payslip-bulk-export-data')}" + style="cursor: pointer;" + """, + }, + { + "action": _("Delete"), + "attrs": """ + onclick="payslipBulkDelete()" + data-action ="delete" + style="cursor: pointer; color:red !important" + """, + }, + ] + else: + self.create_attrs = None + self.actions = None + + nav_title = _("Payslip") + filter_body_template = "cbv/payslip/payslip_filter.html" + filter_instance = PayslipFilter() + filter_form_context_name = "form" + search_swap_target = "#listContainer" + + group_by_fields = [ + ("employee_id", _("Employee")), + ("group_name", _("Pay Slip Batch")), + ("start_date", _("Start date")), + ("end_date", _("End Date")), + ("basic_pay", _("Basic Pay")), + ("gross_pay", _("Gross Pay")), + ("net_pay", _("Net Pay")), + ("status", _("Status")), + ("employee_id__employee_work_info__department_id", _("Department")), + ("employee_id__employee_work_info__job_position_id", _("Job Position")), + ("employee_id__employee_work_info__job_role_id", _("Job Role")), + ("employee_id__employee_work_info__company_id", _("Company")), + ] + + @method_decorator(login_required, name="dispatch") class PayslipBulkExport(TemplateView): """ diff --git a/payroll/cbv/reimbursements.py b/payroll/cbv/reimbursements.py index 66af45dc0..7a3e80b38 100644 --- a/payroll/cbv/reimbursements.py +++ b/payroll/cbv/reimbursements.py @@ -268,21 +268,23 @@ class ReimbursementsDetailView(HorillaDetailedView): detail view of reimbursements """ - title = _("Details") + body = [ + (_("Date"), "created_at"), + (_("Amount"), "amount"), + (_("Status"), "get_status_display"), + (_("Description"), "description"), + (_("Attachments"), "attachments_col"), + ] + + action_method = "detail_action_col" + model = Reimbursement + title = _("Details") header = { "title": "employee_id__get_full_name", "subtitle": "title", "avatar": "employee_id__get_avatar", } - body = [ - "created_at", - "amount", - "get_status_display", - "description", - (_("Attachments"), "attachments_col"), - ] - action_method = "detail_action_col" @method_decorator(login_required, name="dispatch") diff --git a/payroll/filters.py b/payroll/filters.py index 14c7b228b..ccbe55c84 100644 --- a/payroll/filters.py +++ b/payroll/filters.py @@ -469,17 +469,6 @@ class ReimbursementFilter(HorillaFilterSet): ).distinct() -class FilingStatusFilter(HorillaFilterSet): - search = django_filters.CharFilter( - field_name="filing_status", - lookup_expr="icontains", - ) - - class Meta: - model = FilingStatus - fields = ["filing_status", "based_on"] - - class ContractReGroup: """ Class to keep the field name for group by option diff --git a/payroll/forms/component_forms.py b/payroll/forms/component_forms.py index c396f8ee9..358c4b452 100644 --- a/payroll/forms/component_forms.py +++ b/payroll/forms/component_forms.py @@ -793,7 +793,7 @@ class MultipleFileField(forms.FileField): class ReimbursementForm(ModelForm): """ - ReimbursementForm + Optimized Reimbursement / Encashment Form """ cols = {"description": 12} @@ -805,107 +805,114 @@ class ReimbursementForm(ModelForm): fields = "__all__" exclude = ["is_active"] - if apps.is_installed("leave"): - - def get_encashable_leaves(self, employee): - LeaveType = get_horilla_model_class(app_label="leave", model="leavetype") - leaves = LeaveType.objects.filter( - employee_available_leave__employee_id=employee, - employee_available_leave__total_leave_days__gte=1, - is_encashable=True, - ) - return leaves - def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - exclude_fields = [] + self.request = getattr(horilla_middlewares._thread_locals, "request", None) + self.employee = self.get_employee() # 819 + if not self.instance.pk: self.initial["allowance_on"] = str(datetime.date.today()) - request = getattr(horilla_middlewares._thread_locals, "request", None) - if request: - employee = ( - request.user.employee_get - if self.instance.pk is None - else self.instance.employee_id - ) - self.initial["employee_id"] = employee.id - if apps.is_installed("leave"): - AvailableLeave = get_horilla_model_class( - app_label="leave", model="availableleave" - ) + self.initial["employee_id"] = self.employee.id if self.employee else None - assigned_leaves = self.get_encashable_leaves(employee) - self.assigned_leaves = AvailableLeave.objects.filter( - leave_type_id__in=assigned_leaves, employee_id=employee - ) - self.fields["leave_type_id"].queryset = assigned_leaves - self.fields["leave_type_id"].empty_label = None - self.fields["employee_id"].empty_label = None + self.configure_fields() - type_attr = self.fields["type"].widget.attrs - type_attr["onchange"] = "toggleReimbursmentType($(this))" - self.fields["type"].widget.attrs.update(type_attr) + def get_employee(self): + """Resolves employee either from form data or request.""" + if hasattr(self.instance, "employee_id") and self.instance.employee_id: + return self.instance.employee_id - employee_attr = self.fields["employee_id"].widget.attrs - employee_attr["onchange"] = "getAssignedLeave($(this))" - self.fields["employee_id"].widget.attrs.update(employee_attr) + employee_qs = self.fields["employee_id"].queryset + employee_id = self.data.get("employee_id") if self.data else None + + if employee_id and (emp := employee_qs.filter(id=employee_id).first()): + return emp + + if self.request and (emp := self.request.user.employee_get): + if not self.instance.pk and emp in employee_qs: + return emp + if self.instance.pk and emp.id == self.instance.employee_id: + return emp + + return employee_qs.first() + + def get_encashable_leaves(self, employee): + LeaveType = get_horilla_model_class(app_label="leave", model="leavetype") + return LeaveType.objects.filter( + employee_available_leave__employee_id=employee, + employee_available_leave__total_leave_days__gte=1, + is_encashable=True, + ) + + def configure_fields(self): + exclude_fields = [] + + if self.request and not self.request.user.has_perm("payroll.add_reimbursement"): + exclude_fields.append("employee_id") + + self.setup_leave_fields() + + self.fields["type"].widget.attrs["onchange"] = "toggleReimbursmentType($(this))" + self.fields["employee_id"].widget.attrs[ + "onchange" + ] = "getAssignedLeave($(this))" self.fields["allowance_on"].widget = forms.DateInput( attrs={"type": "date", "class": "oh-input w-100"} ) - self.fields["attachment"] = MultipleFileField(label="Attachements") + + self.fields["attachment"] = MultipleFileField(label="Attachments") self.fields["attachment"].widget.attrs["accept"] = ".jpg, .jpeg, .png, .pdf" - # deleting fields based on type - type = None - if self.data and not self.instance.pk: - type = self.data["type"] - elif self.instance is not None: - type = self.instance.type - if not request.user.has_perm("payroll.add_reimbursement"): - exclude_fields.append("employee_id") - - if ( - type == "reimbursement" - and self.instance.pk - or self.data.get("type") == "reimbursement" - ): - exclude_fields = exclude_fields + [ - "leave_type_id", - "cfd_to_encash", - "ad_to_encash", - "bonus_to_encash", - ] - elif ( - self.instance.pk - and type == "leave_encashment" - or self.data.get("type") == "leave_encashment" - ): - exclude_fields = exclude_fields + [ - "attachment", - "amount", - "bonus_to_encash", - ] - elif ( - self.instance.pk - and type == "bonus_encashment" - or self.data.get("type") == "bonus_encashment" - ): - exclude_fields = exclude_fields + [ - "attachment", - "amount", - "leave_type_id", - "cfd_to_encash", - "ad_to_encash", - ] - if self.instance.pk: - exclude_fields = exclude_fields + ["type", "employee_id"] + # self.exclude_fields_by_type(exclude_fields) for field in exclude_fields: - if field in self.fields: - del self.fields[field] + self.fields.pop(field, None) + + def setup_leave_fields(self): + """Setup leave-related fields only if leave app is installed.""" + if not apps.is_installed("leave") or not self.employee: + return + + AvailableLeave = get_horilla_model_class( + app_label="leave", model="availableleave" + ) + assigned_leaves = self.get_encashable_leaves(self.employee) + + self.assigned_leaves = AvailableLeave.objects.filter( + leave_type_id__in=assigned_leaves, employee_id=self.employee + ) + self.fields["leave_type_id"].queryset = assigned_leaves + self.fields["leave_type_id"].empty_label = None + self.fields["employee_id"].empty_label = None + + def exclude_fields_by_type(self, exclude_fields): + """Determine which fields to exclude based on type.""" + type = ( + self.data.get("type") + if self.data + else self.instance.type if self.instance else None + ) + is_edit = self.instance and self.instance.pk + + if type == "reimbursement" and is_edit: + exclude_fields += [ + "leave_type_id", + "cfd_to_encash", + "ad_to_encash", + "bonus_to_encash", + ] + elif type == "leave_encashment" and (is_edit or self.data): + exclude_fields += ["attachment", "amount", "bonus_to_encash"] + elif type == "bonus_encashment" and (is_edit or self.data): + exclude_fields += [ + "attachment", + "amount", + "leave_type_id", + "cfd_to_encash", + "ad_to_encash", + ] def as_p(self): """ @@ -917,69 +924,81 @@ class ReimbursementForm(ModelForm): def clean(self): cleaned_data = super().clean() - request = getattr(horilla_middlewares._thread_locals, "request", None) - if self.instance.pk: - employee_id = self.instance.employee_id - type = self.instance.type - else: - employee_id = request.user.employee_get - type = cleaned_data["type"] + type_ = cleaned_data.get("type") + employee = cleaned_data.get("employee_id") - available_points = BonusPoint.objects.filter(employee_id=employee_id).first() - if type == "bonus_encashment": - if self.instance.pk: - bonus_to_encash = self.instance.bonus_to_encash - else: - bonus_to_encash = cleaned_data["bonus_to_encash"] + if not type_ or not employee: + return cleaned_data - if available_points.points < bonus_to_encash: - raise forms.ValidationError( - {"bonus_to_encash": "Not enough bonus points to redeem"} - ) - if bonus_to_encash <= 0: - raise forms.ValidationError( - {"bonus_to_encash": "Points must be greater than zero to redeem."} - ) - if type == "leave_encashment": - if self.instance.pk: - leave_type_id = self.instance.leave_type_id - cfd_to_encash = self.instance.cfd_to_encash - ad_to_encash = self.instance.ad_to_encash + if type_ == "bonus_encashment": + bonus_to_encash = ( + self.instance.bonus_to_encash + if self.instance.pk + else cleaned_data.get("bonus_to_encash") + ) + available_points = BonusPoint.objects.filter(employee_id=employee).first() + + if bonus_to_encash is not None: + if bonus_to_encash <= 0: + self.add_error( + "bonus_to_encash", "Points must be greater than zero to redeem." + ) + elif not available_points or available_points.points < bonus_to_encash: + self.add_error( + "bonus_to_encash", "Not enough bonus points to redeem" + ) + + elif type_ == "leave_encashment": + leave_type = ( + self.instance.leave_type_id + if self.instance.pk + else cleaned_data.get("leave_type_id") + ) + cfd_to_encash = ( + self.instance.cfd_to_encash + if self.instance.pk + else cleaned_data.get("cfd_to_encash", 0) + ) + ad_to_encash = ( + self.instance.ad_to_encash + if self.instance.pk + else cleaned_data.get("ad_to_encash", 0) + ) + + if not leave_type: + self.add_error("leave_type_id", "This field is required") else: - leave_type_id = cleaned_data["leave_type_id"] - cfd_to_encash = cleaned_data["cfd_to_encash"] - ad_to_encash = cleaned_data["ad_to_encash"] - encashable_leaves = self.get_encashable_leaves(employee_id) - if leave_type_id is None: - raise forms.ValidationError({"leave_type_id": "This field is required"}) - elif leave_type_id not in encashable_leaves: - raise forms.ValidationError( - {"leave_type_id": "This leave type is not encashable"} - ) - else: - AvailableLeave = get_horilla_model_class( - app_label="leave", model="availableleave" - ) - available_leave = AvailableLeave.objects.filter( - leave_type_id=leave_type_id, employee_id=employee_id - ).first() - if cfd_to_encash < 0: - raise forms.ValidationError( - {"cfd_to_encash": _("Value can't be negative.")} - ) - if ad_to_encash < 0: - raise forms.ValidationError( - {"ad_to_encash": _("Value can't be negative.")} - ) - if cfd_to_encash > available_leave.carryforward_days: - raise forms.ValidationError( - {"cfd_to_encash": _("Not enough carryforward days to redeem")} - ) - if ad_to_encash > available_leave.available_days: - raise forms.ValidationError( - {"ad_to_encash": _("Not enough available days to redeem")} - ) + encashable = self.get_encashable_leaves(employee) + if leave_type not in encashable: + self.add_error("leave_type_id", "This leave type is not encashable") + else: + AvailableLeave = get_horilla_model_class("leave", "availableleave") + available_leave = AvailableLeave.objects.filter( + leave_type_id=leave_type, employee_id=employee + ).first() + + if available_leave: + if cfd_to_encash < 0: + self.add_error( + "cfd_to_encash", _("Value can't be negative.") + ) + elif cfd_to_encash > available_leave.carryforward_days: + self.add_error( + "cfd_to_encash", + _("Not enough carryforward days to redeem"), + ) + + if ad_to_encash < 0: + self.add_error( + "ad_to_encash", _("Value can't be negative.") + ) + elif ad_to_encash > available_leave.available_days: + self.add_error( + "ad_to_encash", _("Not enough available days to redeem") + ) + + return cleaned_data def save(self, commit: bool = True) -> Any: multiple_attachment_ids = [] diff --git a/payroll/models/models.py b/payroll/models/models.py index ec9fd2b8e..e83cbb14f 100644 --- a/payroll/models/models.py +++ b/payroll/models/models.py @@ -34,7 +34,7 @@ from employee.methods.duration_methods import strtime_seconds from employee.models import BonusPoint, Employee, EmployeeWorkInformation from horilla import horilla_middlewares from horilla.horilla_middlewares import _thread_locals -from horilla.models import HorillaModel +from horilla.models import HorillaModel, upload_path from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from horilla_views.cbv_methods import render_template @@ -116,30 +116,6 @@ class FilingStatus(HorillaModel): def __str__(self) -> str: return str(self.filing_status) - def get_panel_hx_url(self): - """ - This method to get update url - """ - url = reverse_lazy("tax-bracket-list", kwargs={"pk": self.pk}) - return url - - def add_panel_hx_url(self): - url = reverse_lazy("tax-bracket-create", kwargs={"pk": self.pk}) - return url - - def get_update_url(self): - url = reverse_lazy("filing-status-update", kwargs={"pk": self.pk}) - return url - - def get_delete_url(self): - url = reverse_lazy("filing-status-delete", kwargs={"pk": self.pk}) - return url - - def dropdown_actions(self): - return render_template( - "payroll/tax/filing_status_actions.html", {"instance": self} - ) - class Meta: ordering = ["-id"] verbose_name = _("Filing Status") @@ -271,7 +247,7 @@ class Contract(HorillaModel): validators=[min_zero], verbose_name=_("Notice Period"), ) - contract_document = models.FileField(upload_to="uploads/", null=True, blank=True) + contract_document = models.FileField(upload_to=upload_path, null=True, blank=True) deduct_leave_from_basic_pay = models.BooleanField( default=True, verbose_name=_("Deduct From Basic Pay"), @@ -301,6 +277,24 @@ class Contract(HorillaModel): objects = HorillaCompanyManager("employee_id__employee_work_info__company_id") + def get_wage_type_display(self): + """ + Display wage type + """ + return dict(self.WAGE_CHOICES).get(self.wage_type) + + def get_pay_frequency_display(self): + """ + Display pay frequency + """ + return dict(self.PAY_FREQUENCY_CHOICES).get(self.pay_frequency) + + def get_status_display(self): + """ + Display status + """ + return dict(self.CONTRACT_STATUS_CHOICES).get(self.contract_status) + def status_col(self): """ status column @@ -372,6 +366,15 @@ class Contract(HorillaModel): return url + def deduct_leave_from_basic_pay_col(self): + """ + Deduct leave from basic pay column + """ + if self.deduct_leave_from_basic_pay: + return "Yes" + else: + return "No" + def __str__(self) -> str: return f"{self.contract_name} -{self.contract_start_date} - {self.contract_end_date}" @@ -476,8 +479,6 @@ class Contract(HorillaModel): Meta class to add additional options """ - verbose_name = _("Contract") - verbose_name_plural = _("Contracts") unique_together = ["employee_id", "contract_start_date", "contract_end_date"] @@ -836,11 +837,7 @@ class Allowance(HorillaModel): ("basic_pay", _("Basic Pay")), ] title = models.CharField( - max_length=255, - null=False, - blank=False, - help_text=_("Title of the allowance"), - verbose_name=_("Allowance"), + max_length=255, null=False, blank=False, help_text=_("Title of the allowance") ) one_time_date = models.DateField( null=True, @@ -875,7 +872,6 @@ class Allowance(HorillaModel): is_taxable = models.BooleanField( default=True, help_text=_("This field is used to calculate the taxable allowances"), - verbose_name=_("Is Taxable"), ) is_condition_based = models.BooleanField( default=False, @@ -883,7 +879,6 @@ class Allowance(HorillaModel): "This field is used to target allowance \ to the specific employees when the condition satisfies with the employee's information" ), - verbose_name=_("Is Condition Based"), ) # If condition based field = models.CharField( @@ -904,16 +899,13 @@ class Allowance(HorillaModel): ) is_fixed = models.BooleanField( - default=True, - help_text=_("To specify, the allowance is fixed or not"), - verbose_name=_("Is Fixed"), + default=True, help_text=_("To specify, the allowance is fixed or not") ) amount = models.FloatField( null=True, blank=True, validators=[min_zero], help_text=_("Fixed amount for this allowance"), - verbose_name=_("Amount"), ) # If is fixed is false based_on = models.CharField( @@ -925,7 +917,6 @@ class Allowance(HorillaModel): help_text=_( "If the allowance is not fixed then specifies how the allowance provided" ), - verbose_name=_("Based On"), ) rate = models.FloatField( null=True, @@ -934,7 +925,6 @@ class Allowance(HorillaModel): rate_validator, ], help_text=_("The percentage of based on"), - verbose_name=_("Rate"), ) # If based on attendance per_attendance_fixed_amount = models.FloatField( @@ -1073,7 +1063,6 @@ class Allowance(HorillaModel): "work_type_per_attendance_amount", ] verbose_name = _("Allowance") - verbose_name_plural = _("Allowances") def get_specific_employees(self): """ @@ -1091,6 +1080,30 @@ class Allowance(HorillaModel): return ", ".join([str(employee) for employee in self.exclude_employees.all()]) + def get_is_taxable_display(self): + """ + method to return is taxable or not + """ + return "Yes" if self.is_taxable else "No" + + def get_is_condition_based(self): + """ + method to return is condition based or not + """ + return "Yes" if self.is_condition_based else "No" + + def get_is_fixed(self): + """ + method to return is fixed + """ + return "Yes" if self.is_fixed else "No" + + def get_based_on_display(self): + """ + method to return get based on field + """ + return dict(self.based_on_choice).get(self.based_on) + def allowance_detail_view(self): """ detail view @@ -1331,11 +1344,7 @@ class Deduction(HorillaModel): ("max_amount", _("Provide max amount")), ] - title = models.CharField( - max_length=255, - help_text=_("Title of the deduction"), - verbose_name=_("Deduction"), - ) + title = models.CharField(max_length=255, help_text=_("Title of the deduction")) one_time_date = models.DateField( null=True, blank=True, @@ -1378,7 +1387,6 @@ class Deduction(HorillaModel): "To find taxable gross, \ taxable_gross = (basic_pay + taxable_deduction)-pre_tax_deductions " ), - verbose_name=_("Is Pretax"), ) is_condition_based = models.BooleanField( @@ -1387,7 +1395,6 @@ class Deduction(HorillaModel): "This field is used to target deduction \ to the specific employees when the condition satisfies with the employee's information" ), - verbose_name=_("Is Condition Based"), ) # If condition based then must fill field, value, and condition, field = models.CharField( @@ -1426,7 +1433,6 @@ class Deduction(HorillaModel): is_fixed = models.BooleanField( default=True, help_text=_("To specify, the deduction is fixed or not"), - verbose_name=_("Is Fixed"), ) # If fixed amount then fill amount amount = models.FloatField( @@ -1434,7 +1440,6 @@ class Deduction(HorillaModel): blank=True, validators=[min_zero], help_text=_("Fixed amount for this deduction"), - verbose_name=_("Amount"), ) based_on = models.CharField( max_length=255, @@ -1444,7 +1449,6 @@ class Deduction(HorillaModel): help_text=_( "If the deduction is not fixed then specifies how the deduction provided" ), - verbose_name=_("Based On"), ) rate = models.FloatField( null=True, @@ -1453,7 +1457,7 @@ class Deduction(HorillaModel): validators=[ rate_validator, ], - verbose_name=_("Employee Rate"), + verbose_name=_("Employee rate"), help_text=_("The percentage of based on"), ) @@ -1517,10 +1521,6 @@ class Deduction(HorillaModel): MultipleCondition, blank=True, editable=False ) - class Meta: - verbose_name = _("Deduction") - verbose_name_plural = _("Deductions") - def installment_payslip(self): """ Method to retrieve the payslip associated with this installment. @@ -1555,7 +1555,7 @@ class Deduction(HorillaModel): """ return dict(CONDITION_CHOICE).get(self.condition) - def condition_based_col(self): + def condition_bsed_col(self): """ Condition based column """ @@ -1775,26 +1775,22 @@ class Payslip(HorillaModel): ("paid", _("Paid")), ] group_name = models.CharField( - max_length=50, null=True, blank=True, verbose_name=_("Batch") + max_length=50, null=True, blank=True, verbose_name=_("Batch name") ) reference = models.CharField(max_length=255, unique=False, null=True, blank=True) employee_id = models.ForeignKey( Employee, on_delete=models.PROTECT, verbose_name=_("Employee") ) - start_date = models.DateField(verbose_name=_("Start date")) - end_date = models.DateField(verbose_name=_("End Date")) + start_date = models.DateField() + end_date = models.DateField() pay_head_data = models.JSONField() contract_wage = models.FloatField(null=True, default=0) basic_pay = models.FloatField(null=True, default=0) - gross_pay = models.FloatField(null=True, default=0, verbose_name=_("Gross Pay")) - deduction = models.FloatField(null=True, default=0, verbose_name=_("Deduction")) - net_pay = models.FloatField(null=True, default=0, verbose_name=_("Net Pay")) + gross_pay = models.FloatField(null=True, default=0) + deduction = models.FloatField(null=True, default=0) + net_pay = models.FloatField(null=True, default=0) status = models.CharField( - max_length=20, - null=True, - default="draft", - choices=status_choices, - verbose_name=_("Status"), + max_length=20, null=True, default="draft", choices=status_choices ) sent_to_employee = models.BooleanField(null=True, default=False) objects = HorillaCompanyManager("employee_id__employee_work_info__company_id") @@ -1952,8 +1948,6 @@ class Payslip(HorillaModel): ordering = [ "-end_date", ] - verbose_name = _("Payslip") - verbose_name_plural = _("Payslips") class LoanAccount(HorillaModel): @@ -2138,7 +2132,7 @@ class ReimbursementMultipleAttachment(models.Model): ReimbursementMultipleAttachement Model """ - attachment = models.FileField(upload_to="payroll/reimbursements") + attachment = models.FileField(upload_to=upload_path) objects = models.Manager() @@ -2168,7 +2162,7 @@ class Reimbursement(HorillaModel): Employee, on_delete=models.PROTECT, verbose_name="Employee" ) allowance_on = models.DateField() - attachment = models.FileField(upload_to="payroll/reimbursements", null=True) + attachment = models.FileField(upload_to=upload_path, null=True) other_attachments = models.ManyToManyField( ReimbursementMultipleAttachment, blank=True, editable=False ) @@ -2195,13 +2189,9 @@ class Reimbursement(HorillaModel): help_text=_("Bonus points to encash"), verbose_name=_("Bonus points"), ) - amount = models.FloatField(default=0, verbose_name=_("Amount")) + amount = models.FloatField(default=0) status = models.CharField( - max_length=10, - choices=status_types, - default="requested", - editable=False, - verbose_name=_("Status"), + max_length=10, choices=status_types, default="requested", editable=False ) approved_by = models.ForeignKey( Employee, @@ -2210,9 +2200,7 @@ class Reimbursement(HorillaModel): related_name="approved_by", editable=False, ) - description = models.TextField( - null=True, max_length=255, verbose_name=_("Description") - ) + description = models.TextField(null=True, max_length=255) allowance_id = models.ForeignKey( Allowance, on_delete=models.SET_NULL, null=True, editable=False ) @@ -2359,6 +2347,12 @@ class Reimbursement(HorillaModel): def __str__(self): return f"{self.title}" + def get_status_display(self): + """ + Display status types + """ + return dict(self.status_types).get(self.status) + def comment_col(self): """ This method for get custom coloumn . @@ -2442,7 +2436,7 @@ class Reimbursement(HorillaModel): class ReimbursementFile(models.Model): - file = models.FileField(upload_to="payroll/request_files") + file = models.FileField(upload_to=upload_path) objects = models.Manager() diff --git a/payroll/models/tax_models.py b/payroll/models/tax_models.py index d0725bb53..c28e5ce76 100644 --- a/payroll/models/tax_models.py +++ b/payroll/models/tax_models.py @@ -8,14 +8,12 @@ import math from django.core.exceptions import ValidationError from django.db import models -from django.urls import reverse_lazy from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ from base.horilla_company_manager import HorillaCompanyManager from base.models import Company from horilla.models import HorillaModel -from horilla_views.cbv_methods import render_template from payroll.models.models import FilingStatus @@ -53,7 +51,6 @@ class TaxBracket(HorillaModel): filing_status_id = models.ForeignKey( FilingStatus, on_delete=models.CASCADE, - related_name="tax_brackets", verbose_name=_("Filing status"), ) min_income = models.FloatField( @@ -87,19 +84,6 @@ class TaxBracket(HorillaModel): return self.max_income return None - def get_update_url(self): - url = reverse_lazy("tax-bracket-update", kwargs={"pk": self.pk}) - return url - - def get_delete_url(self): - url = reverse_lazy("tax-bracket-delete", kwargs={"pk": self.pk}) - return url - - def action_column(self): - return render_template( - "payroll/tax/tax_bracket_actions.html", {"instance": self} - ) - def clean(self): super().clean() diff --git a/payroll/static/cbv/actions.js b/payroll/static/cbv/actions.js index 603164ff5..7b58e045f 100644 --- a/payroll/static/cbv/actions.js +++ b/payroll/static/cbv/actions.js @@ -4,66 +4,81 @@ var excelMessages = { es: "¿Desea descargar el archivo de Excel?", en: "Do you want to download the excel file?", fr: "Voulez-vous télécharger le fichier Excel?", -}; + }; -var deletePayslipMessages = { + var deletePayslipMessages = { ar: "هل تريد حقًا حذف جميع كشوف الدفع المحددة؟", de: "Sind Sie sicher, dass Sie alle ausgewählten Gehaltsabrechnungen löschen möchten?", es: "¿Realmente quieres eliminar todas las nóminas seleccionadas?", en: "Do you really want to delete all the selected payslips?", fr: "Voulez-vous vraiment supprimer tous les bulletins de paie sélectionnés?", -}; + }; -var deleteContractMessage = { + var deleteContractMessage = { ar: "هل ترغب حقًا في حذف جميع العقود المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Verträge löschen?", es: "¿Realmente quieres borrar todos los contratos seleccionados?", en: "Do you really want to delete all the selected contracts?", fr: "Voulez-vous vraiment supprimer tous les contrats sélectionnés?", -}; + }; -var noRowMessage = { + var noRowMessage = { ar: "لم يتم تحديد أي صفوف.", de: "Es wurden keine Zeilen ausgewählt.", es: "No se han seleccionado filas.", en: "No rows have been selected.", fr: "Aucune ligne n'a été sélectionnée.", -}; + }; -var rowMessages = { + var rowMessages = { ar: " تم الاختيار", de: " Ausgewählt", es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; + }; -function getCookie(name) { + 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; - } + 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 getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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 DeleteContractBulk() { @@ -71,49 +86,49 @@ function DeleteContractBulk() { var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteContractMessage[languageCode]; - var textMessage = noRowMessage[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); + languageCode = code; + var confirmMessage = deleteContractMessage[languageCode]; + var textMessage = noRowMessage[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/payroll/contract-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); + $.ajax({ + type: "POST", + url: "/payroll/contract-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); } + }, }); - } + } + }); + } }); -}; + }; diff --git a/payroll/static/cbv/payslip.js b/payroll/static/cbv/payslip.js index 92174897d..c78e89780 100644 --- a/payroll/static/cbv/payslip.js +++ b/payroll/static/cbv/payslip.js @@ -4,186 +4,201 @@ var excelMessages = { es: "¿Desea descargar el archivo de Excel?", en: "Do you want to download the excel file?", fr: "Voulez-vous télécharger le fichier Excel?", -}; + }; -var deletePayslipMessages = { + var deletePayslipMessages = { ar: "هل تريد حقًا حذف جميع كشوف الدفع المحددة؟", de: "Sind Sie sicher, dass Sie alle ausgewählten Gehaltsabrechnungen löschen möchten?", es: "¿Realmente quieres eliminar todas las nóminas seleccionadas?", en: "Do you really want to delete all the selected payslips?", fr: "Voulez-vous vraiment supprimer tous les bulletins de paie sélectionnés?", -}; + }; -var deleteContractMessages = { + var deleteContractMessages = { ar: "هل ترغب حقًا في حذف جميع العقود المحددة؟", de: "Möchten Sie wirklich alle ausgewählten Verträge löschen?", es: "¿Realmente quieres borrar todos los contratos seleccionados?", en: "Do you really want to delete all the selected contracts?", fr: "Voulez-vous vraiment supprimer tous les contrats sélectionnés?", -}; + }; -var noRowMessagesMail = { + var noRowMessagesMail = { ar: "لم يتم تحديد أي صفوف.", de: "Es wurden keine Zeilen ausgewählt.", es: "No se han seleccionado filas.", en: "No rows have been selected.", fr: "Aucune ligne n'a été sélectionnée.", -}; -var mailSentMessages = { + }; + var mailSentMessages = { ar: "هل ترغب في إرسال كشف الرواتب عبر البريد؟", de: "Möchten Sie den Gehaltsabrechnung per E-Mail versenden?", es: "¿Quieres enviar la nómina por correo electrónico?", en: "Do you want to send the payslip by mail?", fr: "Voulez-vous envoyer le bulletin de salaire par e-mail?", -}; + }; -var rowMessages = { + var rowMessages = { ar: " تم الاختيار", de: " Ausgewählt", es: " Seleccionado", en: " Selected", fr: " Sélectionné", -}; + }; -function makeEmpListUnique(list) { + function makeEmpListUnique(list) { return Array.from(new Set(list)); -} + } -function makePayslipListUnique(list) { + function makePayslipListUnique(list) { return Array.from(new Set(list)); -} + } -function getCookie(name) { + 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; - } + 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 getCurrentLanguageCode(callback) { + function getCurrentLanguageCode(callback) { var languageCode = $("#main-section-data").attr("data-lang"); var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); + callback(languageCode); } else { - callback("en"); + $.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 bulkSendViaMail() { + function bulkSendViaMail(){ var languageCode = null; getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = mailSentMessages[languageCode]; - var textMessage = noRowMessagesMail[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - maildata = JSON.parse($("#selectedInstances").attr("data-ids")); - if (maildata.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { + languageCode = code; + var confirmMessage = mailSentMessages[languageCode]; + var textMessage = noRowMessagesMail[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + maildata = JSON.parse($("#selectedInstances").attr("data-ids")); + if (maildata.length === 0){ + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "question", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { - // ids.push($("#selectedInstances").attr("data-ids")); - //ids = JSON.parse($("#selectedInstances").attr("data-ids")); + // ids.push($("#selectedInstances").attr("data-ids")); + //ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ + $.ajax({ - type: "GET", - url: "/payroll/send-slip", - data: { id: maildata }, - traditional: true, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); - } - }, - - }); + type: "GET", + url: "/payroll/send-slip", + data: { id: maildata}, + traditional: true, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); } - }); - } - }); -} + }, -function payslipBulkDelete() { - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deletePayslipMessages[languageCode]; - var textMessage = noRowMessages[languageCode]; - var checkedRows = $(".payslip-checkbox").filter(":checked"); - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - if ((ids.length === 0) & (checkedRows.length === 0)) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", }); - } else { + } + }); + } + }); + } + +function payslipBulkDelete(){ +var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = deletePayslipMessages[languageCode]; + var textMessage = noRowMessages[languageCode]; + var checkedRows = $(".payslip-checkbox").filter(":checked"); + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if ((ids.length === 0) & (checkedRows.length === 0)) { Swal.fire({ - text: confirmMessage, - icon: "error", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", + 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) { - if (ids.length === 0) { - e.preventDefault(); - ids = []; - checkedRows.each(function () { - ids.push($(this).attr("id")); - }); - } else if (checkedRows.length === 0) { - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); + if (result.isConfirmed) { + if (ids.length === 0) { + e.preventDefault(); + ids = []; + checkedRows.each(function () { + ids.push($(this).attr("id")); + }); + } else if (checkedRows.length === 0) { + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + } + $.ajax({ + type: "POST", + url: "/payroll/payslip-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); } - $.ajax({ - type: "POST", - url: "/payroll/payslip-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } + }, + }); + } }); - } - }); -} + } + }); + } diff --git a/payroll/static/payroll/action.js b/payroll/static/payroll/action.js index 0966ecd93..b31536fee 100644 --- a/payroll/static/payroll/action.js +++ b/payroll/static/payroll/action.js @@ -1,77 +1,92 @@ var excelMessages = { - ar: "هل ترغب في تنزيل ملف Excel؟", - de: "Möchten Sie die Excel-Datei herunterladen?", - es: "¿Desea descargar el archivo de Excel?", - en: "Do you want to download the excel file?", - fr: "Voulez-vous télécharger le fichier Excel?", + ar: "هل ترغب في تنزيل ملف Excel؟", + de: "Möchten Sie die Excel-Datei herunterladen?", + es: "¿Desea descargar el archivo de Excel?", + en: "Do you want to download the excel file?", + fr: "Voulez-vous télécharger le fichier Excel?", }; var deletePayslipMessages = { - ar: "هل تريد حقًا حذف جميع كشوف الدفع المحددة؟", - de: "Sind Sie sicher, dass Sie alle ausgewählten Gehaltsabrechnungen löschen möchten?", - es: "¿Realmente quieres eliminar todas las nóminas seleccionadas?", - en: "Do you really want to delete all the selected payslips?", - fr: "Voulez-vous vraiment supprimer tous les bulletins de paie sélectionnés?", + ar: "هل تريد حقًا حذف جميع كشوف الدفع المحددة؟", + de: "Sind Sie sicher, dass Sie alle ausgewählten Gehaltsabrechnungen löschen möchten?", + es: "¿Realmente quieres eliminar todas las nóminas seleccionadas?", + en: "Do you really want to delete all the selected payslips?", + fr: "Voulez-vous vraiment supprimer tous les bulletins de paie sélectionnés?", }; var deleteContractMessages = { - ar: "هل ترغب حقًا في حذف جميع العقود المحددة؟", - de: "Möchten Sie wirklich alle ausgewählten Verträge löschen?", - es: "¿Realmente quieres borrar todos los contratos seleccionados?", - en: "Do you really want to delete all the selected contracts?", - fr: "Voulez-vous vraiment supprimer tous les contrats sélectionnés?", + ar: "هل ترغب حقًا في حذف جميع العقود المحددة؟", + de: "Möchten Sie wirklich alle ausgewählten Verträge löschen?", + es: "¿Realmente quieres borrar todos los contratos seleccionados?", + en: "Do you really want to delete all the selected contracts?", + fr: "Voulez-vous vraiment supprimer tous les contrats sélectionnés?", }; var noRowPayrollMessages = { - ar: "لم يتم تحديد أي صفوف.", - de: "Es wurden keine Zeilen ausgewählt.", - es: "No se han seleccionado filas.", - en: "No rows have been selected to delete.", - fr: "Aucune ligne n'a été sélectionnée.", + ar: "لم يتم تحديد أي صفوف.", + de: "Es wurden keine Zeilen ausgewählt.", + es: "No se han seleccionado filas.", + en: "No rows have been selected to delete.", + fr: "Aucune ligne n'a été sélectionnée.", }; var rowMessages = { - ar: " تم الاختيار", - de: " Ausgewählt", - es: " Seleccionado", - en: " Selected", - fr: " Sélectionné", + ar: " تم الاختيار", + de: " Ausgewählt", + es: " Seleccionado", + en: " Selected", + fr: " Sélectionné", }; tickContractCheckboxes(); function makeEmpListUnique(list) { - return Array.from(new Set(list)); + return Array.from(new Set(list)); } function makePayslipListUnique(list) { - return Array.from(new Set(list)); + return Array.from(new Set(list)); } 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; + 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 getCurrentLanguageCode(callback) { - var languageCode = $("#main-section-data").attr("data-lang"); - var allowedLanguageCodes = ["ar", "de", "es", "en", "fr"]; - if (allowedLanguageCodes.includes(languageCode)) { - callback(languageCode); - } else { - callback("en"); - } + 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"); + }, + }); + } } // ------------------------------- @@ -79,310 +94,310 @@ function getCurrentLanguageCode(callback) { // ------------------------------- $("#select-all-fields").change(function () { - const isChecked = $(this).prop("checked"); - $('[name="selected_fields"]').prop("checked", isChecked); + const isChecked = $(this).prop("checked"); + $('[name="selected_fields"]').prop("checked", isChecked); }); function addingPayslipIds() { - var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); - var selectedCount = 0; + var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); + var selectedCount = 0; - $(".all-payslip-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-payslip-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); + } + } + }); - ids = makePayslipListUnique(ids); - selectedCount = ids.length; + ids = makePayslipListUnique(ids); + selectedCount = ids.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; + getCurrentLanguageCode(function (code) { + languageCode = code; + var message = rowMessages[languageCode]; - $("#selectedPayslip").attr("data-ids", JSON.stringify(ids)); + $("#selectedPayslip").attr("data-ids", JSON.stringify(ids)); - if (selectedCount === 0) { - $("#unselectAllPayslip").css("display", "none"); - $("#exportPayslips").css("display", "none"); - $("#selectedSlipShow").css("display", "none"); - } else { - $("#unselectAllPayslip").css("display", "inline-flex"); - $("#exportPayslips").css("display", "inline-flex"); - $("#selectedSlipShow").css("display", "inline-flex"); - $("#selectedSlipShow").text(selectedCount + " - " + message); - } - }); + if (selectedCount === 0) { + $("#unselectAllPayslip").css("display", "none"); + $("#exportPayslips").css("display", "none"); + $("#selectedSlipShow").css("display", "none"); + } else { + $("#unselectAllPayslip").css("display", "inline-flex"); + $("#exportPayslips").css("display", "inline-flex"); + $("#selectedSlipShow").css("display", "inline-flex"); + $("#selectedSlipShow").text(selectedCount + " - " + message); + } + }); } $(".all-payslip-row").change(function () { - if ($(".all-payslip").is(":checked")) { - $(".all-payslip").prop("checked", false); - } - addingPayslipIds(); + if ($(".all-payslip").is(":checked")) { + $(".all-payslip").prop("checked", false); + } + addingPayslipIds(); }); function tickPayslipCheckboxes() { - var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); - uniqueIds = makePayslipListUnique(ids); - toggleHighlight(uniqueIds); - click = $("#selectedPayslip").attr("data-clicked"); - if (click === "1") { - $(".all-payslip").prop("checked", true); - } + var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); + uniqueIds = makePayslipListUnique(ids); + toggleHighlight(uniqueIds); + click = $("#selectedPayslip").attr("data-clicked"); + if (click === "1") { + $(".all-payslip").prop("checked", true); + } - uniqueIds.forEach(function (id) { - $("#" + id).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) { - $("#unselectAllPayslip").css("display", "inline-flex"); - $("#exportPayslips").css("display", "inline-flex"); - $("#selectedSlipShow").css("display", "inline-flex"); - $("#selectedSlipShow").text(selectedCount + " -" + message); - } else { - $("#unselectAllPayslip").css("display", "none"); - $("#exportPayslips").css("display", "none"); - $("#selectedSlipShow").css("display", "none"); - } - }); + var selectedCount = uniqueIds.length; + getCurrentLanguageCode(function (code) { + languageCode = code; + var message = rowMessages[languageCode]; + if (selectedCount > 0) { + $("#unselectAllPayslip").css("display", "inline-flex"); + $("#exportPayslips").css("display", "inline-flex"); + $("#selectedSlipShow").css("display", "inline-flex"); + $("#selectedSlipShow").text(selectedCount + " -" + message); + } else { + $("#unselectAllPayslip").css("display", "none"); + $("#exportPayslips").css("display", "none"); + $("#selectedSlipShow").css("display", "none"); + } + }); } function selectAllPayslip() { - var allPayslipCount = 0; - $("#selectedPayslip").attr("data-clicked", 1); - var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); - if (savedFilters && savedFilters["filterData"] !== null) { - var filter = savedFilters["filterData"]; + var allPayslipCount = 0; + $("#selectedPayslip").attr("data-clicked", 1); + var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); + if (savedFilters && savedFilters["filterData"] !== null) { + var filter = savedFilters["filterData"]; - $.ajax({ - url: "/payroll/payslip-select-filter", - data: { page: "all", filter: JSON.stringify(filter) }, - type: "GET", - dataType: "json", - success: function (response) { - var payslipIds = response.payslip_ids; + $.ajax({ + url: "/payroll/payslip-select-filter", + data: { page: "all", filter: JSON.stringify(filter) }, + type: "GET", + dataType: "json", + success: function (response) { + var payslipIds = response.payslip_ids; - if (Array.isArray(payslipIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", payslipIds); - } + if (Array.isArray(payslipIds)) { + // Continue + } else { + console.error("employee_ids is not an array:", payslipIds); + } - allPayslipCount = payslipIds.length; + allPayslipCount = payslipIds.length; - for (var i = 0; i < payslipIds.length; i++) { - var empId = payslipIds[i]; - $("#" + empId).prop("checked", true); - } - var previousIds = $("#selectedPayslip").attr("data-ids"); - $("#selectedPayslip").attr( - "data-ids", - JSON.stringify( - Array.from(new Set([...payslipIds, ...JSON.parse(previousIds)])) - ) - ); + for (var i = 0; i < payslipIds.length; i++) { + var empId = payslipIds[i]; + $("#" + empId).prop("checked", true); + } + var previousIds = $("#selectedPayslip").attr("data-ids"); + $("#selectedPayslip").attr( + "data-ids", + JSON.stringify( + Array.from(new Set([...payslipIds, ...JSON.parse(previousIds)])) + ) + ); - count = makePayslipListUnique(payslipIds); - tickPayslipCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } else { - $.ajax({ - url: "/payroll/payslip-select", - data: { page: "all" }, - type: "GET", - dataType: "json", - success: function (response) { - var payslipIds = response.payslip_ids; + count = makePayslipListUnique(payslipIds); + tickPayslipCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } else { + $.ajax({ + url: "/payroll/payslip-select", + data: { page: "all" }, + type: "GET", + dataType: "json", + success: function (response) { + var payslipIds = response.payslip_ids; - if (Array.isArray(payslipIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", payslipIds); - } + if (Array.isArray(payslipIds)) { + // Continue + } else { + console.error("employee_ids is not an array:", payslipIds); + } - allPayslipCount = payslipIds.length; + allPayslipCount = payslipIds.length; - for (var i = 0; i < payslipIds.length; i++) { - var empId = payslipIds[i]; - $("#" + empId).prop("checked", true); - } - $("#selectedPayslip").attr("data-ids", JSON.stringify(payslipIds)); + for (var i = 0; i < payslipIds.length; i++) { + var empId = payslipIds[i]; + $("#" + empId).prop("checked", true); + } + $("#selectedPayslip").attr("data-ids", JSON.stringify(payslipIds)); - count = makePayslipListUnique(payslipIds); - tickPayslipCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } + count = makePayslipListUnique(payslipIds); + tickPayslipCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } } function unselectAllPayslip() { - $("#selectedPayslip").attr("data-clicked", 0); + $("#selectedPayslip").attr("data-clicked", 0); - $.ajax({ - url: "/payroll/payslip-select", - data: { page: "all", filter: "{}" }, - type: "GET", - dataType: "json", - success: function (response) { - var payslipIds = response.payslip_ids; + $.ajax({ + url: "/payroll/payslip-select", + data: { page: "all", filter: "{}" }, + type: "GET", + dataType: "json", + success: function (response) { + var payslipIds = response.payslip_ids; - if (Array.isArray(payslipIds)) { - // Continue - } else { - console.error("employee_ids is not an array:", payslipIds); - } + if (Array.isArray(payslipIds)) { + // Continue + } else { + console.error("employee_ids is not an array:", payslipIds); + } - for (var i = 0; i < payslipIds.length; i++) { - var empId = payslipIds[i]; - $("#" + empId).prop("checked", false); - $(".all-payslip").prop("checked", false); - } - var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); - uniqueIds = makePayslipListUnique(ids); - toggleHighlight(uniqueIds); - $("#selectedPayslip").attr("data-ids", JSON.stringify([])); + for (var i = 0; i < payslipIds.length; i++) { + var empId = payslipIds[i]; + $("#" + empId).prop("checked", false); + $(".all-payslip").prop("checked", false); + } + var ids = JSON.parse($("#selectedPayslip").attr("data-ids") || "[]"); + uniqueIds = makePayslipListUnique(ids); + toggleHighlight(uniqueIds); + $("#selectedPayslip").attr("data-ids", JSON.stringify([])); - count = []; - tickPayslipCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); + count = []; + tickPayslipCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); } function exportPayslips() { - var currentDate = new Date().toISOString().slice(0, 10); - var languageCode = null; - ids = []; - ids.push($("#selectedPayslip").attr("data-ids")); - ids = JSON.parse($("#selectedPayslip").attr("data-ids")); - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = excelMessages[languageCode]; - var textMessage = noRowPayrollMessages[languageCode]; - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "/payroll/payslip-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 = "Payslip_excel_" + currentDate + ".xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } - }); - } - }); + var currentDate = new Date().toISOString().slice(0, 10); + var languageCode = null; + ids = []; + ids.push($("#selectedPayslip").attr("data-ids")); + ids = JSON.parse($("#selectedPayslip").attr("data-ids")); + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = excelMessages[languageCode]; + var textMessage = noRowPayrollMessages[languageCode]; + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "question", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + $.ajax({ + type: "GET", + url: "/payroll/payslip-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 = "Payslip_excel_" + currentDate + ".xlsx"; + document.body.appendChild(link); + link.click(); + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, + }); + } + }); + } + }); } $("#deletePayslipBulk").click(function (e) { - e.preventDefault(); + e.preventDefault(); - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deletePayslipMessages[languageCode]; - var textMessage = noRowPayrollMessages[languageCode]; - var checkedRows = $(".payslip-checkbox").filter(":checked"); - ids = []; - ids.push($("#selectedPayslip").attr("data-ids")); - ids = JSON.parse($("#selectedPayslip").attr("data-ids")); - if ((ids.length === 0) & (checkedRows.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) { - if (ids.length === 0) { - e.preventDefault(); - ids = []; - checkedRows.each(function () { - ids.push($(this).attr("id")); - }); - } else if (checkedRows.length === 0) { - e.preventDefault(); - ids = []; - ids.push($("#selectedPayslip").attr("data-ids")); - ids = JSON.parse($("#selectedPayslip").attr("data-ids")); - } - $.ajax({ - type: "POST", - url: "/payroll/payslip-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } - }); - } - }); + var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = deletePayslipMessages[languageCode]; + var textMessage = noRowPayrollMessages[languageCode]; + var checkedRows = $(".payslip-checkbox").filter(":checked"); + ids = []; + ids.push($("#selectedPayslip").attr("data-ids")); + ids = JSON.parse($("#selectedPayslip").attr("data-ids")); + if ((ids.length === 0) & (checkedRows.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) { + if (ids.length === 0) { + e.preventDefault(); + ids = []; + checkedRows.each(function () { + ids.push($(this).attr("id")); + }); + } else if (checkedRows.length === 0) { + e.preventDefault(); + ids = []; + ids.push($("#selectedPayslip").attr("data-ids")); + ids = JSON.parse($("#selectedPayslip").attr("data-ids")); + } + $.ajax({ + type: "POST", + url: "/payroll/payslip-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); + } + }, + }); + } + }); + } + }); }); // ------------------------------- @@ -390,287 +405,287 @@ $("#deletePayslipBulk").click(function (e) { // ------------------------------- function addingContractIds() { - var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); - var selectedCount = 0; + var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); + var selectedCount = 0; - $(".all-contract-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-contract-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); + } + } + }); - ids = makeEmpListUnique(ids); - selectedCount = ids.length; + ids = makeEmpListUnique(ids); + selectedCount = ids.length; - getCurrentLanguageCode(function (code) { - languageCode = code; - var message = rowMessages[languageCode]; + getCurrentLanguageCode(function (code) { + languageCode = code; + var message = rowMessages[languageCode]; - $("#selectedInstances").attr("data-ids", JSON.stringify(ids)); + $("#selectedInstances").attr("data-ids", JSON.stringify(ids)); - if (selectedCount === 0) { - $("#unselectAllContracts").css("display", "none"); - $("#exportContracts").css("display", "none"); - $("#selectedShow").css("display", "none"); - } else { - $("#unselectAllContracts").css("display", "inline-flex"); - $("#exportContracts").css("display", "inline-flex"); - $("#selectedShow").css("display", "inline-flex"); - $("#selectedShow").text(selectedCount + " - " + message); - } - }); + if (selectedCount === 0) { + $("#unselectAllContracts").css("display", "none"); + $("#exportContracts").css("display", "none"); + $("#selectedShow").css("display", "none"); + } else { + $("#unselectAllContracts").css("display", "inline-flex"); + $("#exportContracts").css("display", "inline-flex"); + $("#selectedShow").css("display", "inline-flex"); + $("#selectedShow").text(selectedCount + " - " + message); + } + }); } function tickContractCheckboxes() { - var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); - uniqueIds = makeEmpListUnique(ids); - toggleHighlight(uniqueIds); - click = $("#selectedInstances").attr("data-clicked"); - if (click === "1") { - $(".all-contract").prop("checked", true); - } + var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); + uniqueIds = makeEmpListUnique(ids); + toggleHighlight(uniqueIds); + click = $("#selectedInstances").attr("data-clicked"); + if (click === "1") { + $(".all-contract").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) { - $("#unselectAllContracts").css("display", "inline-flex"); - $("#exportContracts").css("display", "inline-flex"); - $("#selectedShow").css("display", "inline-flex"); - $("#selectedShow").text(selectedCount + " -" + message); - } else { - $("#unselectAllContracts").css("display", "none"); - $("#exportContracts").css("display", "none"); - $("#selectedShow").css("display", "none"); - } - }); + uniqueIds.forEach(function (id) { + $("#" + id).prop("checked", true); + }); + var selectedCount = uniqueIds.length; + getCurrentLanguageCode(function (code) { + languageCode = code; + var message = rowMessages[languageCode]; + if (selectedCount > 0) { + $("#unselectAllContracts").css("display", "inline-flex"); + $("#exportContracts").css("display", "inline-flex"); + $("#selectedShow").css("display", "inline-flex"); + $("#selectedShow").text(selectedCount + " -" + message); + } else { + $("#unselectAllContracts").css("display", "none"); + $("#exportContracts").css("display", "none"); + $("#selectedShow").css("display", "none"); + } + }); } function selectAllContracts() { - $("#selectedInstances").attr("data-clicked", 1); - var allContractCount = 0; - var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); - if (savedFilters && savedFilters["filterData"] !== null) { - var filter = savedFilters["filterData"]; - $.ajax({ - url: "/payroll/contract-select-filter", - data: { page: "all", filter: JSON.stringify(filter) }, - type: "GET", - dataType: "json", - success: function (response) { - var contractIds = response.contract_ids; + $("#selectedInstances").attr("data-clicked", 1); + var allContractCount = 0; + var savedFilters = JSON.parse(localStorage.getItem("savedFilters")); + if (savedFilters && savedFilters["filterData"] !== null) { + var filter = savedFilters["filterData"]; + $.ajax({ + url: "/payroll/contract-select-filter", + data: { page: "all", filter: JSON.stringify(filter) }, + type: "GET", + dataType: "json", + success: function (response) { + var contractIds = response.contract_ids; - if (Array.isArray(contractIds)) { - // Continue - } else { - console.error("contractIds is not an array:", contractIds); - } + if (Array.isArray(contractIds)) { + // Continue + } else { + console.error("contractIds is not an array:", contractIds); + } - allContractCount = contractIds.length; + allContractCount = contractIds.length; - for (var i = 0; i < contractIds.length; i++) { - var empId = contractIds[i]; - $("#" + empId).prop("checked", true); - } - var previousIds = $("#selectedInstances").attr("data-ids"); - $("#selectedInstances").attr( - "data-ids", - JSON.stringify( - Array.from(new Set([...contractIds, ...JSON.parse(previousIds)])) - ) - ); - console.log( - Array.from(new Set([...contractIds, ...JSON.parse(previousIds)])) - ); + for (var i = 0; i < contractIds.length; i++) { + var empId = contractIds[i]; + $("#" + empId).prop("checked", true); + } + var previousIds = $("#selectedInstances").attr("data-ids"); + $("#selectedInstances").attr( + "data-ids", + JSON.stringify( + Array.from(new Set([...contractIds, ...JSON.parse(previousIds)])) + ) + ); + console.log( + Array.from(new Set([...contractIds, ...JSON.parse(previousIds)])) + ); - count = makeEmpListUnique(contractIds); - tickContractCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } else { - $.ajax({ - url: "/payroll/contract-select", - data: { page: "all" }, - type: "GET", - dataType: "json", - success: function (response) { - var contractIds = response.contract_ids; - if (Array.isArray(contractIds)) { - // Continue - } else { - console.error("contractIds is not an array:", contractIds); - } + count = makeEmpListUnique(contractIds); + tickContractCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } else { + $.ajax({ + url: "/payroll/contract-select", + data: { page: "all" }, + type: "GET", + dataType: "json", + success: function (response) { + var contractIds = response.contract_ids; + if (Array.isArray(contractIds)) { + // Continue + } else { + console.error("contractIds is not an array:", contractIds); + } - allContractCount = contractIds.length; + allContractCount = contractIds.length; - for (var i = 0; i < contractIds.length; i++) { - var empId = contractIds[i]; - $("#" + empId).prop("checked", true); - } - $("#selectedInstances").attr("data-ids", JSON.stringify(contractIds)); + for (var i = 0; i < contractIds.length; i++) { + var empId = contractIds[i]; + $("#" + empId).prop("checked", true); + } + $("#selectedInstances").attr("data-ids", JSON.stringify(contractIds)); - count = makeEmpListUnique(contractIds); - tickContractCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); - } + count = makeEmpListUnique(contractIds); + tickContractCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); + } } function unselectAllContracts() { - $("#selectedInstances").attr("data-clicked", 0); - $.ajax({ - url: "/payroll/contract-select", - data: { page: "all", filter: "{}" }, - type: "GET", - dataType: "json", - success: function (response) { - var contractIds = response.contract_ids; + $("#selectedInstances").attr("data-clicked", 0); + $.ajax({ + url: "/payroll/contract-select", + data: { page: "all", filter: "{}" }, + type: "GET", + dataType: "json", + success: function (response) { + var contractIds = response.contract_ids; - if (Array.isArray(contractIds)) { - // Continue - } else { - console.error("contractIds is not an array:", contractIds); - } + if (Array.isArray(contractIds)) { + // Continue + } else { + console.error("contractIds is not an array:", contractIds); + } - for (var i = 0; i < contractIds.length; i++) { - var contractId = contractIds[i]; - $("#" + contractId).prop("checked", false); - $(".all-contract").prop("checked", false); - } - var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); - uniqueIds = makeEmpListUnique(ids); - toggleHighlight(uniqueIds); - $("#selectedInstances").attr("data-ids", JSON.stringify([])); + for (var i = 0; i < contractIds.length; i++) { + var contractId = contractIds[i]; + $("#" + contractId).prop("checked", false); + $(".all-contract").prop("checked", false); + } + var ids = JSON.parse($("#selectedInstances").attr("data-ids") || "[]"); + uniqueIds = makeEmpListUnique(ids); + toggleHighlight(uniqueIds); + $("#selectedInstances").attr("data-ids", JSON.stringify([])); - count = []; - tickContractCheckboxes(count); - }, - error: function (xhr, status, error) { - console.error("Error:", error); - }, - }); + count = []; + tickContractCheckboxes(count); + }, + error: function (xhr, status, error) { + console.error("Error:", error); + }, + }); } function exportContractRequest() { - var currentDate = new Date().toISOString().slice(0, 10); - var languageCode = null; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = excelMessages[languageCode]; - var textMessage = noRowPayrollMessages[languageCode]; - if (ids.length === 0) { - Swal.fire({ - text: textMessage, - icon: "warning", - confirmButtonText: "Close", - }); - } else { - Swal.fire({ - text: confirmMessage, - icon: "question", - showCancelButton: true, - confirmButtonColor: "#008000", - cancelButtonColor: "#d33", - confirmButtonText: "Confirm", - }).then(function (result) { - if (result.isConfirmed) { - $.ajax({ - type: "GET", - url: "/payroll/contract-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 = "Contract_excel_" + currentDate + ".xlsx"; - document.body.appendChild(link); - link.click(); - }, - error: function (xhr, textStatus, errorThrown) { - console.error("Error downloading file:", errorThrown); - }, - }); - } - }); - } - }); + var currentDate = new Date().toISOString().slice(0, 10); + var languageCode = null; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = excelMessages[languageCode]; + var textMessage = noRowPayrollMessages[languageCode]; + if (ids.length === 0) { + Swal.fire({ + text: textMessage, + icon: "warning", + confirmButtonText: "Close", + }); + } else { + Swal.fire({ + text: confirmMessage, + icon: "question", + showCancelButton: true, + confirmButtonColor: "#008000", + cancelButtonColor: "#d33", + confirmButtonText: "Confirm", + }).then(function (result) { + if (result.isConfirmed) { + $.ajax({ + type: "GET", + url: "/payroll/contract-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 = "Contract_excel_" + currentDate + ".xlsx"; + document.body.appendChild(link); + link.click(); + }, + error: function (xhr, textStatus, errorThrown) { + console.error("Error downloading file:", errorThrown); + }, + }); + } + }); + } + }); } $("#DeleteContractBulk").click(function (e) { - e.preventDefault(); + e.preventDefault(); - var languageCode = null; - getCurrentLanguageCode(function (code) { - languageCode = code; - var confirmMessage = deleteContractMessages[languageCode]; - var textMessage = noRowPayrollMessages[languageCode]; - ids = []; - ids.push($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); - ids = JSON.parse($("#selectedInstances").attr("data-ids")); + var languageCode = null; + getCurrentLanguageCode(function (code) { + languageCode = code; + var confirmMessage = deleteContractMessages[languageCode]; + var textMessage = noRowPayrollMessages[languageCode]; + ids = []; + ids.push($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").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($("#selectedInstances").attr("data-ids")); + ids = JSON.parse($("#selectedInstances").attr("data-ids")); - $.ajax({ - type: "POST", - url: "/payroll/contract-bulk-delete", - data: { - csrfmiddlewaretoken: getCookie("csrftoken"), - ids: JSON.stringify(ids), - }, - success: function (response, textStatus, jqXHR) { - if (jqXHR.status === 200) { - location.reload(); // Reload the current page - } else { - // console.log("Unexpected HTTP status:", jqXHR.status); - } - }, - }); - } - }); - } - }); + $.ajax({ + type: "POST", + url: "/payroll/contract-bulk-delete", + data: { + csrfmiddlewaretoken: getCookie("csrftoken"), + ids: JSON.stringify(ids), + }, + success: function (response, textStatus, jqXHR) { + if (jqXHR.status === 200) { + location.reload(); // Reload the current page + } else { + // console.log("Unexpected HTTP status:", jqXHR.status); + } + }, + }); + } + }); + } + }); }); diff --git a/payroll/static/payroll/dashboard.js b/payroll/static/payroll/dashboard.js index 549bd44b7..b9e02281f 100644 --- a/payroll/static/payroll/dashboard.js +++ b/payroll/static/payroll/dashboard.js @@ -31,14 +31,6 @@ $(document).ready(function () { function employee_chart(dataSet, labels) { $("#employee_canvas_body").html(''); - $.each(dataSet, (index, item) => { - dataSet[index] = $.extend({}, item, { - borderRadius: 20, - barPercentage: 0.8, - categoryPercentage: 0.8, - }); - }); - const employeeChart = document .getElementById("employeeChart") .getContext("2d"); @@ -86,35 +78,6 @@ $(document).ready(function () { }, }, }, - plugins:{ - legend: { - position: 'bottom', - labels: { - usePointStyle: true, - pointStyle: 'circle', - font: { - size: 12 - }, - color: '#374151', - padding: 15 - }, - onClick: (e, legendItem, legend) => { - const index = legendItem.datasetIndex; - const chart = legend.chart; - if (chart.isDatasetVisible(index)) { - chart.hide(index); - legendItem.hidden = true; - } else { - chart.show(index); - legendItem.hidden = false; - } - chart.update(); - } - }, - tooltip: { - enabled: true - } - }, }, }); @@ -246,35 +209,9 @@ $(document).ready(function () { const departmentChart = document.getElementById("departmentChart"); // chart constructor - const departmentPayrollChart = new Chart(departmentChart, { + var departmentPayrollChart = new Chart(departmentChart, { type: "pie", data: departmentChartData, - - options: { - responsive: true, - plugins: { - legend: { - position: "bottom", - labels: { - usePointStyle: true, - pointStyle: "circle", - font: { size: 12 }, - color: "#374151", - padding: 15 - }, - onClick: (e, legendItem, legend) => { - const index = legendItem.index; - const chart = legend.chart; - const meta = chart.getDatasetMeta(0); - meta.data[index].hidden = !meta.data[index].hidden; - chart.update(); - } - }, - tooltip: { - enabled: true - } - } - } }); $("#departmentChart").on("click", function (event) { diff --git a/payroll/templates/cbv/allowance_deduction/allowance/detail_view_actions.html b/payroll/templates/cbv/allowance_deduction/allowance/detail_view_actions.html index 742265e73..7b7f20bbe 100644 --- a/payroll/templates/cbv/allowance_deduction/allowance/detail_view_actions.html +++ b/payroll/templates/cbv/allowance_deduction/allowance/detail_view_actions.html @@ -1,23 +1,43 @@ {% load i18n %} {% if perms.payroll.change_allowance or perms.payroll.delete_allowance %} -
    - -{% endif %} {% if request.GET.deleted %} - + {% endif %} + +{% comment %} {% if request.GET.deleted %} + +{% endif %} +?instance_ids={{ request.GET.instance_ids }} {% endcomment %} +{% if request.GET.deleted %} + {% endif %} diff --git a/payroll/templates/cbv/allowance_deduction/allowance_deduction.html b/payroll/templates/cbv/allowance_deduction/allowance_deduction.html index 59528599d..d6efd9e05 100644 --- a/payroll/templates/cbv/allowance_deduction/allowance_deduction.html +++ b/payroll/templates/cbv/allowance_deduction/allowance_deduction.html @@ -1,37 +1,31 @@ -{% load i18n static%} +{% load i18n %} +{%load static%} {% if active_contracts %} {% if basic_pay <= 0 %} -
    -
    - {% trans "Basic pay not added . Please update in the active contract." - %} -
    -
    - {% else %} -
    - {% if request.GET.deleted %} - - {% endif %} {% include "generic/horilla_list_table.html" %} -
    - {% endif %} - -{% else %} -
    -
    - Page not found. 404. -
    - {% trans "This employee doesn't have an active contract. Please check the employee's contract" %} -
    -
    +
    +
    {% trans "Basic pay not added . Please update in the active contract." %}
    - {% endif %} + {% else %} +
    +{% if request.GET.deleted %} + +{% endif %} + {% include "generic/horilla_list.html" %} +
    + {% endif %} +{% else %} + +
    +
    + Page not found. 404. +
    {% trans "This employee doesn't have an active contract. Please check the employee's contract" %}
    +
    +
    +{% comment %} + +
    +
    {% trans "This employee doesn't have an active contract. Please check the employee's contract" %}
    +
    {% endcomment %} +{% endif %} diff --git a/payroll/templates/cbv/allowance_deduction/deductions/deductions_actions.html b/payroll/templates/cbv/allowance_deduction/deductions/deductions_actions.html index b8367ac89..c46a431a2 100644 --- a/payroll/templates/cbv/allowance_deduction/deductions/deductions_actions.html +++ b/payroll/templates/cbv/allowance_deduction/deductions/deductions_actions.html @@ -1,19 +1,36 @@ {% load i18n %} {% if perms.payroll.change_deduction or perms.payroll.change_deduction %} -
    - -
    -{% endif %} +
    + +
    + {% endif %} diff --git a/payroll/templates/cbv/allowance_deduction/deductions/detail_view_actions.html b/payroll/templates/cbv/allowance_deduction/deductions/detail_view_actions.html index 8ee3ce8c0..783a56ff0 100644 --- a/payroll/templates/cbv/allowance_deduction/deductions/detail_view_actions.html +++ b/payroll/templates/cbv/allowance_deduction/deductions/detail_view_actions.html @@ -1,32 +1,22 @@ {% load i18n %} -{% if perms.payroll.change_allowance or perms.payroll.delete_allowance %} -
    +{% if perms.payroll.change_deduction or perms.payroll.delete_deduction %} + {% endif %} + + {% if request.GET.deleted %} -{% load static i18n %} -{% load generic_template_filters %} -{% comment %}
    + +
    {% if perms.payroll.change_loanaccount or request.user %} - - + {% comment %} + {% endcomment %} {% endif %} {% if perms.payroll.delete_loanaccount %} {% endif %} -
    {% endcomment %} - - - -