diff --git a/generic/forms.py b/generic/forms.py
index 006b93d8..2457c733 100755
--- a/generic/forms.py
+++ b/generic/forms.py
@@ -69,7 +69,6 @@ class ExamFormMixin:
else:
cid_user_group_queryset = CidUserGroup.objects.none()
user_user_group_queryset = UserUserGroup.objects.none()
-
self.fields["cid_user_groups"] = ModelMultipleChoiceField(
required=False,
@@ -79,6 +78,7 @@ class ExamFormMixin:
required=False,
queryset=user_user_group_queryset,
)
+
class Meta:
fields = [
"name",
@@ -129,9 +129,11 @@ class ExaminationForm(ModelForm):
model = Examination
fields = ["examination", "modality"]
+
class ExaminationMergeForm(Form):
examination_to_merge_into = ModelChoiceField(queryset=Examination.objects.all())
+
class QuestionNoteForm(ModelForm):
class Meta:
model = QuestionNote
@@ -172,7 +174,6 @@ class QuestionNoteForm(ModelForm):
class CidUserForm(ModelForm):
-
class Meta:
model = CidUser
fields = [
@@ -187,6 +188,7 @@ class CidUserForm(ModelForm):
"group",
]
+
class CidUserExamForm(ModelForm):
def __init__(self, *args, **kwargs):
if kwargs.get("instance"):
@@ -289,17 +291,18 @@ class CidUserExamForm(ModelForm):
self.save_m2m()
return instance
+
class Meta:
model = CidUser
fields = []
+
class CidUserGroupModelChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return f"{obj.cid} [{obj.email}]"
class CidUserGroupForm(ModelForm):
-
class Meta:
model = CidUserGroup
fields = ["name", "archive"]
@@ -322,6 +325,190 @@ class UserUserGroupForm(ModelForm):
fields = ["name", "archive", "users"]
+class UserGroupExamForm(ModelForm):
+ GROUP_TYPES = [
+ "anatomy_user_user_groups",
+ "rapid_user_user_groups",
+ "longs_user_user_groups",
+ "physics_user_user_groups",
+ "sba_user_user_groups",
+ ]
+ # users = UserUserGroupModelChoiceField(
+ # required=False,
+ # queryset=User.objects.all(),
+ # widget=FilteredSelectMultiple(verbose_name="Users", is_stacked=False),
+ # )
+ def __init__(self, *args, **kwargs):
+ if kwargs.get("instance"):
+ # We get the 'initial' keyword argument or initialize it
+ # as a dict if it didn't exist.
+ initial = kwargs.setdefault("initial", {})
+ # The widget for a ModelMultipleChoiceField expects
+ # a list of primary key for the selected data.
+ for groups in self.GROUP_TYPES:
+ #instance.anatomy_cid_user_groups.clear()
+ #obj = getattr(instance,groups)
+ initial[groups] = [
+ t.pk for t in getattr(kwargs["instance"],groups).all()
+ ]
+
+ ModelForm.__init__(self, *args, **kwargs)
+
+ super(UserGroupExamForm, self).__init__(*args, **kwargs)
+
+ self.fields["anatomy_user_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=AnatomyExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(
+ verbose_name="Anatomy Exams", is_stacked=False
+ ),
+ )
+ self.fields["rapid_user_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=RapidsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Rapid Exams", is_stacked=False),
+ )
+ self.fields["longs_user_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=LongsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Longs Exams", is_stacked=False),
+ )
+ self.fields["physics_user_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=PhysicsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(
+ verbose_name="Physics Exams", is_stacked=False
+ ),
+ )
+ self.fields["sba_user_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=SbasExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Sbas Exams", is_stacked=False),
+ )
+
+ class Meta:
+ model = UserUserGroup
+ fields = []
+
+ def save(self, commit=True):
+ # Get the unsaved Long instance
+ instance = ModelForm.save(self, False)
+
+ # Prepare a 'save_m2m' method for the form,
+ old_save_m2m = self.save_m2m
+
+ def save_m2m():
+ old_save_m2m()
+
+ for groups in self.GROUP_TYPES:
+ #instance.anatomy_cid_user_groups.clear()
+ obj = getattr(instance,groups)
+ obj.clear()
+ for exam in self.cleaned_data[groups]:
+ obj.add(exam.pk)
+
+ self.save_m2m = save_m2m
+
+ # Do we need to save all changes now?
+ # if commit:
+ instance.save()
+ self.save_m2m()
+
+ return instance
+
+
+class CidGroupExamForm(ModelForm):
+ GROUP_TYPES = [
+ "anatomy_cid_user_groups",
+ "rapid_cid_user_groups",
+ "longs_cid_user_groups",
+ "physics_cid_user_groups",
+ "sba_cid_user_groups",
+ ]
+
+ # users = CidUserGroupModelChoiceField(
+ # required=False,
+ # queryset=User.objects.all(),
+ # widget=FilteredSelectMultiple(verbose_name="Users", is_stacked=False),
+ def __init__(self, *args, **kwargs):
+ if kwargs.get("instance"):
+ # We get the 'initial' keyword argument or initialize it
+ # as a dict if it didn't exist.
+ initial = kwargs.setdefault("initial", {})
+ # The widget for a ModelMultipleChoiceField expects
+ # a list of primary key for the selected data.
+ for groups in self.GROUP_TYPES:
+ #instance.anatomy_cid_user_groups.clear()
+ #obj = getattr(instance,groups)
+ initial[groups] = [
+ t.pk for t in getattr(kwargs["instance"],groups).all()
+ ]
+
+ ModelForm.__init__(self, *args, **kwargs)
+
+ super(CidGroupExamForm, self).__init__(*args, **kwargs)
+
+ self.fields["anatomy_cid_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=AnatomyExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(
+ verbose_name="Anatomy Exams", is_stacked=False
+ ),
+ )
+ self.fields["rapid_cid_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=RapidsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Rapid Exams", is_stacked=False),
+ )
+ self.fields["longs_cid_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=LongsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Longs Exams", is_stacked=False),
+ )
+ self.fields["physics_cid_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=PhysicsExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(
+ verbose_name="Physics Exams", is_stacked=False
+ ),
+ )
+ self.fields["sba_cid_user_groups"] = ModelMultipleChoiceField(
+ required=False,
+ queryset=SbasExam.objects.filter(archive=False),
+ widget=FilteredSelectMultiple(verbose_name="Sbas Exams", is_stacked=False),
+ )
+
+ class Meta:
+ model = CidUserGroup
+ fields = []
+
+ def save(self, commit=True):
+ # Get the unsaved Long instance
+ instance = ModelForm.save(self, False)
+
+ # Prepare a 'save_m2m' method for the form,
+ old_save_m2m = self.save_m2m
+
+ def save_m2m():
+ old_save_m2m()
+
+ for groups in self.GROUP_TYPES:
+ #instance.anatomy_cid_user_groups.clear()
+ obj = getattr(instance,groups)
+ obj.clear()
+ for exam in self.cleaned_data[groups]:
+ obj.add(exam.pk)
+
+ self.save_m2m = save_m2m
+
+ # Do we need to save all changes now?
+ # if commit:
+ instance.save()
+ self.save_m2m()
+
+ return instance
+
+
# class UserForm(ModelForm):
# class Meta:
# model = User
diff --git a/generic/templates/generic/cid_group_base.html b/generic/templates/generic/cid_group_base.html
new file mode 100644
index 00000000..bb1c837f
--- /dev/null
+++ b/generic/templates/generic/cid_group_base.html
@@ -0,0 +1,30 @@
+{% extends 'generic/base.html' %}
+
+
+{% block navigation %}
+ {{block.super}}
+
+ Group: {{group.name}}->
+ {% if group_type == "cid" %}
+
+ {% if not group %}
+ Group /
+ Edit Users /
+ Edit Exams /
+ Delete
+
+ {% else %}
+ Group /
+ Edit Users /
+ Edit Exams /
+ Delete
+ {% endif %}
+
+ {% else %}
+ Group /
+ Edit Users /
+ Edit Exams /
+ Delete
+ {% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/generic/templates/generic/cid_group_view_detail.html b/generic/templates/generic/cid_group_view_detail.html
index dce2aadb..727d27f8 100755
--- a/generic/templates/generic/cid_group_view_detail.html
+++ b/generic/templates/generic/cid_group_view_detail.html
@@ -1,4 +1,4 @@
-{% extends 'generic/base.html' %}
+{% extends 'generic/cid_group_base.html' %}
{% block content %}
The user is currently part of the following exams
+ The group is currently associated with the following exams.
{% with object.get_cid_exams as exam_map %}
diff --git a/generic/templates/generic/cidusergroup_form.html b/generic/templates/generic/cidusergroup_form.html
index 6c534a23..87df0c35 100755
--- a/generic/templates/generic/cidusergroup_form.html
+++ b/generic/templates/generic/cidusergroup_form.html
@@ -1,4 +1,4 @@
-{% extends "generic/base.html" %}
+{% extends 'generic/cid_group_base.html' %}
{% block css %}
diff --git a/generic/urls.py b/generic/urls.py
index 5dad80f7..e83be7ee 100755
--- a/generic/urls.py
+++ b/generic/urls.py
@@ -60,6 +60,7 @@ urlpatterns = [
name="cid_group_detail",
),
path("cids/group/