Example #1
0
  private void populateSpecimensWithAlternateContainers(
      OrderSpecimenVoCollection potentialSpecimens,
      HashMap<
              OrderSpecimenVo,
              HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>>
          alternativeContainers) {
    // Clear grid
    form.grdItems().getRows().clear();

    if (potentialSpecimens == null) return;

    for (OrderSpecimenVo specimen : potentialSpecimens) {
      HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>
          specimenAlternateContainers = alternativeContainers.get(specimen);

      if (specimenHasOptions(specimenAlternateContainers)) {
        // Create Specimen parent row
        grdItemsRow specimenRow = form.grdItems().getRows().newRow();

        // Add investigation rows
        float totalRequiredVolume =
            addInvestigationsWithAlternates(
                specimen.getInvestigations(), specimenRow, specimenAlternateContainers);

        // Set specimen text
        specimenRow.setColText(getSpecimenDisplayText(specimen, totalRequiredVolume));
        // Expand Specimen parent row
        specimenRow.setExpanded(true);
      }
    }
  }
Example #2
0
  private float addInvestigationsWithAlternates(
      OrderInvestigationRefVoCollection investigations,
      grdItemsRow specimenRow,
      HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>
          alternativeContainers) {
    if (investigations == null || investigations.size() == 0)
      throw new CodingRuntimeException(
          "Logical Error - can't choose alternative containers for specimens without investigations");

    float totalRequiedVolume = 0;

    for (OrderInvestigationRefVo investigationRef : investigations) {
      // Upcast - possible error, but done due to performance consideration
      OrderInvestigationVo investigation = (OrderInvestigationVo) investigationRef;

      // Get investigation pathology details
      // Favor parent investigation Pathology Details - this might indicate an add-on investigation
      PathInvDetailsVo pathologyDetails = null;
      if (investigation.getInvestigation().getParentInvestigationPathDetails() != null) {
        pathologyDetails = investigation.getInvestigation().getParentInvestigationPathDetails();
      } else {
        pathologyDetails = investigation.getInvestigation().getPathInvDetails();
      }

      // Create child row for OrderInvestigationVo
      grdItemsRow investigationRow = specimenRow.getRows().newRow();

      // Set investigation name and value to row
      investigationRow.setColText(getInvestigationDisplayText(investigation, pathologyDetails));
      investigationRow.setValue(investigation);

      boolean isPaed = isUsePaedContainer();

      if (isPaed) {
        // Get specimen from pathology details - implementation only for Simple Investigation
        // Revise code when implementing Complex investigations
        SpecimenVo specimen = pathologyDetails.getSpecimens().get(0);
        // Pediatric container - alternate containers can only be configured for investigations with
        // only one pediatric container; any investigation must contain at least one pediatric
        // container
        SpecimenContainerVo paediatricContainer = specimen.getPaediatricContainers().get(0);

        investigationRow
            .getColContainer()
            .newRow(paediatricContainer, paediatricContainer.getSpecContainer().getName());
        investigationRow.getColContainer().setValue(paediatricContainer);

        totalRequiedVolume +=
            pathologyDetails.getSpecimens().get(0).getPaediatricContainers().get(0).getVolume();

        if (specimen.getAlternativePaediatricContainers() != null) {
          int addedAlternatives = 0;

          for (SpecimenContainerVo alternatePaedContainer :
              specimen.getAlternativePaediatricContainers()) {
            OrderInvestigationVoCollection orderInvestigations =
                alternativeContainers.get(alternatePaedContainer.getSpecContainer());

            if (orderInvestigations != null
                && orderInvestigations.size() > 1
                && orderInvestigations.contains(investigation)) {
              alternatePaedContainer
                  .getSpecContainer()
                  .setAlternativeVol(alternatePaedContainer.getVolume());
              investigationRow
                  .getColContainer()
                  .newRow(
                      alternatePaedContainer, alternatePaedContainer.getSpecContainer().getName());

              addedAlternatives++;
            }
          }

          investigationRow.setColContainerReadOnly(addedAlternatives == 0);
        }
      }
    }

    return totalRequiedVolume;
  }