# 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()