package edu.ualberta.med.biobank.dialogs.dispatch; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Shell; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.formatters.DateFormatter; import edu.ualberta.med.biobank.common.util.RowColPos; import edu.ualberta.med.biobank.common.wrappers.CenterWrapper; import edu.ualberta.med.biobank.common.wrappers.ContainerLabelingSchemeWrapper; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.common.wrappers.SpecimenWrapper; import edu.ualberta.med.biobank.export.Data; import edu.ualberta.med.biobank.export.PrintPdfDataExporter; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.widgets.BiobankLabelProvider; import edu.ualberta.med.biobank.widgets.grids.cell.AbstractUICell; import edu.ualberta.med.biobank.widgets.grids.cell.PalletCell; import edu.ualberta.med.biobank.widgets.grids.cell.UICellStatus; public abstract class ReceiveScanDialog<T extends ModelWrapper<?>> extends AbstractScanDialog<T> { private boolean specimensReceived = false; protected List<SpecimenWrapper> extras = new ArrayList<SpecimenWrapper>(); private boolean hasExpectedSpecimens = false; public ReceiveScanDialog(Shell parentShell, final T currentShipment, CenterWrapper<?> currentSite) { super(parentShell, currentShipment, currentSite); } @Override protected String getTitleAreaMessage() { return "Scan one pallet received in the shipment."; } @Override protected void specificScanPosProcess(PalletCell palletCell) { if (palletCell.getStatus() == UICellStatus.EXTRA) { extras.add(palletCell.getSpecimen()); hasExpectedSpecimens = true; } if (palletCell.getStatus() == UICellStatus.IN_SHIPMENT_EXPECTED) { hasExpectedSpecimens = true; } } @Override protected String getProceedButtonlabel() { return "Accept specimens"; } @Override protected boolean canActivateProceedButton() { return hasExpectedSpecimens; } @Override protected boolean canActivateNextAndFinishButton() { return !hasExpectedSpecimens; } @Override protected void buttonPressed(int buttonId) { if (IDialogConstants.PROCEED_ID == buttonId || IDialogConstants.FINISH_ID == buttonId || IDialogConstants.NEXT_ID == buttonId) { addExtraCells(); } if (IDialogConstants.NEXT_ID == buttonId) extras.clear(); super.buttonPressed(buttonId); } protected abstract void addExtraCells(); @Override protected void doProceed() { List<SpecimenWrapper> specimens = new ArrayList<SpecimenWrapper>(); for (PalletCell cell : getCells().values()) { if (cell.getStatus() == UICellStatus.IN_SHIPMENT_EXPECTED) { specimens.add(cell.getSpecimen()); cell.setStatus(UICellStatus.IN_SHIPMENT_RECEIVED); } } receiveSpecimens(specimens); redrawPallet(); extras.clear(); hasExpectedSpecimens = false; setOkButtonEnabled(true); specimensReceived = true; Button cancelButton = getButton(IDialogConstants.CANCEL_ID); cancelButton.setEnabled(false); if (BgcPlugin.openConfirm("Print", "Do you wish to print a location sheet for the recipient?")) print(); } protected void print() { try { PalletBarcodeDialog barcodeDialog = new PalletBarcodeDialog( getShell()); if (barcodeDialog.open() == Dialog.OK) { String productBarcode = barcodeDialog.getBarcode(); List<Object> output = new ArrayList<Object>(); Map<RowColPos, ? extends AbstractUICell> cells = spw.getCells(); for (RowColPos pos : cells.keySet()) { String inventoryId = ((PalletCell) cells.get(pos)) .getValue(); SpecimenWrapper specimen = SpecimenWrapper.getSpecimen( SessionManager.getAppService(), inventoryId); String cell[] = new String[] { ContainerLabelingSchemeWrapper.rowColToSbs(pos), inventoryId, specimen.getCollectionEvent().getPatient().getPnumber(), specimen.getSpecimenType().getNameShort(), DateFormatter.formatAsDate(specimen.getTopSpecimen() .getCreatedAt()) }; output.add(cell); } Data data = new Data(); data.setColumnNames(Arrays.asList("Location", "Inventory Id", "Patient", "Sample Type", "Date Drawn")); data.setDescription(Arrays.asList("Barcode:" + productBarcode)); data.setRows(output); data.setTitle("Pallet Info Sheet"); PrintPdfDataExporter pdf = new PrintPdfDataExporter(); pdf.export(data, new BiobankLabelProvider() { @Override public String getColumnText(Object o, int index) { return (String) ((Object[]) o)[index]; } }); } } catch (Exception e) { e.printStackTrace(); } } protected abstract void receiveSpecimens(List<SpecimenWrapper> specimens); @Override protected abstract List<UICellStatus> getPalletCellStatus(); @Override protected abstract Map<RowColPos, PalletCell> getFakeScanCells(); public boolean hasReceivedSpecimens() { return specimensReceived; } }