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 046cca51e7f31a9e423ec9131e627cdecdb6f7e0..12edef83b5b463839429faabad5a22e6a543c621 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 @@ -57,15 +57,16 @@ entity_names: container_size_prop: "Container size" containertype_rt: ContainerType custom_label_prop: custom_label + end_date_prop: end_date + event_rt: Event + first_name_prop: first_name + igsn_doi_prop: igsn_doi labelcounter_prop: counter labelcounter_rt: LabelCounter - responsible_rt: Responsible - first_name_prop: first_name last_name_prop: last_name - start_date_prop: start_date - end_date_prop: end_date - igsn_doi_prop: igsn_doi parent_sample_prop: Parent_Sample + responsible_rt: Responsible + start_date_prop: start_date error_prefix: "Something went wrong:" error_suffix: "Please contact your administrator(s)." 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 aa624989c49f0fc0cb464a7b5b1ee655b8e14a75..d15eed61bbffb14ba742acd0e7472f2af25319d9 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 @@ -20,7 +20,8 @@ import pandas as pd from caosadvancedtools.datainconsistency import DataInconsistencyError -from .utils import get_column_header_name, get_entity_name +from .sample_upload_get_person import get_person +from .utils import get_column_header_name, get_entity_name, update_property from ..bis_utils import return_value_if_not_none @@ -31,7 +32,30 @@ def add_event_to_sample(sample: db.Record, data: pd.Series) -> db.Record: """ _perform_sanity_checks(sample, data) - # TODO Add event-specific columns + event = db.Record().add_parent(get_entity_name("event_rt")) + + # We performed the sanity checks so we can assume that if the + # Start/Stop Latitude exists, all start/stop data exist. + positions = [] + position_prop = db.get_entity_name(get_entity_name("Position")) + + # Take care of positions + for mode in ["start", "stop"]: + if (get_column_header_name(f"Latitude {mode}") in data and + return_value_if_not_none(data[get_column_header_name(f"Latitude {mode}")]) is not None): + position.append( + _create_position( + mode=mode, + lat=return_value_if_not_none(data[get_column_header_name(f"Latitude {mode}")]), + lng=return_value_if_not_none(data[get_column_header_name(f"Longitude {mode}")]), + ele=return_value_if_not_none(data[get_column_header_name(f"Elevation {mode}")]), + ) + ) + if positions: + update_property(event, position_prop.id, positions, + datatype=db.LIST(get_entity_name("Position"))) + + # TODO: Start/end date, remaining event props return sample