/**
  * Returns a list of information related to prescription reports given all of the office visits
  * and the patient ID. The patient ID is necessary in case the office visit IDs are for different
  * patients (the disambiguation is for security reasons).
  *
  * @param ovIDs A java.util.List of Longs for the office visits.
  * @param patientID A long representing the MID of the patient in question.
  * @return A java.util.List of prescription reports.
  * @throws DBException
  */
 public List<PrescriptionReportBean> getPrescriptionReports(List<Long> ovIDs, long patientID)
     throws DBException {
   Connection conn = null;
   PreparedStatement ps = null;
   try {
     conn = factory.getConnection();
     String preps = buildPreps(ovIDs.size());
     ps =
         conn.prepareStatement(
             "SELECT * FROM NDCodes, OVMedication, OfficeVisits "
                 + "WHERE NDCodes.Code=OVMedication.NDCode AND OVMedication.VisitID=OfficeVisits.ID "
                 + "AND PatientID=? AND VisitID IN("
                 + preps
                 + ") ORDER BY VisitDate DESC");
     ps.setLong(1, patientID);
     prepareOVIDs(ps, ovIDs);
     ResultSet rs = ps.executeQuery();
     return prescriptionReportBeanLoader.loadList(rs);
   } catch (SQLException e) {
     e.printStackTrace();
     throw new DBException(e);
   } finally {
     DBUtil.closeConnection(conn, ps);
   }
 }
  /**
   * Returns a list of information related to prescription reports given all of the office visits
   * and the patient ID. The patient ID is necessary in case the office visit IDs are for different
   * patients (the disambiguation is for security reasons).
   *
   * @param ovIDs A java.util.List of Longs for the office visits.
   * @param patientID A long representing the MID of the patient in question.
   * @return A java.util.List of prescription reports.
   * @throws DBException
   */
  public List<PrescriptionReportBean> byOfficeVisitAndPatient(List<Long> ovIDs, long patientID)
      throws DBException {
    Connection conn = null;
    PreparedStatement ps = null;
    try {
      conn = factory.getConnection();
      String preps = buildPreps(ovIDs.size());
      ps =
          conn.prepareStatement(
              "SELECT * FROM ndcodes, ovmedication, officevisits "
                  + "WHERE ndcodes.Code=ovmedication.NDCode AND ovmedication.VisitID=officevisits.ID "
                  + "AND PatientID=? AND VisitID IN("
                  + preps
                  + ") ORDER BY VisitDate DESC");
      ps.setLong(1, patientID);
      prepareOVIDs(ps, ovIDs);
      ResultSet rs = ps.executeQuery();
      List<PrescriptionReportBean> loadlist = loader.loadList(rs);
      rs.close();
      return loadlist;
    } catch (SQLException e) {

      throw new DBException(e);
    } finally {
      DBUtil.closeConnection(conn, ps);
    }
  }
 /**
  * Returns a list of information related to prescription reports given all of the office visits
  * and the patient ID. The patient ID is necessary in case the office visit IDs are for different
  * patients (the disambiguation is for security reasons).
  *
  * @param ovIDs A java.util.List of Longs for the office visits.
  * @param patientID A long representing the MID of the patient in question.
  * @return A java.util.List of prescription reports.
  * @throws DBException
  */
 public List<PrescriptionReportBean> getPrescriptionReportsByDate(
     long patientID, String startDate, String endDate) throws DBException {
   Connection conn = null;
   PreparedStatement ps = null;
   try {
     conn = factory.getConnection();
     ps =
         conn.prepareStatement(
             "SELECT * FROM NDCodes, OVMedication, OfficeVisits "
                 + "WHERE NDCodes.Code=OVMedication.NDCode AND OVMedication.VisitID=OfficeVisits.ID "
                 + "AND PatientID=? AND ((DATE(?) < OVMedication.EndDate AND DATE(?) > OVMedication.StartDate)"
                 + "OR (DATE(?) > OVMedication.StartDate  AND DATE(?) < OVMedication.EndDate ) OR "
                 + "(DATE(?) <= OVMedication.StartDate AND DATE(?) >= OVMedication.StartDate)) "
                 + "ORDER BY VisitDate DESC");
     ps.setLong(1, patientID);
     ps.setString(2, startDate);
     ps.setString(3, startDate);
     ps.setString(4, endDate);
     ps.setString(5, endDate);
     ps.setString(6, startDate);
     ps.setString(7, endDate);
     ResultSet rs = ps.executeQuery();
     return prescriptionReportBeanLoader.loadList(rs);
   } catch (SQLException e) {
     e.printStackTrace();
     throw new DBException(e);
   } finally {
     DBUtil.closeConnection(conn, ps);
   }
 }
  /**
   * Returns a list of information related to prescription reports given all of the office visits
   * and the patient ID. The patient ID is necessary in case the office visit IDs are for different
   * patients (the disambiguation is for security reasons).
   *
   * @param ovIDs A java.util.List of Longs for the office visits.
   * @param patientID A long representing the MID of the patient in question.
   * @return A java.util.List of prescription reports.
   * @throws DBException
   */
  public List<PrescriptionReportBean> byDate(long patientID, String startDate, String endDate)
      throws DBException {
    Connection conn = null;
    PreparedStatement ps = null;
    try {
      conn = factory.getConnection();
      ps =
          conn.prepareStatement(
              "SELECT * FROM ndcodes, ovmedication, officevisits "
                  + "WHERE ndcodes.Code=ovmedication.NDCode AND ovmedication.VisitID=officevisits.ID "
                  + "AND PatientID=? AND ((DATE(?) < ovmedication.EndDate AND DATE(?) > ovmedication.StartDate)"
                  + "OR (DATE(?) > ovmedication.StartDate  AND DATE(?) < ovmedication.EndDate ) OR "
                  + "(DATE(?) <= ovmedication.StartDate AND DATE(?) >= ovmedication.StartDate)) "
                  + "ORDER BY VisitDate DESC");
      ps.setLong(1, patientID);
      ps.setString(2, startDate);
      ps.setString(3, startDate);
      ps.setString(4, endDate);
      ps.setString(5, endDate);
      ps.setString(6, startDate);
      ps.setString(7, endDate);
      ResultSet rs = ps.executeQuery();
      List<PrescriptionReportBean> loadlist = loader.loadList(rs);
      rs.close();
      return loadlist;
    } catch (SQLException e) {

      throw new DBException(e);
    } finally {
      DBUtil.closeConnection(conn, ps);
    }
  }