From f0ceedef68ca73806fe34514b9da81a5820d80fb Mon Sep 17 00:00:00 2001 From: Oak McIlwain Date: Wed, 28 Aug 2024 15:25:34 +0800 Subject: [PATCH 1/4] Set the allow blank value to default to the allow null value from the django field. If the field does not allow null then the allow blank field value will be no and the field will be disabled. Add mandatory indicator next to the column name. --- .../occurrence/bulk_import_schema.vue | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue index d123533d9..babcc7420 100644 --- a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue +++ b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue @@ -53,15 +53,18 @@ {{ column.xlsx_column_header_name }} + * + style="width:10%"> - - Add Another Column + + Add Another Column @@ -240,24 +243,25 @@ data-bs-trigger="hover focus" data-bs-content="Basic validations embedded in the .xlsx file" data-bs-placement="top"> -
+
Allow + id="allow-blank-label">Allow Blank - +
Max Length @@ -488,6 +492,7 @@ export default { this.enablePopovers(); if (!this.selectedColumn.id) { this.selectedColumn.xlsx_column_header_name = this.selectedField.display_name + this.selectedColumn.xlsx_data_validation_allow_blank = this.selectedField.allow_null } this.$refs['column-name'].focus() }) From d3086f9cec1a64ac4526fd17cff7675d14e1e68c Mon Sep 17 00:00:00 2001 From: Oak McIlwain Date: Wed, 28 Aug 2024 15:50:28 +0800 Subject: [PATCH 2/4] Some fixes of mandatory indicator code. Maintain data binding of selected column after save method (use column index to rebind selected column (as the column had no id before being inserted so can't use that as a lookup). --- .../internal/occurrence/bulk_import_schema.vue | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue index babcc7420..bde70be7e 100644 --- a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue +++ b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue @@ -54,7 +54,7 @@ {{ column.xlsx_column_header_name }} * + v-if="column.xlsx_data_validation_allow_blank==false">* @@ -77,7 +77,7 @@
-
+
@@ -398,6 +398,7 @@ export default { schema: null, djangoContentTypes: null, selectedColumn: null, + selectedColumnIndex: null, selectedContentType: null, selectedField: null, addEditMode: false, @@ -521,6 +522,7 @@ export default { selectColumn(column) { this.addEditMode = true this.selectedColumn = column + this.selectedColumnIndex = this.schema.columns.indexOf(column) this.$nextTick(() => { this.enablePopovers(); if (this.selectedColumn.django_import_content_type) { @@ -577,7 +579,10 @@ export default { this.$http.put(`${api_endpoints.occurrence_report_bulk_import_schemas}${this.schema.id}/`, this.schema) .then(response => { this.saving = false; - this.schema = response.data + this.schema = Object.assign({}, response.data) + if (this.addEditMode) { + this.selectedColumn = this.schema.columns[this.selectedColumnIndex] + } }) .catch(error => { this.saving = false; From e9b6131dc300338c723f432d7d7846d2d7e097e7 Mon Sep 17 00:00:00 2001 From: Oak McIlwain Date: Thu, 29 Aug 2024 09:50:45 +0800 Subject: [PATCH 3/4] Changes to allow schema to be saved with no columns. --- boranga/components/occurrence/serializers.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/boranga/components/occurrence/serializers.py b/boranga/components/occurrence/serializers.py index 93ab1a079..6eef388dc 100644 --- a/boranga/components/occurrence/serializers.py +++ b/boranga/components/occurrence/serializers.py @@ -3925,7 +3925,9 @@ class Meta: class OccurrenceReportBulkImportSchemaSerializer(serializers.ModelSerializer): - columns = OccurrenceReportBulkImportSchemaColumnSerializer(many=True) + columns = OccurrenceReportBulkImportSchemaColumnSerializer( + many=True, allow_null=True, required=False + ) group_type_display = serializers.CharField(source="group_type.name", read_only=True) version = serializers.CharField(read_only=True) @@ -3935,7 +3937,11 @@ class Meta: read_only_fields = ("id",) def update(self, instance, validated_data): - columns_data = validated_data.pop("columns") + columns_data = validated_data.pop("columns", None) + + if not columns_data: + return super().update(instance, validated_data) + # Delete any columns that are not in the new data instance.columns.exclude( id__in=[ From ef95257d020b5dfd3dcb2c54538562ac2f3b48af Mon Sep 17 00:00:00 2001 From: Oak McIlwain Date: Thu, 29 Aug 2024 09:51:20 +0800 Subject: [PATCH 4/4] Some data binding bug fixes. --- .../occurrence/bulk_import_schema.vue | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue index bde70be7e..27db521ab 100644 --- a/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue +++ b/boranga/frontend/boranga/src/components/internal/occurrence/bulk_import_schema.vue @@ -23,7 +23,7 @@ }}
- - Add Another Column + colspan="2">Add Column @@ -505,24 +505,27 @@ export default { django_import_content_type: '', django_import_field_name: '', xlsx_column_header_name: '', + xlsx_data_validation_allow_blank: true, import_validations: [] } }, addNewColumn() { this.newColumn = Object.assign({}, this.getNewColumnData()) this.schema.columns.push(this.newColumn) + this.selectedContentType = null; + this.selectedField = null; this.selectedColumn = this.newColumn + this.selectedColumnIndex = this.schema.columns.indexOf(this.newColumn) this.addEditMode = true - // this.removeAlreadySelectedFields(); this.$nextTick(() => { this.enablePopovers(); this.$refs['django-import-model'].focus() }) }, selectColumn(column) { - this.addEditMode = true this.selectedColumn = column this.selectedColumnIndex = this.schema.columns.indexOf(column) + this.addEditMode = true this.$nextTick(() => { this.enablePopovers(); if (this.selectedColumn.django_import_content_type) { @@ -541,6 +544,7 @@ export default { cancelAddingColumn(column) { this.schema.columns = this.schema.columns.filter(col => col !== column) this.selectedColumn = null + this.selectedColumnIndex = null this.addEditMode = false }, removeColumn(column) { @@ -574,6 +578,19 @@ export default { } }) }, + validateSchema() { + swal.fire({ + title: 'Validate Schema', + text: 'Not yet implemented', + icon: 'warning', + showCancelButton: false, + cancelButtonText: 'Cancel', + customClass: { + confirmButton: 'btn btn-primary', + cancelButton: 'btn btn-secondary me-2' + }, + }) + }, save() { this.saving = true; this.$http.put(`${api_endpoints.occurrence_report_bulk_import_schemas}${this.schema.id}/`, this.schema)