From ce67339570f543057e8f3351a2766e6bfc11c3a1 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Fri, 23 Jan 2026 18:35:14 -0600 Subject: [PATCH 1/2] [views/associated_data] Create AssociatedDataAdmin pg --- admin/config.py | 5 +++ admin/views/__init__.py | 2 ++ admin/views/associated_data.py | 65 ++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 admin/views/associated_data.py diff --git a/admin/config.py b/admin/config.py index 0d4f462a1..bfe4c7399 100644 --- a/admin/config.py +++ b/admin/config.py @@ -26,6 +26,7 @@ AquiferSystemAdmin, AquiferTypeAdmin, AssetAdmin, + AssociatedDataAdmin, ChemistrySampleInfoAdmin, ContactAdmin, DataProvenanceAdmin, @@ -64,6 +65,7 @@ from db.lexicon import LexiconCategory, LexiconTerm from db.location import Location from db.nma_legacy import ( + NMA_AssociatedData, NMA_Chemistry_SampleInfo, NMA_MinorTraceChemistry, NMA_Radionuclides, @@ -128,6 +130,9 @@ def create_admin(app): # Assets admin.add_view(AssetAdmin(Asset)) + # Associated data + admin.add_view(AssociatedDataAdmin(NMA_AssociatedData)) + # Aquifer admin.add_view(AquiferSystemAdmin(AquiferSystem)) admin.add_view(AquiferTypeAdmin(AquiferType)) diff --git a/admin/views/__init__.py b/admin/views/__init__.py index 5061ba726..9caa2a717 100644 --- a/admin/views/__init__.py +++ b/admin/views/__init__.py @@ -20,6 +20,7 @@ """ from admin.views.asset import AssetAdmin +from admin.views.associated_data import AssociatedDataAdmin from admin.views.aquifer_system import AquiferSystemAdmin from admin.views.aquifer_type import AquiferTypeAdmin from admin.views.chemistry_sampleinfo import ChemistrySampleInfoAdmin @@ -51,6 +52,7 @@ __all__ = [ "AssetAdmin", + "AssociatedDataAdmin", "AquiferSystemAdmin", "AquiferTypeAdmin", "ChemistrySampleInfoAdmin", diff --git a/admin/views/associated_data.py b/admin/views/associated_data.py new file mode 100644 index 000000000..cfabc845b --- /dev/null +++ b/admin/views/associated_data.py @@ -0,0 +1,65 @@ +from admin.views.base import OcotilloModelView + + +class AssociatedDataAdmin(OcotilloModelView): + """ + Admin view for legacy AssociatedData model (NMA_AssociatedData). + Read-only, MS Access-like listing/details. + """ + + # ========== Basic Configuration ========== + name = "NMA Associated Data" + label = "NMA Associated Data" + icon = "fa fa-link" + + # Pagination + page_size = 50 + page_size_options = [25, 50, 100, 200] + + # ========== List View ========== + list_fields = [ + "location_id", + "point_id", + "assoc_id", + "notes", + "formation", + "object_id", + "thing_id", + ] + + sortable_fields = [ + "assoc_id", + "object_id", + "point_id", + ] + + fields_default_sort = [("point_id", False), ("object_id", False)] + + searchable_fields = [ + "point_id", + "assoc_id", + "notes", + "formation", + ] + + # ========== Detail View ========== + fields = [ + "location_id", + "point_id", + "assoc_id", + "notes", + "formation", + "object_id", + "thing_id", + ] + + # ========== Legacy Field Labels ========== + field_labels = { + "location_id": "LocationId", + "point_id": "PointID", + "assoc_id": "AssocID", + "notes": "Notes", + "formation": "Formation", + "object_id": "OBJECTID", + "thing_id": "ThingID", + } From 2c6435a9571e054ad4e147d4eac6bb22b863efc8 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Mon, 26 Jan 2026 15:23:05 -0600 Subject: [PATCH 2/2] [associated_data] Update admin panel to be read-only --- admin/views/associated_data.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/admin/views/associated_data.py b/admin/views/associated_data.py index cfabc845b..a706d0ad1 100644 --- a/admin/views/associated_data.py +++ b/admin/views/associated_data.py @@ -63,3 +63,17 @@ class AssociatedDataAdmin(OcotilloModelView): "object_id": "OBJECTID", "thing_id": "ThingID", } + + # ========== READ ONLY ========== + enable_publish_actions = ( + False # hides publish/unpublish actions inherited from base + ) + + def can_create(self, request) -> bool: + return False + + def can_edit(self, request) -> bool: + return False + + def can_delete(self, request) -> bool: + return False