diff --git a/boranga/components/species_and_communities/models.py b/boranga/components/species_and_communities/models.py index 34fb85dfd..6363ae751 100644 --- a/boranga/components/species_and_communities/models.py +++ b/boranga/components/species_and_communities/models.py @@ -1220,7 +1220,7 @@ class Community(RevisionedMixin): RELATED_ITEM_CHOICES = [("conservation_status", "Conservation Status")] community_number = models.CharField(max_length=9, blank=True, default="") - renamed_from = models.OneToOneField( + renamed_from = models.ForeignKey( "self", on_delete=models.PROTECT, null=True, @@ -1509,23 +1509,20 @@ def get_related_items(self, filter_type, **kwargs): ) ) # Add renamed to related items to the list (limited to one degree of separation) - if ( - a_field.name == "renamed_to" - and hasattr(self, "renamed_to") - and self.renamed_to - ): - if filter_type == "for_occurrence": - return_list.extend( - self.renamed_to.get_related_items( - "conservation_status_and_occurrences" + if self.renamed_to.exists(): + for community in self.renamed_to.all(): + if filter_type == "for_occurrence": + return_list.extend( + community.get_related_items( + "conservation_status_and_occurrences" + ) ) - ) - else: - return_list.extend( - self.renamed_to.get_related_items( - "all_except_renamed_community" + else: + return_list.extend( + community.get_related_items( + "all_except_renamed_community" + ) ) - ) return return_list @@ -1807,10 +1804,22 @@ def copy_for_rename(self, request): new_community = Community.objects.get(pk=self.pk) new_community.pk = None new_community.community_number = "" - new_community.processing_status = Community.PROCESSING_STATUS_DRAFT + new_community.processing_status = Community.PROCESSING_STATUS_ACTIVE new_community.renamed_from_id = self.id new_community.save(version_user=request.user) + # Copy the community publishing status but set it to private (not public) + try: + publishing_status = CommunityPublishingStatus.objects.get( + id=self.community_publishing_status.id + ) + publishing_status.pk = None + publishing_status.community = new_community + publishing_status.community_public = False + publishing_status.save() + except CommunityPublishingStatus.DoesNotExist: + CommunityPublishingStatus.objects.get_or_create(community=self) + new_community.regions.add(*self.regions.all()) new_community.districts.add(*self.districts.all()) diff --git a/boranga/components/species_and_communities/serializers.py b/boranga/components/species_and_communities/serializers.py index bda9d4c15..f351ccd8c 100755 --- a/boranga/components/species_and_communities/serializers.py +++ b/boranga/components/species_and_communities/serializers.py @@ -1278,6 +1278,7 @@ class InternalCommunitySerializer(BaseCommunitySerializer): user_edit_mode = serializers.SerializerMethodField() can_user_edit = serializers.SerializerMethodField() can_add_log = serializers.SerializerMethodField() + can_user_reopen = serializers.SerializerMethodField() renamed_from = SimpleCommunityDisplaySerializer(read_only=True, allow_null=True) readonly = serializers.SerializerMethodField(read_only=True) @@ -1302,6 +1303,7 @@ class Meta: "readonly", "can_user_edit", "can_user_view", + "can_user_reopen", "current_assessor", "user_edit_mode", "comment", @@ -1346,6 +1348,12 @@ def get_can_user_edit(self, obj): return obj.can_user_edit return False + def get_can_user_reopen(self, obj): + request = self.context["request"] + if is_species_communities_approver(request): + return obj.can_user_reopen(request) + return False + def get_current_assessor(self, obj): return { "id": self.context["request"].user.id, diff --git a/boranga/components/users/serializers.py b/boranga/components/users/serializers.py index fe6afd508..aed6648e8 100755 --- a/boranga/components/users/serializers.py +++ b/boranga/components/users/serializers.py @@ -20,6 +20,8 @@ SubmitterInformation, ) from boranga.helpers import ( + is_conservation_status_approver, + is_conservation_status_assessor, is_contributor, is_internal, is_occurrence_approver, @@ -265,6 +267,18 @@ def to_representation(self, instance): if instance.email_user == request.user.id and is_contributor(request): return ret - if not is_occurrence_assessor(request) and not is_occurrence_approver(request): + if ( + hasattr(instance, "occurrence_report") + and ( + not is_occurrence_assessor(request) + and not is_occurrence_approver(request) + ) + or hasattr(instance, "conservation_status") + and ( + not is_conservation_status_assessor(request) + and not is_conservation_status_approver(request) + ) + ): ret.pop("contact_details") + return ret diff --git a/boranga/components/users/signals.py b/boranga/components/users/signals.py index dbf638f82..18d63566a 100644 --- a/boranga/components/users/signals.py +++ b/boranga/components/users/signals.py @@ -113,8 +113,20 @@ def add_external_user_to_external_contributors_group(sender, user, request, **kw "user_logged_in_signal running add_external_user_to_external_contributors_group function" ) + external_contributor_group = SystemGroup.objects.get( + name=settings.GROUP_NAME_EXTERNAL_CONTRIBUTOR + ) + # Only add external users to the external contributors group if is_internal(request): + # Check if the internal user is in the external contributors group and remove them if so + if SystemGroupPermission.objects.filter( + system_group=external_contributor_group, emailuser=user + ).exists(): + SystemGroupPermission.objects.filter( + system_group=external_contributor_group, emailuser=user + ).delete() + external_contributor_group.save() return # If user is blacklisted, don't add them to the external contributors group @@ -125,9 +137,7 @@ def add_external_user_to_external_contributors_group(sender, user, request, **kw return # If user is already in the external contributors group, don't add them again - external_contributor_group = SystemGroup.objects.get( - name=settings.GROUP_NAME_EXTERNAL_CONTRIBUTOR - ) + if SystemGroupPermission.objects.filter( system_group=external_contributor_group, emailuser=user ).exists(): diff --git a/boranga/frontend/boranga/src/components/common/communities_dashboard.vue b/boranga/frontend/boranga/src/components/common/communities_dashboard.vue index 4844b0400..05782bb04 100644 --- a/boranga/frontend/boranga/src/components/common/communities_dashboard.vue +++ b/boranga/frontend/boranga/src/components/common/communities_dashboard.vue @@ -944,19 +944,6 @@ export default { helpers.enablePopovers(); }); }, - initialiseSearch: function () { - this.submitterSearch(); - }, - submitterSearch: function () { - let vm = this; - vm.$refs.communities_datatable.table.dataTableExt.afnFiltering.push( - function (settings, data, dataIndex, original) { - let filtered_submitter = vm.filterProposalSubmitter; - if (filtered_submitter == 'All') { return true; } - return filtered_submitter == original.submitter.email; - } - ); - }, exportData: function (format) { let vm = this; const columns_new = { @@ -1153,7 +1140,6 @@ export default { this.$nextTick(() => { vm.initialiseCommunityNameLookup(); vm.initialiseCommunityIdLookup(); - vm.initialiseSearch(); vm.addEventListeners(); // -- to set the select2 field with the session value if exists onload() if (sessionStorage.getItem("filterCommunityName") != 'all' && sessionStorage.getItem("filterCommunityName") != null) { diff --git a/boranga/frontend/boranga/src/components/common/conservation_status/community_status.vue b/boranga/frontend/boranga/src/components/common/conservation_status/community_status.vue index d196c7b75..db08d5555 100644 --- a/boranga/frontend/boranga/src/components/common/conservation_status/community_status.vue +++ b/boranga/frontend/boranga/src/components/common/conservation_status/community_status.vue @@ -59,7 +59,7 @@
-