diff --git a/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py b/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py index 17072fb3c5ba1ca1c4bc9071c2745d42e15acaa5..e30834179473db513f42f841679a418143e75f1c 100644 --- a/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py +++ b/deep_sequencing_unit/source/Jython/create_QGF_Invoices_simplified.py @@ -144,6 +144,14 @@ def merge_two_dicts(x, y): z.update(y) return z + +def camel_case_string(string): + full_name = "" + for split in string.split("_"): + full_name += split[0].upper() + split[1:] + " " + return full_name.strip() + + def writeHeader(sheet, myRows, wb, configMap, piName, piSpace): # Write header row = sheet.createRow(myRows.getNextRow()) @@ -153,13 +161,12 @@ def writeHeader(sheet, myRows, wb, configMap, piName, piSpace): row1.createCell(0).setCellValue(getDate()) row1.getCell(0).setCellStyle(setFont(wb, configMap, 10, True)) - createRow(configMap, wb, sheet, myRows, "Principal Investigator", piName.replace("_", " "), 0, 10, True, columnspace=1) + createRow(configMap, wb, sheet, myRows, "Principal Investigator", camel_case_string(piName), 0, 10, True, columnspace=1) createRow(configMap, wb, sheet, myRows,"Data Space", piSpace, 0, 10, True, columnspace=1) createRow(configMap, wb, sheet, myRows) createRow(configMap, wb, sheet, myRows,"Samples", "", 0, 10, True, True) - def createRow(configMap, wb, sheet, myRows, key="", value="", rowNumber=0, fontSize=10, boldness=False, underline=False, columnspace=0): if rowNumber == 0: row = sheet.createRow(myRows.getNextRow()) @@ -205,9 +212,15 @@ def write_flowcell_details(configMap, flowCellProperties, myRows, sequencerVocab -def write_samples(configMap, myRows, wb, sheet, setFont, sample, sampleValues, working_column_headers_dict): +def write_samples(configMap, myRows, wb, sheet, setFont, sample, sampleValues, working_column_headers_dict, lane, write_lane=False): + singleSampleColumns = uniqueColumn() rowN = sheet.createRow(myRows.getNextRow()) + + if write_lane: + rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(str(sampleValues['LANE'])) + rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10)) + rowN.createCell(singleSampleColumns.getNextColumn()).setCellValue(configMap['sampleCodePrefix'] + sample) rowN.getCell(singleSampleColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10)) for code, label in working_column_headers_dict.iteritems(): @@ -249,9 +262,14 @@ def write_intermediate_section(configMap, flowCellProperties, myRows, wb, sheet) -def write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet): +def write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet, write_lane=False): myColumns = uniqueColumn() sampleHeader = sheet.createRow(myRows.getNextRow()) + + if write_lane: + sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Flowcell:Lane") + sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10, True)) + sampleHeader.createCell(myColumns.getNextColumn()).setCellValue("Sample Code") sampleHeader.getCell(myColumns.getCurrentColumn()).setCellStyle(setFont(wb, configMap, 10, True)) for code, label in working_column_headers_dict.iteritems(): @@ -334,13 +352,13 @@ def writeExcel(myoptions, configMap, service, piName, laneDict, sampleDict, piDi write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet) for reg_sample in regular_samples: - value = write_samples(configMap, myRows, wb, sheet, setFont, reg_sample, regular_samples[reg_sample], working_column_headers_dict) + value = write_samples(configMap, myRows, wb, sheet, setFont, reg_sample, regular_samples[reg_sample], working_column_headers_dict, lane) write_intermediate_section(configMap, flowCellProperties, myRows, wb, sheet) - write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet) - for pool in pool_samples: - value = write_samples(configMap, myRows, wb, sheet, setFont, pool, pool_samples[pool], working_column_headers_dict) + write_sample_column_header(configMap, working_column_headers_dict, myRows, wb, sheet, write_lane=True) + for pool in sorted(pool_samples): + value = write_samples(configMap, myRows, wb, sheet, setFont, pool, pool_samples[pool], working_column_headers_dict, lane, write_lane=True) write_flowcell_details(configMap, flowCellProperties, myRows, sequencerVocabulary, runModeVocabulary, flowcell, wb, sheet, createRow) @@ -523,10 +541,17 @@ def getFLowcellData(service, configMap, flowcell, logger): for samples in laneParents: sampleCode = samples.getCode() sampleProperties = samples.getProperties() - s[sampleCode.split("-")[-1]] = sampleProperties + + sample_properties_dict={} + for key, value in sampleProperties.iteritems(): + sample_properties_dict[key] = value + + + sample_properties_dict["LANE"] = lane + s[sampleCode.split("-")[-1]] = sample_properties_dict sampleDict[lane] = s - pi = sanitizeString(sampleProperties[configMap["pIPropertyName"]]) - invoiceProperty = sampleProperties['INVOICE'] + pi = sanitizeString(sample_properties_dict[configMap["pIPropertyName"]]) + invoiceProperty = sample_properties_dict['INVOICE'] # if sample got created via Excel upload, the property could be not set, which is represented by None if (invoiceProperty is None): invoiceProperty = 'false'