[UPDT] Add translation strings
This commit is contained in:
@@ -80,7 +80,7 @@ class JobPosition(models.Model):
|
||||
job_position = models.CharField(max_length=50, blank=False, null=False, unique=True)
|
||||
department_id = models.ForeignKey(
|
||||
Department,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
blank=True,
|
||||
related_name="job_position",
|
||||
verbose_name=_("Department"),
|
||||
@@ -95,7 +95,7 @@ class JobRole(models.Model):
|
||||
"""JobRole model"""
|
||||
|
||||
job_position_id = models.ForeignKey(
|
||||
JobPosition, on_delete=models.CASCADE, verbose_name=_("Job Position")
|
||||
JobPosition, on_delete=models.PROTECT, verbose_name=_("Job Position")
|
||||
)
|
||||
job_role = models.CharField(max_length=50, blank=False, null=True)
|
||||
objects = models.Manager()
|
||||
@@ -131,13 +131,13 @@ class RotatingWorkType(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
work_type1 = models.ForeignKey(
|
||||
WorkType,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="work_type1",
|
||||
verbose_name=_("Work Type 1"),
|
||||
)
|
||||
work_type2 = models.ForeignKey(
|
||||
WorkType,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="work_type2",
|
||||
verbose_name=_("Work Type 2"),
|
||||
)
|
||||
@@ -181,12 +181,12 @@ class RotatingWorkTypeAssign(models.Model):
|
||||
|
||||
employee_id = models.ForeignKey(
|
||||
"employee.Employee",
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
verbose_name=_("Employee"),
|
||||
)
|
||||
rotating_work_type_id = models.ForeignKey(
|
||||
RotatingWorkType, on_delete=models.CASCADE, verbose_name=_("Rotating work type")
|
||||
RotatingWorkType, on_delete=models.PROTECT, verbose_name=_("Rotating work type")
|
||||
)
|
||||
next_change_date = models.DateField(null=True)
|
||||
start_date = models.DateField(default=django.utils.timezone.now)
|
||||
@@ -203,11 +203,11 @@ class RotatingWorkTypeAssign(models.Model):
|
||||
current_work_type = models.ForeignKey(
|
||||
WorkType,
|
||||
null=True,
|
||||
on_delete=models.DO_NOTHING,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="current_work_type",
|
||||
)
|
||||
next_work_type = models.ForeignKey(
|
||||
WorkType, null=True, on_delete=models.DO_NOTHING, related_name="next_work_type"
|
||||
WorkType, null=True, on_delete=models.PROTECT, related_name="next_work_type"
|
||||
)
|
||||
is_active = models.BooleanField(default=True)
|
||||
objects = models.Manager()
|
||||
@@ -254,7 +254,6 @@ class EmployeeShiftDay(models.Model):
|
||||
def __str__(self) -> str:
|
||||
return str(_(self.day))
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
class EmployeeShift(models.Model):
|
||||
"""
|
||||
EmployeeShift model
|
||||
@@ -288,10 +287,10 @@ class EmployeeShiftSchedule(models.Model):
|
||||
"""
|
||||
|
||||
day = models.ForeignKey(
|
||||
EmployeeShiftDay, on_delete=models.CASCADE, related_name="day_schedule"
|
||||
EmployeeShiftDay, on_delete=models.PROTECT, related_name="day_schedule"
|
||||
)
|
||||
shift_id = models.ForeignKey(
|
||||
EmployeeShift, on_delete=models.CASCADE, verbose_name=_("Shift")
|
||||
EmployeeShift, on_delete=models.PROTECT, verbose_name=_("Shift")
|
||||
)
|
||||
minimum_working_hour = models.CharField(
|
||||
default="08:15", max_length=5, validators=[validate_time_format]
|
||||
@@ -329,13 +328,13 @@ class RotatingShift(models.Model):
|
||||
shift1 = models.ForeignKey(
|
||||
EmployeeShift,
|
||||
related_name="shift1",
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("Shift 1"),
|
||||
)
|
||||
shift2 = models.ForeignKey(
|
||||
EmployeeShift,
|
||||
related_name="shift2",
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("Shift 2"),
|
||||
)
|
||||
objects = models.Manager()
|
||||
@@ -354,10 +353,10 @@ class RotatingShiftAssign(models.Model):
|
||||
"""
|
||||
|
||||
employee_id = models.ForeignKey(
|
||||
"employee.Employee", on_delete=models.CASCADE, verbose_name=_("Employee")
|
||||
"employee.Employee", on_delete=models.PROTECT, verbose_name=_("Employee")
|
||||
)
|
||||
rotating_shift_id = models.ForeignKey(
|
||||
RotatingShift, on_delete=models.CASCADE, verbose_name=_("Rotating Shift")
|
||||
RotatingShift, on_delete=models.PROTECT, verbose_name=_("Rotating Shift")
|
||||
)
|
||||
next_change_date = models.DateField(null=True)
|
||||
start_date = models.DateField(
|
||||
@@ -375,12 +374,12 @@ class RotatingShiftAssign(models.Model):
|
||||
)
|
||||
current_shift = models.ForeignKey(
|
||||
EmployeeShift,
|
||||
on_delete=models.DO_NOTHING,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
related_name="current_shift",
|
||||
)
|
||||
next_shift = models.ForeignKey(
|
||||
EmployeeShift, on_delete=models.DO_NOTHING, null=True, related_name="next_shift"
|
||||
EmployeeShift, on_delete=models.PROTECT, null=True, related_name="next_shift"
|
||||
)
|
||||
is_active = models.BooleanField(default=True)
|
||||
objects = models.Manager()
|
||||
@@ -411,7 +410,7 @@ class WorkTypeRequest(models.Model):
|
||||
|
||||
employee_id = models.ForeignKey(
|
||||
"employee.Employee",
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
related_name="work_type_request",
|
||||
verbose_name=_("Employee"),
|
||||
@@ -422,13 +421,13 @@ class WorkTypeRequest(models.Model):
|
||||
)
|
||||
work_type_id = models.ForeignKey(
|
||||
WorkType,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="requested_work_type",
|
||||
verbose_name=_("Work Type"),
|
||||
)
|
||||
previous_work_type_id = models.ForeignKey(
|
||||
WorkType,
|
||||
on_delete=models.DO_NOTHING,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="previous_work_type",
|
||||
@@ -470,7 +469,7 @@ class ShiftRequest(models.Model):
|
||||
|
||||
employee_id = models.ForeignKey(
|
||||
"employee.Employee",
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
related_name="shift_request",
|
||||
verbose_name=_("Employee"),
|
||||
@@ -481,13 +480,13 @@ class ShiftRequest(models.Model):
|
||||
)
|
||||
shift_id = models.ForeignKey(
|
||||
EmployeeShift,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="requested_shift",
|
||||
verbose_name=_("Shift"),
|
||||
)
|
||||
previous_shift_id = models.ForeignKey(
|
||||
EmployeeShift,
|
||||
on_delete=models.DO_NOTHING,
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="previous_shift",
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<a href="{% url 'company-update' company.id %}" class="oh-btn oh-btn--light-bkg w-50" title="{% trans 'Edit' %}"><ion-icon name="create-outline"></ion-icon></a>
|
||||
{% endif %}
|
||||
{% if perms.base.delete_company %}
|
||||
<form action="{% url 'company-delete' company.id %}" onsubmit="return confirm('{% trans "Are you sure you want to delete this company?" %}');" method='post'>
|
||||
<form action="{% url 'company-delete' company.id %}" onsubmit="return confirm('{% trans "Are you sure you want to delete this company?" %}');" method='post' class='w-50'>
|
||||
{% csrf_token %}
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100" title="{% trans 'Remove' %}"><ion-icon name="trash-outline"></ion-icon></button>
|
||||
</form>
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
<a href="{% url 'department-update' dep.id %}" type="button" class="oh-btn oh-btn--light-bkg w-50"> <ion-icon name="create-outline"></ion-icon></a>
|
||||
{% endif %}
|
||||
{% if perms.base.delete_deaprtment %}
|
||||
<form action="{% url 'department-delete' dep.id %}" onsubmit="return confirm('{% trans "Are you sure you want to delete this department?" %}');" method='post'>
|
||||
<form action="{% url 'department-delete' dep.id %}" class="w-50" onsubmit="return confirm('{% trans "Are you sure you want to delete this department?" %}');" method='post'>
|
||||
{% csrf_token %}
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-40" title="{% trans 'Remove' %}"><ion-icon name="trash-outline"></ion-icon></button>
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100" title="{% trans 'Remove' %}"><ion-icon name="trash-outline"></ion-icon></button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<a href="{% url 'employee-type-update' type.id %}" type="button" class="oh-btn oh-btn--light-bkg w-50"> <ion-icon name="create-outline"></ion-icon></a>
|
||||
{% endif %}
|
||||
{% if perms.base.delete_employeetype %}
|
||||
<form action="{% url 'employee-type-delete' type.id %}" onsubmit="return confirm('{% trans "Are you sure you want to delete this employee type?" %}');" method='post'>
|
||||
<form action="{% url 'employee-type-delete' type.id %}" class="w-50" onsubmit="return confirm('{% trans "Are you sure you want to delete this employee type?" %}');" method='post'>
|
||||
{% csrf_token %}
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100" title="{% trans 'Remove' %}"><ion-icon name="trash-outline"></ion-icon></button>
|
||||
</form>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
action="{% url 'rotating-shift-delete' rshift.id %}"
|
||||
onsubmit="return confirm('{% trans "Are you sure you want to delete this rotating shift?" %}');"
|
||||
method="post"
|
||||
class="w-50"
|
||||
>
|
||||
{% csrf_token %}
|
||||
<button
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
></a>
|
||||
{% endif %} {% if perms.base.delete_rotatingworktype %}
|
||||
<form
|
||||
action="{% url 'rotating-work-type-delete' rwork.id %}"
|
||||
action="{% url 'rotating-work-type-delete' rwork.id %}" class="w-50"
|
||||
onsubmit="return confirm('{% trans "Are you sure you want to delete this rotating work type?" %}');"
|
||||
method="post"
|
||||
>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<a href="{% url 'employee-shift-update' shift.id %}" type="button" class="oh-btn oh-btn--light-bkg w-50"> <ion-icon name="create-outline"></ion-icon></a>
|
||||
{% endif %}
|
||||
{% if perms.base.delete_employeeshift %}
|
||||
<form action="{% url 'employee-shift-delete' shift.id %}" onsubmit="return confirm('{% trans "Are you sure you want to delete this shift?" %}');" method='post'>
|
||||
<form action="{% url 'employee-shift-delete' shift.id %}" class="w-50" onsubmit="return confirm('{% trans "Are you sure you want to delete this shift?" %}');" method='post'>
|
||||
{% csrf_token %}
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100" title="{% trans 'Remove' %}"><ion-icon name="trash-outline"></ion-icon></button>
|
||||
</form>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<ion-icon name="create-outline"></ion-icon></a>
|
||||
{% endif %}
|
||||
{% if perms.base.delete_worktype %}
|
||||
<form action="{% url 'work-type-delete' type.id %}"
|
||||
<form action="{% url 'work-type-delete' type.id %}" class="w-50"
|
||||
onsubmit="return confirm('{% trans "Are you sure you want to delete this work type?" %}');" method='post'>
|
||||
{% csrf_token %}
|
||||
<button type='submit' class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
|
||||
|
||||
@@ -182,4 +182,10 @@ _("Asset category"),
|
||||
_("Asset status"),
|
||||
_("True"),
|
||||
_("False"),
|
||||
_("Onboarding Portal S…"),
|
||||
_("Onboarding Portal S…"),
|
||||
_("Employee work information"),
|
||||
_("Rotating work type assign"),
|
||||
_("Employee shift schedule"),
|
||||
_("Rotating shift assign"),
|
||||
_("Onboarding portal"),
|
||||
_(""),
|
||||
147
base/views.py
147
base/views.py
@@ -75,7 +75,7 @@ from base.methods import (
|
||||
)
|
||||
|
||||
|
||||
def custom404(request, exception):
|
||||
def custom404(request):
|
||||
"""
|
||||
Custom 404 method
|
||||
"""
|
||||
@@ -90,21 +90,21 @@ def is_reportingmanger(request, instance):
|
||||
"""
|
||||
manager = request.user.employee_get
|
||||
try:
|
||||
employee_workinfo_manager = (
|
||||
employee_work_info_manager = (
|
||||
instance.employee_id.employee_work_info.reporting_manager_id
|
||||
)
|
||||
except Exception:
|
||||
return HttpResponse("This Employee Dont Have any work information")
|
||||
return manager == employee_workinfo_manager
|
||||
return manager == employee_work_info_manager
|
||||
|
||||
|
||||
def paginator_qry(qryset, page_number):
|
||||
def paginator_qry(queryset, page_number):
|
||||
"""
|
||||
Common paginator method
|
||||
"""
|
||||
paginator = Paginator(qryset, 50)
|
||||
qryset = paginator.get_page(page_number)
|
||||
return qryset
|
||||
paginator = Paginator(queryset, 50)
|
||||
queryset = paginator.get_page(page_number)
|
||||
return queryset
|
||||
|
||||
|
||||
def login_user(request):
|
||||
@@ -412,7 +412,6 @@ def user_group_delete(request, id):
|
||||
return redirect("/settings/user-group-create")
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("base.add_company")
|
||||
def company_create(request):
|
||||
@@ -475,8 +474,15 @@ def company_delete(request, id):
|
||||
messages.success(request, _("Company deleted."))
|
||||
except Company.DoesNotExist:
|
||||
messages.error(request, _("Company not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This company already in use"))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
messages.error(
|
||||
request, _("This company is already in use for {}.".format(model_names_str))
|
||||
)
|
||||
return redirect(company_create)
|
||||
|
||||
|
||||
@@ -541,8 +547,16 @@ def department_delete(request, id):
|
||||
messages.success(request, _("Department deleted."))
|
||||
except Department.DoesNotExist:
|
||||
messages.error(request, _("Department not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("Department already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
messages.error(
|
||||
request,
|
||||
_("This department is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
return redirect("/settings/department-creation")
|
||||
|
||||
|
||||
@@ -607,8 +621,16 @@ def job_position_delete(request, id):
|
||||
messages.success(request, _("Job Position Deleted."))
|
||||
except JobPosition.DoesNotExist:
|
||||
messages.error(request, _("JobPosition not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This job position already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
_("This job position is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
return redirect("/settings/job-position-creation")
|
||||
|
||||
|
||||
@@ -671,8 +693,17 @@ def job_role_delete(request, id):
|
||||
messages.success(request, _("Job Role Deleted."))
|
||||
except JobRole.DoesNotExist:
|
||||
messages.error(request, _("Job role not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This job role already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
_("This job role is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
return redirect("/settings/job-role-create")
|
||||
|
||||
|
||||
@@ -739,8 +770,17 @@ def work_type_delete(request, id):
|
||||
messages.success(request, _("Work type deleted."))
|
||||
except WorkType.DoesNotExist:
|
||||
messages.error(request, _("Work type not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This work type already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
_("This work type is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
return redirect("/settings/work-type-create")
|
||||
|
||||
|
||||
@@ -807,8 +847,21 @@ def rotating_work_type_delete(request, id):
|
||||
messages.success(request, _("Rotating work type deleted."))
|
||||
except RotatingWorkType.DoesNotExist:
|
||||
messages.error(request, _("Rotating work type not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This rotating work type already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
_(
|
||||
"This rotating work type is already in use for {}.".format(
|
||||
model_names_str
|
||||
)
|
||||
),
|
||||
)
|
||||
return redirect("/settings/rotating-work-type-create")
|
||||
|
||||
|
||||
@@ -1133,9 +1186,18 @@ def employee_type_delete(request, id):
|
||||
messages.success(request, _("Employee type deleted."))
|
||||
except EmployeeType.DoesNotExist:
|
||||
messages.error(request, _("Employee type not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This Employee type already in use."))
|
||||
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
|
||||
messages.error(
|
||||
request,
|
||||
_("This employee type is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
|
||||
return redirect("/settings/employee-type-create")
|
||||
|
||||
|
||||
@@ -1197,10 +1259,18 @@ def employee_shift_delete(request, id):
|
||||
messages.success(request, _("Employee shift deleted."))
|
||||
except EmployeeShift.DoesNotExist:
|
||||
messages.error(request, _("This shift not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("This shift already in use."))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
messages.error(
|
||||
request, _("This shift is already in use for {}.".format(model_names_str))
|
||||
)
|
||||
return redirect("/settings/employee-shift-create")
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("base.add_employeeshiftschedule")
|
||||
def employee_shift_schedule_create(request):
|
||||
@@ -1329,8 +1399,16 @@ def rotating_shift_delete(request, id):
|
||||
messages.success(request, _("Rotating shift deleted."))
|
||||
except RotatingShift.DoesNotExist:
|
||||
messages.error(request, _("Rotating shift not found."))
|
||||
except ProtectedError:
|
||||
messages.error(request, _("You cannot delete this rotating shift"))
|
||||
except ProtectedError as e:
|
||||
model_verbose_names_set = set()
|
||||
for obj in e.protected_objects:
|
||||
model_verbose_names_set.add(_(obj._meta.verbose_name.capitalize()))
|
||||
|
||||
model_names_str = ", ".join(model_verbose_names_set)
|
||||
messages.error(
|
||||
request,
|
||||
_("This rotating shift is already in use for {}.".format(model_names_str)),
|
||||
)
|
||||
return redirect(rotating_shift_create)
|
||||
|
||||
|
||||
@@ -1756,7 +1834,8 @@ def work_type_request(request):
|
||||
recipient=(
|
||||
instance.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
),
|
||||
verb=f"You have new work type request to validate for {instance.employee_id}",
|
||||
verb=f"You have new work type request to \
|
||||
validate for {instance.employee_id}",
|
||||
verb_ar=f"لديك طلب نوع وظيفة جديد للتحقق من \
|
||||
{instance.employee_id}",
|
||||
verb_de=f"Sie haben eine neue Arbeitstypanfrage zur \
|
||||
@@ -2072,11 +2151,15 @@ def shift_request(request):
|
||||
recipient=(
|
||||
instance.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
),
|
||||
verb=f"You have new shift request to approve for {instance.employee_id}",
|
||||
verb=f"You have new shift request to approve \
|
||||
for {instance.employee_id}",
|
||||
verb_ar=f"لديك طلب وردية جديد للموافقة عليه لـ {instance.employee_id}",
|
||||
verb_de=f"Sie müssen eine neue Schichtanfrage für {instance.employee_id} genehmigen",
|
||||
verb_es=f"Tiene una nueva solicitud de turno para aprobar para {instance.employee_id}",
|
||||
verb_fr=f"Vous avez une nouvelle demande de quart de travail à approuver pour {instance.employee_id}",
|
||||
verb_de=f"Sie müssen eine neue Schichtanfrage \
|
||||
für {instance.employee_id} genehmigen",
|
||||
verb_es=f"Tiene una nueva solicitud de turno para \
|
||||
aprobar para {instance.employee_id}",
|
||||
verb_fr=f"Vous avez une nouvelle demande de quart de\
|
||||
travail à approuver pour {instance.employee_id}",
|
||||
icon="information",
|
||||
redirect="/shift-requests/shift-request-view",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user