diff --git a/asset/views.py b/asset/views.py index d8e24d278..1b5fb2573 100644 --- a/asset/views.py +++ b/asset/views.py @@ -110,6 +110,11 @@ def asset_creation(request, asset_category_id): Raises: None """ + asset_category = AssetCategory.find(asset_category_id) + if not asset_category: + messages.error(request, _("Asset category not found")) + return HttpResponse(status=204, headers={"HX-Refresh": "true"}) + initial_data = {"asset_category_id": asset_category_id} # Use request.GET to pre-fill the form with dynamic create batch number data if available form = ( @@ -430,7 +435,11 @@ def asset_category_update(request, cat_id): """ previous_data = request.GET.urlencode() - asset_category = AssetCategory.objects.get(id=cat_id) + asset_category = AssetCategory.find(cat_id) + if not asset_category: + messages.error(request, _("Asset category not found")) + return HttpResponse(status=204, headers={"HX-Refresh": "true"}) + form = AssetCategoryForm(instance=asset_category) context = {"form": form, "pg": previous_data} if request.method == "POST": @@ -451,13 +460,21 @@ def delete_asset_category(request, cat_id): This method is used to delete asset category """ previous_data = request.GET.urlencode() + + asset_category = AssetCategory.find(cat_id) + if not asset_category: + messages.error(request, _("Asset category not found")) + return redirect(f"/asset/asset-category-view-search-filter?{previous_data}") + try: - AssetCategory.objects.get(id=cat_id).delete() + asset_category.delete() messages.success(request, _("Asset category deleted.")) - except: + except Exception: messages.error(request, _("Assets are located within this category.")) - if not AssetCategory.objects.filter(): + + if not AssetCategory.objects.exists(): return HttpResponse(status=204, headers={"HX-Refresh": "true"}) + return redirect(f"/asset/asset-category-view-search-filter?{previous_data}") diff --git a/attendance/cbv/attendance_request.py b/attendance/cbv/attendance_request.py index 4451c11ce..036a93197 100644 --- a/attendance/cbv/attendance_request.py +++ b/attendance/cbv/attendance_request.py @@ -401,6 +401,21 @@ class BulkAttendanceRequestFormView(HorillaFormView): self.form.fields["employee_id"].initial = self.request.user.employee_get.id return context + def post(self, request, *args, pk=None, **kwargs): + self.get_form() + form = self.form + form.instance.attendance_clock_in_date = self.request.POST.get("from_date") + form.instance.attendance_date = self.request.POST.get("from_date") + if form.is_valid(): + if form.instance.pk: + message = _("New Attendance request updated") + else: + message = _("New Attendance request created") + instance = form.save(commit=False) + messages.success(self.request, message) + return self.HttpResponse() + return super().post(request, *args, pk=pk, **kwargs) + def form_valid(self, form: BulkAttendanceRequestForm) -> HttpResponse: form.instance.attendance_clock_in_date = self.request.POST.get("from_date") form.instance.attendance_date = self.request.POST.get("from_date") diff --git a/base/views.py b/base/views.py index 5001e0f97..5915d2d90 100644 --- a/base/views.py +++ b/base/views.py @@ -7,7 +7,6 @@ This module is used to map url pattens with django views or methods import csv import json import os -import random import threading import uuid from datetime import datetime, timedelta @@ -26,7 +25,7 @@ from django.contrib.auth.models import Group, Permission, User from django.contrib.auth.views import PasswordResetConfirmView, PasswordResetView from django.core.exceptions import ValidationError from django.core.files.base import ContentFile -from django.core.mail import EmailMessage, EmailMultiAlternatives, send_mail +from django.core.mail import EmailMessage, EmailMultiAlternatives from django.core.management import call_command from django.core.validators import validate_ipv46_address from django.db.models import ProtectedError, Q @@ -1370,7 +1369,16 @@ def object_duplicate(request, obj_id, **kwargs): model = kwargs["model"] form_class = kwargs["form"] template = kwargs["template"] - original_object = model.objects.get(id=obj_id) + try: + original_object = model.objects.get(id=obj_id) + except model.DoesNotExist: + messages.error(request, f"{model._meta.verbose_name} object does not exist.") + if request.headers.get("HX-Request"): + return HttpResponse(status=204, headers={"HX-Refresh": "true"}) + else: + current_url = request.META.get("HTTP_REFERER", "/") + return HttpResponseRedirect(current_url) + form = form_class(instance=original_object) search_words = ( form.get_template_language() if hasattr(form, "get_template_language") else None @@ -6694,7 +6702,7 @@ def action_type_create(request): form.save() form = ActiontypeForm() messages.success(request, _("Action has been created successfully!")) - if dynamic != "None": + if dynamic != None: url = reverse("create-actions") instance = Actiontype.objects.all().order_by("-id").first() mutable_get = request.GET.copy() diff --git a/employee/templates/tabs/asset-tab.html b/employee/templates/tabs/asset-tab.html index 0abd9d562..9a21e734f 100644 --- a/employee/templates/tabs/asset-tab.html +++ b/employee/templates/tabs/asset-tab.html @@ -3,107 +3,84 @@