[FIX]attendance view fixes
This commit is contained in:
379
attendance/forms.py
Normal file → Executable file
379
attendance/forms.py
Normal file → Executable file
@@ -1,34 +1,87 @@
|
||||
"""
|
||||
forms.py
|
||||
|
||||
This module contains the form classes used in the application.
|
||||
|
||||
Each form represents a specific functionality or data input in the
|
||||
application. They are responsible for validating
|
||||
and processing user input data.
|
||||
|
||||
Classes:
|
||||
- YourForm: Represents a form for handling specific data input.
|
||||
|
||||
Usage:
|
||||
from django import forms
|
||||
|
||||
class YourForm(forms.Form):
|
||||
field_name = forms.CharField()
|
||||
|
||||
def clean_field_name(self):
|
||||
# Custom validation logic goes here
|
||||
pass
|
||||
"""
|
||||
import uuid
|
||||
from calendar import month_name
|
||||
from django import forms
|
||||
from .models import Attendance, AttendanceOverTime, AttendanceActivity,AttendanceLateComeEarlyOut,AttendanceValidationCondition
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
from django.forms import DateTimeInput
|
||||
from employee.models import Employee
|
||||
from calendar import month_name
|
||||
import uuid
|
||||
from attendance.models import (
|
||||
Attendance,
|
||||
AttendanceOverTime,
|
||||
AttendanceActivity,
|
||||
AttendanceLateComeEarlyOut,
|
||||
AttendanceValidationCondition,
|
||||
)
|
||||
|
||||
|
||||
class ModelForm(forms.ModelForm):
|
||||
"""
|
||||
Overriding django default model form to apply some styles
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for field_name, field in self.fields.items():
|
||||
widget = field.widget
|
||||
if isinstance(widget, (forms.NumberInput, forms.EmailInput,forms.TextInput)):
|
||||
label=_(field.label.title())
|
||||
field.widget.attrs.update({'class': 'oh-input w-100','placeholder':label})
|
||||
elif isinstance(widget,(forms.Select,)):
|
||||
label = ''
|
||||
if isinstance(
|
||||
widget, (forms.NumberInput, forms.EmailInput, forms.TextInput)
|
||||
):
|
||||
label = _(field.label.title())
|
||||
field.widget.attrs.update(
|
||||
{"class": "oh-input w-100", "placeholder": label}
|
||||
)
|
||||
elif isinstance(widget, (forms.Select,)):
|
||||
label = ""
|
||||
if field.label is not None:
|
||||
label = _(field.label)
|
||||
field.empty_label = _("---Choose {label}---").format(label=label)
|
||||
self.fields[field_name].widget.attrs.update({'class':'oh-select oh-select-2 w-100','id': uuid.uuid4(),'style':'height:50px;border-radius:0;'})
|
||||
elif isinstance(widget,(forms.Textarea)):
|
||||
self.fields[field_name].widget.attrs.update(
|
||||
{
|
||||
"class": "oh-select oh-select-2 w-100",
|
||||
"id": uuid.uuid4(),
|
||||
"style": "height:50px;border-radius:0;",
|
||||
}
|
||||
)
|
||||
elif isinstance(widget, (forms.Textarea)):
|
||||
label = _(field.label.title())
|
||||
field.widget.attrs.update({'class': 'oh-input w-100','placeholder':field.label,'rows':2,'cols':40})
|
||||
elif isinstance(widget, (forms.CheckboxInput,forms.CheckboxSelectMultiple,)):
|
||||
field.widget.attrs.update({'class': 'oh-switch__checkbox'})
|
||||
|
||||
|
||||
field.widget.attrs.update(
|
||||
{
|
||||
"class": "oh-input w-100",
|
||||
"placeholder": field.label,
|
||||
"rows": 2,
|
||||
"cols": 40,
|
||||
}
|
||||
)
|
||||
elif isinstance(
|
||||
widget,
|
||||
(
|
||||
forms.CheckboxInput,
|
||||
forms.CheckboxSelectMultiple,
|
||||
),
|
||||
):
|
||||
field.widget.attrs.update({"class": "oh-switch__checkbox"})
|
||||
|
||||
|
||||
class AttendanceUpdateForm(ModelForm):
|
||||
@@ -36,79 +89,112 @@ class AttendanceUpdateForm(ModelForm):
|
||||
This model form is used to direct save the validated query dict to attendance model
|
||||
from AttendanceForm. This form can be used to update existing attendance.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
fields='__all__'
|
||||
exclude = ['overtime_second','at_work_second','attendance_day','approved_overtime_second']
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
fields = "__all__"
|
||||
exclude = [
|
||||
"overtime_second",
|
||||
"at_work_second",
|
||||
"attendance_day",
|
||||
"approved_overtime_second",
|
||||
]
|
||||
model = Attendance
|
||||
widgets = {
|
||||
'attendance_clock_in': DateTimeInput(attrs={'type': 'time'}),
|
||||
'attendance_clock_out': DateTimeInput(attrs={'type': 'time'}),
|
||||
'attendance_clock_out_date':DateTimeInput(attrs={'type':'date'}),
|
||||
'attendance_date':DateTimeInput(attrs={'type':'date'}),
|
||||
'attendance_clock_in_date':DateTimeInput(attrs={'type':'date'}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"attendance_clock_in": DateTimeInput(attrs={"type": "time"}),
|
||||
"attendance_clock_out": DateTimeInput(attrs={"type": "time"}),
|
||||
"attendance_clock_out_date": DateTimeInput(attrs={"type": "date"}),
|
||||
"attendance_date": DateTimeInput(attrs={"type": "date"}),
|
||||
"attendance_clock_in_date": DateTimeInput(attrs={"type": "date"}),
|
||||
}
|
||||
|
||||
if instance := kwargs.get('instance'):
|
||||
'''
|
||||
django forms not showing value inside the date, time html element.
|
||||
so here overriding default forms instance method to set initial value
|
||||
'''
|
||||
initial={
|
||||
'attendance_date':instance.attendance_date.strftime('%Y-%m-%d'),
|
||||
'attendance_clock_in':instance.attendance_clock_in.strftime('%H:%M'),
|
||||
'attendance_clock_in_date':instance.attendance_clock_in_date.strftime('%Y-%m-%d'),
|
||||
def __init__(self, *args, **kwargs):
|
||||
if instance := kwargs.get("instance"):
|
||||
# django forms not showing value inside the date, time html element.
|
||||
# so here overriding default forms instance method to set initial value
|
||||
initial = {
|
||||
"attendance_date": instance.attendance_date.strftime("%Y-%m-%d"),
|
||||
"attendance_clock_in": instance.attendance_clock_in.strftime("%H:%M"),
|
||||
"attendance_clock_in_date": instance.attendance_clock_in_date.strftime(
|
||||
"%Y-%m-%d"
|
||||
),
|
||||
}
|
||||
if instance.attendance_clock_out_date is not None:
|
||||
initial['attendance_clock_out'] = instance.attendance_clock_out.strftime('%H:%M')
|
||||
initial['attendance_clock_out_date'] = instance.attendance_clock_out_date.strftime('%Y-%m-%d')
|
||||
kwargs['initial']=initial
|
||||
super(AttendanceUpdateForm, self).__init__(*args, **kwargs)
|
||||
|
||||
initial[
|
||||
"attendance_clock_out"
|
||||
] = instance.attendance_clock_out.strftime("%H:%M")
|
||||
initial[
|
||||
"attendance_clock_out_date"
|
||||
] = instance.attendance_clock_out_date.strftime("%Y-%m-%d")
|
||||
kwargs["initial"] = initial
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class AttendanceForm(ModelForm):
|
||||
employee_id = forms.ModelMultipleChoiceField(queryset=Employee.objects.filter(employee_work_info__isnull=False),)
|
||||
class Meta:
|
||||
model=Attendance
|
||||
fields = '__all__'
|
||||
exclude = ('attendance_overtime_approve','attendance_overtime_calculation','at_work_second','overtime_second','attendance_day','approved_overtime_second')
|
||||
widgets = {
|
||||
'attendance_clock_in': DateTimeInput(attrs={'type': 'time'}),
|
||||
'attendance_clock_out': DateTimeInput(attrs={'type': 'time'}),
|
||||
'attendance_clock_out_date':DateTimeInput(attrs={'type':'date'}),
|
||||
'attendance_date':DateTimeInput(attrs={'type':'date'}),
|
||||
'attendance_clock_in_date':DateTimeInput(attrs={'type':'date'}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""
|
||||
Model form for Attendance model
|
||||
"""
|
||||
|
||||
if instance := kwargs.get('instance'):
|
||||
'''
|
||||
django forms not showing value inside the date, time html element.
|
||||
so here overriding default forms instance method to set initial value
|
||||
'''
|
||||
initial={
|
||||
'attendance_date':instance.attendance_date.strftime('%Y-%m-%d'),
|
||||
'attendance_clock_in':instance.attendance_clock_in.strftime('%H:%M'),
|
||||
'attendance_clock_in_date':instance.attendance_clock_in_date.strftime('%Y-%m-%d'),
|
||||
employee_id = forms.ModelMultipleChoiceField(
|
||||
queryset=Employee.objects.filter(employee_work_info__isnull=False),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
model = Attendance
|
||||
fields = "__all__"
|
||||
exclude = (
|
||||
"attendance_overtime_approve",
|
||||
"attendance_overtime_calculation",
|
||||
"at_work_second",
|
||||
"overtime_second",
|
||||
"attendance_day",
|
||||
"approved_overtime_second",
|
||||
)
|
||||
widgets = {
|
||||
"attendance_clock_in": DateTimeInput(attrs={"type": "time"}),
|
||||
"attendance_clock_out": DateTimeInput(attrs={"type": "time"}),
|
||||
"attendance_clock_out_date": DateTimeInput(attrs={"type": "date"}),
|
||||
"attendance_date": DateTimeInput(attrs={"type": "date"}),
|
||||
"attendance_clock_in_date": DateTimeInput(attrs={"type": "date"}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if instance := kwargs.get("instance"):
|
||||
# django forms not showing value inside the date, time html element.
|
||||
# so here overriding default forms instance method to set initial value
|
||||
initial = {
|
||||
"attendance_date": instance.attendance_date.strftime("%Y-%m-%d"),
|
||||
"attendance_clock_in": instance.attendance_clock_in.strftime("%H:%M"),
|
||||
"attendance_clock_in_date": instance.attendance_clock_in_date.strftime(
|
||||
"%Y-%m-%d"
|
||||
),
|
||||
}
|
||||
if instance.attendance_clock_out_date is not None:
|
||||
initial['attendance_clock_out'] = instance.attendance_clock_out.strftime('%H:%M')
|
||||
initial['attendance_clock_out_date'] = instance.attendance_clock_out_date.strftime('%Y-%m-%d')
|
||||
kwargs['initial']=initial
|
||||
super(AttendanceForm, self).__init__(*args, **kwargs)
|
||||
self.fields['employee_id'].widget.attrs.update({'id': str(uuid.uuid4())})
|
||||
self.fields['shift_id'].widget.attrs.update({'id': str(uuid.uuid4())})
|
||||
self.fields['work_type_id'].widget.attrs.update({'id': str(uuid.uuid4())})
|
||||
|
||||
initial[
|
||||
"attendance_clock_out"
|
||||
] = instance.attendance_clock_out.strftime("%H:%M")
|
||||
initial[
|
||||
"attendance_clock_out_date"
|
||||
] = instance.attendance_clock_out_date.strftime("%Y-%m-%d")
|
||||
kwargs["initial"] = initial
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields["employee_id"].widget.attrs.update({"id": str(uuid.uuid4())})
|
||||
self.fields["shift_id"].widget.attrs.update({"id": str(uuid.uuid4())})
|
||||
self.fields["work_type_id"].widget.attrs.update({"id": str(uuid.uuid4())})
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
for emp_id in self.data.getlist('employee_id'):
|
||||
for emp_id in self.data.getlist("employee_id"):
|
||||
if int(emp_id) != int(instance.employee_id.id):
|
||||
data_copy = self.data.copy()
|
||||
data_copy.update({'employee_id':str(emp_id)})
|
||||
data_copy.update({"employee_id": str(emp_id)})
|
||||
attendance = AttendanceUpdateForm(data_copy).save(commit=False)
|
||||
attendance.save()
|
||||
if commit:
|
||||
@@ -116,98 +202,137 @@ class AttendanceForm(ModelForm):
|
||||
return instance
|
||||
|
||||
def clean_employee_id(self):
|
||||
employee = self.cleaned_data['employee_id']
|
||||
"""
|
||||
Used to validate employee_id field
|
||||
"""
|
||||
employee = self.cleaned_data["employee_id"]
|
||||
for emp in employee:
|
||||
attendance = Attendance.objects.filter(employee_id=emp,attendance_date=self.data['attendance_date']).first()
|
||||
attendance = Attendance.objects.filter(
|
||||
employee_id=emp, attendance_date=self.data["attendance_date"]
|
||||
).first()
|
||||
if attendance is not None:
|
||||
raise ValidationError(_('Attendance for the date is already exist for %(emp)s' % {'emp':emp}))
|
||||
raise ValidationError(
|
||||
_(
|
||||
"Attendance for the date is already exist for %(emp)s"
|
||||
% {"emp": emp}
|
||||
)
|
||||
)
|
||||
if employee.first() is None:
|
||||
raise ValidationError(_('Employee not chosen'))
|
||||
raise ValidationError(_("Employee not chosen"))
|
||||
|
||||
return employee.first()
|
||||
|
||||
|
||||
|
||||
class AttendanceActivityForm(ModelForm):
|
||||
"""
|
||||
Model form for AttendanceActivity model
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model=AttendanceActivity
|
||||
fields = '__all__'
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
model = AttendanceActivity
|
||||
fields = "__all__"
|
||||
widgets = {
|
||||
'clock_in': DateTimeInput(attrs={'type': 'time'}),
|
||||
'clock_out': DateTimeInput(attrs={'type': 'time'}),
|
||||
'clock_in_date':DateTimeInput(attrs={'type':'date'}),
|
||||
'clock_out_date':DateTimeInput(attrs={'type':'date'})
|
||||
"clock_in": DateTimeInput(attrs={"type": "time"}),
|
||||
"clock_out": DateTimeInput(attrs={"type": "time"}),
|
||||
"clock_in_date": DateTimeInput(attrs={"type": "date"}),
|
||||
"clock_out_date": DateTimeInput(attrs={"type": "date"}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if instance := kwargs.get('instance'):
|
||||
'''
|
||||
django forms not showing value inside the date, time html element.
|
||||
so here overriding default forms instance method to set initial value
|
||||
'''
|
||||
if instance := kwargs.get("instance"):
|
||||
# django forms not showing value inside the date, time html element.
|
||||
# so here overriding default forms instance method to set initial value
|
||||
|
||||
initial = {
|
||||
'attendance_date':instance.attendance_date.strftime('%Y-%m-%d'),
|
||||
'clock_in_date':instance.clock_in_date.strftime('%Y-%m-%d'),
|
||||
'clock_in':instance.clock_in.strftime('%H:%M'),
|
||||
"attendance_date": instance.attendance_date.strftime("%Y-%m-%d"),
|
||||
"clock_in_date": instance.clock_in_date.strftime("%Y-%m-%d"),
|
||||
"clock_in": instance.clock_in.strftime("%H:%M"),
|
||||
}
|
||||
if instance.clock_out is not None:
|
||||
initial['clock_out'] = instance.clock_out.strftime('%H:%M')
|
||||
initial['clock_out_date'] = instance.clock_out_date.strftime('%Y-%m-%d')
|
||||
kwargs['initial']=initial
|
||||
super(AttendanceActivityForm, self).__init__(*args, **kwargs)
|
||||
|
||||
initial["clock_out"] = instance.clock_out.strftime("%H:%M")
|
||||
initial["clock_out_date"] = instance.clock_out_date.strftime("%Y-%m-%d")
|
||||
kwargs["initial"] = initial
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class MonthSelectField(forms.ChoiceField):
|
||||
"""
|
||||
Generate month choices
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
choices = [(month_name[i].lower(), _(month_name[i].capitalize())) for i in range(1, 13)]
|
||||
super(MonthSelectField, self).__init__(choices=choices, *args, **kwargs)
|
||||
choices = [
|
||||
(month_name[i].lower(), _(month_name[i].capitalize())) for i in range(1, 13)
|
||||
]
|
||||
super().__init__(choices=choices, *args, **kwargs)
|
||||
|
||||
|
||||
class AttendanceOverTimeForm(ModelForm):
|
||||
"""
|
||||
Model form for AttendanceOverTime model
|
||||
"""
|
||||
|
||||
month = MonthSelectField(label=_("Month"))
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
model = AttendanceOverTime
|
||||
fields = '__all__'
|
||||
exclude = ['hour_account_second','overtime_second','month_sequence']
|
||||
fields = "__all__"
|
||||
exclude = ["hour_account_second", "overtime_second", "month_sequence"]
|
||||
labels = {
|
||||
"employee_id":_("Employee"),
|
||||
"year":_("Year"),
|
||||
"hour_account":_("Hour Account"),
|
||||
"overtime":_("Overtime"),
|
||||
"employee_id": _("Employee"),
|
||||
"year": _("Year"),
|
||||
"hour_account": _("Hour Account"),
|
||||
"overtime": _("Overtime"),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AttendanceOverTimeForm, self).__init__(*args, **kwargs)
|
||||
self.fields['employee_id'].widget.attrs.update({'id': str(uuid.uuid4())})
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields["employee_id"].widget.attrs.update({"id": str(uuid.uuid4())})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class AttendanceLateComeEarlyOutForm(ModelForm):
|
||||
class Meta:
|
||||
model = AttendanceLateComeEarlyOut
|
||||
fields = '__all__'
|
||||
"""
|
||||
Model form for attendance AttendanceLateComeEarlyOut
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
model = AttendanceLateComeEarlyOut
|
||||
fields = "__all__"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AttendanceLateComeEarlyOutForm, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class AttendanceValidationConditionForm(ModelForm):
|
||||
"""
|
||||
Model form for AttendanceValidationCondition
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Meta class to add the additional info
|
||||
"""
|
||||
|
||||
model = AttendanceValidationCondition
|
||||
validation_at_work = forms.DurationField( )
|
||||
approve_overtime_after = forms.DurationField( )
|
||||
overtime_cutoff = forms.DurationField( )
|
||||
validation_at_work = forms.DurationField()
|
||||
approve_overtime_after = forms.DurationField()
|
||||
overtime_cutoff = forms.DurationField()
|
||||
|
||||
labels = {
|
||||
'validation_at_work': _('Do not Auto Validate Attendance if an Employee Works More Than this Amount of Duration'),
|
||||
|
||||
'minimum_overtime_to_approve': _('Minimum Hour to Approve Overtime'),
|
||||
'overtime_cutoff': _('Maximum Allowed Overtime Per Day'),
|
||||
"validation_at_work": _(
|
||||
"Do not Auto Validate Attendance if an Employee \
|
||||
Works More Than this Amount of Duration"
|
||||
),
|
||||
"minimum_overtime_to_approve": _("Minimum Hour to Approve Overtime"),
|
||||
"overtime_cutoff": _("Maximum Allowed Overtime Per Day"),
|
||||
}
|
||||
fields = '__all__'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AttendanceValidationConditionForm, self).__init__(*args, **kwargs)
|
||||
fields = "__all__"
|
||||
|
||||
190
attendance/urls.py
Normal file → Executable file
190
attendance/urls.py
Normal file → Executable file
@@ -1,69 +1,131 @@
|
||||
"""
|
||||
urls.py
|
||||
|
||||
This page is used to map request or url path with function
|
||||
|
||||
"""
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('attendance-create',views.attendance_create,name='attendance-create'),
|
||||
|
||||
path('attendance-view',views.attendance_view,name='attendance-view'),
|
||||
|
||||
path('attendance-search',views.attendance_search,name='attendance-search'),
|
||||
|
||||
path('attendance-update/<int:id>/',views.attendance_update,name='attendance-update'),
|
||||
|
||||
path('attendance-delete/<int:id>/',views.attendance_delete,name='attendance-delete'),
|
||||
|
||||
path('attendance-bulk-delete',views.attendance_bulk_delete,name='attendance-bulk-delete'),
|
||||
|
||||
path('attendance-overtime-create',views.attendance_overtime_create,name='attendance-overtime-create'),
|
||||
|
||||
path('attendance-overtime-view',views.attendance_overtime_view,name='attendance-overtime-view'),
|
||||
|
||||
path('attendance-overtime-search',views.attendance_overtime_search,name='attendance-ot-search'),
|
||||
|
||||
path('attendance-overtime-update/<int:id>/',views.attendance_overtime_update,name='attendance-overtime-update'),
|
||||
|
||||
path('attendance-overtime-delete/<int:id>/',views.attendance_overtime_delete,name='attendance-overtime-delete'),
|
||||
|
||||
path('attendance-activity-view',views.attendance_activity_view,name='attendance-activity-view'),
|
||||
|
||||
path('attendance-activity-search',views.attendance_activity_search,name='attendance-activity-search'),
|
||||
|
||||
path('attendance-activity-delete/<int:id>/',views.attendance_activity_delete,name='attendance-activity-delete'),
|
||||
|
||||
path('view-my-attendance',views.view_my_attendance,name='view-my-attendance'),
|
||||
|
||||
path('filter-own-attendance',views.filter_own_attendance,name='filter-own-attendance'),
|
||||
|
||||
path('own-attendance-filter',views.own_attendance_sort,name='own-attendance-filter'),
|
||||
|
||||
path('clock-in',views.clock_in,name='clock-in'),
|
||||
|
||||
path('clock-out',views.clock_out,name='clock-out'),
|
||||
|
||||
path('late-come-early-out-view',views.late_come_early_out_view,name='late-come-early-out-view'),
|
||||
|
||||
path('late-come-early-out-search',views.late_come_early_out_search,name='late-come-early-out-search'),
|
||||
|
||||
path('late-come-early-out-delete/<int:id>/',views.late_come_early_out_delete,name='late-come-early-out-delete'),
|
||||
|
||||
path('validation-condition-create',views.validation_condition_create,name='validation-condition-create'),
|
||||
|
||||
path('validation-condition-update/<int:id>/',views.validation_condition_update,name='validation-condition-update'),
|
||||
|
||||
path('validation-condition-delete/<int:id>/',views.validation_condition_delete,name='validation-condition-delete'),
|
||||
|
||||
path('validate-bulk-attendance',views.validate_bulk_attendance,name='validate-bulk-attendance'),
|
||||
|
||||
path('validate-this-attendance/<int:id>/',views.validate_this_attendance,name='validate-this-attendance'),
|
||||
|
||||
path('revalidate-this-attendance/<int:id>/',views.revalidate_this_attendance,name='revalidate-this-attendance'),
|
||||
|
||||
path('approve-overtime/<int:id>/',views.approve_overtime,name='approve-overtime'),
|
||||
|
||||
path('approve-bulk-overtime',views.approve_bulk_overtime,name='approve-bulk-overtime'),
|
||||
|
||||
path('dashboard',views.dashboard,name='dashboard'),
|
||||
|
||||
path('dashboard-attendance',views.dashboard_attendance,name='dashboard-attendance'),
|
||||
|
||||
path("attendance-create", views.attendance_create, name="attendance-create"),
|
||||
path("attendance-view", views.attendance_view, name="attendance-view"),
|
||||
path("attendance-search", views.attendance_search, name="attendance-search"),
|
||||
path(
|
||||
"attendance-update/<int:obj_id>/", views.attendance_update, name="attendance-update"
|
||||
),
|
||||
path(
|
||||
"attendance-delete/<int:obj_id>/", views.attendance_delete, name="attendance-delete"
|
||||
),
|
||||
path(
|
||||
"attendance-bulk-delete",
|
||||
views.attendance_bulk_delete,
|
||||
name="attendance-bulk-delete",
|
||||
),
|
||||
path(
|
||||
"attendance-overtime-create",
|
||||
views.attendance_overtime_create,
|
||||
name="attendance-overtime-create",
|
||||
),
|
||||
path(
|
||||
"attendance-overtime-view",
|
||||
views.attendance_overtime_view,
|
||||
name="attendance-overtime-view",
|
||||
),
|
||||
path(
|
||||
"attendance-overtime-search",
|
||||
views.attendance_overtime_search,
|
||||
name="attendance-ot-search",
|
||||
),
|
||||
path(
|
||||
"attendance-overtime-update/<int:obj_id>/",
|
||||
views.attendance_overtime_update,
|
||||
name="attendance-overtime-update",
|
||||
),
|
||||
path(
|
||||
"attendance-overtime-delete/<int:obj_id>/",
|
||||
views.attendance_overtime_delete,
|
||||
name="attendance-overtime-delete",
|
||||
),
|
||||
path(
|
||||
"attendance-activity-view",
|
||||
views.attendance_activity_view,
|
||||
name="attendance-activity-view",
|
||||
),
|
||||
path(
|
||||
"attendance-activity-search",
|
||||
views.attendance_activity_search,
|
||||
name="attendance-activity-search",
|
||||
),
|
||||
path(
|
||||
"attendance-activity-delete/<int:obj_id>/",
|
||||
views.attendance_activity_delete,
|
||||
name="attendance-activity-delete",
|
||||
),
|
||||
path("view-my-attendance", views.view_my_attendance, name="view-my-attendance"),
|
||||
path(
|
||||
"filter-own-attendance",
|
||||
views.filter_own_attendance,
|
||||
name="filter-own-attendance",
|
||||
),
|
||||
path(
|
||||
"own-attendance-filter", views.own_attendance_sort, name="own-attendance-filter"
|
||||
),
|
||||
path("clock-in", views.clock_in, name="clock-in"),
|
||||
path("clock-out", views.clock_out, name="clock-out"),
|
||||
path(
|
||||
"late-come-early-out-view",
|
||||
views.late_come_early_out_view,
|
||||
name="late-come-early-out-view",
|
||||
),
|
||||
path(
|
||||
"late-come-early-out-search",
|
||||
views.late_come_early_out_search,
|
||||
name="late-come-early-out-search",
|
||||
),
|
||||
path(
|
||||
"late-come-early-out-delete/<int:obj_id>/",
|
||||
views.late_come_early_out_delete,
|
||||
name="late-come-early-out-delete",
|
||||
),
|
||||
path(
|
||||
"validation-condition-create",
|
||||
views.validation_condition_create,
|
||||
name="validation-condition-create",
|
||||
),
|
||||
path(
|
||||
"validation-condition-update/<int:obj_id>/",
|
||||
views.validation_condition_update,
|
||||
name="validation-condition-update",
|
||||
),
|
||||
path(
|
||||
"validation-condition-delete/<int:obj_id>/",
|
||||
views.validation_condition_delete,
|
||||
name="validation-condition-delete",
|
||||
),
|
||||
path(
|
||||
"validate-bulk-attendance",
|
||||
views.validate_bulk_attendance,
|
||||
name="validate-bulk-attendance",
|
||||
),
|
||||
path(
|
||||
"validate-this-attendance/<int:obj_id>/",
|
||||
views.validate_this_attendance,
|
||||
name="validate-this-attendance",
|
||||
),
|
||||
path(
|
||||
"revalidate-this-attendance/<int:obj_id>/",
|
||||
views.revalidate_this_attendance,
|
||||
name="revalidate-this-attendance",
|
||||
),
|
||||
path("approve-overtime/<int:obj_id>/", views.approve_overtime, name="approve-overtime"),
|
||||
path(
|
||||
"approve-bulk-overtime",
|
||||
views.approve_bulk_overtime,
|
||||
name="approve-bulk-overtime",
|
||||
),
|
||||
path("dashboard", views.dashboard, name="dashboard"),
|
||||
path(
|
||||
"dashboard-attendance", views.dashboard_attendance, name="dashboard-attendance"
|
||||
),
|
||||
]
|
||||
|
||||
1220
attendance/views.py
Normal file → Executable file
1220
attendance/views.py
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user