Add spreadsheet enhancements and default handling

Implemented a toggleable spreadsheet UI component for sample data, added fields such as priority and comments, and improved backend validation. Default values for "directory" are now assigned when missing, with feedback highlighted in green on the front end.
This commit is contained in:
GotthardG
2025-01-06 14:40:02 +01:00
parent 9cb6ffbfb4
commit 54975b5919
12 changed files with 436 additions and 134 deletions

View File

@ -91,7 +91,10 @@ async def create_dewar(
sample = SampleModel(
puck_id=puck.id,
sample_name=sample_data.sample_name,
proteinname=sample_data.proteinname,
position=sample_data.position,
priority=sample_data.priority,
comments=sample_data.comments,
data_collection_parameters=sample_data.data_collection_parameters,
)
db.add(sample)
@ -285,6 +288,66 @@ async def download_dewar_label(dewar_id: int, db: Session = Depends(get_db)):
)
@router.get("/dewars/{dewar_id}/samples", response_model=dict)
async def get_dewar_samples(dewar_id: int, db: Session = Depends(get_db)):
# Fetch Dewar, associated Pucks, and Samples
dewar = db.query(DewarModel).filter(DewarModel.id == dewar_id).first()
if not dewar:
raise HTTPException(status_code=404, detail="Dewar not found")
pucks = db.query(PuckModel).filter(PuckModel.dewar_id == dewar.id).all()
data = {"dewar": {"id": dewar.id, "dewar_name": dewar.dewar_name}, "pucks": []}
for puck in pucks:
samples = db.query(SampleModel).filter(SampleModel.puck_id == puck.id).all()
data["pucks"].append(
{
"id": puck.id,
"name": puck.puck_name,
"type": puck.puck_type,
"samples": [
{
"id": sample.id,
"position": sample.position,
"dewar_name": dewar.dewar_name, # Add Dewar name here
"sample_name": sample.sample_name,
"priority": sample.priority,
"comments": sample.comments,
# "directory":sample.directory,
"proteinname": sample.proteinname,
# "oscillation": datacollection.oscillation,
# "aperture": 10,
# "exposure": 11,
# "totalrange": 12,
# "transmission": 13,
# "dose": 14,
# "targetresolution": 15,
# "datacollectiontype": 16,
# "processingpipeline": 17,
# "spacegroupnumber": 18,
# "cellparameters": 19,
# "rescutkey": 20,
# "rescutvalue": 21,
# "userresolution": 22,
# "pdbid": 23,
# "autoprocfull": 24,
# "procfull": 25,
# "adpenabled": 26,
# "noano": 27,
# "ffcscampaign": 28,
# "trustedhigh": 29,
# "autoprocextraparams": 30,
# "chiphiangles": 31,
}
for sample in samples
],
}
)
return data
@router.get("/", response_model=List[DewarSchema])
async def get_dewars(db: Session = Depends(get_db)):
try: