Add downsample series functionality and related UI updates

- Implemented asynchronous downsample task for series with progress tracking.
- Added new URL endpoint for downsample status.
- Updated Series model to include source_series_instance_uid.
- Enhanced case display template with new buttons for series actions.
- Added password reset functionality in user profile with appropriate alerts.
- Created migration for new source_series_instance_uid field in Series model.
This commit is contained in:
Ross
2026-05-18 16:20:38 +01:00
parent c55797636a
commit 63ea4cdf23
12 changed files with 606 additions and 294 deletions
+26 -10
View File
@@ -5855,15 +5855,31 @@ def create_user(request, context=None, trainee: bool = False):
if form.is_valid():
try:
username = form.cleaned_data["username"].strip().lower()
existing_user = User.objects.filter(
Q(username__iexact=username) | Q(email__iexact=username)
).first()
user_dict = {
"username": request.POST["username"],
"first_name": request.POST["first_name"],
"last_name": request.POST["last_name"],
"email": request.POST["username"],
"username": username,
"first_name": form.cleaned_data["first_name"],
"last_name": form.cleaned_data["last_name"],
"email": username,
"password": secrets.token_hex(nbytes=16),
}
new_user = User.objects.create_user(**user_dict)
with transaction.atomic():
if existing_user is not None:
existing_user.username = user_dict["username"]
existing_user.email = user_dict["email"]
existing_user.first_name = user_dict["first_name"]
existing_user.last_name = user_dict["last_name"]
existing_user.save(
update_fields=["username", "email", "first_name", "last_name"]
)
new_user = existing_user
else:
new_user = User.objects.create_user(**user_dict)
except Exception as error:
errors = f"Unable to create account: {error}"
return render(
@@ -5873,15 +5889,15 @@ def create_user(request, context=None, trainee: bool = False):
)
try:
user_profile = UserProfile.objects.get(user=new_user)
user_profile, _ = UserProfile.objects.get_or_create(user=new_user)
user_profile.peninsula_trainee = trainee
if request.POST["grade"]:
grade = UserGrades.objects.get(pk=request.POST["grade"])
if form.cleaned_data.get("grade"):
grade = form.cleaned_data["grade"]
user_profile.grade = grade
if "supervisor" in request.POST and request.POST["supervisor"]:
supervisor = Supervisor.objects.get(pk=request.POST["supervisor"])
if trainee and form.cleaned_data.get("supervisor"):
supervisor = form.cleaned_data["supervisor"]
user_profile.supervisor = supervisor
user_profile.save()