* [ADD]payroll * [UPDT]add payroll to submenu * [UPDT]add payroll url to main urls * [FIX]payroll url to main urls * [FIX]payslip generate date bug * [UPDT]Payroll changes
111 lines
3.6 KiB
Python
111 lines
3.6 KiB
Python
"""
|
|
forms.py
|
|
"""
|
|
from django import forms
|
|
from django.utils.translation import gettext_lazy as trans
|
|
from django.template.loader import render_to_string
|
|
from payroll.models.models import WorkRecord
|
|
from payroll.models.models import Contract
|
|
|
|
|
|
class ModelForm(forms.ModelForm):
|
|
"""
|
|
ModelForm override for additional style
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
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
|
|
"""
|
|
verbose_name = trans("Contract")
|
|
class Meta:
|
|
"""
|
|
Meta class for additional options
|
|
"""
|
|
|
|
fields = "__all__"
|
|
exclude = [
|
|
"is_active",
|
|
]
|
|
model = Contract
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.fields["contract_name"].widget.attrs["autocomplete"] = "off"
|
|
self.fields["contract_start_date"].widget.attrs["autocomplete"] = "off"
|
|
self.fields["contract_start_date"].widget.attrs["class"] = "oh-input w-100"
|
|
self.fields["contract_start_date"].widget = forms.TextInput(
|
|
attrs={"type": "date", "class": "oh-input w-100"}
|
|
)
|
|
self.fields["contract_end_date"].widget.attrs["autocomplete"] = "off"
|
|
self.fields["contract_end_date"].widget.attrs["class"] = "oh-input w-100"
|
|
self.fields["contract_end_date"].widget = forms.TextInput(
|
|
attrs={"type": "date", "class": "oh-input w-100"}
|
|
)
|
|
self.fields["employee_id"].widget.attrs["data-contract-style"] = ""
|
|
self.fields["department"].widget.attrs["data-contract-style"] = ""
|
|
self.fields["job_position"].widget.attrs["data-contract-style"] = ""
|
|
self.fields["job_role"].widget.attrs["data-contract-style"] = ""
|
|
self.fields["work_type"].widget.attrs["data-contract-style"] = ""
|
|
self.fields["shift"].widget.attrs["data-contract-style"] = ""
|
|
|
|
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
|
|
|
|
|
|
class WorkRecordForm(ModelForm):
|
|
"""
|
|
WorkRecordForm
|
|
"""
|
|
|
|
class Meta:
|
|
"""
|
|
Meta class for additional options
|
|
"""
|
|
|
|
fields = "__all__"
|
|
model = WorkRecord
|