From 0a47b4a8546782fbd030b5109c2509d63dd932fb Mon Sep 17 00:00:00 2001 From: Dimas Ciputra Date: Tue, 13 Aug 2024 10:58:25 +0100 Subject: [PATCH] Update and improve csv generator (#4143) --- bims/api_views/checklist.py | 10 ++++++++-- bims/api_views/location_site_overview.py | 4 ++-- bims/serializers/checklist_serializer.py | 15 +++++++++++---- bims/tasks/email_csv.py | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/bims/api_views/checklist.py b/bims/api_views/checklist.py index bc12a06d2..b8491d44b 100644 --- a/bims/api_views/checklist.py +++ b/bims/api_views/checklist.py @@ -2,7 +2,6 @@ import os from django.conf import settings from django.http import Http404 -from django.template.loader import render_to_string from preferences import preferences from reportlab.lib import colors from reportlab.lib.pagesizes import A4, landscape @@ -14,6 +13,7 @@ from rest_framework.views import APIView from bims.api_views.search import CollectionSearch +from bims.enums import TaxonomicRank from bims.models.taxonomy import Taxonomy from bims.utils.domain import get_current_domain from bims.models.download_request import DownloadRequest @@ -140,7 +140,13 @@ def generate_pdf_checklist(download_request, module_name, collection_records, ba unique_taxonomy_ids = set(record_taxonomy_ids) - written_taxa_ids if unique_taxonomy_ids: - taxa = Taxonomy.objects.filter(id__in=unique_taxonomy_ids) + taxa = Taxonomy.objects.filter( + id__in=unique_taxonomy_ids + ).filter( + rank__in=[ + TaxonomicRank.SPECIES.name, + TaxonomicRank.SUBSPECIES.name] + ) taxon_serializer = ChecklistPDFSerializer(taxa, many=True) for taxon in taxon_serializer.data: written_taxa_ids.add(taxon['id']) diff --git a/bims/api_views/location_site_overview.py b/bims/api_views/location_site_overview.py index 747402be9..5defced56 100644 --- a/bims/api_views/location_site_overview.py +++ b/bims/api_views/location_site_overview.py @@ -67,9 +67,9 @@ def biodiversity_data(self): collection_results = collection_results.select_related( 'taxonomy', 'taxonomy__endemism', 'taxonomy__iucn_status', 'site_visit' ) - location_site_ids = set() - taxonomy_ids = set() for group in groups: + location_site_ids = set() + taxonomy_ids = set() group_data = {} try: group_data[self.GROUP_ICON] = get_thumbnail( diff --git a/bims/serializers/checklist_serializer.py b/bims/serializers/checklist_serializer.py index 01c9520c8..8a2a1a761 100644 --- a/bims/serializers/checklist_serializer.py +++ b/bims/serializers/checklist_serializer.py @@ -46,10 +46,7 @@ def get_common_name(self, obj: Taxonomy): if len(vernacular_names) == 0: return '' else: - return ', '.join( - list( - set([name.capitalize() for name in vernacular_names])) - ) + return vernacular_names[0] def get_threat_status(self, obj: Taxonomy): if obj.iucn_status: @@ -232,6 +229,15 @@ def get_sources(self, obj: Taxonomy): # TODO def get_confidence(self, obj: Taxonomy): + bio = self.get_bio_data(obj) + if not bio.exists(): + return '' + if bio.exclude(certainty_of_identification='').exists(): + return ( + bio.exclude( + certainty_of_identification='' + ).first().certainty_of_identification + ) return '' def get_park_or_mpa_name(self, obj: Taxonomy): @@ -303,6 +309,7 @@ class Meta: 'family', 'scientific_name', 'synonyms', + 'rank', 'common_name', 'most_recent_record', 'origin', diff --git a/bims/tasks/email_csv.py b/bims/tasks/email_csv.py index 647b12620..a092d6783 100644 --- a/bims/tasks/email_csv.py +++ b/bims/tasks/email_csv.py @@ -111,7 +111,7 @@ def send_csv_via_email( zip_folder = os.path.join( settings.MEDIA_ROOT, settings.PROCESSED_CSV_PATH, user.username) if not os.path.exists(zip_folder): - os.mkdir(zip_folder) + os.makedirs(zip_folder) zip_file = os.path.join(zip_folder, '{}.zip'.format(file_name)) with zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED) as zf: zf.write(download_file_path, f'{file_name}.{extension}')