diff --git a/base/admin.py b/base/admin.py index 9ceef5fae..2b3dc2f95 100644 --- a/base/admin.py +++ b/base/admin.py @@ -24,6 +24,7 @@ from base.models import ( Holidays, JobPosition, JobRole, + MultipleApprovalCondition, MultipleApprovalManagers, PenaltyAccounts, RotatingShift, @@ -68,3 +69,4 @@ admin.site.register(DashboardEmployeeCharts) admin.site.register(Holidays) admin.site.register(CompanyLeaves) admin.site.register(PenaltyAccounts) +admin.site.register(MultipleApprovalCondition) diff --git a/base/middleware.py b/base/middleware.py index 083638b32..a8847e976 100644 --- a/base/middleware.py +++ b/base/middleware.py @@ -7,9 +7,41 @@ from django.db.models import Q from django.http import HttpResponse, HttpResponseNotAllowed from django.shortcuts import render +from asset.models import AssetAssignment, AssetRequest +from attendance.models import ( + Attendance, + AttendanceActivity, + AttendanceOverTime, + WorkRecords, +) from base.context_processors import AllCompany from base.horilla_company_manager import HorillaCompanyManager -from base.models import Company +from base.models import Company, ShiftRequest, WorkTypeRequest +from employee.models import ( + DisciplinaryAction, + Employee, + EmployeeBankDetails, + EmployeeWorkInformation, +) +from helpdesk.models import Ticket +from horilla_documents.models import DocumentRequest +from leave.models import ( + AvailableLeave, + CompensatoryLeaveRequest, + LeaveAllocationRequest, + LeaveRequest, + RestrictLeave, +) +from offboarding.models import Offboarding +from payroll.models.models import ( + Contract, + LoanAccount, + Payslip, + Reimbursement, + WorkRecord, +) +from pms.models import EmployeeObjective +from recruitment.models import Candidate, Recruitment class CompanyMiddleware: @@ -76,29 +108,76 @@ class CompanyMiddleware: for model in apps.get_models() if model._meta.app_label in app_labels ] + + company_models = [ + ShiftRequest, + WorkTypeRequest, + Employee, + EmployeeWorkInformation, + EmployeeBankDetails, + DisciplinaryAction, + Recruitment, + Candidate, + LeaveRequest, + LeaveAllocationRequest, + CompensatoryLeaveRequest, + AssetRequest, + AssetAssignment, + AttendanceActivity, + Attendance, + WorkRecords, + Contract, + WorkRecord, + LoanAccount, + Reimbursement, + DocumentRequest, + Ticket, + Offboarding, + Payslip, + AvailableLeave, + RestrictLeave, + AttendanceOverTime, + EmployeeObjective, + ] + # Add company filter to every query if company_id: for ( model ) in app_models: # Replace YourModels with the actual models you have - if getattr(model, "company_id", None): - model.add_to_class( - "company_filter", - Q(company_id=company_id) | Q(company_id__isnull=True), - ) - elif ( - isinstance(model.objects, HorillaCompanyManager) - and model.objects.related_company_field - ): - model.add_to_class( - "company_filter", - Q(**{model.objects.related_company_field: company_id}) - | Q( - **{ - f"{model.objects.related_company_field}__isnull": True - } - ), - ) + + if model in company_models: + if getattr(model, "company_id", None): + model.add_to_class( + "company_filter", Q(company_id=company_id) + ) + elif ( + isinstance(model.objects, HorillaCompanyManager) + and model.objects.related_company_field + ): + model.add_to_class( + "company_filter", + Q(**{model.objects.related_company_field: company_id}), + ) + else: + if getattr(model, "company_id", None): + model.add_to_class( + "company_filter", + Q(company_id=company_id) | Q(company_id__isnull=True), + ) + elif ( + isinstance(model.objects, HorillaCompanyManager) + and model.objects.related_company_field + ): + model.add_to_class( + "company_filter", + Q(**{model.objects.related_company_field: company_id}) + | Q( + **{ + f"{model.objects.related_company_field}__isnull": True + } + ), + ) response = self.get_response(request) return response diff --git a/base/models.py b/base/models.py index 5b63a8ef5..2ee15fb7e 100644 --- a/base/models.py +++ b/base/models.py @@ -1146,6 +1146,7 @@ class HorillaMailTemplate(HorillaModel): on_delete=models.CASCADE, verbose_name=_("Company"), ) + objects = HorillaCompanyManager(related_company_field="company_id") def __str__(self) -> str: return f"{self.title}" @@ -1277,6 +1278,13 @@ class MultipleApprovalCondition(HorillaModel): verbose_name=_("Ending Value"), ) objects = models.Manager() + company_id = models.ForeignKey( + Company, + null=True, + blank=True, + on_delete=models.CASCADE, + verbose_name=_("Company"), + ) def __str__(self) -> str: return f"{self.condition_field} {self.condition_operator}" @@ -1288,6 +1296,7 @@ class MultipleApprovalCondition(HorillaModel): condition_field=self.condition_field, condition_operator=self.condition_operator, condition_value=self.condition_value, + company_id=self.company_id, ).exclude(id=self.pk) if instance: raise ValidationError( diff --git a/base/templates/multi_approval_condition/condition_create_form.html b/base/templates/multi_approval_condition/condition_create_form.html index 88227b0b5..c23c15b06 100644 --- a/base/templates/multi_approval_condition/condition_create_form.html +++ b/base/templates/multi_approval_condition/condition_create_form.html @@ -79,6 +79,19 @@ +