agdar/hr/migrations/0002_leavebalance_leaverequest.py
2025-11-02 14:35:35 +03:00

66 lines
5.0 KiB
Python

# Generated by Django 5.2.3 on 2025-10-27 21:01
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0004_historicaluser_bio_historicaluser_email_verified_and_more'),
('hr', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='LeaveBalance',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('year', models.PositiveIntegerField(verbose_name='Year')),
('leave_type', models.CharField(choices=[('ANNUAL', 'Annual Leave'), ('SICK', 'Sick Leave'), ('EMERGENCY', 'Emergency Leave'), ('UNPAID', 'Unpaid Leave'), ('MATERNITY', 'Maternity Leave'), ('PATERNITY', 'Paternity Leave'), ('STUDY', 'Study Leave'), ('OTHER', 'Other')], max_length=20, verbose_name='Leave Type')),
('total_days', models.DecimalField(decimal_places=1, default=0, max_digits=5, verbose_name='Total Days Allocated')),
('used_days', models.DecimalField(decimal_places=1, default=0, max_digits=5, verbose_name='Used Days')),
('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_balances', to=settings.AUTH_USER_MODEL, verbose_name='Employee')),
('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', to='core.tenant', verbose_name='Tenant')),
],
options={
'verbose_name': 'Leave Balance',
'verbose_name_plural': 'Leave Balances',
'ordering': ['employee', 'year', 'leave_type'],
'indexes': [models.Index(fields=['employee', 'year'], name='hr_leavebal_employe_38d436_idx'), models.Index(fields=['tenant', 'year'], name='hr_leavebal_tenant__9c442c_idx')],
'unique_together': {('employee', 'year', 'leave_type', 'tenant')},
},
),
migrations.CreateModel(
name='LeaveRequest',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('leave_type', models.CharField(choices=[('ANNUAL', 'Annual Leave'), ('SICK', 'Sick Leave'), ('EMERGENCY', 'Emergency Leave'), ('UNPAID', 'Unpaid Leave'), ('MATERNITY', 'Maternity Leave'), ('PATERNITY', 'Paternity Leave'), ('STUDY', 'Study Leave'), ('OTHER', 'Other')], max_length=20, verbose_name='Leave Type')),
('start_date', models.DateField(verbose_name='Start Date')),
('end_date', models.DateField(verbose_name='End Date')),
('days_requested', models.PositiveIntegerField(default=1, verbose_name='Days Requested')),
('reason', models.TextField(verbose_name='Reason')),
('status', models.CharField(choices=[('PENDING', 'Pending'), ('APPROVED', 'Approved'), ('REJECTED', 'Rejected'), ('CANCELLED', 'Cancelled')], default='PENDING', max_length=20, verbose_name='Status')),
('reviewed_at', models.DateTimeField(blank=True, null=True, verbose_name='Reviewed At')),
('reviewer_comments', models.TextField(blank=True, verbose_name='Reviewer Comments')),
('attachment', models.FileField(blank=True, help_text='Medical certificate or supporting document', null=True, upload_to='leave_requests/%Y/%m/', verbose_name='Attachment')),
('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_requests', to=settings.AUTH_USER_MODEL, verbose_name='Employee')),
('reviewed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_leave_requests', to=settings.AUTH_USER_MODEL, verbose_name='Reviewed By')),
('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', to='core.tenant', verbose_name='Tenant')),
],
options={
'verbose_name': 'Leave Request',
'verbose_name_plural': 'Leave Requests',
'ordering': ['-created_at'],
'indexes': [models.Index(fields=['employee', 'status'], name='hr_leavereq_employe_1b7929_idx'), models.Index(fields=['start_date', 'end_date'], name='hr_leavereq_start_d_9e9e54_idx'), models.Index(fields=['tenant', 'status'], name='hr_leavereq_tenant__94948b_idx')],
},
),
]