diff --git a/payroll/forms/forms.py b/payroll/forms/forms.py index a0194a9ef..65f89774b 100644 --- a/payroll/forms/forms.py +++ b/payroll/forms/forms.py @@ -3,17 +3,20 @@ forms.py """ from datetime import date +from typing import Any from django import forms from django.forms import widgets from django.utils.translation import gettext_lazy as trans from django.template.loader import render_to_string from base import thread_local_middleware from base.forms import Form +from employee.forms import MultipleFileField from employee.models import Employee from payroll.context_processors import get_active_employees from payroll.models.models import ( EncashmentGeneralSettings, PayrollGeneralSetting, + ReimbursementFile, ReimbursementrequestComment, WorkRecord, ) @@ -176,7 +179,48 @@ class ReimbursementRequestCommentForm(ModelForm): model = ReimbursementrequestComment fields = ("comment",) - exclude = ["is_active"] + + +class reimbursementCommentForm(ModelForm): + """ + Reimbursement request comment model form + """ + + verbose_name = "Add Comment" + + class Meta: + model = ReimbursementrequestComment + fields = "__all__" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["files"] = MultipleFileField(label="files") + self.fields["files"].required = False + + def as_p(self): + """ + Render the form fields as HTML table rows with Bootstrap styling. + """ + context = {"form": self} + table_html = render_to_string("common_form.html", context) + return table_html + + def save(self, commit: bool = ...) -> Any: + multiple_files_ids = [] + files = None + if self.files.getlist("files"): + files = self.files.getlist("files") + self.instance.attachemnt = files[0] + multiple_files_ids = [] + for attachemnt in files: + file_instance = ReimbursementFile() + file_instance.file = attachemnt + file_instance.save() + multiple_files_ids.append(file_instance.pk) + instance = super().save(commit) + if commit: + instance.files.add(*multiple_files_ids) + return instance, files class EncashmentGeneralSettingsForm(ModelForm): diff --git a/payroll/models/models.py b/payroll/models/models.py index 88d6420f6..5bfaec7b4 100644 --- a/payroll/models/models.py +++ b/payroll/models/models.py @@ -1757,6 +1757,11 @@ except: pass +class ReimbursementFile(models.Model): + file = models.FileField(upload_to="payroll/request_files") + objects = models.Manager() + + class ReimbursementrequestComment(HorillaModel): """ ReimbursementRequestComment Model @@ -1765,6 +1770,12 @@ class ReimbursementrequestComment(HorillaModel): request_id = models.ForeignKey(Reimbursement, on_delete=models.CASCADE) employee_id = models.ForeignKey(Employee, on_delete=models.CASCADE) comment = models.TextField(null=True, verbose_name=_("Comment"), max_length=255) + files = models.ManyToManyField(ReimbursementFile, blank=True) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name=_("Created At"), + null=True, + ) def __str__(self) -> str: return f"{self.comment}" diff --git a/payroll/templates/payroll/reimbursement/filter.html b/payroll/templates/payroll/reimbursement/filter.html index 79cc8e7f9..1bd54451d 100644 --- a/payroll/templates/payroll/reimbursement/filter.html +++ b/payroll/templates/payroll/reimbursement/filter.html @@ -1,7 +1,7 @@ {% load i18n %}