From 9ef727225ad7d30724f2b5596ec42aa470026695 Mon Sep 17 00:00:00 2001 From: Horilla Date: Tue, 31 Dec 2024 18:58:12 +0530 Subject: [PATCH] [UPDT] ATTENDANCE: Add HorillaCompanyManager and auto-create AttendanceGeneralSetting for companies --- attendance/apps.py | 18 +++++++++++++++++- attendance/models.py | 1 + .../check_in_check_out_enable_form.html | 9 +++++++++ attendance/views/views.py | 14 +++++++++++--- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/attendance/apps.py b/attendance/apps.py index 24696e962..6aefbdc43 100644 --- a/attendance/apps.py +++ b/attendance/apps.py @@ -32,5 +32,21 @@ class AttendanceConfig(AppConfig): MIDDLEWARE.append(middleware_path) APP_URLS.append("attendance.urls") # Used to remove Dynamically Added Urls - + self.create_enable_disable_check_in() super().ready() + + def create_enable_disable_check_in(self): + """ + Checks if an AttendanceGeneralSetting object exists for each company. + If it doesn't exist, creates one. + """ + from attendance.models import AttendanceGeneralSetting + from base.models import Company + + companies = Company.objects.all() + for company in companies: + if not AttendanceGeneralSetting.objects.filter(company_id=company).exists(): + try: + AttendanceGeneralSetting.objects.create(company_id=company) + except: + pass diff --git a/attendance/models.py b/attendance/models.py index 31a32ea4b..398ebb30e 100644 --- a/attendance/models.py +++ b/attendance/models.py @@ -909,6 +909,7 @@ class AttendanceGeneralSetting(HorillaModel): ), ) company_id = models.ForeignKey(Company, on_delete=models.CASCADE, null=True) + objects = HorillaCompanyManager() if apps.is_installed("leave") and apps.is_installed("payroll"): diff --git a/attendance/templates/attendance/settings/check_in_check_out_enable_form.html b/attendance/templates/attendance/settings/check_in_check_out_enable_form.html index 2bfa20671..b8ea2fbcb 100644 --- a/attendance/templates/attendance/settings/check_in_check_out_enable_form.html +++ b/attendance/templates/attendance/settings/check_in_check_out_enable_form.html @@ -36,6 +36,15 @@ {% if perms.attendance.change_attendancegeneralsetting %} hx-post="{% url 'enable-disable-check-in' %}" hx-target="#attendance-activity-container" hx-trigger="change" hx-include="#companyId{{att_setting.id}}" hx-on-htmx-after-request="setTimeout(() => { reloadMessage(); }, 200);" + {% if request.session.selected_company == 'all' %} + {% if not att_setting.company_id %} + hx-swap="innerHTML" + {% else %} + hx-swap="none" + {% endif %} + {% else %} + hx-swap="innerHTML" + {% endif %} {% endif %} > diff --git a/attendance/views/views.py b/attendance/views/views.py index f0c95a6bb..6f2c0f658 100644 --- a/attendance/views/views.py +++ b/attendance/views/views.py @@ -34,7 +34,12 @@ from django.core.validators import validate_ipv46_address from django.db import transaction from django.db.models import ProtectedError from django.forms import ValidationError -from django.http import HttpResponse, HttpResponseRedirect, JsonResponse +from django.http import ( + HttpResponse, + HttpResponseBadRequest, + HttpResponseRedirect, + JsonResponse, +) from django.shortcuts import redirect, render from django.template.loader import render_to_string from django.urls import reverse @@ -2357,8 +2362,11 @@ def work_records_change_month(request): @login_required @permission_required("attendance.view_workrecords") def work_record_export(request): - month = int(request.GET.get("month", date.today().month)) - year = int(request.GET.get("year", date.today().year)) + try: + month = int(request.GET.get("month") or date.today().month) + year = int(request.GET.get("year") or date.today().year) + except ValueError: + return HttpResponseBadRequest("Invalid month or year parameter.") employees = EmployeeFilter(request.GET).qs records = WorkRecords.objects.filter(date__month=month, date__year=year)