@@ -10,7 +10,11 @@
title="Add points"
data-toggle="oh-modal-toggle"
data-target="#objectDetailsModal"
- hx-get="{% url 'add-bonus-points' employee.id %}"
+ {% if "pms"|app_installed %}
+ hx-get="{% url 'create-employee-bonus-point'%}?employee_id={{employee.id}} "
+ {% else %}
+ hx-get="{% url 'add-bonus-points' employee.id %}"
+ {% endif %}
hx-target="#objectDetailsModalTarget"
>
window.location.reload();")
@@ -3312,7 +3318,7 @@ def redeem_points(request, emp_id):
"tabs/forms/redeem_points_form.html",
{
"form": form,
- "employee": user,
+ "employee": employee,
},
)
diff --git a/pms/cbvs.py b/pms/cbvs.py
index 9d5d084dc..9f43940e3 100644
--- a/pms/cbvs.py
+++ b/pms/cbvs.py
@@ -206,7 +206,13 @@ class EmployeeBonusPointFormView(views.HorillaFormView):
message = "Bonus Point updated"
form.save()
messages.success(self.request, _trans(message))
- return self.HttpResponse()
+ return self.HttpResponse(
+ """
+
+ """
+ )
return super().form_valid(form)
diff --git a/pms/forms.py b/pms/forms.py
index 8431a0187..3445cd42d 100644
--- a/pms/forms.py
+++ b/pms/forms.py
@@ -1099,54 +1099,11 @@ class BonusPointSettingForm(MF):
}
),
)
- # condition_html = forms.CharField(widget=forms.HiddenInput())
- # condition_querystring = forms.CharField(widget=forms.HiddenInput())
-
- # cols = {"template_attachments": 12}
- # def __init__(self, *args, **kwargs):
- # super().__init__(*args, **kwargs)
-
- # if not self.data:
- # mail_to = []
-
- # initial = []
- # mail_details_choice = []
- # if self.instance.pk:
- # mail_to = generate_choices(self.instance.model)[0]
- # mail_details_choice = generate_choices(self.instance.model)[1]
- # self.fields["mail_to"] = forms.MultipleChoiceField(choices=mail_to)
- # self.fields["mail_details"] = forms.ChoiceField(
- # choices=mail_details_choice,
- # help_text="Fill mail template details(reciever/instance, `self` will be the person who trigger the automation)",
- # )
- # self.fields["mail_to"].initial = initial
- # attrs = self.fields["mail_to"].widget.attrs
- # attrs["class"] = "oh-select oh-select-2 w-100"
- # attrs = self.fields["model"].widget.attrs
- # attrs["onchange"] = "getToMail($(this))"
- # self.fields["mail_template"].empty_label = None
- # attrs = attrs.copy()
- # del attrs["onchange"]
- # self.fields["mail_details"].widget.attrs = attrs
- # if self.instance.pk:
- # self.fields["condition"].initial = self.instance.condition_html
- # self.fields["condition_html"].initial = self.instance.condition_html
- # self.fields["condition_querystring"].initial = (
- # self.instance.condition_querystring
- # )
class Meta:
model = BonusPointSetting
fields = "__all__"
- # def as_p(self):
- # """
- # Render the form fields as HTML table rows with Bootstrap styling.
- # """
- # context = {"form": self}
- # table_html = render_to_string("horilla_form.html", context)
- # return table_html
-
def clean(self):
cleaned_data = super().clean()
model = cleaned_data.get("model")
@@ -1174,17 +1131,6 @@ class BonusPointSettingForm(MF):
return cleaned_data
- # def save(self, commit: bool = ...) -> Any:
- # self.instance: MailAutomation = self.instance
- # condition_querystring = self.cleaned_data["condition_querystring"]
- # condition_html = self.cleaned_data["condition_html"]
- # mail_to = self.data.getlist("mail_to")
- # self.instance.mail_to = str(mail_to)
- # self.instance.mail_details = self.data["mail_details"]
- # self.instance.condition_querystring = condition_querystring
- # self.instance.condition_html = condition_html
- # return super().save(commit)
-
class EmployeeBonusPointForm(MF):
"""
@@ -1194,3 +1140,13 @@ class EmployeeBonusPointForm(MF):
class Meta:
model = EmployeeBonusPoint
fields = "__all__"
+ exclude = ["bonus_point_id", "instance", "is_active"]
+
+ def __init__(self, *args, **kwargs):
+ request = getattr(horilla_middlewares._thread_locals, "request", None)
+ super().__init__(*args, **kwargs)
+ if request.GET.get("employee_id"):
+ employee = Employee.objects.filter(id=request.GET["employee_id"])
+ if employee:
+ self.fields["employee_id"].queryset = employee
+ self.initial["employee_id"] = employee.first()
diff --git a/pms/methods.py b/pms/methods.py
index caf35167d..ce1823729 100644
--- a/pms/methods.py
+++ b/pms/methods.py
@@ -4,7 +4,7 @@ from django.shortcuts import render
from pyexpat.errors import messages
from employee.models import EmployeeWorkInformation
-from pms.models import EmployeeObjective, Feedback, Objective
+from pms.models import EmployeeObjective, Objective
decorator_with_arguments = (
lambda decorator: lambda *args, **kwargs: lambda func: decorator(
diff --git a/pms/models.py b/pms/models.py
index 939c2b50e..aaae6cc29 100644
--- a/pms/models.py
+++ b/pms/models.py
@@ -14,7 +14,7 @@ from django.utils.translation import gettext_lazy as _
from base.horilla_company_manager import HorillaCompanyManager
from base.models import Company, Department, JobPosition
-from employee.models import Employee
+from employee.models import BonusPoint, Employee
from horilla.models import HorillaModel
from horilla_audit.methods import get_diff
from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog
@@ -732,7 +732,7 @@ class MeetingsAnswer(models.Model):
return f"{self.employee_id.employee_first_name} - {self.answer}"
-class EmployeeBonusPoint(models.Model):
+class EmployeeBonusPoint(HorillaModel):
employee_id = models.ForeignKey(
Employee,
on_delete=models.DO_NOTHING,
@@ -744,6 +744,13 @@ class EmployeeBonusPoint(models.Model):
bonus_point = models.IntegerField(default=0)
instance = models.CharField(max_length=150, null=True, blank=True)
based_on = models.CharField(max_length=150)
+ bonus_point_id = models.ForeignKey(
+ BonusPoint,
+ null=True,
+ blank=True,
+ on_delete=models.CASCADE,
+ related_name="employeebonuspoint_set",
+ )
def __str__(self):
return f"{self.employee_id.employee_first_name} - {self.bonus_point}"
@@ -757,6 +764,20 @@ class EmployeeBonusPoint(models.Model):
context={"instance": self},
)
+ def save(self, *args, **kwargs):
+ super().save(*args, **kwargs)
+ if not BonusPoint.objects.filter(employee_id=self.employee_id).exists():
+ bonus_point = BonusPoint.objects.create(
+ employee_id=self.employee_id,
+ points=self.bonus_point,
+ reason=self.based_on,
+ )
+ else:
+ bonus_point = BonusPoint.objects.get(employee_id=self.employee_id)
+ bonus_point.points += self.bonus_point
+ bonus_point.reason = self.based_on
+ bonus_point.save()
+
class BonusPointSetting(models.Model):
MODEL_CHOICES = [