Payroll beta (#17)

* [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
This commit is contained in:
Horilla
2023-07-26 10:32:58 +05:30
committed by GitHub
parent 8c825f0258
commit b1a9ee02e2
83 changed files with 8412 additions and 2 deletions

110
payroll/forms/forms.py Normal file
View File

@@ -0,0 +1,110 @@
"""
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