diff --git a/employee/templates/employee/view/individual.html b/employee/templates/employee/view/individual.html index 92369cd26..7c017d70b 100644 --- a/employee/templates/employee/view/individual.html +++ b/employee/templates/employee/view/individual.html @@ -453,6 +453,9 @@ {% endif %} {% endif %} +
diff --git a/employee/templates/tabs/bonus_points.html b/employee/templates/tabs/bonus_points.html index f3f6bc252..3c2f340bc 100644 --- a/employee/templates/tabs/bonus_points.html +++ b/employee/templates/tabs/bonus_points.html @@ -1,4 +1,4 @@ -{% load i18n %} {% load basefilters %} +{% load i18n %} {% load basefilters %} {% load horillafilters %}
@@ -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 = [