mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-30 23:39:54 +01:00 
			
		
		
		
	WEI Survey (work in progress)
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| # Server config files | # Server config forms | ||||||
| nginx_note.conf | nginx_note.conf | ||||||
|  |  | ||||||
| # Byte-compiled / optimized / DLL files | # Byte-compiled / optimized / DLL forms | ||||||
| dist | dist | ||||||
| build | build | ||||||
| __pycache__ | __pycache__ | ||||||
|   | |||||||
| @@ -184,7 +184,7 @@ class InvoiceRenderView(LoginRequiredMixin, View): | |||||||
|         except IOError as e: |         except IOError as e: | ||||||
|             raise e |             raise e | ||||||
|         finally: |         finally: | ||||||
|             # Delete all temporary files |             # Delete all temporary forms | ||||||
|             shutil.rmtree(tmp_dir) |             shutil.rmtree(tmp_dir) | ||||||
|  |  | ||||||
|         return response |         return response | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								apps/wei/forms/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								apps/wei/forms/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | from .registration import * | ||||||
|  | from .surveys import * | ||||||
|  |  | ||||||
|  | __all__ = [ | ||||||
|  |     'WEIForm', 'WEIRegistrationForm', 'WEIMembershipForm', 'BusForm', 'BusTeamForm', | ||||||
|  |     'WEISurvey', 'WEISurveyInformation', 'WEISurveyAlgorithm', 'CurrentSurvey', | ||||||
|  | ] | ||||||
| @@ -5,7 +5,7 @@ from django import forms | |||||||
| from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||||
| from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget | from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget | ||||||
| 
 | 
 | ||||||
| from .models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole | from wei.models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class WEIForm(forms.ModelForm): | class WEIForm(forms.ModelForm): | ||||||
							
								
								
									
										12
									
								
								apps/wei/forms/surveys/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								apps/wei/forms/surveys/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm | ||||||
|  | from .wei2020 import WEISurvey2020 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | __all__ = [ | ||||||
|  |     'WEISurvey', 'WEISurveyInformation', 'WEISurveyAlgorithm', 'CurrentSurvey', | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | CurrentSurvey = WEISurvey2020 | ||||||
							
								
								
									
										61
									
								
								apps/wei/forms/surveys/base.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								apps/wei/forms/surveys/base.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | from wei.models import WEIClub, WEIRegistration | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurvey: | ||||||
|  |     year = None | ||||||
|  |     step = 0 | ||||||
|  |  | ||||||
|  |     def __init__(self, registration): | ||||||
|  |         self.registration = registration | ||||||
|  |         self.information = self.get_survey_information_class()(registration) | ||||||
|  |  | ||||||
|  |     def get_wei(self): | ||||||
|  |         return WEIClub.objects.get(year=self.year) | ||||||
|  |  | ||||||
|  |     def get_survey_information_class(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def get_form_class(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def update_form(self, form): | ||||||
|  |         pass | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def get_algorithm_class(): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def form_valid(self, form): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def save(self): | ||||||
|  |         self.information.save(self.registration) | ||||||
|  |  | ||||||
|  |     def select_bus(self, bus_pk): | ||||||
|  |         self.information.selected_bus_pk = bus_pk | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurveyInformation: | ||||||
|  |     valid = False | ||||||
|  |     selected_bus_pk = None | ||||||
|  |  | ||||||
|  |     def __init__(self, registration): | ||||||
|  |         self.__dict__.update(registration.information) | ||||||
|  |  | ||||||
|  |     def save(self, registration): | ||||||
|  |         registration.information = self.__dict__ | ||||||
|  |         registration.save() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurveyAlgorithm: | ||||||
|  |     def get_survey_class(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def get_registrations(self): | ||||||
|  |         return WEIRegistration.objects.filter(wei__year=self.get_survey_class().year, first_year=True).all() | ||||||
|  |  | ||||||
|  |     def run_algorithm(self): | ||||||
|  |         raise NotImplementedError | ||||||
							
								
								
									
										52
									
								
								apps/wei/forms/surveys/wei2020.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								apps/wei/forms/surveys/wei2020.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | # 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): | ||||||
|  |     bus = forms.ModelChoiceField( | ||||||
|  |         Bus.objects, | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     def set_registration(self, registration): | ||||||
|  |         self.fields["bus"].queryset = Bus.objects.filter(wei=registration.wei) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurveyInformation2020(WEISurveyInformation): | ||||||
|  |     chosen_bus_pk = None | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurvey2020(WEISurvey): | ||||||
|  |     year = 2020 | ||||||
|  |  | ||||||
|  |     def get_survey_information_class(self): | ||||||
|  |         return WEISurveyInformation2020 | ||||||
|  |  | ||||||
|  |     def get_form_class(self): | ||||||
|  |         return WEISurveyForm2020 | ||||||
|  |  | ||||||
|  |     def update_form(self, form): | ||||||
|  |         form.set_registration(self.registration) | ||||||
|  |  | ||||||
|  |     def form_valid(self, form): | ||||||
|  |         self.information.chosen_bus_pk = form.cleaned_data["bus"].pk | ||||||
|  |         self.save() | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def get_algorithm_class(): | ||||||
|  |         return WEISurveyAlgorithm2020 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurveyAlgorithm2020(WEISurveyAlgorithm): | ||||||
|  |     def get_survey_class(self): | ||||||
|  |         return WEISurvey2020 | ||||||
|  |  | ||||||
|  |     def run_algorithm(self): | ||||||
|  |         for registration in self.get_registrations(): | ||||||
|  |             survey = self.get_survey_class()(registration) | ||||||
|  |             survey.select_bus(survey.information.chosen_bus_pk) | ||||||
|  |             survey.save() | ||||||
							
								
								
									
										0
									
								
								apps/wei/management/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								apps/wei/management/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										2
									
								
								apps/wei/management/commands/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apps/wei/management/commands/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
							
								
								
									
										2
									
								
								apps/wei/management/commands/_private.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apps/wei/management/commands/_private.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
							
								
								
									
										14
									
								
								apps/wei/management/commands/wei_algorithm.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								apps/wei/management/commands/wei_algorithm.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay | ||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
|  | from django.core.management import BaseCommand | ||||||
|  | from django.utils.translation import gettext_lazy as _ | ||||||
|  |  | ||||||
|  | from wei.forms import CurrentSurvey | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Command(BaseCommand): | ||||||
|  |     help = _("Attribute to each first year member a bus for the WEI") | ||||||
|  |  | ||||||
|  |     def handle(self, *args, **options): | ||||||
|  |         CurrentSurvey.get_algorithm_class()().run_algorithm() | ||||||
| @@ -64,6 +64,27 @@ class Bus(models.Model): | |||||||
|         verbose_name=_("description"), |         verbose_name=_("description"), | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |     information_json = models.TextField( | ||||||
|  |         default="{}", | ||||||
|  |         verbose_name=_("survey information"), | ||||||
|  |         help_text=_("Information about the survey for new members, encoded in JSON"), | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     def information(self): | ||||||
|  |         """ | ||||||
|  |         The information about the survey for new members are stored in a dictionary that can evolve following the years. | ||||||
|  |          The dictionary is stored as a JSON string. | ||||||
|  |         """ | ||||||
|  |         return json.loads(self.information_json) | ||||||
|  |  | ||||||
|  |     @information.setter | ||||||
|  |     def information(self, information): | ||||||
|  |         """ | ||||||
|  |         Store information as a JSON string | ||||||
|  |         """ | ||||||
|  |         self.information_json = json.dumps(information) | ||||||
|  |  | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return self.name |         return self.name | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ from django.urls import path | |||||||
|  |  | ||||||
| from .views import CurrentWEIDetailView, WEIListView, WEICreateView, WEIDetailView, WEIUpdateView,\ | from .views import CurrentWEIDetailView, WEIListView, WEICreateView, WEIDetailView, WEIUpdateView,\ | ||||||
|     BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView,\ |     BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView,\ | ||||||
|     WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, WEIValidateRegistrationView |     WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, WEIValidateRegistrationView, WEISurveyView | ||||||
|  |  | ||||||
|  |  | ||||||
| app_name = 'wei' | app_name = 'wei' | ||||||
| @@ -27,4 +27,5 @@ urlpatterns = [ | |||||||
|     path('register/<int:wei_pk>/2A+/myself/', WEIRegister2AView.as_view(), name="wei_register_2A_myself"), |     path('register/<int:wei_pk>/2A+/myself/', WEIRegister2AView.as_view(), name="wei_register_2A_myself"), | ||||||
|     path('edit-registration/<int:pk>/', WEIUpdateRegistrationView.as_view(), name="wei_update_registration"), |     path('edit-registration/<int:pk>/', WEIUpdateRegistrationView.as_view(), name="wei_update_registration"), | ||||||
|     path('validate/<int:pk>/', WEIValidateRegistrationView.as_view(), name="validate_registration"), |     path('validate/<int:pk>/', WEIValidateRegistrationView.as_view(), name="validate_registration"), | ||||||
|  |     path('survey/<int:pk>/', WEISurveyView.as_view(), name="wei_survey"), | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ from django.db.models import Q | |||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.views.generic import DetailView, UpdateView, CreateView, RedirectView | from django.views.generic import DetailView, UpdateView, CreateView, RedirectView | ||||||
| from django.utils.translation import gettext_lazy as _ | from django.utils.translation import gettext_lazy as _ | ||||||
|  | from django.views.generic.edit import BaseFormView | ||||||
| from django_tables2 import SingleTableView | from django_tables2 import SingleTableView | ||||||
| from member.models import Membership, Club | from member.models import Membership, Club | ||||||
| from note.models import Transaction, NoteClub | from note.models import Transaction, NoteClub | ||||||
| @@ -17,7 +18,7 @@ from permission.backends import PermissionBackend | |||||||
| from permission.views import ProtectQuerysetMixin | from permission.views import ProtectQuerysetMixin | ||||||
|  |  | ||||||
| from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam, WEIRole | from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam, WEIRole | ||||||
| from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembershipForm | from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembershipForm, CurrentSurvey | ||||||
| from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable | from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -302,8 +303,7 @@ class WEIRegister1AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): | |||||||
|  |  | ||||||
|     def get_success_url(self): |     def get_success_url(self): | ||||||
|         self.object.refresh_from_db() |         self.object.refresh_from_db() | ||||||
|         # TODO Replace it with the link of the survey |         return reverse_lazy("wei:wei_survey", kwargs={"pk": self.object.pk}) | ||||||
|         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk}) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): | class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): | ||||||
| @@ -342,7 +342,7 @@ class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): | |||||||
|  |  | ||||||
|     def get_success_url(self): |     def get_success_url(self): | ||||||
|         self.object.refresh_from_db() |         self.object.refresh_from_db() | ||||||
|         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk}) |         return reverse_lazy("wei:wei_survey", kwargs={"pk": self.object.pk}) | ||||||
|  |  | ||||||
|  |  | ||||||
| class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): | class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): | ||||||
| @@ -447,3 +447,36 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea | |||||||
|     def get_success_url(self): |     def get_success_url(self): | ||||||
|         self.object.refresh_from_db() |         self.object.refresh_from_db() | ||||||
|         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.club.pk}) |         return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.club.pk}) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WEISurveyView(BaseFormView, DetailView): | ||||||
|  |     model = WEIRegistration | ||||||
|  |     template_name = "wei/survey.html" | ||||||
|  |     survey = None | ||||||
|  |  | ||||||
|  |     def setup(self, request, *args, **kwargs): | ||||||
|  |         ret = super().setup(request, *args, **kwargs) | ||||||
|  |         return ret | ||||||
|  |  | ||||||
|  |     def get_form_class(self): | ||||||
|  |         if not self.survey: | ||||||
|  |             self.survey = CurrentSurvey(self.get_object()) | ||||||
|  |         return self.survey.get_form_class() | ||||||
|  |  | ||||||
|  |     def get_form(self, form_class=None): | ||||||
|  |         form = super().get_form(form_class) | ||||||
|  |         self.survey.update_form(form) | ||||||
|  |         return form | ||||||
|  |  | ||||||
|  |     def get_context_data(self, **kwargs): | ||||||
|  |         context = super().get_context_data(**kwargs) | ||||||
|  |         context["club"] = self.object.wei | ||||||
|  |         context["title"] = _("Survey WEI") | ||||||
|  |         return context | ||||||
|  |  | ||||||
|  |     def form_valid(self, form): | ||||||
|  |         self.survey.form_valid(form) | ||||||
|  |         return super().form_valid(form) | ||||||
|  |  | ||||||
|  |     def get_success_url(self): | ||||||
|  |         return reverse_lazy('wei:wei_survey', args=(self.get_object().pk,)) | ||||||
|   | |||||||
| @@ -168,11 +168,11 @@ LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] | |||||||
|  |  | ||||||
| FIXTURE_DIRS = [os.path.join(BASE_DIR, "note_kfet/fixtures")] | FIXTURE_DIRS = [os.path.join(BASE_DIR, "note_kfet/fixtures")] | ||||||
|  |  | ||||||
| # Static files (CSS, JavaScript, Images) | # Static forms (CSS, JavaScript, Images) | ||||||
| # https://docs.djangoproject.com/en/2.2/howto/static-files/ | # https://docs.djangoproject.com/en/2.2/howto/static-files/ | ||||||
|  |  | ||||||
| # Absolute path to the directory static files should be collected to. | # Absolute path to the directory static forms should be collected to. | ||||||
| # Don't put anything in this directory yourself; store your static files | # Don't put anything in this directory yourself; store your static forms | ||||||
| # in apps' "static/" subdirectories and in STATICFILES_DIRS. | # in apps' "static/" subdirectories and in STATICFILES_DIRS. | ||||||
| # Example: "/var/www/example.com/static/" | # Example: "/var/www/example.com/static/" | ||||||
| STATIC_ROOT = os.path.join(BASE_DIR, "static/") | STATIC_ROOT = os.path.join(BASE_DIR, "static/") | ||||||
| @@ -181,7 +181,7 @@ STATIC_ROOT = os.path.join(BASE_DIR, "static/") | |||||||
| STATICFILES_DIRS = [] | STATICFILES_DIRS = [] | ||||||
| CRISPY_TEMPLATE_PACK = 'bootstrap4' | CRISPY_TEMPLATE_PACK = 'bootstrap4' | ||||||
| DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap4.html' | DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap4.html' | ||||||
| # URL prefix for static files. | # URL prefix for static forms. | ||||||
| # Example: "http://example.com/static/", "http://static.example.com/" | # Example: "http://example.com/static/", "http://static.example.com/" | ||||||
| STATIC_URL = '/static/' | STATIC_URL = '/static/' | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								static/admin/js/vendor/jquery/jquery.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								static/admin/js/vendor/jquery/jquery.js
									
									
									
									
										vendored
									
									
								
							| @@ -10310,7 +10310,7 @@ jQuery.isNumeric = function( obj ) { | |||||||
|  |  | ||||||
|  |  | ||||||
| // Register as a named AMD module, since jQuery can be concatenated with other | // Register as a named AMD module, since jQuery can be concatenated with other | ||||||
| // files that may use define, but not via a proper concatenation script that | // forms that may use define, but not via a proper concatenation script that | ||||||
| // understands anonymous AMD modules. A named AMD is safest and most robust | // understands anonymous AMD modules. A named AMD is safest and most robust | ||||||
| // way to register. Lowercase jquery is used because AMD module names are | // way to register. Lowercase jquery is used because AMD module names are | ||||||
| // derived from file names, and jQuery is normally delivered in a lowercase | // derived from file names, and jQuery is normally delivered in a lowercase | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ | |||||||
|   var S2 = |   var S2 = | ||||||
| (function () { | (function () { | ||||||
|   // Restore the Select2 AMD loader so it can be used |   // Restore the Select2 AMD loader so it can be used | ||||||
|   // Needed mostly in the language files, where the loader is not inserted |   // Needed mostly in the language forms, where the loader is not inserted | ||||||
|   if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { |   if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { | ||||||
|     var S2 = jQuery.fn.select2.amd; |     var S2 = jQuery.fn.select2.amd; | ||||||
|   } |   } | ||||||
| @@ -4774,7 +4774,7 @@ S2.define('select2/defaults',[ | |||||||
|           } catch (ex) { |           } catch (ex) { | ||||||
|             // The translation could not be loaded at all. Sometimes this is |             // The translation could not be loaded at all. Sometimes this is | ||||||
|             // because of a configuration problem, other times this can be |             // because of a configuration problem, other times this can be | ||||||
|             // because of how Select2 helps load all possible translation files. |             // because of how Select2 helps load all possible translation forms. | ||||||
|             if (options.debug && window.console && console.warn) { |             if (options.debug && window.console && console.warn) { | ||||||
|               console.warn( |               console.warn( | ||||||
|                 'Select2: The language file for "' + name + '" could not be ' + |                 'Select2: The language file for "' + name + '" could not be ' + | ||||||
| @@ -6428,7 +6428,7 @@ S2.define('jquery.select2',[ | |||||||
|  |  | ||||||
|   // Hold the AMD module references on the jQuery function that was just loaded |   // Hold the AMD module references on the jQuery function that was just loaded | ||||||
|   // This allows Select2 to use the internal loader outside of this file, such |   // This allows Select2 to use the internal loader outside of this file, such | ||||||
|   // as in the language files. |   // as in the language forms. | ||||||
|   jQuery.fn.select2.amd = S2; |   jQuery.fn.select2.amd = S2; | ||||||
|  |  | ||||||
|   // Return the Select2 instance for anyone who is importing it. |   // Return the Select2 instance for anyone who is importing it. | ||||||
|   | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										29
									
								
								templates/wei/survey.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								templates/wei/survey.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | {% extends "member/noteowner_detail.html" %} | ||||||
|  | {% load i18n %} | ||||||
|  | {% load crispy_forms_tags %} | ||||||
|  |  | ||||||
|  | {% block profile_info %} | ||||||
|  | {% include "wei/weiclub_info.html" %} | ||||||
|  | {% endblock %} | ||||||
|  |  | ||||||
|  | {% block profile_content %} | ||||||
|  |     <div class="card"> | ||||||
|  |         <div class="card-header text-center"> | ||||||
|  |             <h4>{% trans "Survey WEI" %}</h4> | ||||||
|  |         </div> | ||||||
|  |         <div class="card-body"> | ||||||
|  |             <dl class="row"> | ||||||
|  |                 <dt class="col-xl-6">{% trans 'user'|capfirst %}</dt> | ||||||
|  |                 <dd class="col-xl-6">{{ object.user }}</dd> | ||||||
|  |             </dl> | ||||||
|  |  | ||||||
|  |             <form method="post"> | ||||||
|  |                 {% csrf_token %} | ||||||
|  |                 {{ form|crispy }} | ||||||
|  |                 <div class="card-footer text-center"> | ||||||
|  |                     <input class="btn btn-success" type="submit" value="{% trans "Next" %}"/> | ||||||
|  |                 </div> | ||||||
|  |             </form> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | {% endblock %} | ||||||
		Reference in New Issue
	
	Block a user