diff --git a/specifyweb/backend/stored_queries/batch_edit.py b/specifyweb/backend/stored_queries/batch_edit.py index 56f3fedfaed..7798f14d197 100644 --- a/specifyweb/backend/stored_queries/batch_edit.py +++ b/specifyweb/backend/stored_queries/batch_edit.py @@ -1095,7 +1095,20 @@ def _get_orig_column(string_id: str): # We would have arbitarily sorted the columns, so our columns will not be correct. # Rather than sifting the data, we just add a default visual order. - visual_order = Func.first(headers_enumerated) + visual_order_groups: list[list[int]] = [[] for _ in visible_fields] + for index, (key, _header) in headers_enumerated: + # Find the column's original position if it existed in the origin query + original_place = key[0] + duplicate_index = key[1] + if original_place < len(visible_fields): + visual_order_groups[original_place].insert(duplicate_index, index) + else: + # New field/column. Add it to the end of the dataset. + visual_order_groups.append([index]) + + visual_order: list[int] = [] + for bucket in visual_order_groups: + visual_order.extend(bucket) headers = Func.second(key_and_headers) diff --git a/specifyweb/backend/stored_queries/tests/test_batch_edit.py b/specifyweb/backend/stored_queries/tests/test_batch_edit.py index 6372521c6f3..307670a294f 100644 --- a/specifyweb/backend/stored_queries/tests/test_batch_edit.py +++ b/specifyweb/backend/stored_queries/tests/test_batch_edit.py @@ -155,9 +155,9 @@ def test_basic_run(self): "CollectionObject catalogNumber", "CollectionObject integer1", "Agent (formatted)", - "CollectingEvent (formatted)", "Agent firstName", "Agent lastName", + "CollectingEvent (formatted)", "Locality localityName", ], ) @@ -554,6 +554,14 @@ def test_duplicates_flattened(self): "CollectionObject catalogNumber", "CollectionObject integer1", "Agent (formatted)", + "Determination integer1", + "Determination integer1 #2", + "Determination integer1 #3", + "Determination remarks", + "Determination remarks #2", + "Determination remarks #3", + "Preparation countAmt", + "Preparation text1", "Agent firstName", "Agent lastName", "AgentSpecialty specialtyName", @@ -561,29 +569,21 @@ def test_duplicates_flattened(self): "AgentSpecialty specialtyName #3", "AgentSpecialty specialtyName #4", "Collector remarks", - "CollectingEvent stationFieldNumber", "Collector remarks #2", - "CollectingEvent stationFieldNumber #2", "Collector remarks #3", - "CollectingEvent stationFieldNumber #3", "Collector remarks #4", - "CollectingEvent stationFieldNumber #4", "Collector remarks #5", - "CollectingEvent stationFieldNumber #5", "Collector remarks #6", - "CollectingEvent stationFieldNumber #6", "Collector remarks #7", - "CollectingEvent stationFieldNumber #7", "Collector remarks #8", - "CollectingEvent stationFieldNumber #8", - "Determination integer1", - "Determination remarks", - "Determination integer1 #2", - "Determination remarks #2", - "Determination integer1 #3", - "Determination remarks #3", - "Preparation countAmt", - "Preparation text1" + "CollectingEvent stationFieldNumber", + "CollectingEvent stationFieldNumber #2", + "CollectingEvent stationFieldNumber #3", + "CollectingEvent stationFieldNumber #4", + "CollectingEvent stationFieldNumber #5", + "CollectingEvent stationFieldNumber #6", + "CollectingEvent stationFieldNumber #7", + "CollectingEvent stationFieldNumber #8" ], )