public QuestionnaireBo saveORUpdateQuestionnaire()

in study-builder/fdahpStudyDesigner/src/main/java/com/fdahpstudydesigner/dao/StudyQuestionnaireDAOImpl.java [3998:4291]


  public QuestionnaireBo saveORUpdateQuestionnaire(
      QuestionnaireBo questionnaireBo, SessionObject sessionObject, String customStudyId) {
    logger.entry("begin saveORUpdateQuestionnaire()");
    Session session = null;
    try {
      session = hibernateTemplate.getSessionFactory().openSession();
      transaction = session.beginTransaction();
      session.saveOrUpdate(questionnaireBo);
      if (questionnaireBo.getType().equalsIgnoreCase(FdahpStudyDesignerConstants.SCHEDULE)) {
        if ((questionnaireBo != null) && (questionnaireBo.getId() != null)) {
          if ((questionnaireBo.getQuestionnairesFrequenciesList() != null)
              && !questionnaireBo.getQuestionnairesFrequenciesList().isEmpty()) {
            query =
                session
                    .createSQLQuery("CALL deleteQuestionnaireFrequencies(:questionnaireId)")
                    .setString("questionnaireId", questionnaireBo.getId());
            query.executeUpdate();
            for (QuestionnairesFrequenciesBo questionnairesFrequenciesBo :
                questionnaireBo.getQuestionnairesFrequenciesList()) {
              if (questionnairesFrequenciesBo.getFrequencyTime() != null) {
                questionnairesFrequenciesBo.setFrequencyTime(
                    FdahpStudyDesignerUtil.getFormattedDate(
                        questionnairesFrequenciesBo.getFrequencyTime(),
                        FdahpStudyDesignerConstants.SDF_TIME,
                        FdahpStudyDesignerConstants.UI_SDF_TIME));
                if (questionnairesFrequenciesBo.getQuestionnairesId() == null) {
                  questionnairesFrequenciesBo.setId(null);
                  questionnairesFrequenciesBo.setQuestionnairesId(questionnaireBo.getId());
                }
                session.saveOrUpdate(questionnairesFrequenciesBo);
              }
            }
          }
          if (questionnaireBo.getQuestionnairesFrequenciesBo() != null) {
            QuestionnairesFrequenciesBo questionnairesFrequenciesBo =
                questionnaireBo.getQuestionnairesFrequenciesBo();
            if (!questionnaireBo
                    .getFrequency()
                    .equalsIgnoreCase(FdahpStudyDesignerConstants.FREQUENCY_TYPE_DAILY)
                && !questionnaireBo
                    .getFrequency()
                    .equalsIgnoreCase(questionnaireBo.getPreviousFrequency())) {
              query =
                  session
                      .createSQLQuery("CALL deleteQuestionnaireFrequencies(:questionnaireId)")
                      .setString("questionnaireId", questionnaireBo.getId());
              query.executeUpdate();
            }
            if ((questionnairesFrequenciesBo.getFrequencyDate() != null)
                || (questionnairesFrequenciesBo.getFrequencyTime() != null)
                || questionnaireBo
                    .getFrequency()
                    .equalsIgnoreCase(FdahpStudyDesignerConstants.FREQUENCY_TYPE_ONE_TIME)) {
              if (questionnairesFrequenciesBo.getQuestionnairesId() == null) {
                questionnairesFrequenciesBo.setQuestionnairesId(questionnaireBo.getId());
              }
              if ((questionnaireBo.getStudyLifetimeStart() != null)
                  && !questionnaireBo.getStudyLifetimeStart().isEmpty()) {
                questionnairesFrequenciesBo.setFrequencyDate(
                    questionnaireBo.getStudyLifetimeStart());
              } else {
                questionnairesFrequenciesBo.setFrequencyDate(
                    StringUtils.isNotEmpty(questionnairesFrequenciesBo.getFrequencyDate())
                        ? FdahpStudyDesignerUtil.getFormattedDate(
                            questionnairesFrequenciesBo.getFrequencyDate(),
                            FdahpStudyDesignerConstants.UI_SDF_DATE,
                            FdahpStudyDesignerConstants.DB_SDF_DATE)
                        : null);
              }
              if ((questionnaireBo.getQuestionnairesFrequenciesBo().getFrequencyTime() != null)
                  && !questionnaireBo
                      .getQuestionnairesFrequenciesBo()
                      .getFrequencyTime()
                      .isEmpty()) {
                questionnaireBo
                    .getQuestionnairesFrequenciesBo()
                    .setFrequencyTime(
                        FdahpStudyDesignerUtil.getFormattedDate(
                            questionnaireBo.getQuestionnairesFrequenciesBo().getFrequencyTime(),
                            FdahpStudyDesignerConstants.SDF_TIME,
                            FdahpStudyDesignerConstants.UI_SDF_TIME));
              }
              session.saveOrUpdate(questionnairesFrequenciesBo);
            }
          }
          if ((questionnaireBo.getQuestionnaireCustomScheduleBo() != null)
              && !questionnaireBo.getQuestionnaireCustomScheduleBo().isEmpty()) {
            query =
                session
                    .createSQLQuery("CALL deleteQuestionnaireFrequencies(:questionnaireId)")
                    .setString("questionnaireId", questionnaireBo.getId());
            query.executeUpdate();
            for (QuestionnaireCustomScheduleBo questionnaireCustomScheduleBo :
                questionnaireBo.getQuestionnaireCustomScheduleBo()) {
              if (questionnaireCustomScheduleBo.getQuestionnairesId() == null) {
                questionnaireCustomScheduleBo.setQuestionnairesId(questionnaireBo.getId());
              }
              if ((questionnaireCustomScheduleBo.getFrequencyEndDate() != null)
                  && !questionnaireCustomScheduleBo.getFrequencyEndDate().isEmpty()) {
                questionnaireCustomScheduleBo.setFrequencyEndDate(
                    FdahpStudyDesignerUtil.getFormattedDate(
                        questionnaireCustomScheduleBo.getFrequencyEndDate(),
                        FdahpStudyDesignerConstants.UI_SDF_DATE,
                        FdahpStudyDesignerConstants.SD_DATE_FORMAT));
              }
              if ((questionnaireCustomScheduleBo.getFrequencyStartDate() != null)
                  && !questionnaireCustomScheduleBo.getFrequencyStartDate().isEmpty()) {
                questionnaireCustomScheduleBo.setFrequencyStartDate(
                    FdahpStudyDesignerUtil.getFormattedDate(
                        questionnaireCustomScheduleBo.getFrequencyStartDate(),
                        FdahpStudyDesignerConstants.UI_SDF_DATE,
                        FdahpStudyDesignerConstants.SD_DATE_FORMAT));
              }
              if ((questionnaireCustomScheduleBo.getFrequencyEndTime() != null)
                  && !questionnaireCustomScheduleBo.getFrequencyEndTime().isEmpty()) {
                questionnaireCustomScheduleBo.setFrequencyEndTime(
                    FdahpStudyDesignerUtil.getFormattedDate(
                        questionnaireCustomScheduleBo.getFrequencyEndTime(),
                        FdahpStudyDesignerConstants.SDF_TIME,
                        FdahpStudyDesignerConstants.UI_SDF_TIME));
              }

              if ((questionnaireCustomScheduleBo.getFrequencyStartTime() != null)
                  && !questionnaireCustomScheduleBo.getFrequencyStartTime().isEmpty()) {
                questionnaireCustomScheduleBo.setFrequencyStartTime(
                    FdahpStudyDesignerUtil.getFormattedDate(
                        questionnaireCustomScheduleBo.getFrequencyStartTime(),
                        FdahpStudyDesignerConstants.SDF_TIME,
                        FdahpStudyDesignerConstants.UI_SDF_TIME));
              }
              questionnaireCustomScheduleBo.setxDaysSign(
                  questionnaireCustomScheduleBo.isxDaysSign());
              if (questionnaireCustomScheduleBo.getTimePeriodFromDays() != null) {
                questionnaireCustomScheduleBo.setTimePeriodFromDays(
                    questionnaireCustomScheduleBo.getTimePeriodFromDays());
              }
              questionnaireCustomScheduleBo.setyDaysSign(
                  questionnaireCustomScheduleBo.isyDaysSign());
              if (questionnaireCustomScheduleBo.getTimePeriodToDays() != null) {
                questionnaireCustomScheduleBo.setTimePeriodToDays(
                    questionnaireCustomScheduleBo.getTimePeriodToDays());
              }
              session.saveOrUpdate(questionnaireCustomScheduleBo);
            }
          }
        }
      }
      // updating the anchor date of an study while change the
      // questionnaire frequency in schedule part
      if (!questionnaireBo
          .getFrequency()
          .equalsIgnoreCase(FdahpStudyDesignerConstants.FREQUENCY_TYPE_ONE_TIME)) {
        String updateFromQuery =
            "update questions QBO,form_mapping f,questionnaires_steps QSBO SET QBO.use_anchor_date = 0 where "
                + " QBO.id=f.question_id and f.form_id=QSBO.instruction_form_id and QSBO.questionnaires_id=:questionnaireId "
                + " and QSBO.active=1 "
                + " and QSBO.step_type=:stepType "
                + " and QBO.active=1";
        query =
            session
                .createSQLQuery(updateFromQuery)
                .setString("questionnaireId", questionnaireBo.getId())
                .setString("stepType", FdahpStudyDesignerConstants.FORM_STEP);
        query.executeUpdate();

        String updateQuestionSteps =
            "Update questions QBO,questionnaires_steps QSBO SET QBO.use_anchor_date = 0 where QBO.id=QSBO.instruction_form_id"
                + " and QSBO.questionnaires_id=:questionnaireId "
                + " and QSBO.active=1 and "
                + " QSBO.step_type=:stepType "
                + "  and QBO.active=1";
        query =
            session
                .createSQLQuery(updateQuestionSteps)
                .setString("questionnaireId", questionnaireBo.getId())
                .setString("stepType", FdahpStudyDesignerConstants.QUESTION_STEP);
        query.executeUpdate();
      }
      // updating the stastic option of dashboard while change the
      // questionnaire frequency
      if ((questionnaireBo.getFrequency() != null)
          && questionnaireBo
              .getFrequency()
              .equalsIgnoreCase(FdahpStudyDesignerConstants.FREQUENCY_TYPE_DAILY)) {
        if ((questionnaireBo.getCurrentFrequency() != null)
            && (questionnaireBo.getPreviousFrequency() != null)
            && !questionnaireBo
                .getCurrentFrequency()
                .equalsIgnoreCase(questionnaireBo.getPreviousFrequency())) {
          updateLineChartSchedule(
              questionnaireBo.getId(),
              questionnaireBo.getCurrentFrequency(),
              sessionObject,
              session,
              transaction,
              customStudyId);
        }
      } else if ((questionnaireBo.getPreviousFrequency() != null)
          && !questionnaireBo
              .getFrequency()
              .equalsIgnoreCase(questionnaireBo.getPreviousFrequency())) {
        updateLineChartSchedule(
            questionnaireBo.getId(),
            questionnaireBo.getFrequency(),
            sessionObject,
            session,
            transaction,
            customStudyId);
      }

      if ((questionnaireBo != null) && questionnaireBo.getStatus()) {
        auditLogDAO.updateDraftToEditedStatus(
            session,
            transaction,
            sessionObject.getUserId(),
            FdahpStudyDesignerConstants.DRAFT_QUESTIONNAIRE,
            questionnaireBo.getStudyId());

        // Notification Purpose needed Started
        queryString = " From StudyBo where customStudyId=:customStudyId and live=1";
        StudyBo studyBo =
            (StudyBo)
                session
                    .createQuery(queryString)
                    .setString("customStudyId", customStudyId)
                    .uniqueResult();
        if (studyBo != null) {
          queryString = " From StudyBo where id=:studyId";
          StudyBo draftStudyBo =
              (StudyBo)
                  session
                      .createQuery(queryString)
                      .setString("studyId", questionnaireBo.getStudyId())
                      .uniqueResult();
          NotificationBO notificationBO = null;
          queryString =
              "From NotificationBO where questionnarieId=:questionnarieId "
                  + "and studyId=:studyId ";
          notificationBO =
              (NotificationBO)
                  session
                      .createQuery(queryString)
                      .setMaxResults(1)
                      .setString("studyId", questionnaireBo.getStudyId())
                      .setString("questionnarieId", questionnaireBo.getId())
                      .uniqueResult();
          if (!questionnaireBo.getScheduleType().equalsIgnoreCase("AnchorDate")) {
            if (notificationBO == null) {
              notificationBO = new NotificationBO();
              notificationBO.setStudyId(questionnaireBo.getStudyId());
              notificationBO.setCustomStudyId(studyBo.getCustomStudyId());
              String platform = FdahpStudyDesignerUtil.getStudyPlatform(studyBo);
              notificationBO.setPlatform(platform);
              if (StringUtils.isNotEmpty(studyBo.getAppId())) {
                notificationBO.setAppId(studyBo.getAppId());
              }

              notificationBO.setNotificationType(FdahpStudyDesignerConstants.NOTIFICATION_ST);
              notificationBO.setNotificationSubType(
                  FdahpStudyDesignerConstants.NOTIFICATION_SUBTYPE_ACTIVITY);
              notificationBO.setNotificationScheduleType(
                  FdahpStudyDesignerConstants.NOTIFICATION_IMMEDIATE);
              notificationBO.setQuestionnarieId(questionnaireBo.getId());
              notificationBO.setNotificationStatus(false);
              notificationBO.setCreatedBy(sessionObject.getUserId());
              notificationBO.setCreatedOn(FdahpStudyDesignerUtil.getCurrentDateTime());
              notificationBO.setNotificationSent(false);
            } else {
              notificationBO.setModifiedBy(sessionObject.getUserId());
              notificationBO.setModifiedOn(FdahpStudyDesignerUtil.getCurrentDateTime());
            }
            notificationBO.setNotificationText(
                FdahpStudyDesignerConstants.NOTIFICATION_ACTIVETASK_TEXT
                    .replace("$shortTitle", questionnaireBo.getTitle())
                    .replace("$customId", draftStudyBo.getName()));
            if (!notificationBO.isNotificationSent()) {
              session.saveOrUpdate(notificationBO);
            }
          }
        }
        // Notification Purpose needed End
      }
      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      logger.error("StudyQuestionnaireDAOImpl - saveORUpdateQuestionnaire() - Error", e);
    } finally {
      if (session != null) {
        session.close();
      }
    }
    logger.exit("saveORUpdateQuestionnaire() - Ends");
    return questionnaireBo;
  }