Skip to content
15 changes: 14 additions & 1 deletion specifyweb/backend/stored_queries/batch_edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
34 changes: 17 additions & 17 deletions specifyweb/backend/stored_queries/tests/test_batch_edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
],
)
Expand Down Expand Up @@ -554,36 +554,36 @@ 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",
"AgentSpecialty specialtyName #2",
"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"
],
)

Expand Down
Loading