[UPDT] OFFBOARDING: Updated models in offboarding by adding abstract class
This commit is contained in:
@@ -35,6 +35,7 @@ class OffboardingForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Offboarding
|
model = Offboarding
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
exclude = ["is_active"]
|
||||||
|
|
||||||
def as_p(self):
|
def as_p(self):
|
||||||
"""
|
"""
|
||||||
@@ -55,9 +56,7 @@ class OffboardingStageForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = OffboardingStage
|
model = OffboardingStage
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
exclude = [
|
exclude = ["offboarding_id", "is_active"]
|
||||||
"offboarding_id",
|
|
||||||
]
|
|
||||||
|
|
||||||
def as_p(self):
|
def as_p(self):
|
||||||
"""
|
"""
|
||||||
@@ -78,7 +77,7 @@ class OffboardingEmployeeForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = OffboardingEmployee
|
model = OffboardingEmployee
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
exclude = ["notice_period", "unit"]
|
exclude = ["notice_period", "unit" , "is_active"]
|
||||||
widgets = {
|
widgets = {
|
||||||
"notice_period_starts": forms.DateInput(attrs={"type": "date"}),
|
"notice_period_starts": forms.DateInput(attrs={"type": "date"}),
|
||||||
"notice_period_ends": forms.DateInput(attrs={"type": "date"}),
|
"notice_period_ends": forms.DateInput(attrs={"type": "date"}),
|
||||||
@@ -95,7 +94,7 @@ class OffboardingEmployeeForm(ModelForm):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
attrs = self.fields["employee_id"].widget.attrs
|
attrs = self.fields["employee_id"].widget.attrs
|
||||||
attrs["onchange"] = "intialNoticePeriod($(this))"
|
attrs["onchange"] = "initialNoticePeriod($(this))"
|
||||||
self.fields["employee_id"].widget.attrs.update(attrs)
|
self.fields["employee_id"].widget.attrs.update(attrs)
|
||||||
attrs = self.fields["notice_period_starts"].widget.attrs
|
attrs = self.fields["notice_period_starts"].widget.attrs
|
||||||
attrs["onchange"] = "noticePeriodUpdate($(this))"
|
attrs["onchange"] = "noticePeriodUpdate($(this))"
|
||||||
@@ -145,6 +144,7 @@ class NoteForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = OffboardingNote
|
model = OffboardingNote
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
exclude = ["is_active"]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
@@ -161,20 +161,20 @@ class NoteForm(ModelForm):
|
|||||||
|
|
||||||
def save(self, commit: bool = ...) -> Any:
|
def save(self, commit: bool = ...) -> Any:
|
||||||
multiple_attachment_ids = []
|
multiple_attachment_ids = []
|
||||||
attachemnts = None
|
attachments = None
|
||||||
if self.files.getlist("attachment"):
|
if self.files.getlist("attachment"):
|
||||||
attachemnts = self.files.getlist("attachment")
|
attachments = self.files.getlist("attachment")
|
||||||
self.instance.attachemnt = attachemnts[0]
|
self.instance.attachment = attachments[0]
|
||||||
multiple_attachment_ids = []
|
multiple_attachment_ids = []
|
||||||
for attachemnt in attachemnts:
|
for attachment in attachments:
|
||||||
file_instance = OffboardingStageMultipleFile()
|
file_instance = OffboardingStageMultipleFile()
|
||||||
file_instance.attachment = attachemnt
|
file_instance.attachment = attachment
|
||||||
file_instance.save()
|
file_instance.save()
|
||||||
multiple_attachment_ids.append(file_instance.pk)
|
multiple_attachment_ids.append(file_instance.pk)
|
||||||
instance = super().save(commit)
|
instance = super().save(commit)
|
||||||
if commit:
|
if commit:
|
||||||
instance.attachments.add(*multiple_attachment_ids)
|
instance.attachments.add(*multiple_attachment_ids)
|
||||||
return instance, attachemnts
|
return instance, attachments
|
||||||
|
|
||||||
|
|
||||||
class TaskForm(ModelForm):
|
class TaskForm(ModelForm):
|
||||||
@@ -191,9 +191,7 @@ class TaskForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = OffboardingTask
|
model = OffboardingTask
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
exclude = [
|
exclude = ["status", "is_active"]
|
||||||
"status",
|
|
||||||
]
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
@@ -222,7 +220,7 @@ class TaskForm(ModelForm):
|
|||||||
if commit:
|
if commit:
|
||||||
employees = self.cleaned_data["tasks_to"]
|
employees = self.cleaned_data["tasks_to"]
|
||||||
for employee in employees:
|
for employee in employees:
|
||||||
assinged_task = EmployeeTask.objects.get_or_create(
|
assigned_task = EmployeeTask.objects.get_or_create(
|
||||||
employee_id=employee,
|
employee_id=employee,
|
||||||
task_id=self.instance,
|
task_id=self.instance,
|
||||||
)
|
)
|
||||||
@@ -242,6 +240,7 @@ class ResignationLetterForm(ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ResignationLetter
|
model = ResignationLetter
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
exclude = ["is_active"]
|
||||||
|
|
||||||
def as_p(self):
|
def as_p(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ from datetime import date, timedelta
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from horilla.models import HorillaModel
|
||||||
from base import thread_local_middleware
|
from base import thread_local_middleware
|
||||||
from base.horilla_company_manager import HorillaCompanyManager
|
from base.horilla_company_manager import HorillaCompanyManager
|
||||||
from base.models import Company
|
from base.models import Company
|
||||||
@@ -16,18 +18,16 @@ from payroll.models.models import Contract
|
|||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
class Offboarding(models.Model):
|
class Offboarding(HorillaModel):
|
||||||
"""
|
"""
|
||||||
Offboarding model
|
Offboarding model
|
||||||
"""
|
"""
|
||||||
|
|
||||||
statuses = [("ongoing", "Ongoing"), ("completed", "Completed")]
|
statuses = [("ongoing", _("Ongoing")), ("completed", _("Completed"))]
|
||||||
title = models.CharField(max_length=20)
|
title = models.CharField(max_length=20)
|
||||||
description = models.TextField(max_length=255)
|
description = models.TextField(max_length=255)
|
||||||
managers = models.ManyToManyField(Employee)
|
managers = models.ManyToManyField(Employee)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
status = models.CharField(max_length=10, default="ongoing", choices=statuses)
|
status = models.CharField(max_length=10, default="ongoing", choices=statuses)
|
||||||
is_active = models.BooleanField(default=True)
|
|
||||||
company_id = models.ForeignKey(
|
company_id = models.ForeignKey(
|
||||||
Company, on_delete=models.CASCADE, null=True, editable=False
|
Company, on_delete=models.CASCADE, null=True, editable=False
|
||||||
)
|
)
|
||||||
@@ -57,18 +57,18 @@ class Offboarding(models.Model):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
class OffboardingStage(models.Model):
|
class OffboardingStage(HorillaModel):
|
||||||
"""
|
"""
|
||||||
Offboarding model
|
Offboarding model
|
||||||
"""
|
"""
|
||||||
|
|
||||||
types = [
|
types = [
|
||||||
("notice_period", "Notice period"),
|
("notice_period", _("Notice period")),
|
||||||
("fnf", "FnF Settlement"),
|
("fnf", _("FnF Settlement")),
|
||||||
("other", "Other"),
|
("other", _("Other")),
|
||||||
("interview", "Interview"),
|
("interview", _("Interview")),
|
||||||
("handover", "Work handover"),
|
("handover", _("Work handover")),
|
||||||
("archived", "Archived"),
|
("archived", _("Archived")),
|
||||||
]
|
]
|
||||||
|
|
||||||
title = models.CharField(max_length=20)
|
title = models.CharField(max_length=20)
|
||||||
@@ -76,7 +76,6 @@ class OffboardingStage(models.Model):
|
|||||||
offboarding_id = models.ForeignKey(Offboarding, on_delete=models.CASCADE)
|
offboarding_id = models.ForeignKey(Offboarding, on_delete=models.CASCADE)
|
||||||
managers = models.ManyToManyField(Employee)
|
managers = models.ManyToManyField(Employee)
|
||||||
sequence = models.IntegerField(default=0, editable=False)
|
sequence = models.IntegerField(default=0, editable=False)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return str(self.title)
|
return str(self.title)
|
||||||
@@ -101,16 +100,15 @@ def create_initial_stage(sender, instance, created, **kwargs):
|
|||||||
initial_stage.save()
|
initial_stage.save()
|
||||||
|
|
||||||
|
|
||||||
class OffboardingStageMultipleFile(models.Model):
|
class OffboardingStageMultipleFile(HorillaModel):
|
||||||
"""
|
"""
|
||||||
OffboardingStageMultipleFile
|
OffboardingStageMultipleFile
|
||||||
"""
|
"""
|
||||||
|
|
||||||
attachment = models.FileField(upload_to="offboarding/attachments")
|
attachment = models.FileField(upload_to="offboarding/attachments")
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
|
|
||||||
class OffboardingEmployee(models.Model):
|
class OffboardingEmployee(HorillaModel):
|
||||||
"""
|
"""
|
||||||
OffboardingEmployee model / Employee on stage
|
OffboardingEmployee model / Employee on stage
|
||||||
"""
|
"""
|
||||||
@@ -126,7 +124,6 @@ class OffboardingEmployee(models.Model):
|
|||||||
unit = models.CharField(max_length=10, choices=units, default="month", null=True)
|
unit = models.CharField(max_length=10, choices=units, default="month", null=True)
|
||||||
notice_period_starts = models.DateField(null=True)
|
notice_period_starts = models.DateField(null=True)
|
||||||
notice_period_ends = models.DateField(null=True, blank=True)
|
notice_period_ends = models.DateField(null=True, blank=True)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
objects = HorillaCompanyManager(
|
objects = HorillaCompanyManager(
|
||||||
related_company_field="employee_id__employee_work_info__company_id"
|
related_company_field="employee_id__employee_work_info__company_id"
|
||||||
)
|
)
|
||||||
@@ -135,15 +132,15 @@ class OffboardingEmployee(models.Model):
|
|||||||
return self.employee_id.get_full_name()
|
return self.employee_id.get_full_name()
|
||||||
|
|
||||||
|
|
||||||
class ResignationLetter(models.Model):
|
class ResignationLetter(HorillaModel):
|
||||||
"""
|
"""
|
||||||
Resignation Request Employee model
|
Resignation Request Employee model
|
||||||
"""
|
"""
|
||||||
|
|
||||||
statuses = [
|
statuses = [
|
||||||
("requested", "Requested"),
|
("requested", _("Requested")),
|
||||||
("approved", "Approved"),
|
("approved", _("Approved")),
|
||||||
("rejected", "Rejected"),
|
("rejected", _("Rejected")),
|
||||||
]
|
]
|
||||||
employee_id = models.ForeignKey(
|
employee_id = models.ForeignKey(
|
||||||
Employee, on_delete=models.CASCADE, verbose_name="Employee"
|
Employee, on_delete=models.CASCADE, verbose_name="Employee"
|
||||||
@@ -155,8 +152,6 @@ class ResignationLetter(models.Model):
|
|||||||
offboarding_employee_id = models.ForeignKey(
|
offboarding_employee_id = models.ForeignKey(
|
||||||
OffboardingEmployee, on_delete=models.CASCADE, editable=False, null=True
|
OffboardingEmployee, on_delete=models.CASCADE, editable=False, null=True
|
||||||
)
|
)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
is_active = models.BooleanField(default=True)
|
|
||||||
objects = HorillaCompanyManager(
|
objects = HorillaCompanyManager(
|
||||||
related_company_field="employee_id__employee_work_info__company_id"
|
related_company_field="employee_id__employee_work_info__company_id"
|
||||||
)
|
)
|
||||||
@@ -191,7 +186,8 @@ class ResignationLetter(models.Model):
|
|||||||
).first()
|
).first()
|
||||||
try:
|
try:
|
||||||
notice_period_ends = (
|
notice_period_ends = (
|
||||||
notice_period_starts + timedelta (contract_notice_end_date.notice_period_in_days)
|
notice_period_starts
|
||||||
|
+ timedelta(contract_notice_end_date.notice_period_in_days)
|
||||||
if contract_notice_end_date
|
if contract_notice_end_date
|
||||||
else notice_period_ends
|
else notice_period_ends
|
||||||
)
|
)
|
||||||
@@ -221,7 +217,7 @@ class ResignationLetter(models.Model):
|
|||||||
offboarding_employee.save()
|
offboarding_employee.save()
|
||||||
|
|
||||||
|
|
||||||
class OffboardingTask(models.Model):
|
class OffboardingTask(HorillaModel):
|
||||||
"""
|
"""
|
||||||
OffboardingTask model
|
OffboardingTask model
|
||||||
"""
|
"""
|
||||||
@@ -239,22 +235,20 @@ class OffboardingTask(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ["title", "stage_id"]
|
unique_together = ["title", "stage_id"]
|
||||||
|
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
|
||||||
class EmployeeTask(models.Model):
|
class EmployeeTask(HorillaModel):
|
||||||
"""
|
"""
|
||||||
EmployeeTask model
|
EmployeeTask model
|
||||||
"""
|
"""
|
||||||
|
|
||||||
statuses = [
|
statuses = [
|
||||||
("todo", "Todo"),
|
("todo", _("Todo")),
|
||||||
("inprogress", "In progress"),
|
("in_progress", _("In progress")),
|
||||||
("stuck", "Stuck"),
|
("stuck", _("Stuck")),
|
||||||
("completed", "Completed"),
|
("completed", _("Completed")),
|
||||||
]
|
]
|
||||||
employee_id = models.ForeignKey(
|
employee_id = models.ForeignKey(
|
||||||
OffboardingEmployee,
|
OffboardingEmployee,
|
||||||
@@ -262,7 +256,7 @@ class EmployeeTask(models.Model):
|
|||||||
verbose_name="Employee",
|
verbose_name="Employee",
|
||||||
null=True,
|
null=True,
|
||||||
)
|
)
|
||||||
status = models.CharField(max_length=10, choices=statuses, default="todo")
|
status = models.CharField(max_length=20, choices=statuses, default="todo")
|
||||||
task_id = models.ForeignKey(OffboardingTask, on_delete=models.CASCADE)
|
task_id = models.ForeignKey(OffboardingTask, on_delete=models.CASCADE)
|
||||||
description = models.TextField(null=True, editable=False, max_length=255)
|
description = models.TextField(null=True, editable=False, max_length=255)
|
||||||
history = HorillaAuditLog(
|
history = HorillaAuditLog(
|
||||||
@@ -271,7 +265,6 @@ class EmployeeTask(models.Model):
|
|||||||
HorillaAuditInfo,
|
HorillaAuditInfo,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ["employee_id", "task_id"]
|
unique_together = ["employee_id", "task_id"]
|
||||||
@@ -282,7 +275,7 @@ class EmployeeTask(models.Model):
|
|||||||
notify.send(
|
notify.send(
|
||||||
request.user.employee_get,
|
request.user.employee_get,
|
||||||
recipient=self.employee_id.employee_id.employee_user_id,
|
recipient=self.employee_id.employee_id.employee_user_id,
|
||||||
verb=f'Offboarding task "{self.task_id.title}" has been assiged',
|
verb=f'Offboarding task "{self.task_id.title}" has been assigned',
|
||||||
verb_ar=f"",
|
verb_ar=f"",
|
||||||
verb_de=f"",
|
verb_de=f"",
|
||||||
verb_es=f"",
|
verb_es=f"",
|
||||||
@@ -292,7 +285,7 @@ class EmployeeTask(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ExitReason(models.Model):
|
class ExitReason(HorillaModel):
|
||||||
"""
|
"""
|
||||||
ExitReason model
|
ExitReason model
|
||||||
"""
|
"""
|
||||||
@@ -302,10 +295,10 @@ class ExitReason(models.Model):
|
|||||||
offboarding_employee_id = models.ForeignKey(
|
offboarding_employee_id = models.ForeignKey(
|
||||||
OffboardingEmployee, on_delete=models.PROTECT
|
OffboardingEmployee, on_delete=models.PROTECT
|
||||||
)
|
)
|
||||||
attacments = models.ManyToManyField(OffboardingStageMultipleFile)
|
attachments = models.ManyToManyField(OffboardingStageMultipleFile)
|
||||||
|
|
||||||
|
|
||||||
class OffboardingNote(models.Model):
|
class OffboardingNote(HorillaModel):
|
||||||
"""
|
"""
|
||||||
OffboardingNote
|
OffboardingNote
|
||||||
"""
|
"""
|
||||||
@@ -323,7 +316,6 @@ class OffboardingNote(models.Model):
|
|||||||
stage_id = models.ForeignKey(
|
stage_id = models.ForeignKey(
|
||||||
OffboardingStage, on_delete=models.PROTECT, null=True, editable=False
|
OffboardingStage, on_delete=models.PROTECT, null=True, editable=False
|
||||||
)
|
)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ["-created_at"]
|
ordering = ["-created_at"]
|
||||||
@@ -338,7 +330,7 @@ class OffboardingNote(models.Model):
|
|||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class OffboardingGeneralSetting(models.Model):
|
class OffboardingGeneralSetting(HorillaModel):
|
||||||
"""
|
"""
|
||||||
OffboardingGeneralSettings
|
OffboardingGeneralSettings
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
// intial select notice period starts and end
|
// intial select notice period starts and end
|
||||||
function intialNoticePeriod($element) {
|
function initialNoticePeriod($element) {
|
||||||
let employeeId = $element.val()
|
let employeeId = $element.val()
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'get',
|
type: 'get',
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ def pipeline_grouper(filters={}, offboardings=[]):
|
|||||||
)
|
)
|
||||||
def pipeline(request):
|
def pipeline(request):
|
||||||
"""
|
"""
|
||||||
Offboarding pipleine view
|
Offboarding pipeline view
|
||||||
"""
|
"""
|
||||||
offboardings = PipelineFilter().qs
|
offboardings = PipelineFilter().qs
|
||||||
groups = pipeline_grouper({}, offboardings)
|
groups = pipeline_grouper({}, offboardings)
|
||||||
@@ -280,21 +280,24 @@ def delete_employee(request):
|
|||||||
"""
|
"""
|
||||||
employee_ids = request.GET.getlist("employee_ids")
|
employee_ids = request.GET.getlist("employee_ids")
|
||||||
instances = OffboardingEmployee.objects.filter(id__in=employee_ids)
|
instances = OffboardingEmployee.objects.filter(id__in=employee_ids)
|
||||||
OffboardingEmployee.objects.filter(id__in=employee_ids).delete()
|
if instances:
|
||||||
messages.success(request, _("Offboarding employee deleted"))
|
instances.delete()
|
||||||
notify.send(
|
messages.success(request, _("Offboarding employee deleted"))
|
||||||
request.user.employee_get,
|
notify.send(
|
||||||
recipient=User.objects.filter(
|
request.user.employee_get,
|
||||||
id__in=instances.values_list("employee_id__employee_user_id", flat=True)
|
recipient=User.objects.filter(
|
||||||
),
|
id__in=instances.values_list("employee_id__employee_user_id", flat=True)
|
||||||
verb=f"You have been removed from the offboarding",
|
),
|
||||||
verb_ar=f"",
|
verb=f"You have been removed from the offboarding",
|
||||||
verb_de=f"",
|
verb_ar=f"",
|
||||||
verb_es=f"",
|
verb_de=f"",
|
||||||
verb_fr=f"",
|
verb_es=f"",
|
||||||
redirect="offboarding/offboarding-pipeline",
|
verb_fr=f"",
|
||||||
icon="information",
|
redirect="offboarding/offboarding-pipeline",
|
||||||
)
|
icon="information",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
messages.error(request, _("Employees note found"))
|
||||||
return redirect(pipeline)
|
return redirect(pipeline)
|
||||||
|
|
||||||
|
|
||||||
@@ -556,10 +559,10 @@ def task_assign(request):
|
|||||||
task = OffboardingTask.objects.get(id=task_id)
|
task = OffboardingTask.objects.get(id=task_id)
|
||||||
for employee in employees:
|
for employee in employees:
|
||||||
try:
|
try:
|
||||||
assinged_task = EmployeeTask()
|
assigned_task = EmployeeTask()
|
||||||
assinged_task.employee_id = employee
|
assigned_task.employee_id = employee
|
||||||
assinged_task.task_id = task
|
assigned_task.task_id = task
|
||||||
assinged_task.save()
|
assigned_task.save()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
offboarding = employees.first().stage_id.offboarding_id
|
offboarding = employees.first().stage_id.offboarding_id
|
||||||
@@ -739,7 +742,9 @@ def delete_resignation_request(request):
|
|||||||
ids = request.GET.getlist("letter_ids")
|
ids = request.GET.getlist("letter_ids")
|
||||||
ResignationLetter.objects.filter(id__in=ids).delete()
|
ResignationLetter.objects.filter(id__in=ids).delete()
|
||||||
messages.success(request, _("Resignation letter deleted"))
|
messages.success(request, _("Resignation letter deleted"))
|
||||||
if request.META.get("HTTP_REFERER") and request.META.get("HTTP_REFERER").endswith("employee-profile/"):
|
if request.META.get("HTTP_REFERER") and request.META.get("HTTP_REFERER").endswith(
|
||||||
|
"employee-profile/"
|
||||||
|
):
|
||||||
return redirect("/employee/employee-profile/")
|
return redirect("/employee/employee-profile/")
|
||||||
else:
|
else:
|
||||||
return redirect(request_view)
|
return redirect(request_view)
|
||||||
|
|||||||
Reference in New Issue
Block a user