diff --git a/attendance/forms.py b/attendance/forms.py index 9b8cd597b..368cc9c65 100644 --- a/attendance/forms.py +++ b/attendance/forms.py @@ -50,12 +50,12 @@ from attendance.models import ( strtime_seconds, validate_time_format, ) -from base import thread_local_middleware from base.forms import MultipleFileField from base.methods import reload_queryset from base.models import Company, EmployeeShift from employee.filters import EmployeeFilter from employee.models import Employee +from horilla import horilla_middlewares from horilla.decorators import logger from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget @@ -72,7 +72,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) reload_queryset(self.fields) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) for field_name, field in self.fields.items(): widget = field.widget @@ -991,7 +991,7 @@ class BulkAttendanceRequestForm(ModelForm): ) def __init__(self, *args, **kwargs): - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) employee = request.user.employee_get super().__init__(*args, **kwargs) if employee and hasattr(employee, "employee_work_info"): diff --git a/attendance/methods/group_by.py b/attendance/methods/group_by.py index 29e72495e..c97e9621e 100644 --- a/attendance/methods/group_by.py +++ b/attendance/methods/group_by.py @@ -3,123 +3,3 @@ group_by.py This module is used to make queryset by groups """ - -from datetime import datetime - -from django.core.paginator import Paginator -from django.db import models -from django.db.models.fields.related_descriptors import ForwardManyToOneDescriptor - -from base.thread_local_middleware import _thread_locals - - -def record_queryset_paginator(request, queryset, page_name, records_per_page=10): - """ - This method is used to return the paginator entries - """ - page = request.GET.get(page_name) - queryset = Paginator(queryset, records_per_page) - queryset = queryset.get_page(page) - return queryset - - -def generate_groups(request, groupers, queryset, page_name, group_field, is_fk_field): - """ - groups generating method - """ - groups = [] - if is_fk_field: - for grouper in groupers: - group_queryset = queryset.filter(**{group_field: grouper.id}) - # to avoid zero records groupings - if group_queryset.count(): - group_info = { - "grouper": grouper, - "list": record_queryset_paginator( - request, - group_queryset, - f"dynamic_page_{page_name}{grouper.id}", - ), - "dynamic_name": f"dynamic_page_{page_name}{grouper.id}", - } - groups.append(group_info) - else: - for grouper in groupers: - group_queryset = queryset.filter(**{group_field: grouper}) - # to avoid zero records groupings - if group_queryset.count(): - group = { - "grouper": grouper, - "list": record_queryset_paginator( - request, - group_queryset, - f"dynamic_page_{page_name}{grouper}".replace(" ", "_"), - ), - "dynamic_name": f"dynamic_page_{page_name}{grouper}".replace( - " ", "_" - ), - } - groups.append(group) - return groups - - -def group_by_queryset( - queryset, group_field, page=None, page_name="page", records_per_page=10 -): - """ - This method is used to make group-by and split groups by nested pagination - """ - fields_split = group_field.split("__") - splited = len(fields_split) > 1 - model = queryset.model - is_fk_field = isinstance( - getattr(model, group_field, None), ForwardManyToOneDescriptor - ) - model_copy = model - field_obj = None - - # geting request from the thread locals - request = getattr(_thread_locals, "request", None) - if splited or is_fk_field: - for field in fields_split: - field_obj = model_copy._meta.get_field(field) - model_copy = field_obj.related_model - if model_copy: - groupers = model_copy.objects.all() - groups = generate_groups( - request, - groupers, - queryset, - page_name, - group_field, - is_fk_field=True, - ) - else: - groupers = [ - item - for index, item in enumerate( - queryset.values_list(group_field, flat=True) - ) - if item not in queryset.values_list(group_field, flat=True)[:index] - ] - groups = generate_groups( - request, groupers, queryset, page_name, group_field, is_fk_field=False - ) - - else: - # making unique | not using set(groupers) due to ordering issue - groupers = [ - item - for index, item in enumerate(queryset.values_list(group_field, flat=True)) - if item not in queryset.values_list(group_field, flat=True)[:index] - ] - # getting related queryset - related_model = queryset.model._meta.get_field(group_field).related_model - if related_model: - groupers = related_model.objects.filter(id__in=groupers) - groups = generate_groups( - request, groupers, queryset, page_name, group_field, is_fk_field=False - ) - - groups = Paginator(groups, records_per_page) - return groups.get_page(page) diff --git a/attendance/templatetags/attendancefilters.py b/attendance/templatetags/attendancefilters.py index b61bfb299..809ca26f9 100644 --- a/attendance/templatetags/attendancefilters.py +++ b/attendance/templatetags/attendancefilters.py @@ -17,7 +17,7 @@ from django.template.defaultfilters import register from attendance.models import AttendanceValidationCondition from attendance.views.views import strtime_seconds from base.models import EmployeeShiftSchedule -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals register = template.Library() diff --git a/attendance/views/clock_in_out.py b/attendance/views/clock_in_out.py index b3c1bc4bb..10230e567 100644 --- a/attendance/views/clock_in_out.py +++ b/attendance/views/clock_in_out.py @@ -27,8 +27,8 @@ from attendance.views.views import ( ) from base.context_processors import timerunner_enabled from base.models import EmployeeShiftDay -from base.thread_local_middleware import _thread_locals from horilla.decorators import hx_request_required, login_required +from horilla.horilla_middlewares import _thread_locals def late_come_create(attendance): diff --git a/base/backends.py b/base/backends.py index 761c73719..fd1b7d7dd 100644 --- a/base/backends.py +++ b/base/backends.py @@ -9,8 +9,8 @@ import importlib from django.core.mail.backends.smtp import EmailBackend from base.models import DynamicEmailConfiguration, EmailLog -from base.thread_local_middleware import _thread_locals from horilla import settings +from horilla.horilla_middlewares import _thread_locals class DefaultHorillaMailBackend(EmailBackend): diff --git a/base/forms.py b/base/forms.py index 5d8ebd960..51bb91066 100644 --- a/base/forms.py +++ b/base/forms.py @@ -28,7 +28,6 @@ from django.utils.http import urlsafe_base64_encode from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as _trans -from base import thread_local_middleware from base.methods import reload_queryset from base.models import ( Announcement, @@ -59,10 +58,11 @@ from base.models import ( WorkTypeRequest, WorkTypeRequestComment, ) -from base.thread_local_middleware import _thread_locals from employee.filters import EmployeeFilter from employee.forms import MultipleFileField from employee.models import Employee, EmployeeTag +from horilla import horilla_middlewares +from horilla.horilla_middlewares import _thread_locals from horilla_audit.models import AuditTag from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget @@ -178,7 +178,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) reload_queryset(self.fields) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) for field_name, field in self.fields.items(): widget = field.widget if isinstance(widget, (forms.DateInput)): diff --git a/base/horilla_company_manager.py b/base/horilla_company_manager.py index 7f6d12f36..adcc95e54 100644 --- a/base/horilla_company_manager.py +++ b/base/horilla_company_manager.py @@ -8,7 +8,7 @@ from typing import Coroutine, Sequence from django.db import models from django.db.models.query import QuerySet -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals from horilla.signals import post_bulk_update, pre_bulk_update django_filter_update = QuerySet.update diff --git a/base/methods.py b/base/methods.py index 3e7a8a340..6491b58d7 100644 --- a/base/methods.py +++ b/base/methods.py @@ -698,7 +698,7 @@ def filter_conditional_leave_request(request): def get_pagination(): - from base.thread_local_middleware import _thread_locals + from horilla.horilla_middlewares import _thread_locals request = getattr(_thread_locals, "request", None) user = request.user diff --git a/base/middleware.py b/base/middleware.py index 6bd7cddb7..083638b32 100644 --- a/base/middleware.py +++ b/base/middleware.py @@ -102,14 +102,3 @@ class CompanyMiddleware: response = self.get_response(request) return response - - -class MethodNotAllowedMiddleware: - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - response = self.get_response(request) - if isinstance(response, HttpResponseNotAllowed): - return render(request, "405.html") - return response diff --git a/base/thread_local_middleware.py b/base/thread_local_middleware.py deleted file mode 100644 index b81e910b8..000000000 --- a/base/thread_local_middleware.py +++ /dev/null @@ -1,17 +0,0 @@ -import threading - -_thread_locals = threading.local() - - -class ThreadLocalMiddleware: - """ - ThreadLocalMiddleWare - """ - - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - _thread_locals.request = request - response = self.get_response(request) - return response diff --git a/employee/forms.py b/employee/forms.py index fc0fdcd95..5654cafcb 100644 --- a/employee/forms.py +++ b/employee/forms.py @@ -33,7 +33,6 @@ from django.template.loader import render_to_string from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as trans -from base import thread_local_middleware from base.methods import reload_queryset from employee.models import ( Actiontype, @@ -47,6 +46,7 @@ from employee.models import ( Policy, PolicyMultipleFile, ) +from horilla import horilla_middlewares from horilla.decorators import logger from horilla_audit.models import AccountBlockUnblock @@ -58,7 +58,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) reload_queryset(self.fields) for _, field in self.fields.items(): widget = field.widget diff --git a/employee/models.py b/employee/models.py index 381bbbe38..eac4f0889 100644 --- a/employee/models.py +++ b/employee/models.py @@ -17,7 +17,6 @@ from django.dispatch import receiver from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as trans -from base import thread_local_middleware from base.horilla_company_manager import HorillaCompanyManager from base.models import ( Company, @@ -30,6 +29,7 @@ from base.models import ( validate_time_format, ) from employee.methods.duration_methods import format_time, strtime_seconds +from horilla import horilla_middlewares from horilla.models import HorillaModel from horilla_audit.methods import get_diff from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog @@ -351,7 +351,7 @@ class Employee(models.Model): """ from attendance.models import Attendance - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if not getattr(request, "working_employees", None): today = datetime.now().date() yesterday = today - timedelta(days=1) @@ -414,7 +414,7 @@ class Employee(models.Model): # call the parent class's save method to save the object prev_employee = Employee.objects.filter(id=self.id).first() super().save(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if request and not self.is_active and self.get_archive_condition() is not False: self.is_active = True super().save(*args, **kwargs) diff --git a/horilla/filters.py b/horilla/filters.py index 65feee164..97cd8e3c2 100755 --- a/horilla/filters.py +++ b/horilla/filters.py @@ -11,7 +11,7 @@ from django.db import models from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS from base.methods import reload_queryset -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals from horilla_views.templatetags.generic_template_filters import getattribute FILTER_FOR_DBFIELD_DEFAULTS[models.ForeignKey][ diff --git a/horilla/horilla_middlewares.py b/horilla/horilla_middlewares.py index 4fe25c8c5..e26779c1b 100644 --- a/horilla/horilla_middlewares.py +++ b/horilla/horilla_middlewares.py @@ -4,8 +4,39 @@ horilla_middlewares.py This module is used to register horilla's middlewares without affecting the horilla/settings.py """ +import threading + +from django.http import HttpResponseNotAllowed +from django.shortcuts import render + from horilla.settings import MIDDLEWARE MIDDLEWARE.append("base.middleware.CompanyMiddleware") -MIDDLEWARE.append("base.thread_local_middleware.ThreadLocalMiddleware") -MIDDLEWARE.append("base.middleware.MethodNotAllowedMiddleware") +MIDDLEWARE.append("horilla.horilla_middlewares.MethodNotAllowedMiddleware") +MIDDLEWARE.append("horilla.horilla_middlewares.ThreadLocalMiddleware") +_thread_locals = threading.local() + + +class ThreadLocalMiddleware: + """ + ThreadLocalMiddleWare + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + _thread_locals.request = request + response = self.get_response(request) + return response + + +class MethodNotAllowedMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + response = self.get_response(request) + if isinstance(response, HttpResponseNotAllowed): + return render(request, "405.html") + return response diff --git a/horilla/models.py b/horilla/models.py index f64ccc4e7..0c4790d77 100644 --- a/horilla/models.py +++ b/horilla/models.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import User from django.db import models from django.utils.translation import gettext as _ -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals class HorillaModel(models.Model): diff --git a/horilla_automations/signals.py b/horilla_automations/signals.py index 418d141a8..7412c3c06 100644 --- a/horilla_automations/signals.py +++ b/horilla_automations/signals.py @@ -14,7 +14,7 @@ from django.db.models.query import QuerySet from django.db.models.signals import post_delete, post_save, pre_save from django.dispatch import receiver -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals from horilla.signals import post_bulk_update, pre_bulk_update diff --git a/horilla_views/cbv_methods.py b/horilla_views/cbv_methods.py index d96d471d1..d16fd771b 100644 --- a/horilla_views/cbv_methods.py +++ b/horilla_views/cbv_methods.py @@ -21,8 +21,8 @@ from django.utils.functional import lazy from django.utils.html import format_html from django.utils.safestring import SafeString -from base.thread_local_middleware import _thread_locals from horilla import settings +from horilla.horilla_middlewares import _thread_locals from horilla_views.templatetags.generic_template_filters import getattribute diff --git a/horilla_views/forms.py b/horilla_views/forms.py index 1fbd96c26..a0b44cfdc 100644 --- a/horilla_views/forms.py +++ b/horilla_views/forms.py @@ -6,7 +6,7 @@ from django import forms from django.template.loader import render_to_string from django.utils.safestring import SafeText -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals class ToggleColumnForm(forms.Form): diff --git a/horilla_views/generic/cbv/views.py b/horilla_views/generic/cbv/views.py index 55c1ac8b9..b1a058262 100644 --- a/horilla_views/generic/cbv/views.py +++ b/horilla_views/generic/cbv/views.py @@ -13,10 +13,10 @@ from django.shortcuts import render from django.urls import resolve, reverse from django.views.generic import DetailView, FormView, ListView, TemplateView -from attendance.methods.group_by import group_by_queryset from base.methods import closest_numbers, get_key_instances -from base.thread_local_middleware import _thread_locals from horilla.filters import FilterSet +from horilla.group_by import group_by_queryset +from horilla.horilla_middlewares import _thread_locals from horilla_views import models from horilla_views.cbv_methods import ( get_short_uuid, diff --git a/horilla_views/models.py b/horilla_views/models.py index 67eca09ce..683c93835 100644 --- a/horilla_views/models.py +++ b/horilla_views/models.py @@ -3,7 +3,7 @@ import json from django.contrib.auth.models import User from django.db import models -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals from horilla.models import HorillaModel # Create your models here. diff --git a/horilla_views/templatetags/generic_template_filters.py b/horilla_views/templatetags/generic_template_filters.py index 78fbd6342..b1a60ad8f 100644 --- a/horilla_views/templatetags/generic_template_filters.py +++ b/horilla_views/templatetags/generic_template_filters.py @@ -13,8 +13,8 @@ from django.conf import settings from django.contrib.auth.context_processors import PermWrapper from django.template.defaultfilters import register -from base.thread_local_middleware import _thread_locals from horilla.config import import_method +from horilla.horilla_middlewares import _thread_locals register = template.Library() diff --git a/horilla_widgets/widgets/select_widgets.py b/horilla_widgets/widgets/select_widgets.py index 491806456..b5f9e7db1 100644 --- a/horilla_widgets/widgets/select_widgets.py +++ b/horilla_widgets/widgets/select_widgets.py @@ -8,7 +8,7 @@ import datetime from django import forms -from base import thread_local_middleware +from horilla import horilla_middlewares ALL_INSTANCES = {} @@ -56,7 +56,7 @@ class HorillaMultiSelectWidget(forms.Widget): ("id_" + name) if self.attrs.get("id") is None else self.attrs.get("id") ) context[self.filter_instance_contex_name] = self.filter_class - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) ALL_INSTANCES[str(request.user.id)] = self return context diff --git a/leave/filters.py b/leave/filters.py index adcd4ba5f..c6ce432c5 100644 --- a/leave/filters.py +++ b/leave/filters.py @@ -416,7 +416,7 @@ class UserLeaveRequestFilter(FilterSet): def __init__(self, data=None, queryset=None, *, request=None, prefix=None): super().__init__(data=data, queryset=queryset, request=request, prefix=prefix) - from base.thread_local_middleware import _thread_locals + from horilla.horilla_middlewares import _thread_locals request = getattr(_thread_locals, "request", None) leave_requests = request.user.employee_get.leaverequest_set.all() diff --git a/leave/forms.py b/leave/forms.py index 9c1b2faed..d378761c6 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -16,12 +16,12 @@ from django.forms.widgets import TextInput from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ -from base import thread_local_middleware from base.methods import filtersubordinatesemployeemodel, reload_queryset from base.models import Department from employee.filters import EmployeeFilter from employee.forms import MultipleFileField from employee.models import Employee +from horilla import horilla_middlewares from horilla_widgets.forms import HorillaForm, HorillaModelForm from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget @@ -66,7 +66,7 @@ class ModelForm(forms.ModelForm): based on the current request, particularly for 'employee_id' and 'company_id' fields. """ super().__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) reload_queryset(self.fields) for field_name, field in self.fields.items(): widget = field.widget @@ -115,7 +115,7 @@ class ModelForm(forms.ModelForm): class ConditionForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) reload_queryset(self.fields) for field_name, field in self.fields.items(): widget = field.widget @@ -1287,7 +1287,7 @@ class CompensatoryLeaveForm(ModelForm): super(CompensatoryLeaveForm, self).__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) instance_id = None if self.instance: instance_id = self.instance.id diff --git a/leave/models.py b/leave/models.py index b98b2df4f..300896986 100644 --- a/leave/models.py +++ b/leave/models.py @@ -15,7 +15,6 @@ from django.db.models import Q from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from base import thread_local_middleware from base.horilla_company_manager import HorillaCompanyManager from base.models import ( Company, @@ -25,6 +24,7 @@ from base.models import ( clear_messages, ) from employee.models import Employee, EmployeeWorkInformation +from horilla import horilla_middlewares from horilla.models import HorillaModel from horilla_audit.methods import get_diff from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog @@ -673,7 +673,7 @@ class LeaveRequest(HorillaModel): emp_dep = self.employee_id.employee_work_info.department_id emp_job = self.employee_id.employee_work_info.job_position_id - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if not request.user.is_superuser: if self.start_date < date.today(): raise ValidationError(_("Requests cannot be made for past dates.")) @@ -770,7 +770,7 @@ class LeaveRequest(HorillaModel): return result def is_approved(self): - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if request: employee = Employee.objects.filter(employee_user_id=request.user).first() condition_approval = LeaveRequestConditionApproval.objects.filter( @@ -782,7 +782,7 @@ class LeaveRequest(HorillaModel): return True def delete(self, *args, **kwargs): - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if self.status == "requested": """ diff --git a/offboarding/forms.py b/offboarding/forms.py index d48f357f9..29df141ea 100644 --- a/offboarding/forms.py +++ b/offboarding/forms.py @@ -11,9 +11,9 @@ from django import forms from django.contrib import messages from django.template.loader import render_to_string -from base import thread_local_middleware from base.forms import ModelForm from employee.forms import MultipleFileField +from horilla import horilla_middlewares from notifications.signals import notify from offboarding.models import ( EmployeeTask, @@ -264,7 +264,7 @@ class ResignationLetterForm(ModelForm): self.instance.employee_id.get_full_name() + " Resignation Letter" ) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if request and not request.user.has_perm("offboarding.add_offboardingemployee"): exclude = exclude + [ @@ -277,7 +277,7 @@ class ResignationLetterForm(ModelForm): del self.fields[field] def save(self, commit: bool = ...) -> Any: - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) instance = self.instance if ( not request.user.has_perm("offboarding.add_offboardingemployee") diff --git a/offboarding/models.py b/offboarding/models.py index 109328216..c6621d3a4 100644 --- a/offboarding/models.py +++ b/offboarding/models.py @@ -7,11 +7,11 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ -from base import thread_local_middleware from base.horilla_company_manager import HorillaCompanyManager from base.models import Company -from base.thread_local_middleware import _thread_locals from employee.models import Employee +from horilla import horilla_middlewares +from horilla.horilla_middlewares import _thread_locals from horilla.models import HorillaModel from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from notifications.signals import notify @@ -323,7 +323,7 @@ class OffboardingNote(HorillaModel): ordering = ["-created_at"] def save(self, *args, **kwargs): - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if request: updated_by = request.user.employee_get self.note_by = updated_by diff --git a/onboarding/forms.py b/onboarding/forms.py index ed3c358eb..c8ac07939 100644 --- a/onboarding/forms.py +++ b/onboarding/forms.py @@ -32,10 +32,10 @@ from django.forms import DateInput, ValidationError from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ -from base import thread_local_middleware from base.methods import reload_queryset from employee.filters import EmployeeFilter from employee.models import Employee, EmployeeBankDetails +from horilla import horilla_middlewares from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget from onboarding.models import CandidateTask, OnboardingStage, OnboardingTask @@ -49,7 +49,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) reload_queryset(self.fields) for _, field in self.fields.items(): widget = field.widget diff --git a/payroll/forms/component_forms.py b/payroll/forms/component_forms.py index 524568ed3..746fc4d23 100644 --- a/payroll/forms/component_forms.py +++ b/payroll/forms/component_forms.py @@ -12,11 +12,11 @@ from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ import payroll.models.models -from base import thread_local_middleware from base.forms import Form, ModelForm from base.methods import reload_queryset from employee.filters import EmployeeFilter from employee.models import BonusPoint, Employee +from horilla import horilla_middlewares from horilla.decorators import logger from horilla_widgets.forms import HorillaForm from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField @@ -572,7 +572,7 @@ class ReimbursementForm(ModelForm): if not self.instance.pk: self.initial["allowance_on"] = str(datetime.date.today()) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if request: employee = ( request.user.employee_get @@ -656,7 +656,7 @@ class ReimbursementForm(ModelForm): def clean(self): cleaned_data = super().clean() - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if self.instance.pk: employee_id = self.instance.employee_id type = self.instance.type diff --git a/payroll/forms/forms.py b/payroll/forms/forms.py index d41a2824b..32b033b6f 100644 --- a/payroll/forms/forms.py +++ b/payroll/forms/forms.py @@ -10,11 +10,11 @@ from django.forms import widgets from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as trans -from base import thread_local_middleware from base.forms import Form from base.methods import reload_queryset from employee.forms import MultipleFileField from employee.models import Employee +from horilla import horilla_middlewares from payroll.context_processors import get_active_employees from payroll.models.models import ( Contract, @@ -34,7 +34,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) reload_queryset(self.fields) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) for _, field in self.fields.items(): widget = field.widget diff --git a/payroll/forms/tax_forms.py b/payroll/forms/tax_forms.py index a07220081..e5c9acfa2 100644 --- a/payroll/forms/tax_forms.py +++ b/payroll/forms/tax_forms.py @@ -15,8 +15,8 @@ from datetime import date from django import forms from django.utils.translation import gettext_lazy as _ -from base import thread_local_middleware from base.methods import reload_queryset +from horilla import horilla_middlewares from payroll.models.models import FilingStatus from payroll.models.tax_models import TaxBracket @@ -26,7 +26,7 @@ class ModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) reload_queryset(self.fields) for field_name, field in self.fields.items(): input_widget = field.widget diff --git a/payroll/models/models.py b/payroll/models/models.py index a774e5b0a..cd409f29a 100644 --- a/payroll/models/models.py +++ b/payroll/models/models.py @@ -18,7 +18,6 @@ from django.utils.translation import gettext_lazy as _ from asset.models import Asset from attendance.models import Attendance, strtime_seconds, validate_time_format -from base import thread_local_middleware from base.horilla_company_manager import HorillaCompanyManager from base.models import ( Company, @@ -29,6 +28,7 @@ from base.models import ( WorkType, ) from employee.models import BonusPoint, Employee, EmployeeWorkInformation +from horilla import horilla_middlewares from horilla.models import HorillaModel from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog from leave.models import LeaveRequest, LeaveType @@ -1625,7 +1625,7 @@ class Reimbursement(HorillaModel): ordering = ["-id"] def save(self, *args, **kwargs) -> None: - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) amount_for_leave = ( EncashmentGeneralSettings.objects.first().leave_amount if EncashmentGeneralSettings.objects.first() @@ -1665,7 +1665,7 @@ class Reimbursement(HorillaModel): bonus_points.save() else: request = getattr( - thread_local_middleware._thread_locals, "request", None + horilla_middlewares._thread_locals, "request", None ) if request: messages.info( @@ -1691,7 +1691,7 @@ class Reimbursement(HorillaModel): assigned_leave.save() else: request = getattr( - thread_local_middleware._thread_locals, "request", None + horilla_middlewares._thread_locals, "request", None ) if request: messages.info( @@ -1734,7 +1734,7 @@ class Reimbursement(HorillaModel): self.allowance_id.delete() def delete(self, *args, **kwargs): - request = getattr(thread_local_middleware._thread_locals, "request", None) + request = getattr(horilla_middlewares._thread_locals, "request", None) if self.status == "approved": message = messages.info( request, diff --git a/recruitment/pipeline_grouper.py b/recruitment/pipeline_grouper.py index 0eaae7f10..8d17ff581 100644 --- a/recruitment/pipeline_grouper.py +++ b/recruitment/pipeline_grouper.py @@ -10,7 +10,7 @@ from django.core.paginator import Paginator from django.db import models from django.db.models.fields.related_descriptors import ForwardManyToOneDescriptor -from base.thread_local_middleware import _thread_locals +from horilla.horilla_middlewares import _thread_locals def record_queryset_paginator(request, queryset, page_name, records_per_page=10):