[ADD] BASE: Add field filtered employees to announcements

This commit is contained in:
Horilla
2025-03-10 13:58:22 +05:30
parent e4a9e123f1
commit f123b31643
2 changed files with 31 additions and 4 deletions

View File

@@ -174,7 +174,9 @@ class JobRole(HorillaModel):
job_position_id = models.ForeignKey(
JobPosition, on_delete=models.PROTECT, verbose_name=_("Job Position")
)
job_role = models.CharField(max_length=50, blank=False, null=True)
job_role = models.CharField(
max_length=50, blank=False, null=True, verbose_name=_("Job Role")
)
company_id = models.ManyToManyField(Company, blank=True, verbose_name=_("Company"))
objects = HorillaCompanyManager("job_position_id__department_id__company_id")
@@ -1490,6 +1492,8 @@ class Announcement(HorillaModel):
from employee.models import Employee
model_employee = Employee
title = models.CharField(max_length=100)
description = models.TextField(null=True)
attachments = models.ManyToManyField(
@@ -1507,6 +1511,9 @@ class Announcement(HorillaModel):
related_name="announcement",
)
disable_comments = models.BooleanField(default=False)
filtered_employees = models.ManyToManyField(
Employee, related_name="announcement_filtered_employees", editable=False
)
objects = HorillaCompanyManager(related_company_field="company_id")
def get_views(self):

View File

@@ -1,11 +1,11 @@
from datetime import datetime
from django.apps import apps
from django.db.models import Max
from django.db.models.signals import post_migrate, post_save
from django.db.models import Max, Q
from django.db.models.signals import m2m_changed, post_migrate, post_save
from django.dispatch import receiver
from base.models import PenaltyAccounts
from base.models import Announcement, PenaltyAccounts
from horilla.methods import get_horilla_model_class
@@ -80,3 +80,23 @@ def clean_work_records(sender, **kwargs):
.exclude(id=record["latest_id"])
.delete()[0]
)
@receiver(m2m_changed, sender=Announcement.employees.through)
def filtered_employees(sender, instance, action, **kwargs):
"""
filtered employees
"""
if action not in ["post_add", "post_remove", "post_clear"]:
return # Only run after M2M changes
employee_ids = list(instance.employees.values_list("id", flat=True))
department_ids = list(instance.department.values_list("id", flat=True))
job_position_ids = list(instance.job_position.values_list("id", flat=True))
employees = instance.model_employee.objects.filter(
Q(id__in=employee_ids)
| Q(employee_work_info__department_id__in=department_ids)
| Q(employee_work_info__job_position_id__in=job_position_ids)
)
instance.filtered_employees.set(employees)