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 @@ +
+
+
+ + {{ form.company_id }} {{ form.company_id.errors }} +
+
+
+
+
+
+ + {{ form.company_id }} {{ form.company_id.errors }} +
+
+
{% trans "Condition Value" %}
{% trans "Approval Managers" %}
+
{% trans "Company" %}
{% if perms.base.change_multipleapprovalcondition or perms.base.delete_multipleapprovalcondition or request.user|is_reportingmanager %}
{% trans "Actions" %}
{% endif %} @@ -47,6 +48,9 @@ {{ forloop.counter}}. {{ manager }}
{% endfor %} +
+ {{ condition.company_id }} +
{% if perms.base.change_multipleapprovalcondition or perms.base.delete_multipleapprovalcondition or request.user|is_reportingmanager %}
diff --git a/base/templates/work_type_request/htmx/comment_view.html b/base/templates/work_type_request/htmx/comment_view.html deleted file mode 100644 index 832b7499a..000000000 --- a/base/templates/work_type_request/htmx/comment_view.html +++ /dev/null @@ -1,54 +0,0 @@ -{% load basefilters %} -{% load i18n static %} - -{% if no_comments %} - -
-
-
- {% trans "There is no comments to show." %} - -
-
-
- -{% else %} - - {% for comment in comments %} -
-
-
- {% trans "Comment" %} - - - -
- {{comment.comment}} -
-
-
-
-
-
-
- {% trans "By" %} - - {{ comment.employee_id }} -
-
- {% trans "Date & Time" %} - - {% trans "on" %}  {{ comment.created_at|date:"F j, Y" }}   - {% trans "at" %}   {{ comment.created_at|time:"g:i A" }} - -
- -
-
-
- - - {% endfor %} - -{% endif %} diff --git a/base/views.py b/base/views.py index cb3031465..64e83792c 100644 --- a/base/views.py +++ b/base/views.py @@ -5430,7 +5430,15 @@ def audit_tag_update(request, tag_id): @permission_required("base.view_multipleapprovalcondition") def multiple_approval_condition(request): form = MultipleApproveConditionForm() - conditions = MultipleApprovalCondition.objects.all().order_by("department")[::-1] + selected_company = request.session.get("selected_company") + if selected_company != "all": + conditions = MultipleApprovalCondition.objects.filter( + company_id=selected_company + ).order_by("department")[::-1] + else: + conditions = MultipleApprovalCondition.objects.all().order_by("department")[ + ::-1 + ] create = True return render( request, @@ -5443,7 +5451,15 @@ def multiple_approval_condition(request): @hx_request_required @permission_required("base.view_multipleapprovalcondition") def hx_multiple_approval_condition(request): - conditions = MultipleApprovalCondition.objects.all().order_by("department")[::-1] + selected_company = request.session.get("selected_company") + if selected_company != "all": + conditions = MultipleApprovalCondition.objects.filter( + company_id=selected_company + ).order_by("department")[::-1] + else: + conditions = MultipleApprovalCondition.objects.all().order_by("department")[ + ::-1 + ] return render( request, "multi_approval_condition/condition_table.html", @@ -5532,7 +5548,9 @@ def multiple_level_approval_create(request): condition_value = request.POST.get("condition_value") condition_start_value = request.POST.get("condition_start_value") condition_end_value = request.POST.get("condition_end_value") + company_id = request.POST.get("company_id") condition_approval_managers = request.POST.getlist("multi_approval_manager") + company = Company.objects.get(id=company_id) department = Department.objects.get(id=dept_id) instance = MultipleApprovalCondition() if form.is_valid(): @@ -5541,12 +5559,14 @@ def multiple_level_approval_create(request): instance.condition_field = condition_field instance.condition_operator = condition_operator instance.condition_value = condition_value + instance.company_id = company else: instance.department = department instance.condition_field = condition_field instance.condition_operator = condition_operator instance.condition_start_value = condition_start_value instance.condition_end_value = condition_end_value + instance.company_id = company instance.save() sequence = 0 for emp_id in condition_approval_managers: @@ -5613,7 +5633,16 @@ def multiple_level_approval_edit(request, condition_id): sequence=sequence, employee_id=employee_id, ) - conditions = MultipleApprovalCondition.objects.all().order_by("department")[::-1] + selected_company = request.session.get("selected_company") + if selected_company != "all": + conditions = MultipleApprovalCondition.objects.filter( + company_id=selected_company + ).order_by("department")[::-1] + else: + conditions = MultipleApprovalCondition.objects.all().order_by("department")[ + ::-1 + ] + return render( request, "multi_approval_condition/condition_edit_form.html",