From b7fc3915f6ec5d7ea0cfbe040e026c1e5e7e179c Mon Sep 17 00:00:00 2001 From: Akshat01g Date: Mon, 5 Oct 2026 16:05:41 +0530 Subject: [PATCH 1/4] feat(modules/elm): add models for LeaveCategory, LeaveApplication, and LeaveBalance Co-authored-by: aider (ollama_chat/qwen2.5-coder:7b) --- modules/elm/models.py | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 modules/elm/models.py diff --git a/modules/elm/models.py b/modules/elm/models.py new file mode 100644 index 00000000..04fdbdc3 --- /dev/null +++ b/modules/elm/models.py @@ -0,0 +1,45 @@ +from django.db import models + +from core.db.mixins import TimeStampedModel +from modules.directory.models import UserRef + + +class LeaveCategory(TimeStampedModel): + name = models.CharField(max_length=100) + description = models.TextField(blank=True) + + class Meta: + db_table = "elm_leave_category" + verbose_name_plural = "Leave Categories" + + def __str__(self) -> str: + return self.name + + +class LeaveApplication(TimeStampedModel): + employee = models.ForeignKey(UserRef, on_delete=models.CASCADE, related_name="leave_applications") + category = models.ForeignKey(LeaveCategory, on_delete=models.CASCADE, related_name="applications") + start_date = models.DateField() + end_date = models.DateField() + reason = models.TextField() + status = models.CharField(max_length=20, choices=[("pending", "Pending"), ("approved", "Approved"), ("rejected", "Rejected")], default="pending") + + class Meta: + db_table = "elm_leave_application" + verbose_name_plural = "Leave Applications" + + def __str__(self) -> str: + return f"{self.employee} - {self.category} - {self.status}" + + +class LeaveBalance(TimeStampedModel): + employee = models.ForeignKey(UserRef, on_delete=models.CASCADE, related_name="leave_balances") + category = models.ForeignKey(LeaveCategory, on_delete=models.CASCADE, related_name="balances") + balance = models.IntegerField() + + class Meta: + db_table = "elm_leave_balance" + verbose_name_plural = "Leave Balances" + + def __str__(self) -> str: + return f"{self.employee} - {self.category} - {self.balance}" From 836e8d98a5c713abb368e23f784f6db9ff3500df Mon Sep 17 00:00:00 2001 From: Akshat01g Date: Mon, 5 Oct 2026 16:08:42 +0530 Subject: [PATCH 2/4] feat(modules/elm): add ElmConfig class Co-authored-by: aider (ollama_chat/qwen2.5-coder:7b) --- modules/elm/__init__.py | 1 + modules/elm/apps.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 modules/elm/__init__.py create mode 100644 modules/elm/apps.py diff --git a/modules/elm/__init__.py b/modules/elm/__init__.py new file mode 100644 index 00000000..b7e56e89 --- /dev/null +++ b/modules/elm/__init__.py @@ -0,0 +1 @@ +# This file is intentionally left empty diff --git a/modules/elm/apps.py b/modules/elm/apps.py new file mode 100644 index 00000000..f1c77b9d --- /dev/null +++ b/modules/elm/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ElmConfig(AppConfig): + name = "modules.elm" + label = "elm" From 774dfcf1c28a0eb23a4bada87387c2dc5105c1b8 Mon Sep 17 00:00:00 2001 From: Akshat01g Date: Mon, 5 Oct 2026 16:11:33 +0530 Subject: [PATCH 3/4] feat(config/settings/base.py): add "modules.elm" to DOMAIN_MODULES Co-authored-by: aider (ollama_chat/qwen2.5-coder:7b) --- config/settings/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/config/settings/base.py b/config/settings/base.py index 0dc7ada1..a346a065 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -90,6 +90,7 @@ def env_list(name, default=None): # See docs/03-platform/module-authoring-guide.md to add one. DOMAIN_MODULES = [ "modules.placement", + "modules.elm", ] INSTALLED_APPS = (DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS From a08d6ded72682a85b5d8cb38cbd653e5a14c34f7 Mon Sep 17 00:00:00 2001 From: Akshat01g Date: Mon, 5 Oct 2026 16:20:19 +0530 Subject: [PATCH 4/4] Trial 1 - qwen2.5-coder:7b ELM output --- modules/elm/migrations/0001_initial.py | 126 +++++++++++++++++++++++++ modules/elm/migrations/__init__.py | 0 2 files changed, 126 insertions(+) create mode 100644 modules/elm/migrations/0001_initial.py create mode 100644 modules/elm/migrations/__init__.py diff --git a/modules/elm/migrations/0001_initial.py b/modules/elm/migrations/0001_initial.py new file mode 100644 index 00000000..cca4eacc --- /dev/null +++ b/modules/elm/migrations/0001_initial.py @@ -0,0 +1,126 @@ +# Generated by Django 5.2.17 on 2026-10-05 10:46 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("directory", "0002_userref_profile_completed_userref_resume_link"), + ] + + operations = [ + migrations.CreateModel( + name="LeaveCategory", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("name", models.CharField(max_length=100)), + ("description", models.TextField(blank=True)), + ], + options={ + "verbose_name_plural": "Leave Categories", + "db_table": "elm_leave_category", + }, + ), + migrations.CreateModel( + name="LeaveBalance", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("balance", models.IntegerField()), + ( + "employee", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="leave_balances", + to="directory.userref", + ), + ), + ( + "category", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="balances", + to="elm.leavecategory", + ), + ), + ], + options={ + "verbose_name_plural": "Leave Balances", + "db_table": "elm_leave_balance", + }, + ), + migrations.CreateModel( + name="LeaveApplication", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("start_date", models.DateField()), + ("end_date", models.DateField()), + ("reason", models.TextField()), + ( + "status", + models.CharField( + choices=[ + ("pending", "Pending"), + ("approved", "Approved"), + ("rejected", "Rejected"), + ], + default="pending", + max_length=20, + ), + ), + ( + "employee", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="leave_applications", + to="directory.userref", + ), + ), + ( + "category", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="applications", + to="elm.leavecategory", + ), + ), + ], + options={ + "verbose_name_plural": "Leave Applications", + "db_table": "elm_leave_application", + }, + ), + ] diff --git a/modules/elm/migrations/__init__.py b/modules/elm/migrations/__init__.py new file mode 100644 index 00000000..e69de29b