From 1f2f5148264203cb064938d960ff9a9f00e53d2b Mon Sep 17 00:00:00 2001 From: Mike Chagnon Date: Tue, 2 Sep 2025 06:39:15 -0700 Subject: [PATCH 1/3] make datasets readonly on edit team screen --- ifcbdb/dashboard/models.py | 3 + ifcbdb/secure/forms.py | 7 +- ifcbdb/secure/views.py | 64 +++++++------ ifcbdb/templates/secure/edit-dataset.html | 7 ++ ifcbdb/templates/secure/edit-team.html | 106 ++++++++-------------- 5 files changed, 88 insertions(+), 99 deletions(-) diff --git a/ifcbdb/dashboard/models.py b/ifcbdb/dashboard/models.py index 6595d21d..4a581dea 100644 --- a/ifcbdb/dashboard/models.py +++ b/ifcbdb/dashboard/models.py @@ -930,6 +930,9 @@ class Team(models.Model): users = models.ManyToManyField(User, through='TeamUser', related_name='teams') datasets = models.ManyToManyField(Dataset, through='TeamDataset', related_name='teams') + def __str__(self): + return self.name + class TeamRole(models.Model): name = models.CharField(max_length=50, blank=False, null=False) diff --git a/ifcbdb/secure/forms.py b/ifcbdb/secure/forms.py index 1d253408..201dcecd 100644 --- a/ifcbdb/secure/forms.py +++ b/ifcbdb/secure/forms.py @@ -25,6 +25,8 @@ class DatasetForm(forms.ModelForm): longitude = forms.FloatField(required=False, widget=forms.TextInput( attrs={"class": "form-control form-control-sm", "placeholder": "Longitude"} )) + team = forms.ModelChoiceField(queryset=Team.objects.all(), required=False, + widget=forms.Select(attrs={"class": "form-control form-control-sm"})) class Meta: model = Dataset @@ -62,6 +64,10 @@ def __init__(self, *args, **kwargs): self.fields["latitude"].initial = instance.location.y self.fields["longitude"].initial = instance.location.x + team_dataset = TeamDataset.objects.filter(dataset=instance).first() + if team_dataset is not None: + self.fields["team"].initial = team_dataset.team + def save(self, commit=True): instance = super(DatasetForm, self).save(commit=False) @@ -271,7 +277,6 @@ class Meta: class TeamForm(forms.ModelForm): - assigned_dataset_ids = forms.CharField(required=False, max_length=1000, widget=forms.HiddenInput()) assigned_users_json = forms.CharField(required=False, widget=forms.HiddenInput()) def __init__(self, *args, **kwargs): diff --git a/ifcbdb/secure/views.py b/ifcbdb/secure/views.py index ef29ffd2..edbc43ae 100644 --- a/ifcbdb/secure/views.py +++ b/ifcbdb/secure/views.py @@ -146,6 +146,29 @@ def edit_dataset(request, id): if form.is_valid(): instance = form.save() + team = form.cleaned_data.get("team") + existing = TeamDataset.objects.filter(dataset_id=dataset.id).first() + + # Save the associated team, if any + if team is None and existing is not None: + existing.delete() + + if team is not None and existing is None: + TeamDataset.objects.create(team=team, dataset=instance) + + if team is not None and existing is not None and existing.team != team: + existing.team = team + existing.save() + + + # if team is None and existing is not None: + # existing.delete() + # elif existing: + # TeamDataset.objects.create(team=team, dataset=instance) + # elif existing.team != team: + # existing.team = team + # existing.save() + status = "created" if id == 0 else "updated" return redirect(reverse("secure:edit-dataset", kwargs={"id": instance.id}) + "?status=" + status) else: @@ -332,37 +355,10 @@ def edit_team(request, id): # Remove any user relationships that have been unassigned TeamUser.objects.filter(team=instance).exclude(user_id__in=assigned_user_ids).delete() - # Update assigned datasets - assigned_dataset_ids = request.POST.get("assigned_dataset_ids") - assigned_dataset_ids = list(map(int, assigned_dataset_ids.split(","))) if assigned_dataset_ids else [] - - # Remove any dataset relationships that have been unassigned - TeamDataset.objects.filter(team=instance).exclude(dataset_id__in=assigned_dataset_ids).delete() - - # Add any new dataset relationships - existing_ids = list(TeamDataset.objects.filter(team=instance).values_list("dataset_id", flat=True)) - ids_to_add = set(assigned_dataset_ids) - set(existing_ids) - for id in ids_to_add: - team_dataset = TeamDataset() - team_dataset.team = instance - team_dataset.dataset_id = id - team_dataset.save() - return redirect(reverse("secure:team-management")) else: form = TeamForm(instance=team) - datasets = Dataset.objects.all().order_by("name") - - if team.pk: - assigned_dataset_ids = list(TeamDataset.objects.filter(team=team).values_list("dataset_id", flat=True)) - - assigned_datasets = datasets.filter(id__in=assigned_dataset_ids) - available_datasets = datasets.exclude(id__in=assigned_dataset_ids) - else: - assigned_datasets = [] - available_datasets = datasets - team_users = TeamUser.objects \ .filter(team=team) \ .select_related("user") \ @@ -383,15 +379,25 @@ def edit_team(request, id): role_options = TeamRole.objects.all() + assigned_team_datasets = TeamDataset.objects \ + .select_related("dataset") \ + .filter(team=team).order_by("dataset__name") \ + .order_by("dataset__name") + assigned_datasets_json = json.dumps([ + { + "name": team_dataset.dataset.name + } + for team_dataset in assigned_team_datasets + ]) + return render(request, "secure/edit-team.html", { "team": team, "form": form, - "assigned_datasets": assigned_datasets, - "available_datasets": available_datasets, "is_admin": auth.is_admin(request.user), "all_users": all_users, "assigned_users_json": assigned_users_json, "role_options": role_options, + "assigned_datasets_json": assigned_datasets_json, }) diff --git a/ifcbdb/templates/secure/edit-dataset.html b/ifcbdb/templates/secure/edit-dataset.html index 658dc414..a063ef25 100644 --- a/ifcbdb/templates/secure/edit-dataset.html +++ b/ifcbdb/templates/secure/edit-dataset.html @@ -60,6 +60,13 @@ {% if form.title.errors %}{{ form.title.errors.as_text }}{% endif %} +
+
+ + {{ form.team }} + {% if form.team.errors %}{{ form.team.errors.as_text }}{% endif %} +
+
diff --git a/ifcbdb/templates/secure/edit-team.html b/ifcbdb/templates/secure/edit-team.html index 56ebf78c..4dc39c2a 100644 --- a/ifcbdb/templates/secure/edit-team.html +++ b/ifcbdb/templates/secure/edit-team.html @@ -41,38 +41,6 @@
-
-
-
- - -
-
-
-
- -
-
- -
-
-
-
- - -
-
-
- -
@@ -95,8 +63,26 @@
+
+
+
+ +
+
+
+
+ + + + + + +
Name
+
+
+
-
+
Cancel
@@ -153,24 +139,12 @@ {% block scripts %}