[ADD] PAYROLL: Encashment unit

This commit is contained in:
Horilla
2024-01-31 17:02:36 +05:30
parent f2cb92e92e
commit fa34052b0f
4 changed files with 54 additions and 21 deletions

View File

@@ -330,6 +330,7 @@ class ReimbursementFilter(FilterSet):
class Meta:
model = Reimbursement
fields = [
"id",
"status",
"type",
"employee_id",

View File

@@ -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

View File

@@ -21,6 +21,7 @@
{% if requests %}
{% include 'payroll/reimbursement/request_cards.html' %}
{% else %}
{% include "filter_tags.html" %}
<main :class="sidebarOpen ? 'oh-main__sidebar-visible' : ''">
<div class="oh-wrapper">
<div class="oh-404">

View File

@@ -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)