from django.contrib import messages from django.contrib.auth import get_user_model from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView from bds.autocomplete import bds_search from bds.forms import ProfileForm, UserForm from bds.mixins import StaffRequiredMixin from shared.views import AutocompleteView User = get_user_model() class BDSAutocompleteView(StaffRequiredMixin, AutocompleteView): template_name = "bds/search_results.html" search_composer = bds_search class Home(StaffRequiredMixin, TemplateView): template_name = "bds/home.html" class UserUpdateView(StaffRequiredMixin, TemplateView): template_name = "bds/user_update.html" def get_user(self): return get_object_or_404(User, pk=self.kwargs["pk"]) def get_user_form(self, data=None): return UserForm(prefix="u", instance=self.user, data=data) def get_profile_form(self, data=None): profile = getattr(self.user, "bds", None) return ProfileForm(prefix="p", instance=profile, data=data) def get_context_data(self, user_form=None, profile_form=None, **kwargs): return { "user_form": user_form or self.get_user_form(), "profile_form": profile_form or self.get_profile_form(), } def get(self, *args, **kwargs): self.user = self.get_user() return super().get(*args, **kwargs) def post(self, request, *args, **kwargs): self.user = self.get_user() user_form = self.get_user_form(data=request.POST) profile_form = self.get_profile_form(data=request.POST) if user_form.is_valid() and profile_form.is_valid(): self.user = user_form.save() profile = profile_form.save(commit=False) profile.user = self.user profile.save() messages.success(self.request, _("Profil mis à jour avec succès")) else: messages.error(self.request, _("Veuillez corriger les erreurs ci-dessous")) return self.render_to_response(self.get_context_data(user_form, profile_form))