diff --git a/onboarding/models.py b/onboarding/models.py index 8fdde8063..a161606d1 100644 --- a/onboarding/models.py +++ b/onboarding/models.py @@ -73,6 +73,7 @@ class CandidateStage(models.Model): """ Meta class for additional options """ + verbose_name = _("Candidate Onboarding stage") ordering = ['sequence'] @@ -102,7 +103,7 @@ class CandidateTask(models.Model): """ Meta class to add some additional options """ - + verbose_name = _("Candidate onboarding task") unique_together = ("candidate_id", "onboarding_task_id") diff --git a/onboarding/views.py b/onboarding/views.py index 39aaae188..cbac182d3 100644 --- a/onboarding/views.py +++ b/onboarding/views.py @@ -14,6 +14,7 @@ from urllib.parse import parse_qs import json, contextlib, random, secrets from django.core.mail import send_mail from django.contrib.auth.models import User +from django.utils.translation import gettext as __ from django.utils.translation import gettext_lazy as _ from django.shortcuts import render, redirect from django.contrib.auth import login @@ -180,7 +181,7 @@ def stage_delete(request, stage_id): try: OnboardingStage.objects.get(id=stage_id).delete() messages.success(request, _("The stage deleted successfully...")) - + except OnboardingStage.DoesNotExist: messages.error(request, _("Stage not found.")) except ProtectedError: @@ -309,7 +310,12 @@ def task_delete(request, task_id): except OnboardingTask.DoesNotExist: messages.error(request, _("Task not found.")) except ProtectedError: - messages.error(request, _("Related entries exists")) + messages.error( + request, + _( + "You cannot delete this task because some candidates are associated with it." + ), + ) return redirect(onboarding_view) @@ -381,8 +387,19 @@ def candidate_delete(request, obj_id): messages.success(request, _("Candidate deleted successfully..")) except Candidate.DoesNotExist: messages.error(request, _("Candidate not found.")) - except ProtectedError: - messages.error(request, _("Related entries exists")) + except ProtectedError as e: + models_verbose_name_sets = set() + for obj in e.protected_objects: + models_verbose_name_sets.add(__(obj._meta.verbose_name)) + models_verbose_name_str = (", ").join(models_verbose_name_sets) + messages.error( + request, + _( + "You cannot delete this candidate. The candidate is included in the {}".format( + models_verbose_name_str + ) + ), + ) return redirect(candidates_view)