diff --git a/admin/config.py b/admin/config.py index 0d4f462a1..73bc2372b 100644 --- a/admin/config.py +++ b/admin/config.py @@ -38,6 +38,7 @@ LexiconCategoryAdmin, LexiconTermAdmin, LocationAdmin, + MajorChemistryAdmin, MinorTraceChemistryAdmin, NotesAdmin, ObservationAdmin, @@ -65,6 +66,7 @@ from db.location import Location from db.nma_legacy import ( NMA_Chemistry_SampleInfo, + NMA_MajorChemistry, NMA_MinorTraceChemistry, NMA_Radionuclides, NMA_HydraulicsData, @@ -147,6 +149,7 @@ def create_admin(app): admin.add_view(HydraulicsDataAdmin(NMA_HydraulicsData)) admin.add_view(RadionuclidesAdmin(NMA_Radionuclides)) admin.add_view(MinorTraceChemistryAdmin(NMA_MinorTraceChemistry)) + admin.add_view(MajorChemistryAdmin(NMA_MajorChemistry)) # Field admin.add_view(FieldEventAdmin(FieldEvent)) diff --git a/admin/views/__init__.py b/admin/views/__init__.py index 5061ba726..b5b0f8b57 100644 --- a/admin/views/__init__.py +++ b/admin/views/__init__.py @@ -36,6 +36,7 @@ from admin.views.hydraulicsdata import HydraulicsDataAdmin from admin.views.lexicon import LexiconCategoryAdmin, LexiconTermAdmin from admin.views.location import LocationAdmin +from admin.views.major_chemistry import MajorChemistryAdmin from admin.views.minor_trace_chemistry import MinorTraceChemistryAdmin from admin.views.notes import NotesAdmin from admin.views.observation import ObservationAdmin @@ -66,6 +67,7 @@ "LexiconCategoryAdmin", "LexiconTermAdmin", "LocationAdmin", + "MajorChemistryAdmin", "MinorTraceChemistryAdmin", "NotesAdmin", "ObservationAdmin", diff --git a/admin/views/major_chemistry.py b/admin/views/major_chemistry.py new file mode 100644 index 000000000..f822ed907 --- /dev/null +++ b/admin/views/major_chemistry.py @@ -0,0 +1,152 @@ +# =============================================================================== +# Copyright 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# =============================================================================== +""" +MajorChemistryAdmin view for legacy NMA_MajorChemistry. +""" + +import uuid + +from starlette.requests import Request +from starlette_admin.fields import HasOne + +from admin.views.base import OcotilloModelView + + +class MajorChemistryAdmin(OcotilloModelView): + """ + Admin view for NMA_MajorChemistry model. + """ + + # ========== Basic Configuration ========== + + identity = "n-m-a_-major-chemistry" + name = "NMA Major Chemistry" + label = "NMA Major Chemistry" + icon = "fa fa-flask" + pk_attr = "global_id" + pk_type = uuid.UUID + + def can_create(self, request: Request) -> bool: + return False + + def can_edit(self, request: Request) -> bool: + return False + + def can_delete(self, request: Request) -> bool: + return False + + # ========== List View ========== + + list_fields = [ + "global_id", + "sample_pt_id", + "sample_point_id", + HasOne("chemistry_sample_info", identity="n-m-a_-chemistry_-sample-info"), + "analyte", + "symbol", + "sample_value", + "units", + "uncertainty", + "analysis_method", + "analysis_date", + "notes", + "volume", + "volume_unit", + "object_id", + "analyses_agency", + "wclab_id", + ] + + sortable_fields = [ + "global_id", + "sample_pt_id", + "sample_point_id", + "analyte", + "symbol", + "sample_value", + "units", + "uncertainty", + "analysis_method", + "analysis_date", + "notes", + "volume", + "volume_unit", + "object_id", + "analyses_agency", + "wclab_id", + ] + + fields_default_sort = [("analysis_date", True)] + + searchable_fields = [ + "global_id", + "sample_pt_id", + "sample_point_id", + "analyte", + "symbol", + "analysis_method", + "notes", + "analyses_agency", + "wclab_id", + ] + + page_size = 50 + page_size_options = [25, 50, 100, 200] + + # ========== Form View ========== + + fields = [ + "global_id", + "sample_pt_id", + "sample_point_id", + HasOne("chemistry_sample_info", identity="n-m-a_-chemistry_-sample-info"), + "analyte", + "symbol", + "sample_value", + "units", + "uncertainty", + "analysis_method", + "analysis_date", + "notes", + "volume", + "volume_unit", + "object_id", + "analyses_agency", + "wclab_id", + ] + + field_labels = { + "global_id": "GlobalID", + "sample_pt_id": "SamplePtID", + "sample_point_id": "SamplePointID", + "chemistry_sample_info": "Chemistry Sample Info", + "analyte": "Analyte", + "symbol": "Symbol", + "sample_value": "Sample Value", + "units": "Units", + "uncertainty": "Uncertainty", + "analysis_method": "Analysis Method", + "analysis_date": "Analysis Date", + "notes": "Notes", + "volume": "Volume", + "volume_unit": "Volume Unit", + "object_id": "OBJECTID", + "analyses_agency": "Analyses Agency", + "wclab_id": "WCLab_ID", + } + + +# ============= EOF =============================================