diff --git a/django_project/georepo/api_views/entity_view.py b/django_project/georepo/api_views/entity_view.py index 0e1abb3a..1767981d 100644 --- a/django_project/georepo/api_views/entity_view.py +++ b/django_project/georepo/api_views/entity_view.py @@ -78,7 +78,8 @@ from georepo.utils.api_parameters import ( common_api_params, search_param, - search_type_param + search_type_param, + sort_param ) from georepo.utils.entity_query import ( do_generate_fuzzy_query @@ -337,7 +338,7 @@ class ViewEntityListByAdminLevel0(DatasetViewSearchBase, type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', @@ -454,7 +455,7 @@ class ViewEntityListByAdminLevel(DatasetViewSearchBase, type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', @@ -570,7 +571,7 @@ class ViewEntityListByAdminLevelAndUCode( type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', @@ -687,7 +688,7 @@ class ViewEntityListByAdminLevelAndConceptUCode( type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', @@ -802,7 +803,7 @@ class ViewEntityListByEntityType( type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', @@ -922,7 +923,7 @@ class ViewEntityListByEntityTypeAndUcode( type=openapi.TYPE_STRING, default='json', required=False - ), search_param, search_type_param], + ), sort_param, search_param, search_type_param], responses={ 200: openapi.Schema( title='Entity List', diff --git a/django_project/georepo/models/entity.py b/django_project/georepo/models/entity.py index b23b0bf6..6dec41dd 100644 --- a/django_project/georepo/models/entity.py +++ b/django_project/georepo/models/entity.py @@ -329,6 +329,48 @@ def _remove_referenced_entities(self, qs): ) history._raw_delete(history.db) + def clone(self): + """Clone the entity, used for creating new revision.""" + original_pk = self.pk + + clone = self + clone.pk = None + clone.id = None + clone.is_validated = False + clone.is_approved = None + clone.approved_by = None + clone.save() + + # copy entity names + entity_names = [] + for name in EntityName.objects.filter( + geographical_entity_id=original_pk + ): + entity_names.append(EntityName( + geographical_entity=clone, + name=name.name, + language=name.language, + default=name.default, + label=name.label, + idx=name.idx + )) + EntityName.objects.bulk_create(entity_names) + + # copy entity ids + entity_ids = [] + for eid in EntityId.objects.filter( + geographical_entity_id=original_pk + ): + entity_ids.append(EntityId( + geographical_entity=clone, + code=eid.code, + value=eid.value, + default=eid.default + )) + EntityId.objects.bulk_create(entity_ids) + + return clone + class EntityName(models.Model): id = models.AutoField(primary_key=True) diff --git a/django_project/modules/admin_boundaries/qc_validation.py b/django_project/modules/admin_boundaries/qc_validation.py index bf3fbf1d..fdab7fb3 100644 --- a/django_project/modules/admin_boundaries/qc_validation.py +++ b/django_project/modules/admin_boundaries/qc_validation.py @@ -448,13 +448,8 @@ def run_validation(entity_upload: EntityUploadStatus, **kwargs) -> bool: not entity_upload.revised_geographical_entity and entity_upload.original_geographical_entity ): - # cloned admin level 0 to new revision - revised = entity_upload.original_geographical_entity - revised.pk = None - revised.save() - revised.is_validated = False - revised.is_approved = None - revised.approved_by = None + # clone admin level 0 to new revision + revised = entity_upload.original_geographical_entity.clone() if entity_upload.upload_session.is_historical_upload: revised.start_date = ( entity_upload.upload_session.historical_start_date diff --git a/django_project/version/version.txt b/django_project/version/version.txt index 7f39120b..4d30069e 100644 --- a/django_project/version/version.txt +++ b/django_project/version/version.txt @@ -1 +1 @@ -0.0.98 \ No newline at end of file +0.0.99 \ No newline at end of file