Enable member creation functionality: implement MemberAddView, create MemberForm, update routes, templates, and add supporting styles.

This commit is contained in:
2026-01-17 23:38:12 +01:00
parent cb10c8ccf5
commit 303b8553c9
12 changed files with 738 additions and 13 deletions

View File

@@ -1,4 +1,9 @@
import secrets
import string
from typing import Optional
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
from django.utils.translation import gettext_lazy as _
from phonenumber_field.modelfields import PhoneNumberField
@@ -22,6 +27,7 @@ class Member(RulesModel):
phone_number = PhoneNumberField(_("phone number"), blank=True, null=True)
emergency_phone_number = PhoneNumberField(_("emergency phone number"), blank=True, null=True)
notes = models.TextField(_("notes"), blank=True, null=True)
access_token = models.CharField(_("access token"), max_length=255, blank=True, null=True)
@@ -44,3 +50,57 @@ class Member(RulesModel):
def __str__(self):
return self.user.get_full_name()
@classmethod
def create(cls, first_name: str, last_name: str, email: str, password: Optional[str] = None, member: Optional["Member"] = None) -> "Member":
"""Creates a new member based on the provided details"""
if member is not None and member.pk is not None:
member.user.first_name = first_name
member.user.last_name = last_name
member.user.email = email
member.user.username = email
if password is not None and password != "":
member.user.set_password(password)
else:
# First check to see if a user already exists in the system
user, created = get_user_model().objects.get_or_create(
username=email,
defaults={
"first_name": first_name,
"last_name": last_name,
"email": email
}
)
if not created:
user.first_name = first_name
user.last_name = last_name
user.email = email
user.username = email
if hasattr(user, "member"):
member = user.member
if password is not None and password != "":
user.set_password(password)
else:
member = cls()
initial_password = "".join(secrets.choice(string.ascii_letters + string.digits) for _ in range(20))
if password is None or password == "":
password = initial_password
member.notes = f"Initial password: {initial_password}"
user.set_password(password)
member.user = user
if not member.user.is_active:
member.user.is_active = True
member.user.save()
member.save()
return member