[UPDT] ATTENDANCE: Updated models in attendance app by adding abstract class

This commit is contained in:
Horilla
2024-03-29 12:33:46 +05:30
parent c89cf69ffd
commit dfeb4141e2
4 changed files with 43 additions and 85 deletions

View File

@@ -13,7 +13,7 @@ from .models import (
AttendanceValidationCondition,
GraceTime,
PenaltyAccount,
AttendancerequestComment,
AttendanceRequestComment,
)
# Register your models here.
@@ -24,4 +24,4 @@ admin.site.register(AttendanceLateComeEarlyOut)
admin.site.register(AttendanceValidationCondition)
admin.site.register(PenaltyAccount)
admin.site.register(GraceTime)
admin.site.register(AttendancerequestComment)
admin.site.register(AttendanceRequestComment)

View File

@@ -45,8 +45,8 @@ from attendance.models import (
AttendanceActivity,
AttendanceLateComeEarlyOut,
AttendanceValidationCondition,
AttendancerequestComment,
AttendancerequestFile,
AttendanceRequestComment,
AttendanceRequestFile,
GraceTime,
PenaltyAccount,
strtime_seconds,
@@ -152,6 +152,7 @@ class AttendanceUpdateForm(ModelForm):
"is_validate_request",
"is_validate_request_approved",
"attendance_overtime",
"is_active",
]
model = Attendance
widgets = {
@@ -242,7 +243,7 @@ class AttendanceForm(ModelForm):
model = Attendance
fields = "__all__"
exclude = (
exclude = [
"attendance_overtime_approve",
"attendance_overtime_calculation",
"at_work_second",
@@ -255,7 +256,8 @@ class AttendanceForm(ModelForm):
"is_validate_request",
"is_validate_request_approved",
"attendance_overtime",
)
"is_active",
]
widgets = {
"attendance_clock_in": DateTimeInput(attrs={"type": "time"}),
"attendance_clock_out": DateTimeInput(attrs={"type": "time"}),
@@ -435,6 +437,7 @@ class AttendanceOverTimeForm(ModelForm):
"overtime_second",
"month_sequence",
"hour_pending_second",
"is_active",
]
labels = {
"employee_id": _("Employee"),
@@ -505,6 +508,7 @@ class AttendanceValidationConditionForm(forms.ModelForm):
"overtime_cutoff": _("Maximum Allowed Overtime Per Day"),
}
fields = "__all__"
exclude = ["is_active"]
class AttendanceRequestForm(ModelForm):
@@ -806,12 +810,12 @@ class GraceTimeForm(ModelForm):
"allowed_time": forms.TextInput(attrs={"placeholder": "00:00 minutes"}),
}
exclude = ["objects", "allowed_time_in_secs"]
exclude = ["objects", "allowed_time_in_secs", "is_active"]
class AttendancerequestCommentForm(ModelForm):
class AttendanceRequestCommentForm(ModelForm):
"""
AttendancerequestComment form
AttendanceRequestComment form
"""
class Meta:
@@ -819,47 +823,5 @@ class AttendancerequestCommentForm(ModelForm):
Meta class for additional options
"""
model = AttendancerequestComment
model = AttendanceRequestComment
fields = ("comment",)
class AttendanceCommentForm(ModelForm):
"""
Leave request comment model form
"""
verbose_name = "Add Comment"
class Meta:
model = AttendancerequestComment
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["files"] = MultipleFileField(label="files")
self.fields["files"].required = False
def as_p(self):
"""
Render the form fields as HTML table rows with Bootstrap styling.
"""
context = {"form": self}
table_html = render_to_string("common_form.html", context)
return table_html
def save(self, commit: bool = ...) -> Any:
multiple_files_ids = []
files = None
if self.files.getlist("files"):
files = self.files.getlist("files")
self.instance.attachemnt = files[0]
multiple_files_ids = []
for attachemnt in files:
file_instance = AttendancerequestFile()
file_instance.file = attachemnt
file_instance.save()
multiple_files_ids.append(file_instance.pk)
instance = super().save(commit)
if commit:
instance.files.add(*multiple_files_ids)
return instance, files

View File

@@ -20,6 +20,7 @@ import pandas as pd
from base.models import Company, EmployeeShift, EmployeeShiftDay, WorkType
from base.horilla_company_manager import HorillaCompanyManager
from employee.models import Employee
from horilla.models import HorillaModel
from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog
from leave.models import (
WEEK_DAYS,
@@ -120,7 +121,7 @@ month_mapping = {
}
class AttendanceActivity(models.Model):
class AttendanceActivity(HorillaModel):
"""
AttendanceActivity model
"""
@@ -160,7 +161,7 @@ class AttendanceActivity(models.Model):
ordering = ["-attendance_date", "employee_id__employee_first_name", "clock_in"]
class Attendance(models.Model):
class Attendance(HorillaModel):
"""
Attendance model
"""
@@ -259,7 +260,6 @@ class Attendance(models.Model):
objects = HorillaCompanyManager(
related_company_field="employee_id__employee_work_info__company_id"
)
created_at = models.DateTimeField(auto_now_add=True, null=True)
history = HorillaAuditLog(
related_name="history_set",
bases=[
@@ -582,30 +582,25 @@ class Attendance(models.Model):
)
class AttendancerequestFile(models.Model):
class AttendanceRequestFile(HorillaModel):
file = models.FileField(upload_to="attendance/request_files")
class AttendancerequestComment(models.Model):
class AttendanceRequestComment(HorillaModel):
"""
AttendancerequestComment Model
AttendanceRequestComment Model
"""
request_id = models.ForeignKey(Attendance, on_delete=models.CASCADE)
employee_id = models.ForeignKey(Employee, on_delete=models.CASCADE)
files = models.ManyToManyField(AttendancerequestFile, blank=True)
files = models.ManyToManyField(AttendanceRequestFile, blank=True)
comment = models.TextField(null=True, verbose_name=_("Comment"), max_length=255)
created_at = models.DateTimeField(
auto_now_add=True,
verbose_name=_("Created At"),
null=True,
)
def __str__(self) -> str:
return f"{self.comment}"
class AttendanceOverTime(models.Model):
class AttendanceOverTime(HorillaModel):
"""
AttendanceOverTime model
"""
@@ -759,7 +754,7 @@ class AttendanceOverTime(models.Model):
super().save(*args, **kwargs)
class AttendanceLateComeEarlyOut(models.Model):
class AttendanceLateComeEarlyOut(HorillaModel):
"""
AttendanceLateComeEarlyOut model
"""
@@ -813,7 +808,7 @@ class AttendanceLateComeEarlyOut(models.Model):
{self.attendance_id.employee_id.employee_last_name} - {self.type}"
class AttendanceValidationCondition(models.Model):
class AttendanceValidationCondition(HorillaModel):
"""
AttendanceValidationCondition model
"""
@@ -855,7 +850,7 @@ months = [
]
class PenaltyAccount(models.Model):
class PenaltyAccount(HorillaModel):
"""
LateComeEarlyOutPenaltyAccount
"""
@@ -884,7 +879,6 @@ class PenaltyAccount(models.Model):
minus_leaves = models.FloatField(default=0.0, null=True)
deduct_from_carry_forward = models.BooleanField(default=False)
penalty_amount = models.FloatField(default=0.0, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
def clean(self) -> None:
super().clean()
@@ -966,7 +960,7 @@ def create_initial_stage(sender, instance, created, **kwargs):
available.save()
class GraceTime(models.Model):
class GraceTime(HorillaModel):
"""
Model for saving Grace time
"""
@@ -979,7 +973,6 @@ class GraceTime(models.Model):
)
allowed_time_in_secs = models.IntegerField()
is_default = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
company_id = models.ManyToManyField(Company, blank=True, verbose_name=_("Company"))
objects = HorillaCompanyManager()
@@ -1023,7 +1016,7 @@ class GraceTime(models.Model):
super().save(*args, **kwargs)
class AttendanceGeneralSetting(models.Model):
class AttendanceGeneralSetting(HorillaModel):
"""
AttendanceGeneralSettings
"""

View File

@@ -55,7 +55,7 @@ from attendance.forms import (
AttendanceValidationConditionForm,
AttendanceUpdateForm,
AttendanceExportForm,
AttendancerequestCommentForm,
AttendanceRequestCommentForm,
GraceTimeForm,
LateComeEarlyOutExportForm,
)
@@ -67,8 +67,8 @@ from attendance.models import (
AttendanceOverTime,
AttendanceLateComeEarlyOut,
AttendanceValidationCondition,
AttendancerequestComment,
AttendancerequestFile,
AttendanceRequestComment,
AttendanceRequestFile,
GraceTime,
)
from attendance.filters import (
@@ -1681,6 +1681,9 @@ def update_grace_time(request, grace_id):
GET : return grace time form template
"""
grace_time = GraceTime.objects.get(id=grace_id)
print('_______________________________________________________________________')
print(grace_time.__dict__)
print('_______________________________________________________________________')
form = GraceTimeForm(instance=grace_time)
if request.method == "POST":
form = GraceTimeForm(request.POST, instance=grace_time)
@@ -1760,23 +1763,23 @@ def create_attendancerequest_comment(request, attendance_id):
previous_data = request.GET.urlencode()
attendance = Attendance.objects.filter(id=attendance_id).first()
emp = request.user.employee_get
form = AttendancerequestCommentForm(
form = AttendanceRequestCommentForm(
initial={"employee_id": emp.id, "request_id": attendance_id}
)
if request.method == "POST":
form = AttendancerequestCommentForm(request.POST)
form = AttendanceRequestCommentForm(request.POST)
if form.is_valid():
form.instance.employee_id = emp
form.instance.request_id = attendance
form.save()
comments = AttendancerequestComment.objects.filter(
comments = AttendanceRequestComment.objects.filter(
request_id=attendance_id
).order_by("-created_at")
no_comments = False
if not comments.exists():
no_comments = True
form = AttendancerequestCommentForm(
form = AttendanceRequestCommentForm(
initial={"employee_id": emp.id, "request_id": attendance_id}
)
messages.success(request, _("Comment added successfully!"))
@@ -1869,7 +1872,7 @@ def view_attendancerequest_comment(request, attendance_id):
"""
This method is used to show Attendance request comments
"""
comments = AttendancerequestComment.objects.filter(
comments = AttendanceRequestComment.objects.filter(
request_id=attendance_id
).order_by("-created_at")
no_comments = False
@@ -1879,10 +1882,10 @@ def view_attendancerequest_comment(request, attendance_id):
if request.FILES:
files = request.FILES.getlist("files")
comment_id = request.GET["comment_id"]
comment = AttendancerequestComment.objects.get(id=comment_id)
comment = AttendanceRequestComment.objects.get(id=comment_id)
attachments = []
for file in files:
file_instance = AttendancerequestFile()
file_instance = AttendanceRequestFile()
file_instance.file = file
file_instance.save()
attachments.append(file_instance)
@@ -1901,7 +1904,7 @@ def delete_attendancerequest_comment(request, comment_id):
This method is used to delete Attendance request comments
"""
comment = AttendancerequestComment.objects.get(id=comment_id)
comment = AttendanceRequestComment.objects.get(id=comment_id)
attendance_id = comment.request_id.id
comment.delete()
messages.success(request, _("Comment deleted successfully!"))
@@ -1914,9 +1917,9 @@ def delete_comment_file(request):
Used to delete attachment
"""
ids = request.GET.getlist("ids")
AttendancerequestFile.objects.filter(id__in=ids).delete()
AttendanceRequestFile.objects.filter(id__in=ids).delete()
leave_id = request.GET["leave_id"]
comments = AttendancerequestComment.objects.filter(request_id=leave_id).order_by(
comments = AttendanceRequestComment.objects.filter(request_id=leave_id).order_by(
"-created_at"
)
return render(