diff --git a/payroll/filters.py b/payroll/filters.py index 6a27ba35b..37c0ea285 100644 --- a/payroll/filters.py +++ b/payroll/filters.py @@ -330,6 +330,7 @@ class ReimbursementFilter(FilterSet): class Meta: model = Reimbursement fields = [ + "id", "status", "type", "employee_id", diff --git a/payroll/forms/component_forms.py b/payroll/forms/component_forms.py index 652129084..ff673181b 100644 --- a/payroll/forms/component_forms.py +++ b/payroll/forms/component_forms.py @@ -624,24 +624,6 @@ class ReimbursementForm(ModelForm): if field in self.fields: del self.fields[field] - emp = Employee.objects.get(id=self.initial["employee_id"]) - - try: - notify.send( - emp, - recipient=( - emp.employee_work_info.reporting_manager_id.employee_user_id - ), - verb=f"You have a new reimbursement request to approve for {emp}.", - verb_ar=f"لديك طلب استرداد نفقات جديد يتعين عليك الموافقة عليه لـ {emp}.", - verb_de=f"Sie haben einen neuen Rückerstattungsantrag zur Genehmigung für {emp}.", - verb_es=f"Tienes una nueva solicitud de reembolso para aprobar para {emp}.", - verb_fr=f"Vous avez une nouvelle demande de remboursement à approuver pour {emp}.", - icon="information", - redirect="/payroll/view-reimbursement", - ) - except Exception as e: - pass def as_p(self): """ @@ -652,6 +634,7 @@ class ReimbursementForm(ModelForm): return table_html def save(self, commit: bool = ...) -> Any: + is_new = not self.instance.pk attachemnt = [] multiple_attachment_ids = [] attachemnts = None @@ -666,6 +649,29 @@ class ReimbursementForm(ModelForm): multiple_attachment_ids.append(file_instance.pk) instance = super().save(commit) instance.other_attachments.add(*multiple_attachment_ids) + + emp = Employee.objects.get(id=self.initial["employee_id"]) + print("+++++++++++++++++++++++++") + print(self.instance.pk) + print("+++++++++++++++++++++++++") + try: + if is_new: + notify.send( + emp, + recipient=( + emp.employee_work_info.reporting_manager_id.employee_user_id + ), + verb=f"You have a new reimbursement request to approve for {emp}.", + verb_ar=f"لديك طلب استرداد نفقات جديد يتعين عليك الموافقة عليه لـ {emp}.", + verb_de=f"Sie haben einen neuen Rückerstattungsantrag zur Genehmigung für {emp}.", + verb_es=f"Tienes una nueva solicitud de reembolso para aprobar para {emp}.", + verb_fr=f"Vous avez une nouvelle demande de remboursement à approuver pour {emp}.", + icon="information", + redirect=f"/payroll/view-reimbursement?id={instance.id}", + ) + except Exception as e: + pass + return instance, attachemnts diff --git a/payroll/templates/payroll/reimbursement/view_reimbursement.html b/payroll/templates/payroll/reimbursement/view_reimbursement.html index 14afe713a..2cab1909c 100644 --- a/payroll/templates/payroll/reimbursement/view_reimbursement.html +++ b/payroll/templates/payroll/reimbursement/view_reimbursement.html @@ -21,6 +21,7 @@ {% if requests %} {% include 'payroll/reimbursement/request_cards.html' %} {% else %} + {% include "filter_tags.html" %}
diff --git a/payroll/views/component_views.py b/payroll/views/component_views.py index 17fb54da4..b74146017 100644 --- a/payroll/views/component_views.py +++ b/payroll/views/component_views.py @@ -524,6 +524,17 @@ def generate_payslip(request): data["installments"] = payslip["installments"] instance = save_payslip(**data) instances.append(instance) + notify.send( + request.user.employee_get, + recipient=employee.employee_user_id, + verb="Payslip has been generated for you.", + verb_ar="تم إصدار كشف راتب لك.", + verb_de="Gehaltsabrechnung wurde für Sie erstellt.", + verb_es="Se ha generado la nómina para usted.", + verb_fr="La fiche de paie a été générée pour vous.", + redirect=f"/payroll/view-payslip/{instance.id}", + icon="close", + ) messages.success(request, f"{employees.count()} payslip saved as draft") return redirect( f"/payroll/view-payslip?group_by=group_name&active_group={group_name}" @@ -589,6 +600,17 @@ def create_payslip(request, new_post_data=None): payslip_data["instance"] = save_payslip(**data) form = forms.PayslipForm() messages.success(request, _("Payslip Saved")) + notify.send( + request.user.employee_get, + recipient=employee.employee_user_id, + verb="Payslip has been generated for you.", + verb_ar="تم إصدار كشف راتب لك.", + verb_de="Gehaltsabrechnung wurde für Sie erstellt.", + verb_es="Se ha generado la nómina para usted.", + verb_fr="La fiche de paie a été générée pour vous.", + redirect=f"/payroll/view-payslip/{payslip.id}", + icon="close", + ) return render( request, "payroll/payslip/individual_payslip.html", @@ -1095,7 +1117,10 @@ def view_reimbursement(request): """ This method is used to render template to view reimbursements """ - filter_object = ReimbursementFilter({"status": "requested"}) + if request.GET: + filter_object = ReimbursementFilter(request.GET) + else: + filter_object = ReimbursementFilter({"status": "requested"}) requests = filter_own_recodes( request, filter_object.qs, "payroll.view_reimbursement" ) @@ -1200,7 +1225,7 @@ def approve_reimbursements(request): verb_de="Ihr Rückerstattungsantrag wurde storniert.", verb_es="Se ha cancelado tu solicitud de reembolso.", verb_fr="Votre demande de remboursement a été annulée.", - redirect="/payroll/view-reimbursement", + redirect=f"/payroll/view-reimbursement?id={reimbursement.id}", icon="checkmark", ) else: @@ -1212,7 +1237,7 @@ def approve_reimbursements(request): verb_de="Ihr Rückerstattungsantrag wurde genehmigt.", verb_es="Se ha aprobado tu solicitud de reembolso.", verb_fr="Votre demande de remboursement a été approuvée.", - redirect="/payroll/view-reimbursement", + redirect=f"/payroll/view-reimbursement?id={reimbursement.id}", icon="checkmark", ) return redirect(view_reimbursement)