def get_next_form(new_forms, form_name): for index, form in enumerate(new_forms): if is_form_set(form): if form[0].name == form_name: next_form = new_forms[index+1] if is_form_set(next_form): return next_form[0].name else: return next_form.name else: if form.name == form_name: next_form = new_forms[index+1] if is_form_set(next_form): return next_form[0].name else: return next_form.name
def post(self, request, name): form_name = request.POST.get('form_name') resume = self.get_resume(request, name) has_errors = False if form_name == 'basic_details': current_form = BasicResumeForm(request.POST) if current_form.is_valid(): save_basic_details(current_form, resume) messages.success(request, 'Personal Details saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') elif form_name == 'skill': ResumeSkillFormSet = formset_factory(ResumeSkillForm) current_form = ResumeSkillFormSet(request.POST, request.FILES, prefix='skills') if current_form.is_valid(): resume.resume_skills.all().delete() for form in current_form: if (form in current_form.extra_forms and form.has_changed()) or form in current_form.initial_forms : skill = form.cleaned_data['skill'] efficiency_level = form.cleaned_data['efficiency_level'] obj, is_created = Skill.objects.get_or_create(name=skill) try: ResumeSkillMap.objects.create(skill=obj, resume=resume, efficiency_level=efficiency_level) except IntegrityError as inst: has_errors = True messages.error(request, 'Skill %s is already present' %(skill)) messages.success(request, 'Skills saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') elif form_name == 'language': ResumeLanguageFormSet = formset_factory(ResumeLanguageForm) current_form = ResumeLanguageFormSet(request.POST, request.FILES, prefix='languages') if current_form.is_valid(): resume.resume_languages.all().delete() for form in current_form: if (form in current_form.extra_forms and form.has_changed()) or form in current_form.initial_forms : language = form.cleaned_data['language'] efficiency_level = form.cleaned_data['efficiency_level'] obj, is_created = Language.objects.get_or_create(name=language) try: ResumeLanguageMap.objects.create(language=obj, resume=resume, efficiency_level=efficiency_level) except IntegrityError as inst: has_errors = True messages.error(request, 'Language %s is already present' %(language)) messages.success(request, 'Languages saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') elif form_name == 'hobby': ResumeHobbyFormSet = formset_factory(ResumeHobbyForm) current_form = ResumeHobbyFormSet(request.POST, request.FILES, prefix='hobbies') if current_form.is_valid(): resume.resume_hobbies.all().delete() for form in current_form: if (form in current_form.extra_forms and form.has_changed()) or form in current_form.initial_forms : hobby = form.cleaned_data['hobby'] efficiency_level = form.cleaned_data['efficiency_level'] obj, is_created = Hobby.objects.get_or_create(name=hobby) try: ResumeHobbyMap.objects.create(hobby=obj, resume=resume, efficiency_level=efficiency_level) except IntegrityError as inst: has_errors = True messages.error(request, 'Hobby %s is already present' %(hobby)) messages.success(request, 'Hobbies saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') elif form_name == 'experience': ResumeExperienceFormSet = formset_factory(ResumeExperienceForm) current_form = ResumeExperienceFormSet(request.POST, request.FILES, prefix='experiences') if current_form.is_valid(): resume.resume_experiences.all().delete() for form in current_form: if (form in current_form.extra_forms and form.has_changed()) or form in current_form.initial_forms : company = form.cleaned_data['company'] designation = form.cleaned_data['designation'] from_date = form.cleaned_data['from_date'] to_date = form.cleaned_data['to_date'] obj, is_created = Company.objects.get_or_create(name=company) try: Experience.objects.create(company=obj, resume=resume, from_date=from_date, to_date=to_date, designation=designation) except IntegrityError as inst: has_errors = True messages.error(request, 'Company %s is already present' %(compnay)) messages.success(request, 'Experiences saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') elif form_name == 'education': ResumeEducationFormSet = formset_factory(ResumeEducationForm) current_form = ResumeEducationFormSet(request.POST, request.FILES, prefix='educations') if current_form.is_valid(): resume.resume_educations.all().delete() for form in current_form: if (form in current_form.extra_forms and form.has_changed()) or form in current_form.initial_forms : institude = form.cleaned_data['institude'] course_name = form.cleaned_data['course_name'] from_date = form.cleaned_data['from_date'] to_date = form.cleaned_data['to_date'] obj, is_created = Institude.objects.get_or_create(name=institude) try: Education.objects.create(institude=obj, resume=resume, from_date=from_date, to_date=to_date, course_name=course_name) except IntegrityError as inst: has_errors = True messages.error(request, 'Institude %s is already present' %(institude)) messages.success(request, 'Educations saved successfully.') else: has_errors = True messages.error(request, 'Please correct the errors below.') forms = get_resume_forms(request.user, resume) if has_errors: new_forms = [] for form in forms: if is_form_set(form) and form[0].name == form_name: new_forms.append(current_form) elif not is_form_set(form) and form.name == form_name: new_forms.append(current_form) else: new_forms.append(form) else: new_forms = forms try: form_name = get_next_form(new_forms, form_name) except IndexError: return HttpResponseRedirect(reverse('resume:publish_resume', args=[resume.id])) return render(request, 'update_resume.html', {'resume': resume, 'forms': new_forms, 'form_name': form_name})