From 9adb38bd4066c0044f22b7cb4a2b07ba9bf2a55d Mon Sep 17 00:00:00 2001 From: Horilla Date: Wed, 19 Jun 2024 12:07:25 +0530 Subject: [PATCH] [UPDT] ONBOARDING:Employee personal info and bank info updated with form validations --- onboarding/forms.py | 15 +++- .../onboarding/employee_bank_details.html | 1 + .../onboarding/employee_creation.html | 1 + onboarding/views.py | 71 +++++++++++-------- 4 files changed, 56 insertions(+), 32 deletions(-) diff --git a/onboarding/forms.py b/onboarding/forms.py index c78348b46..ed3c358eb 100644 --- a/onboarding/forms.py +++ b/onboarding/forms.py @@ -370,7 +370,7 @@ class EmployeeCreationForm(ModelForm): zip = forms.CharField(required=True, label=_("Zip")) qualification = forms.CharField(required=True, label=_("Qualification")) experience = forms.IntegerField(required=True, label=_("Experience")) - children = forms.CharField(required=True, label=_("Childrens")) + children = forms.IntegerField(required=True, label=_("Childrens")) emergency_contact = forms.CharField( required=True, label=_("Emergency Contact Number") ) @@ -399,6 +399,19 @@ class EmployeeCreationForm(ModelForm): "dob": DateInput(attrs={"type": "date"}), } + def clean(self): + cleaned_data = self.cleaned_data + if cleaned_data["experience"] and cleaned_data["experience"] < 0: + raise ValidationError( + {"experience": _("Experience should be a postive integier")} + ) + if cleaned_data["children"] and cleaned_data["children"] < 0: + raise ValidationError( + {"children": _("No of children should be a postive integier")} + ) + + return super().clean() + class BankDetailsCreationForm(ModelForm): """ diff --git a/onboarding/templates/onboarding/employee_bank_details.html b/onboarding/templates/onboarding/employee_bank_details.html index 74872d065..f32d884b0 100644 --- a/onboarding/templates/onboarding/employee_bank_details.html +++ b/onboarding/templates/onboarding/employee_bank_details.html @@ -151,6 +151,7 @@ + diff --git a/onboarding/templates/onboarding/employee_creation.html b/onboarding/templates/onboarding/employee_creation.html index 6ec8b677c..7b2becd61 100644 --- a/onboarding/templates/onboarding/employee_creation.html +++ b/onboarding/templates/onboarding/employee_creation.html @@ -188,6 +188,7 @@ + diff --git a/onboarding/views.py b/onboarding/views.py index 6f3ec239f..d036d7530 100644 --- a/onboarding/views.py +++ b/onboarding/views.py @@ -686,6 +686,8 @@ def email_send(request): new_portal = existing_portal.first() new_portal.token = token new_portal.used = False + new_portal.count = 0 + new_portal.profile = None new_portal.save() else: OnboardingPortal(candidate_id=candidate, token=token).save() @@ -888,6 +890,9 @@ def kanban_view(request): ) +portal_user = {} + + def user_creation(request, token): """ function used to create user account in onboarding portal. @@ -902,16 +907,13 @@ def user_creation(request, token): """ try: onboarding_portal = OnboardingPortal.objects.get(token=token) + if not onboarding_portal or onboarding_portal.used is True: + return render(request, "404.html") + if onboarding_portal.count == 3: + return redirect("employee-bank-details", token) candidate = onboarding_portal.candidate_id user = User.objects.filter(username=candidate.email).first() - form = UserCreationForm(instance=user) - if ( - not onboarding_portal - or onboarding_portal.used is True - and request.user.is_anonymous - ): - return render(request, "404.html") try: if request.method == "POST": form = UserCreationForm(request.POST, instance=user) @@ -945,11 +947,10 @@ def user_save(form, onboarding_portal, request, token): """ user = form.save(commit=False) user.username = onboarding_portal.candidate_id.email - user.save() - onboarding_portal.used = True - onboarding_portal.save() - login(request, user) + session_key = request.session.session_key + portal_user[session_key] = user onboarding_portal.count = 1 + onboarding_portal.save() messages.success(request, _("Account created successfully..")) return redirect("profile-view", token) @@ -968,21 +969,22 @@ def profile_view(request, token): """ onboarding_portal = OnboardingPortal.objects.filter(token=token).first() if onboarding_portal is None: - return HttpResponse("Denied") + return render(request, "404.html") candidate = onboarding_portal.candidate_id - user = User.objects.get(username=candidate.email) if request.method == "POST": profile = request.FILES.get("profile") if profile is not None: candidate.profile = profile - candidate.save() + onboarding_portal.profile = profile onboarding_portal.count = 2 + onboarding_portal.save() messages.success(request, _("Profile picture updated successfully..")) return render( request, "onboarding/profile_view.html", { "candidate": candidate, + "profile": onboarding_portal.profile, "token": token, "company": candidate.recruitment_id.company_id, }, @@ -1003,7 +1005,7 @@ def employee_creation(request, token): """ onboarding_portal = OnboardingPortal.objects.filter(token=token).first() if onboarding_portal is None: - return HttpResponse("Denied.") + return render(request, "404.html") candidate = onboarding_portal.candidate_id initial = { "employee_first_name": candidate.name, @@ -1011,25 +1013,32 @@ def employee_creation(request, token): "address": candidate.address, "dob": candidate.dob, } - user = User.objects.filter(username=candidate.email).first() + session_key = request.session.session_key + user = portal_user[session_key] if Employee.objects.filter(employee_user_id=user).first() is not None: + employee = Employee.objects.filter(employee_user_id=user).first() + if employee.employee_bank_details: + messages.success(request, _("Employee already exists..")) + return redirect("login") initial = Employee.objects.filter(employee_user_id=user).first().__dict__ form = EmployeeCreationForm( - initial, + initial=initial, ) - form.errors.clear() + # form.errors.clear() if request.method == "POST": instance = Employee.objects.filter(employee_user_id=user).first() - form_data = EmployeeCreationForm( + form = EmployeeCreationForm( request.POST, instance=instance, ) - if form_data.is_valid(): - employee_personal_info = form_data.save(commit=False) + if form.is_valid(): + user.save() + login(request, user) + employee_personal_info = form.save(commit=False) employee_personal_info.employee_user_id = user employee_personal_info.email = candidate.email - employee_personal_info.employee_profile = candidate.profile + employee_personal_info.employee_profile = onboarding_portal.profile employee_personal_info.save() job_position = onboarding_portal.candidate_id.job_position_id existing_work_info = EmployeeWorkInformation.objects.filter( @@ -1048,8 +1057,6 @@ def employee_creation(request, token): request, _("Employee personal details created successfully..") ) return redirect("employee-bank-details", token) - onboarding_portal.count += 1 - onboarding_portal.save() return render( request, "onboarding/employee_creation.html", @@ -1072,13 +1079,12 @@ def employee_bank_details(request, token): onboarding_portal = OnboardingPortal.objects.get(token=token) user = User.objects.filter(username=onboarding_portal.candidate_id.email).first() employee = Employee.objects.filter(employee_user_id=user).first() - form = BankDetailsCreationForm( - instance=EmployeeBankDetails.objects.filter(employee_id=employee).first() - ) + bank_info = EmployeeBankDetails.objects.filter(employee_id=employee).first() + form = BankDetailsCreationForm(instance=bank_info) if request.method == "POST": form = BankDetailsCreationForm( request.POST, - instance=EmployeeBankDetails.objects.filter(employee_id=employee).first(), + instance=bank_info, ) if form.is_valid(): return employee_bank_details_save(form, request, onboarding_portal) @@ -1106,11 +1112,14 @@ def employee_bank_details_save(form, request, onboarding_portal): GET : return welcome onboard view """ employee_bank_detail = form.save(commit=False) - employee_bank_detail.employee_id = Employee.objects.get( - employee_user_id=request.user - ) + employee = Employee.objects.get(employee_user_id=request.user) + employee_bank_detail.employee_id = employee + candidate = onboarding_portal.candidate_id + candidate.converted_employee_id = employee + candidate.save() employee_bank_detail.save() onboarding_portal.count = 4 + onboarding_portal.used = True onboarding_portal.save() messages.success(request, _("Employee bank details created successfully..")) return redirect(welcome_aboard)