mirror of https://gitlab.crans.org/bde/nk20
90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from django import forms
|
|
|
|
from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm
|
|
from ...models import Bus
|
|
|
|
|
|
class WEISurveyForm2020(forms.Form):
|
|
"""
|
|
Survey form for the year 2020.
|
|
For now, that's only a Bus selector.
|
|
TODO: Do a better survey (later)
|
|
"""
|
|
bus = forms.ModelChoiceField(
|
|
Bus.objects,
|
|
)
|
|
|
|
def set_registration(self, registration):
|
|
"""
|
|
Filter the bus selector with the buses of the current WEI.
|
|
"""
|
|
self.fields["bus"].queryset = Bus.objects.filter(wei=registration.wei)
|
|
|
|
|
|
class WEISurveyInformation2020(WEISurveyInformation):
|
|
"""
|
|
We store the id of the selected bus. We store only the name, but is not used in the selection:
|
|
that's only for humans that try to read data.
|
|
"""
|
|
chosen_bus_pk = None
|
|
chosen_bus_name = None
|
|
|
|
|
|
class WEISurvey2020(WEISurvey):
|
|
"""
|
|
Survey for the year 2020.
|
|
"""
|
|
@classmethod
|
|
def get_year(cls):
|
|
return 2020
|
|
|
|
@classmethod
|
|
def get_survey_information_class(cls):
|
|
return WEISurveyInformation2020
|
|
|
|
def get_form_class(self):
|
|
return WEISurveyForm2020
|
|
|
|
def update_form(self, form):
|
|
"""
|
|
Filter the bus selector with the buses of the WEI.
|
|
"""
|
|
form.set_registration(self.registration)
|
|
|
|
def form_valid(self, form):
|
|
bus = form.cleaned_data["bus"]
|
|
self.information.chosen_bus_pk = bus.pk
|
|
self.information.chosen_bus_name = bus.name
|
|
self.save()
|
|
|
|
@classmethod
|
|
def get_algorithm_class(cls):
|
|
return WEISurveyAlgorithm2020
|
|
|
|
def is_complete(self) -> bool:
|
|
"""
|
|
The survey is complete once the bus is chosen.
|
|
"""
|
|
return self.information.chosen_bus_pk is not None
|
|
|
|
|
|
class WEISurveyAlgorithm2020(WEISurveyAlgorithm):
|
|
"""
|
|
The algorithm class for the year 2020.
|
|
For now, the algorithm is quite simple: the selected bus is the chosen bus.
|
|
TODO: Improve this algorithm.
|
|
"""
|
|
|
|
@classmethod
|
|
def get_survey_class(cls):
|
|
return WEISurvey2020
|
|
|
|
def run_algorithm(self):
|
|
for registration in self.get_registrations():
|
|
survey = self.get_survey_class()(registration)
|
|
survey.select_bus(Bus.objects.get(pk=survey.information.chosen_bus_pk))
|
|
survey.save()
|