Source code for feriennet.forms.match
from __future__ import annotations
from onegov.activity.matching.score import PreferAdminChildren
from onegov.activity.matching.score import PreferOrganiserChildren
from onegov.activity.matching.score import PreferGroups
from onegov.activity.matching.score import Scoring
from onegov.feriennet import _
from onegov.form import Form
from wtforms.fields import BooleanField, RadioField
from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from sqlalchemy.orm import Session
[docs]
class MatchForm(Form):
[docs]
    prefer_organiser = BooleanField(
        label=_('Children of organisers'),
        fieldset=_('Prefer the following children:'),
        default=False)
[docs]
    prefer_admins = BooleanField(
        label=_('Children of administrators'),
        fieldset=_('Prefer the following children:'),
        default=False)
[docs]
    confirm = RadioField(
        label=_('Confirm matching:'),
        default='no',
        choices=[
            ('no', _('No, preview only')),
            ('yes', _('Yes, confirm matching'))
        ]
    )
[docs]
    sure = BooleanField(
        label=_('I know the wishlist-phase ends as a result.'),
        default=False,
        depends_on=('confirm', 'yes')
    )
[docs]
    def scoring(self, session: Session) -> Scoring:
        scoring = Scoring()
        # always prefer groups
        scoring.criteria.append(PreferGroups.from_session(session))
        if self.prefer_organiser.data:
            scoring.criteria.append(
                PreferOrganiserChildren.from_session(session))
        if self.prefer_admins.data:
            scoring.criteria.append(
                PreferAdminChildren.from_session(session))
        return scoring
    @property
[docs]
    def confirm_period(self) -> bool:
        return self.confirm.data == 'yes' and self.sure.data is True
[docs]
    def process_scoring(self, scoring: Scoring) -> None:
        classes = {criterium.__class__ for criterium in scoring.criteria}
        self.prefer_organiser.data = PreferOrganiserChildren in classes
        self.prefer_admins.data = PreferAdminChildren in classes