diff --git a/attendance/models.py b/attendance/models.py index 63bc22c87..b35d18ec2 100644 --- a/attendance/models.py +++ b/attendance/models.py @@ -944,7 +944,7 @@ class GraceTime(models.Model): raise ValidationError(_("There is already a default grace time that exists.")) allowed_time = self.allowed_time - if GraceTime.objects.filter(allowed_time=allowed_time).exclude(is_default=True).exists(): + if GraceTime.objects.filter(allowed_time=allowed_time).exclude(is_default=True).exclude(id=self.id).exists(): raise ValidationError(_("There is already a grace time with this allowed time that exists.")) def save(self, *args, **kwargs): diff --git a/base/models.py b/base/models.py index 5fab75de0..b838cd292 100644 --- a/base/models.py +++ b/base/models.py @@ -426,6 +426,14 @@ class EmployeeShift(models.Model): max_length=6, default="200:00", validators=[validate_time_format] ) company_id = models.ManyToManyField(Company, blank=True, verbose_name=_("Company")) + grace_time_id = models.ForeignKey( + 'attendance.GraceTime', + null=True, + blank=True, + related_name="employee_shift", + on_delete=models.PROTECT, + verbose_name=_("Grace Time"), + ) objects = HorillaCompanyManager("employee_shift__company_id") diff --git a/base/views.py b/base/views.py index b1df89b2b..566b9d871 100644 --- a/base/views.py +++ b/base/views.py @@ -20,7 +20,7 @@ from django.contrib import messages from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import Group, User, Permission from attendance.forms import AttendanceValidationConditionForm -from attendance.models import AttendanceValidationCondition +from attendance.models import AttendanceValidationCondition, GraceTime from django.views.decorators.csrf import csrf_exempt from horilla_audit.models import AuditTag from notifications.signals import notify @@ -1509,8 +1509,8 @@ def employee_shift_view(request): """ shifts = EmployeeShift.objects.all() - - return render(request, "base/shift/shift.html", {"shifts": shifts}) + grace_times = GraceTime.objects.all().exclude(is_default=True) + return render(request, "base/shift/shift.html", {"shifts": shifts,'grace_times':grace_times}) @login_required @@ -3346,10 +3346,11 @@ def validation_condition_view(request): This method view attendance validation conditions. """ condition = AttendanceValidationCondition.objects.first() + default_grace_time = GraceTime.objects.filter(is_default = True).first() return render( request, "attendance/break_point/condition.html", - {"condition": condition}, + {"condition": condition,'default_grace_time':default_grace_time}, )