Files
ihrm/pms/cbvs.py
2024-08-30 14:51:21 +05:30

270 lines
8.1 KiB
Python

from typing import Any
from django.contrib import messages
from django.http import HttpResponse
from django.shortcuts import render
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _trans
from horilla_views.generic.cbv import views
from pms import models
from pms.filters import BonusPointSettingFilter, EmployeeBonusPointFilter
from pms.forms import BonusPointSettingForm, EmployeeBonusPointForm
# ================Models for BonusPointSetting==============
class BonusPointSettingSectionView(views.HorillaSectionView):
"""
BonusPointSetting SectionView
"""
nav_url = reverse_lazy("bonus-point-setting-nav")
view_url = reverse_lazy("bonus-point-setting-list-view")
view_container_id = "listContainer"
# script_static_paths = [
# "static/automation/automation.js",
# ]
template_name = "bonus/bonus_point_setting_section.html"
class BonusPointSettingNavView(views.HorillaNavView):
"""
BonusPointSetting nav view
"""
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.create_attrs = f"""
hx-get="{reverse_lazy("create-bonus-point-setting")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
nav_title = _trans("Bonus Point Setting")
search_url = reverse_lazy("bonus-point-setting-list-view")
search_swap_target = "#listContainer"
class BonusPointSettingFormView(views.HorillaFormView):
"""
BonusPointSettingForm View
"""
form_class = BonusPointSettingForm
model = models.BonusPointSetting
new_display_title = _trans("Create Bonus Point Setting")
template_name = "bonus/bonus_form.html"
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
instance = models.BonusPointSetting.objects.filter(pk=self.kwargs["pk"]).first()
kwargs["instance"] = instance
return kwargs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
def form_invalid(self, form: Any) -> HttpResponse:
if not form.is_valid():
errors = form.errors.as_data()
return render(
self.request, self.template_name, {"form": form, "errors": errors}
)
return super().form_invalid(form)
def form_valid(self, form: BonusPointSettingForm) -> views.HttpResponse:
if form.is_valid():
message = "Bonus Point Setting added"
if form.instance.pk:
message = "Bonus Point Setting updated"
form.save()
messages.success(self.request, _trans(message))
return self.HttpResponse()
return super().form_valid(form)
class BonusPointSettingListView(views.HorillaListView):
"""
BnusPointSetting list view
"""
model = models.BonusPointSetting
search_url = reverse_lazy("bonus-point-setting-list-view")
filter_class = BonusPointSettingFilter
action_method = "action_template"
# actions = [
# {
# "action": "Edit",
# "icon": "create-outline",
# "attrs": """
# class="oh-btn oh-btn--light-bkg w-100"
# hx-get="{edit_url}?instance_ids={ordered_ids}"
# hx-target="#genericModalBody"
# data-target="#genericModal"
# data-toggle="oh-modal-toggle"
# """,
# },
# {
# "action": "Delete",
# "icon": "trash-outline",
# "attrs": """
# class="oh-btn oh-btn--light-bkg w-100 tex-danger"
# onclick="
# event.stopPropagation();
# confirm('Do you want to delete the bonus point setting?','{delete_url}')
# "
# """,
# },
# ]
columns = [
("Model", "get_model_display"),
("Applicable For", "get_applicable_for_display"),
("Bonus For", "get_bonus_for_display"),
("Condition", "get_condition"),
("Points", "points"),
("Is Active", "is_active_toggle"),
]
# ================Models for EmployeeBonusPoint==============
class EmployeeBonusPointSectionView(views.HorillaSectionView):
"""
EmployeeBonusPoint SectionView
"""
nav_url = reverse_lazy("employee-bonus-point-nav")
view_url = reverse_lazy("employee-bonus-point-list-view")
view_container_id = "listContainer"
# script_static_paths = [
# "static/automation/automation.js",
# ]
template_name = "bonus/employee_bonus_point_section.html"
class EmployeeBonusPointNavView(views.HorillaNavView):
"""
BonusPoint nav view
"""
template_name = "bonus/bonus_point_nav.html"
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.create_attrs = f"""
hx-get="{reverse_lazy("create-employee-bonus-point")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
nav_title = _trans("Employee Bonus Point ")
search_url = reverse_lazy("employee-bonus-point-list-view")
search_swap_target = "#listContainer"
group_by_fields = [
("employee_id", _trans("Employee")),
(
"employee_id__employee_work_info__reporting_manager_id",
_trans("Reporting Manager"),
),
("employee_id__employee_work_info__department_id", _trans("Department")),
("employee_id__employee_work_info__job_position_id", _trans("Job Position")),
(
"employee_id__employee_work_info__employee_type_id",
_trans("Employement Type"),
),
("employee_id__employee_work_info__company_id", _trans("Company")),
]
class EmployeeBonusPointFormView(views.HorillaFormView):
"""
BonusPointForm View
"""
form_class = EmployeeBonusPointForm
model = models.EmployeeBonusPoint
new_display_title = _trans("Create Employee Bonus Point ")
# template_name = "bonus/bonus_form.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
def form_invalid(self, form: Any) -> HttpResponse:
if not form.is_valid():
errors = form.errors.as_data()
return render(
self.request, self.template_name, {"form": form, "errors": errors}
)
return super().form_invalid(form)
def form_valid(self, form: EmployeeBonusPointForm) -> views.HttpResponse:
if form.is_valid():
message = "Bonus Point added"
if form.instance.pk:
message = "Bonus Point updated"
form.save()
messages.success(self.request, _trans(message))
return self.HttpResponse()
return super().form_valid(form)
class EmployeeBonusPointListView(views.HorillaListView):
"""
BnusPoint list view
"""
model = models.EmployeeBonusPoint
search_url = reverse_lazy("employee-bonus-point-list-view")
filter_class = EmployeeBonusPointFilter
action_method = "action_template"
bulk_update_fields = [
"employee_id",
"bonus_point",
"based_on",
]
# actions = [
# {
# "action": "Edit",
# "icon": "create-outline",
# "attrs": """
# class="oh-btn oh-btn--light-bkg w-100"
# hx-get="{edit_url}?instance_ids={ordered_ids}"
# hx-target="#genericModalBody"
# data-target="#genericModal"
# data-toggle="oh-modal-toggle"
# """,
# },
# {
# "action": "Delete",
# "icon": "trash-outline",
# "attrs": """
# class="oh-btn oh-btn--light-bkg w-100 tex-danger"
# onclick="
# event.stopPropagation();
# confirm('Do you want to delete the automation?','{delete_url}')
# "
# """,
# },
# ]
columns = [
("Employee", "employee_id"),
("Bonus Point", "bonus_point"),
("Based On", "based_on"),
]