diff --git a/biscuit/core/forms.py b/biscuit/core/forms.py index d3f327c8d8b0710e0f3c4a446dd7171b394b6011..e0af144a35065539b9cac0cc512ae8a6cf940b65 100644 --- a/biscuit/core/forms.py +++ b/biscuit/core/forms.py @@ -3,6 +3,7 @@ from django.contrib.auth import get_user_model from django.utils.translation import ugettext_lazy as _ from .models import Person +from .utils import class PersonAccountForm(forms.ModelForm): @@ -36,3 +37,29 @@ class PersonAccountForm(forms.ModelForm): PersonsAccountsFormSet = forms.modelformset_factory( Person, form=PersonAccountForm, max_num=0, extra=0) + +class EditPersonForm(forms.ModelForm) + class Meta: + model = Person + fields = ['user', 'is_active', 'first_name', 'last_name', 'additional_name', 'short_name', 'street', 'housenumber', 'postal_code', 'place', 'phone_number', 'mobile_number', 'email', 'date_of_birth', 'sex', 'photo'] + + new_user = forms.CharField( + required=False, + label=_('New user'), + help_text=_('Create a new account'), + + def clean(self) -> None: + User = get_user_model() + + if self.cleaned_data.get('new_user', None): + if self.cleaned_data.get('user', None): + self.add_error('new_user', _('You cannot set a new username when also selecting an existing user.')) + elif User.objects.filter(username=self.cleaned_data['new_user']).exists(): + self.add_error('new_user', _('This username is already in use.')) + else: + new_user_obj = User.objects.create_user(self.cleaned_data['new_user'], + self.instance.email, + first_name=self.instance.first_name, + last_name=self.instance.last_name) + + self.cleaned_data['user'] = new_user_obj diff --git a/biscuit/core/locale/de_DE/LC_MESSAGES/django.po b/biscuit/core/locale/de_DE/LC_MESSAGES/django.po index f2dcb63c21c43f3426bd7f0456207fe7ec2d7bf9..621ff7240af21a392292a6c95d752b155661d15a 100644 --- a/biscuit/core/locale/de_DE/LC_MESSAGES/django.po +++ b/biscuit/core/locale/de_DE/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: BiscuIT - School Information System (SIS)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-08-26 00:46+0200\n" -"PO-Revision-Date: 2019-08-26 00:56+0200\n" +"POT-Creation-Date: 2019-08-26 19:58+0200\n" +"PO-Revision-Date: 2019-08-26 19:59+0200\n" "Last-Translator: Tom Teichler <tom.teichler@teckids.org>\n" "Language-Team: \n" "Language: de\n" @@ -22,16 +22,24 @@ msgstr "" msgid "BiscuIT - The Free School Information System" msgstr "BiscuIT - Das freie Schulinformationssystem" -#: forms.py:25 +#: forms.py:25 forms.py:55 msgid "You cannot set a new username when also selecting an existing user." msgstr "" "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen " "existierenden Benutzer auswählen." -#: forms.py:27 +#: forms.py:27 forms.py:57 msgid "This username is already in use." msgstr "Dieser Benutzername wird bereits genutzt." +#: forms.py:47 +msgid "New user" +msgstr "Neuer Benutzer" + +#: forms.py:48 +msgid "Create a new account" +msgstr "Neues Benutzerkonto erstellen" + #: menus.py:6 msgid "Login" msgstr "Anmelden" @@ -293,3 +301,7 @@ msgstr "Interner Serverfehler" #: views.py:32 msgid "An unexpected error has occurred." msgstr "Ein Fehler ist aufgetreten." + +#: views.py:157 +msgid "The person has been saved." +msgstr "Die Person wurde gespeichert." diff --git a/biscuit/core/templates/core/person_full.html b/biscuit/core/templates/core/person_full.html index 75a283798d20a558811ab77ab3dec15548d45bc1..2c34c774faccefedd0bc1b635d887b78a55f83bc 100644 --- a/biscuit/core/templates/core/person_full.html +++ b/biscuit/core/templates/core/person_full.html @@ -7,7 +7,7 @@ {% if person %} <h2>{{ person.first_name }} {{ person.last_name }}</h2> <p> - <a href="{{ '#' }}"> + <a href="{% url 'edit_person_by_id' person.id %}"> {% blocktrans %}Edit person{% endblocktrans %} </a> </p> diff --git a/biscuit/core/urls.py b/biscuit/core/urls.py index d3415193064e86b361bbef2d4b99314f509b73af..93b96080c2f4ab87351da1e3e25201da650287fb 100644 --- a/biscuit/core/urls.py +++ b/biscuit/core/urls.py @@ -11,11 +11,12 @@ urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), path('persons', views.persons, name='persons'), path('persons/accounts', views.persons_accounts, name='persons_accounts'), - path('person', views.person, name='person'), + pat('person', views.person, name='person'), path('person/<int:id_>', views.person, {'template': 'full'}, name='person_by_id'), path('person/<int:id_>/card', views.person, {'template': 'card'}, name='person_by_id_card'), + path('person/<int:id_>/edit', views.edit_person, name='edit_person_by_id'), path('groups', views.groups, name='groups'), path('group/<int:id_>', views.group, {'template': 'full'}, name='group_by_id'), diff --git a/biscuit/core/views.py b/biscuit/core/views.py index bce4001ee2df5c87901feb037a31f0def3abc44e..398ad6f8c2dc32dbbdb58791f1ef6421b723d99b 100644 --- a/biscuit/core/views.py +++ b/biscuit/core/views.py @@ -8,7 +8,7 @@ from django_tables2 import RequestConfig from django.utils.translation import ugettext_lazy as _ from .decorators import admin_required -from .forms import PersonsAccountsFormSet +from .forms import PersonsAccountsFormSet, EditPersonForm from .models import Person, Group from .tables import PersonsTable, GroupsTable @@ -139,3 +139,24 @@ def persons_accounts(request: HttpRequest) -> HttpResponse: context['persons_accounts_formset'] = persons_accounts_formset return render(request, 'core/persons_accounts.html', context) + +@admin_required +def edit_person(request: HttpRequest, id_: int) -> HttpResponse: + context = {} + + person = get_object_or_404(Person, id=id_) + + edit_person_form = EditPersonForm(request.POST or None, request.FILES or None, instance=person) + + context['person'] = person + + if request.method == 'POST': + if edit_person_form.is_valid(): + edit_person_form.save(commit=True) + + messages.success(request, _('The person has been saved.')) + return render(request, 'core/person_full.html', context) + + context['edit_person_form'] = edit_person_form + + return render(request, 'core/edit_person.html', context)