2023-07-26 10:32:58 +05:30
|
|
|
"""
|
|
|
|
|
forms.py
|
|
|
|
|
"""
|
2024-01-31 16:20:15 +05:30
|
|
|
|
2023-07-26 10:32:58 +05:30
|
|
|
from django import forms
|
2023-10-17 16:09:49 +05:30
|
|
|
from django.forms import widgets
|
2023-07-26 10:32:58 +05:30
|
|
|
from django.utils.translation import gettext_lazy as trans
|
|
|
|
|
from django.template.loader import render_to_string
|
2024-01-30 19:09:51 +05:30
|
|
|
from payroll.models.models import (
|
|
|
|
|
PayrollGeneralSetting,
|
|
|
|
|
ReimbursementrequestComment,
|
|
|
|
|
WorkRecord,
|
|
|
|
|
)
|
2023-07-26 10:32:58 +05:30
|
|
|
from payroll.models.models import Contract
|
2023-12-01 15:36:51 +05:30
|
|
|
from base.methods import reload_queryset
|
2023-07-26 10:32:58 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelForm(forms.ModelForm):
|
|
|
|
|
"""
|
|
|
|
|
ModelForm override for additional style
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super().__init__(*args, **kwargs)
|
2023-12-01 15:36:51 +05:30
|
|
|
reload_queryset(self.fields)
|
2023-07-26 10:32:58 +05:30
|
|
|
for _, field in self.fields.items():
|
|
|
|
|
widget = field.widget
|
|
|
|
|
|
|
|
|
|
if isinstance(widget, (forms.DateInput)):
|
|
|
|
|
field.widget.attrs.update({"class": "oh-input oh-calendar-input w-100"})
|
|
|
|
|
elif isinstance(
|
|
|
|
|
widget, (forms.NumberInput, forms.EmailInput, forms.TextInput)
|
|
|
|
|
):
|
|
|
|
|
label = trans(field.label)
|
|
|
|
|
field.widget.attrs.update(
|
|
|
|
|
{"class": "oh-input w-100", "placeholder": label}
|
|
|
|
|
)
|
|
|
|
|
elif isinstance(widget, (forms.Select,)):
|
|
|
|
|
field.widget.attrs.update(
|
|
|
|
|
{"class": "oh-select oh-select-2 select2-hidden-accessible"}
|
|
|
|
|
)
|
|
|
|
|
elif isinstance(widget, (forms.Textarea)):
|
|
|
|
|
label = trans(field.label)
|
|
|
|
|
field.widget.attrs.update(
|
|
|
|
|
{
|
|
|
|
|
"class": "oh-input w-100",
|
|
|
|
|
"placeholder": label,
|
|
|
|
|
"rows": 2,
|
|
|
|
|
"cols": 40,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
elif isinstance(
|
|
|
|
|
widget,
|
|
|
|
|
(
|
|
|
|
|
forms.CheckboxInput,
|
|
|
|
|
forms.CheckboxSelectMultiple,
|
|
|
|
|
),
|
|
|
|
|
):
|
|
|
|
|
field.widget.attrs.update({"class": "oh-switch__checkbox"})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ContractForm(ModelForm):
|
|
|
|
|
"""
|
|
|
|
|
ContactForm
|
|
|
|
|
"""
|
2023-10-17 16:09:49 +05:30
|
|
|
|
2023-07-26 10:32:58 +05:30
|
|
|
verbose_name = trans("Contract")
|
2023-10-17 16:09:49 +05:30
|
|
|
contract_start_date = forms.DateField()
|
2024-01-31 16:20:15 +05:30
|
|
|
contract_end_date = forms.DateField(required=False)
|
2023-10-17 16:09:49 +05:30
|
|
|
|
2023-07-26 10:32:58 +05:30
|
|
|
class Meta:
|
|
|
|
|
"""
|
|
|
|
|
Meta class for additional options
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
fields = "__all__"
|
|
|
|
|
exclude = [
|
|
|
|
|
"is_active",
|
|
|
|
|
]
|
|
|
|
|
model = Contract
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super().__init__(*args, **kwargs)
|
2023-10-17 16:09:49 +05:30
|
|
|
self.fields["employee_id"].widget.attrs.update(
|
|
|
|
|
{"onchange": "contractInitial(this)"}
|
|
|
|
|
)
|
|
|
|
|
self.fields["contract_start_date"].widget = widgets.DateInput(
|
|
|
|
|
attrs={
|
2024-01-30 19:09:51 +05:30
|
|
|
"type": "date",
|
2023-10-17 16:09:49 +05:30
|
|
|
"class": "oh-input w-100",
|
|
|
|
|
"placeholder": "Select a date",
|
|
|
|
|
}
|
2023-07-26 10:32:58 +05:30
|
|
|
)
|
2023-10-17 16:09:49 +05:30
|
|
|
self.fields["contract_end_date"].widget = widgets.DateInput(
|
|
|
|
|
attrs={
|
2024-01-30 19:09:51 +05:30
|
|
|
"type": "date",
|
2023-10-17 16:09:49 +05:30
|
|
|
"class": "oh-input w-100",
|
|
|
|
|
"placeholder": "Select a date",
|
|
|
|
|
}
|
2023-07-26 10:32:58 +05:30
|
|
|
)
|
2024-01-31 16:20:15 +05:30
|
|
|
self.fields["contract_status"].widget.attrs.update(
|
|
|
|
|
{
|
|
|
|
|
"class": "oh-select",
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
if self.instance and self.instance.pk:
|
|
|
|
|
dynamic_url = self.get_dynamic_hx_post_url(self.instance)
|
|
|
|
|
self.fields["contract_status"].widget.attrs.update(
|
|
|
|
|
{
|
|
|
|
|
"hx-target": "#contractFormTarget",
|
|
|
|
|
"hx-post": dynamic_url,
|
|
|
|
|
"hx-swap": "outerHTML",
|
|
|
|
|
}
|
|
|
|
|
)
|
2024-01-30 19:09:51 +05:30
|
|
|
first = PayrollGeneralSetting.objects.first()
|
|
|
|
|
if first and self.instance.pk is None:
|
|
|
|
|
self.initial["notice_period_in_month"] = first.notice_period
|
2023-07-26 10:32:58 +05:30
|
|
|
|
|
|
|
|
def as_p(self):
|
|
|
|
|
"""
|
|
|
|
|
Render the form fields as HTML table rows with Bootstrap styling.
|
|
|
|
|
"""
|
|
|
|
|
context = {"form": self}
|
|
|
|
|
table_html = render_to_string("contract_form.html", context)
|
|
|
|
|
return table_html
|
|
|
|
|
|
2024-01-31 16:20:15 +05:30
|
|
|
def get_dynamic_hx_post_url(self, instance):
|
|
|
|
|
return f"/payroll/update-contract-status/{instance.pk}"
|
|
|
|
|
|
2023-07-26 10:32:58 +05:30
|
|
|
|
|
|
|
|
class WorkRecordForm(ModelForm):
|
|
|
|
|
"""
|
|
|
|
|
WorkRecordForm
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
"""
|
|
|
|
|
Meta class for additional options
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
fields = "__all__"
|
|
|
|
|
model = WorkRecord
|
2024-01-15 11:48:16 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReimbursementrequestCommentForm(ModelForm):
|
|
|
|
|
"""
|
|
|
|
|
ReimbursementrequestCommentForm form
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
"""
|
|
|
|
|
Meta class for additional options
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
model = ReimbursementrequestComment
|
2024-01-30 19:09:51 +05:30
|
|
|
fields = ("comment",)
|