コード例 #1
0
ファイル: public_views.py プロジェクト: Kriivari/kompassi
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)
コード例 #2
0
ファイル: public_views.py プロジェクト: tracon/kompassi
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)
コード例 #3
0
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)
コード例 #4
0
ファイル: public_views.py プロジェクト: tracon/kompassi
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)
コード例 #5
0
ファイル: public_views.py プロジェクト: Kriivari/kompassi
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)
コード例 #6
0
ファイル: public_views.py プロジェクト: tracon/kompassi
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)