diff --git a/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_samplemanagement.js b/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_samplemanagement.js index acf9a189737a9ba0d8b07fa1d6bd5226e99b2c1d..88fcefed171caef073241dc26cf8221050309384 100644 --- a/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_samplemanagement.js +++ b/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_samplemanagement.js @@ -54,6 +54,7 @@ const ext_samplemanagement = function($, navbar, log, form_elements, form_panel, "Elevation start", "Elevation stop", "End date", + "Event name", "Event responsible", "IGSN DOI", "Latitude stop", diff --git a/sample-management-custom/caosdb-server/scripting/bin/export_sample_csv.py b/sample-management-custom/caosdb-server/scripting/bin/export_sample_csv.py index e97cdf53659682d849ea7f92ee21e3765741b164..7273f002fdf357273a39f41e1afeaa60a6feba1e 100755 --- a/sample-management-custom/caosdb-server/scripting/bin/export_sample_csv.py +++ b/sample-management-custom/caosdb-server/scripting/bin/export_sample_csv.py @@ -335,6 +335,17 @@ def extract_event_url(record, key): return None +def extract_event_name(record, key): + + events = retrieve_event(record) + if not events: + return None + if len(events) == 1: + return events[0].name + logger.debug(f"Sample {record.id} has multiple events.") + return None + + def extract_sample_name(record, key): return record.name @@ -353,6 +364,7 @@ EXTRACTORS = use_custom_names({ "Elevation stop": extract_ele_stop, "Embargo": default_find, "End date": extract_end_date, + "event_name": extract_event_name, "Latitude start": extract_lat_start, "Latitude stop": extract_lat_stop, "Level": extract_level, @@ -397,7 +409,8 @@ ADDITIONAL_EXPORTS = use_custom_names([ "LinkAhead URL", "parent_sample_prop", "Storage chain", - "sample_name" + "sample_name", + "event_name" ]) diff --git a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/default_constants.yml b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/default_constants.yml index 8761cae6a01228c593292b78ff32830eaa1dd1f5..77791d498ed43cfa45130885609954b2e6bde0af 100644 --- a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/default_constants.yml +++ b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/default_constants.yml @@ -26,6 +26,7 @@ csv_column_names: responsible_person_event: "Event responsible" parent_sample_prop: "Parent LinkAhead ID" sample_name: "Sample name" + event_name: "Event name" csv_column_descriptions: LinkAhead ID: "An ID generated by LinkAhead (either integer or URL to this entity). Do not change this column!" diff --git a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_column_definitions.py b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_column_definitions.py index 251f5f1dc1fb43e9d8f7d162a94cc02bf3ddfc7a..963470ecefc1192da7d069285b468c7824ff06dd 100644 --- a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_column_definitions.py +++ b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_column_definitions.py @@ -63,6 +63,7 @@ DATATYPE_DEFINITIONS = use_custom_names({ "Elevation start": float, "Elevation stop": float, "End date": str, + "event_name": str, "Latitude start": float, "Latitude stop": float, "Longitude start": float, @@ -105,6 +106,7 @@ SPECIAL_TREATMENT_SAMPLE = use_custom_names([ "Elevation stop", "Embargo", "End date", + "event_name", "responsible_person_event", "igsn_doi_prop", "Latitude start", diff --git a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_get_event.py b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_get_event.py index b726a66977be066b7e5371e03c3dfac147f28eb4..598117aa2fc635ff41bdf53cd36259cea63eab9e 100644 --- a/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_get_event.py +++ b/sample-management-custom/caosdb-server/scripting/bin/sample_helpers/sample_upload_get_event.py @@ -35,6 +35,10 @@ def add_event_to_sample(sample: db.Record, data: pd.Series) -> db.Record: event_rt = db.get_entity_by_name(get_entity_name("event_rt"), role="RECORDTYPE") event = db.Record().add_parent(event_rt) + # Event name. Replace with empty if cell is empty. + if get_column_header_name("event_name") in data: + event.name = return_value_if_not_none(data[get_column_header_name("event_name")]) + # We performed the sanity checks so we can assume that if the # Start/Stop Latitude exists, all start/stop data exist. positions = [] @@ -134,8 +138,11 @@ def _perform_sanity_checks(sample, data): ) for name in ["start", "stop"]: - bool_list = [get_column_header_name(f"{val} {name}") in data for val in [ - "Latitude", "Longitude", "Elevation"]] + bool_list = [ + ((get_column_header_name(f"{val} {name}") in data) and + (return_value_if_not_none(data[get_column_header_name(f"{val} {name}")]) is not None)) + for val in ["Latitude", "Longitude", "Elevation"] + ] raise_error = False if any(bool_list): if not all(bool_list): @@ -155,9 +162,9 @@ def _perform_sanity_checks(sample, data): if (get_column_header_name("Latitude stop") in data and return_value_if_not_none(data[get_column_header_name("Latitude stop")]) is not None): if (get_column_header_name("Latitude start") not in data or - return_value_if_not_none(data[get_column_header_name("Latitude start")]) is not None): + return_value_if_not_none(data[get_column_header_name("Latitude start")]) is None): raise DataInconsistencyError( - f"Sample with {get_entity_name('entity_id')} {sample.id} has a " + f"Sample with {get_column_header_name('entity_id')} {sample.id} has a " f"{get_entity_name('StopPosition')} but no valid " f"{get_entity_name('StartPosition')}." )