786 lines
29 KiB
Python
786 lines
29 KiB
Python
# Generated by Django 5.2.7 on 2025-10-25 14:02
|
|
|
|
import attendance.methods.utils
|
|
import horilla.models
|
|
import simple_history.models
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
initial = True
|
|
|
|
dependencies = []
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="Attendance",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"attendance_date",
|
|
models.DateField(
|
|
validators=[attendance.methods.utils.attendance_date_validate],
|
|
verbose_name="Attendance date",
|
|
),
|
|
),
|
|
(
|
|
"attendance_clock_in_date",
|
|
models.DateField(null=True, verbose_name="Check-In Date"),
|
|
),
|
|
(
|
|
"attendance_clock_in",
|
|
models.TimeField(
|
|
help_text="First Check-In Time",
|
|
null=True,
|
|
verbose_name="Check-In",
|
|
),
|
|
),
|
|
(
|
|
"attendance_clock_out_date",
|
|
models.DateField(null=True, verbose_name="Check-Out Date"),
|
|
),
|
|
(
|
|
"attendance_clock_out",
|
|
models.TimeField(
|
|
help_text="Last Check-Out Time",
|
|
null=True,
|
|
verbose_name="Check-Out",
|
|
),
|
|
),
|
|
(
|
|
"attendance_worked_hour",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Worked Hours",
|
|
),
|
|
),
|
|
(
|
|
"minimum_hour",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Minimum hour",
|
|
),
|
|
),
|
|
(
|
|
"attendance_overtime",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Overtime",
|
|
),
|
|
),
|
|
(
|
|
"attendance_overtime_approve",
|
|
models.BooleanField(default=False, verbose_name="Overtime Approve"),
|
|
),
|
|
(
|
|
"attendance_validated",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Attendance Validate"
|
|
),
|
|
),
|
|
("at_work_second", models.IntegerField(blank=True, null=True)),
|
|
(
|
|
"overtime_second",
|
|
models.IntegerField(
|
|
blank=True, null=True, verbose_name="Overtime In Second"
|
|
),
|
|
),
|
|
("approved_overtime_second", models.IntegerField(default=0)),
|
|
(
|
|
"is_validate_request",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Is validate request"
|
|
),
|
|
),
|
|
("is_bulk_request", models.BooleanField(default=False, editable=False)),
|
|
(
|
|
"is_validate_request_approved",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Is validate request approved"
|
|
),
|
|
),
|
|
(
|
|
"request_description",
|
|
models.TextField(null=True, verbose_name="Request Description"),
|
|
),
|
|
(
|
|
"request_type",
|
|
models.CharField(
|
|
choices=[
|
|
("create_request", "Create Request"),
|
|
("update_request", "Update Request"),
|
|
("created_request", "Created Request"),
|
|
],
|
|
default="update_request",
|
|
max_length=18,
|
|
null=True,
|
|
),
|
|
),
|
|
("is_holiday", models.BooleanField(default=False)),
|
|
("requested_data", models.JSONField(editable=False, null=True)),
|
|
],
|
|
options={
|
|
"verbose_name": "Attendance",
|
|
"verbose_name_plural": "Attendances",
|
|
"ordering": [
|
|
"-attendance_date",
|
|
"employee_id__employee_first_name",
|
|
"attendance_clock_in",
|
|
],
|
|
"permissions": [
|
|
("change_validateattendance", "Validate Attendance"),
|
|
("change_approveovertime", "Change Approve Overtime"),
|
|
],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceActivity",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"attendance_date",
|
|
models.DateField(
|
|
null=True,
|
|
validators=[attendance.methods.utils.attendance_date_validate],
|
|
verbose_name="Attendance Date",
|
|
),
|
|
),
|
|
("in_datetime", models.DateTimeField(null=True)),
|
|
("clock_in_date", models.DateField(null=True, verbose_name="In Date")),
|
|
("clock_in", models.TimeField(verbose_name="Check In")),
|
|
(
|
|
"clock_out_date",
|
|
models.DateField(null=True, verbose_name="Out Date"),
|
|
),
|
|
("out_datetime", models.DateTimeField(null=True)),
|
|
("clock_out", models.TimeField(null=True, verbose_name="Check Out")),
|
|
],
|
|
options={
|
|
"ordering": [
|
|
"-attendance_date",
|
|
"employee_id__employee_first_name",
|
|
"clock_in",
|
|
],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceGeneralSetting",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("time_runner", models.BooleanField(default=True)),
|
|
(
|
|
"enable_check_in",
|
|
models.BooleanField(
|
|
default=True,
|
|
help_text="Enabling this feature allows employees to record their attendance using the Check-In/Check-Out button.",
|
|
verbose_name="Enable Check in/Check out",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceLateComeEarlyOut",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"type",
|
|
models.CharField(
|
|
choices=[
|
|
("late_come", "Late Come"),
|
|
("early_out", "Early Out"),
|
|
],
|
|
max_length=20,
|
|
verbose_name="Type",
|
|
),
|
|
),
|
|
("created_at", models.DateTimeField(auto_now_add=True, null=True)),
|
|
],
|
|
options={
|
|
"ordering": ["-attendance_id__attendance_date"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceOverTime",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("month", models.CharField(max_length=10, verbose_name="Month")),
|
|
("month_sequence", models.PositiveSmallIntegerField(default=0)),
|
|
(
|
|
"year",
|
|
models.CharField(
|
|
default="2025", max_length=10, null=True, verbose_name="Year"
|
|
),
|
|
),
|
|
(
|
|
"worked_hours",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Worked Hours",
|
|
),
|
|
),
|
|
(
|
|
"pending_hours",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Pending Hours",
|
|
),
|
|
),
|
|
(
|
|
"overtime",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=20,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Overtime Hours",
|
|
),
|
|
),
|
|
(
|
|
"hour_account_second",
|
|
models.IntegerField(
|
|
default=0, null=True, verbose_name="Worked Seconds"
|
|
),
|
|
),
|
|
(
|
|
"hour_pending_second",
|
|
models.IntegerField(
|
|
default=0, null=True, verbose_name="Pending Seconds"
|
|
),
|
|
),
|
|
(
|
|
"overtime_second",
|
|
models.IntegerField(
|
|
default=0, null=True, verbose_name="Overtime Seconds"
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Hour Account",
|
|
"verbose_name_plural": "Hour Accounts",
|
|
"ordering": ["-year", "-month_sequence"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceRequestComment",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"comment",
|
|
models.TextField(max_length=255, null=True, verbose_name="Comment"),
|
|
),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceRequestFile",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("file", models.FileField(upload_to=horilla.models.upload_path)),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="AttendanceValidationCondition",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"validation_at_work",
|
|
models.CharField(
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Worked Hours Auto Approve Till",
|
|
),
|
|
),
|
|
(
|
|
"minimum_overtime_to_approve",
|
|
models.CharField(
|
|
blank=True,
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
),
|
|
),
|
|
(
|
|
"overtime_cutoff",
|
|
models.CharField(
|
|
blank=True,
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
),
|
|
),
|
|
(
|
|
"auto_approve_ot",
|
|
models.BooleanField(default=False, verbose_name="Auto Approve OT"),
|
|
),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="BatchAttendance",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("title", models.CharField(max_length=150, verbose_name="Title")),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="GraceTime",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"allowed_time",
|
|
models.CharField(
|
|
default="00:00:00",
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_hh_mm_ss_format],
|
|
verbose_name="Allowed Time",
|
|
),
|
|
),
|
|
("allowed_time_in_secs", models.IntegerField()),
|
|
(
|
|
"allowed_clock_in",
|
|
models.BooleanField(
|
|
default=True,
|
|
help_text="Allcocate this grace time for Check-In Attendance",
|
|
verbose_name="Allowed Clock-In",
|
|
),
|
|
),
|
|
(
|
|
"allowed_clock_out",
|
|
models.BooleanField(
|
|
default=False,
|
|
help_text="Allcocate this grace time for Check-Out Attendance",
|
|
verbose_name="Allowed Clock-Out",
|
|
),
|
|
),
|
|
("is_default", models.BooleanField(default=False)),
|
|
],
|
|
options={
|
|
"abstract": False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="HistoricalAttendance",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigIntegerField(
|
|
auto_created=True, blank=True, db_index=True, verbose_name="ID"
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
blank=True, editable=False, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"history_title",
|
|
models.CharField(blank=True, max_length=20, null=True),
|
|
),
|
|
("history_description", models.TextField(null=True)),
|
|
("history_highlight", models.BooleanField(default=False, null=True)),
|
|
(
|
|
"attendance_date",
|
|
models.DateField(
|
|
validators=[attendance.methods.utils.attendance_date_validate],
|
|
verbose_name="Attendance date",
|
|
),
|
|
),
|
|
(
|
|
"attendance_clock_in_date",
|
|
models.DateField(null=True, verbose_name="Check-In Date"),
|
|
),
|
|
(
|
|
"attendance_clock_in",
|
|
models.TimeField(
|
|
help_text="First Check-In Time",
|
|
null=True,
|
|
verbose_name="Check-In",
|
|
),
|
|
),
|
|
(
|
|
"attendance_clock_out_date",
|
|
models.DateField(null=True, verbose_name="Check-Out Date"),
|
|
),
|
|
(
|
|
"attendance_clock_out",
|
|
models.TimeField(
|
|
help_text="Last Check-Out Time",
|
|
null=True,
|
|
verbose_name="Check-Out",
|
|
),
|
|
),
|
|
(
|
|
"attendance_worked_hour",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Worked Hours",
|
|
),
|
|
),
|
|
(
|
|
"minimum_hour",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Minimum hour",
|
|
),
|
|
),
|
|
(
|
|
"attendance_overtime",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
verbose_name="Overtime",
|
|
),
|
|
),
|
|
(
|
|
"attendance_overtime_approve",
|
|
models.BooleanField(default=False, verbose_name="Overtime Approve"),
|
|
),
|
|
(
|
|
"attendance_validated",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Attendance Validate"
|
|
),
|
|
),
|
|
("at_work_second", models.IntegerField(blank=True, null=True)),
|
|
(
|
|
"overtime_second",
|
|
models.IntegerField(
|
|
blank=True, null=True, verbose_name="Overtime In Second"
|
|
),
|
|
),
|
|
("approved_overtime_second", models.IntegerField(default=0)),
|
|
(
|
|
"is_validate_request",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Is validate request"
|
|
),
|
|
),
|
|
("is_bulk_request", models.BooleanField(default=False, editable=False)),
|
|
(
|
|
"is_validate_request_approved",
|
|
models.BooleanField(
|
|
default=False, verbose_name="Is validate request approved"
|
|
),
|
|
),
|
|
(
|
|
"request_description",
|
|
models.TextField(null=True, verbose_name="Request Description"),
|
|
),
|
|
(
|
|
"request_type",
|
|
models.CharField(
|
|
choices=[
|
|
("create_request", "Create Request"),
|
|
("update_request", "Update Request"),
|
|
("created_request", "Created Request"),
|
|
],
|
|
default="update_request",
|
|
max_length=18,
|
|
null=True,
|
|
),
|
|
),
|
|
("is_holiday", models.BooleanField(default=False)),
|
|
("requested_data", models.JSONField(editable=False, null=True)),
|
|
("history_id", models.AutoField(primary_key=True, serialize=False)),
|
|
("history_date", models.DateTimeField(db_index=True)),
|
|
("history_change_reason", models.CharField(max_length=100, null=True)),
|
|
(
|
|
"history_type",
|
|
models.CharField(
|
|
choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")],
|
|
max_length=1,
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "historical Attendance",
|
|
"verbose_name_plural": "historical Attendances",
|
|
"ordering": ("-history_date", "-history_id"),
|
|
"get_latest_by": ("history_date", "history_id"),
|
|
},
|
|
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name="WorkRecords",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"record_name",
|
|
models.CharField(blank=True, max_length=250, null=True),
|
|
),
|
|
(
|
|
"work_record_type",
|
|
models.CharField(
|
|
choices=[
|
|
("FDP", "Present"),
|
|
("HDP", "Half Day Present"),
|
|
("ABS", "Absent"),
|
|
("HD", "Holiday/Company Leave"),
|
|
("CONF", "Conflict"),
|
|
("DFT", "Draft"),
|
|
],
|
|
max_length=10,
|
|
null=True,
|
|
),
|
|
),
|
|
("date", models.DateField(blank=True, null=True)),
|
|
(
|
|
"at_work",
|
|
models.CharField(
|
|
blank=True,
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
),
|
|
),
|
|
(
|
|
"min_hour",
|
|
models.CharField(
|
|
blank=True,
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[attendance.methods.utils.validate_time_format],
|
|
),
|
|
),
|
|
(
|
|
"at_work_second",
|
|
models.IntegerField(blank=True, default=0, null=True),
|
|
),
|
|
(
|
|
"min_hour_second",
|
|
models.IntegerField(blank=True, default=0, null=True),
|
|
),
|
|
("note", models.TextField(max_length=255)),
|
|
("message", models.CharField(blank=True, max_length=30, null=True)),
|
|
("is_attendance_record", models.BooleanField(default=False)),
|
|
("is_leave_record", models.BooleanField(default=False)),
|
|
("day_percentage", models.FloatField(default=0)),
|
|
("last_update", models.DateTimeField(blank=True, null=True)),
|
|
],
|
|
options={
|
|
"verbose_name": "Work Record",
|
|
"verbose_name_plural": "Work Records",
|
|
},
|
|
),
|
|
]
|