def labour_person_qualification_view(request, qualification): vars = page_wizard_vars(request) person = request.user.person qualification = get_object_or_404(Qualification, slug=qualification) try: person_qualification = qualification.personqualification_set.get(person=person) except PersonQualification.DoesNotExist: person_qualification = PersonQualification( person=person, qualification=qualification ) QualificationExtra = qualification.qualification_extra_model if QualificationExtra: QualificationExtraForm = QualificationExtra.get_form_class() qualification_extra = person_qualification.qualification_extra form = initialize_form(QualificationExtraForm, request, instance=qualification_extra) else: qualification_extra = None form = None if request.method == 'POST': form_valid = not form or (form and form.is_valid()) if form_valid: person_qualification.save() if form: qualification_extra.personqualification = person_qualification form.save() messages.success(request, _('The qualification has been updated.')) return redirect('labour_qualifications_view') else: messages.error(request, _('Please check the form.')) vars.update( person_qualification=person_qualification, form=form ) if 'page_wizard' in vars: template_name = 'labour_new_user_person_qualification_view.jade' else: template_name = 'labour_profile_person_qualification_view.jade' return render(request, template_name, vars)
def labour_person_qualification_view(request, qualification): vars = page_wizard_vars(request) person = request.user.person qualification = get_object_or_404(Qualification, slug=qualification) try: person_qualification = qualification.personqualification_set.get(person=person) except PersonQualification.DoesNotExist: person_qualification = PersonQualification( person=person, qualification=qualification ) QualificationExtra = qualification.qualification_extra_model if QualificationExtra: QualificationExtraForm = QualificationExtra.get_form_class() qualification_extra = person_qualification.qualification_extra form = initialize_form(QualificationExtraForm, request, instance=qualification_extra) else: qualification_extra = None form = None if request.method == 'POST': form_valid = not form or (form and form.is_valid()) if form_valid: person_qualification.save() if form: qualification_extra.personqualification = person_qualification form.save() messages.success(request, _('The qualification has been updated.')) return redirect('labour_qualifications_view') else: messages.error(request, _('Please check the form.')) vars.update( person_qualification=person_qualification, form=form ) if 'page_wizard' in vars: template_name = 'labour_new_user_person_qualification_view.pug' else: template_name = 'labour_profile_person_qualification_view.pug' return render(request, template_name, vars)
def qualifications_view(request): vars = page_wizard_vars(request) person_qualifications = request.user.person.personqualification_set.all() qualification_pks = [q.qualification.pk for q in person_qualifications] available_qualifications = Qualification.objects.exclude( pk__in=qualification_pks) vars.update(person_qualifications=person_qualifications, available_qualifications=available_qualifications) if 'page_wizard' in vars: template_name = 'labour_new_user_qualifications_view.pug' else: template_name = 'labour_profile_qualifications_view.pug' return render(request, template_name, vars)
def labour_qualifications_view(request): vars = page_wizard_vars(request) person_qualifications = request.user.person.personqualification_set.all() qualification_pks = [q.qualification.pk for q in person_qualifications] available_qualifications = Qualification.objects.exclude(pk__in=qualification_pks) vars.update( person_qualifications=person_qualifications, available_qualifications=available_qualifications ) if 'page_wizard' in vars: template_name = 'labour_new_user_qualifications_view.pug' else: template_name = 'labour_profile_qualifications_view.pug' return render(request, template_name, vars)
def actual_labour_signup_view(request, event, alternative_form_slug): vars = page_wizard_vars(request) signup = event.labour_event_meta.get_signup_for_person(request.user.person) if alternative_form_slug is not None: # Alternative signup form specified via URL alternative_signup_form = get_object_or_404(AlternativeSignupForm, event=event, slug=alternative_form_slug) if ( signup.alternative_signup_form_used is not None and \ signup.alternative_signup_form_used.pk != alternative_signup_form.pk ): messages.error(request, _('Your application has not been submitted using this form.')) return redirect('core_event_view', event.slug) elif signup.pk is not None and signup.alternative_signup_form_used is not None: # Alternative signup form used to sign up alternative_signup_form = signup.alternative_signup_form_used else: # Use default signup form alternative_signup_form = None if alternative_signup_form is not None: # Using an alternative signup form if not alternative_signup_form.is_active: messages.error(request, _('The signup form you have requested is not currently active.')) return redirect('core_event_view', event.slug) if alternative_signup_form.signup_message: messages.warning(request, alternative_signup_form.signup_message) SignupFormClass = alternative_signup_form.signup_form_class SignupExtraFormClass = alternative_signup_form.signup_extra_form_class else: # Using default signup form if not event.labour_event_meta.is_registration_open: messages.error(request, _('This event is not currently accepting applications.')) return redirect('core_event_view', event.slug) if event.labour_event_meta.signup_message: messages.warning(request, event.labour_event_meta.signup_message) SignupFormClass = None SignupExtraFormClass = None if signup.is_processed: messages.error(request, _( 'Your application has already been processed, so you can no longer edit it. ' 'Please contact the volunteer coordinator for any further changes.' )) return redirect('core_event_view', event.slug) if signup.pk is not None: old_state = signup.state submit_text = _('Update application') else: old_state = None submit_text = _('Submit application') signup_extra = signup.signup_extra signup_form, signup_extra_form = initialize_signup_forms(request, event, signup, SignupFormClass=SignupFormClass, SignupExtraFormClass=SignupExtraFormClass, ) if request.method == 'POST': if signup_form.is_valid() and signup_extra_form.is_valid(): if signup.pk is None: message = _('Thank you for your application!') else: message = _('Your application has been updated.') if alternative_signup_form is not None: signup.alternative_signup_form_used = alternative_signup_form set_attrs(signup, **signup_form.get_excluded_field_defaults()) set_attrs(signup_extra, **signup_extra_form.get_excluded_field_defaults()) with transaction.atomic(): signup = signup_form.save() signup_extra.signup = signup signup_extra = signup_extra_form.save() if alternative_signup_form is not None: # Save m2m field defaults for obj, form in [ (signup, signup_form), (signup_extra, signup_extra_form), ]: defaults = form.get_excluded_m2m_field_defaults() if defaults: set_attrs(obj, **defaults) obj.save() signup.apply_state() messages.success(request, message) return redirect('core_event_view', event.slug) else: messages.error(request, _('Please check the form.')) available_job_categories = signup_form.get_job_categories(event=event) all_job_categories = JobCategory.objects.filter(event=event) # FIXME use id and data attr instead of category name non_qualified_category_names = [ jc.name for jc in available_job_categories if not jc.is_person_qualified(request.user.person) ] vars.update( alternative_signup_form=alternative_signup_form, event=event, signup_extra_form=signup_extra_form, signup_form=signup_form, signup=signup, submit_text=submit_text, # XXX HACK descriptions injected using javascript job_descriptions_json=json.dumps(dict((cat.pk, cat.description) for cat in all_job_categories)), non_qualified_category_names_json=json.dumps(non_qualified_category_names), ) return render(request, 'labour_signup_view.jade', vars)
def actual_labour_signup_view(request, event, alternative_form_slug): vars = page_wizard_vars(request) signup = event.labour_event_meta.get_signup_for_person(request.user.person) if alternative_form_slug is not None: # Alternative signup form specified via URL alternative_signup_form = get_object_or_404(AlternativeSignupForm, event=event, slug=alternative_form_slug) if ( signup.alternative_signup_form_used is not None and \ signup.alternative_signup_form_used.pk != alternative_signup_form.pk ): messages.error(request, _('Your application has not been submitted using this form.')) return redirect('core_event_view', event.slug) elif signup.pk is not None and signup.alternative_signup_form_used is not None: # Alternative signup form used to sign up alternative_signup_form = signup.alternative_signup_form_used else: # Use default signup form alternative_signup_form = None if alternative_signup_form is not None: # Using an alternative signup form if not alternative_signup_form.is_active: messages.error(request, _('The signup form you have requested is not currently active.')) return redirect('core_event_view', event.slug) if alternative_signup_form.signup_message: messages.warning(request, alternative_signup_form.signup_message) SignupFormClass = alternative_signup_form.signup_form_class SignupExtraFormClass = alternative_signup_form.signup_extra_form_class else: # Using default signup form if not event.labour_event_meta.is_registration_open: messages.error(request, _('This event is not currently accepting applications.')) return redirect('core_event_view', event.slug) if event.labour_event_meta.signup_message: messages.warning(request, event.labour_event_meta.signup_message) SignupFormClass = None SignupExtraFormClass = None if signup.is_processed: messages.error(request, _( 'Your application has already been processed, so you can no longer edit it. ' 'Please contact the volunteer coordinator for any further changes.' )) return redirect('core_event_view', event.slug) if signup.pk is not None: old_state = signup.state submit_text = _('Update application') else: old_state = None submit_text = _('Submit application') signup_extra = signup.signup_extra signup_form, signup_extra_form = initialize_signup_forms(request, event, signup, SignupFormClass=SignupFormClass, SignupExtraFormClass=SignupExtraFormClass, ) if request.method == 'POST': if signup_form.is_valid() and signup_extra_form.is_valid(): if signup.pk is None: message = _('Thank you for your application!') event_type = 'labour.signup.created' else: message = _('Your application has been updated.') event_type = 'labour.signup.updated' if alternative_signup_form is not None: signup.alternative_signup_form_used = alternative_signup_form set_attrs(signup, **signup_form.get_excluded_field_defaults()) set_attrs(signup_extra, **signup_extra_form.get_excluded_field_defaults()) with transaction.atomic(): signup = signup_form.save() signup_extra.signup = signup signup_extra = signup_extra_form.save() if alternative_signup_form is not None: # Save m2m field defaults for obj, form in [ (signup, signup_form), (signup_extra, signup_extra_form), ]: defaults = form.get_excluded_m2m_field_defaults() or {} for key, values in defaults.items(): getattr(obj, key).set(values) emit(event_type, request=request, person=request.user.person, event=event) signup.apply_state() messages.success(request, message) return redirect('core_event_view', event.slug) else: messages.error(request, _('Please check the form.')) available_job_categories = signup_form.get_job_categories(event=event) all_job_categories = JobCategory.objects.filter(event=event) # FIXME use id and data attr instead of category name non_qualified_category_names = [ jc.name for jc in available_job_categories if not jc.is_person_qualified(request.user.person) ] vars.update( alternative_signup_form=alternative_signup_form, event=event, signup_extra_form=signup_extra_form, signup_form=signup_form, signup=signup, submit_text=submit_text, # XXX HACK descriptions injected using javascript job_descriptions_json=json.dumps(dict((cat.pk, cat.description) for cat in all_job_categories)), non_qualified_category_names_json=json.dumps(non_qualified_category_names), ) return render(request, 'labour_signup_view.pug', vars)