/*
   * modifyEmployeeExcludeFlag
   *
   * @content: 社員コード及び除外/非除外より、当該教育プランの社員を除外/除外解除する
   *
   * @param : 社員コードリスト
   *
   * @return : 更新成功->true 更新失敗->false
   */
  public boolean modifyEmployeeExcludeFlag(ExcludeFlagDataList employeeDataList)
      throws EducationManagementException {

    BusObjectIterator<ExcludeFlagData> dataList = employeeDataList.getDataListObjects();
    try {
      // 繰り返しで、受講対象者の除外区分を更新する。
      while (dataList.hasMoreElements()) {
        ExcludeFlagData data = dataList.nextElement();
        EDU_TRAINEE.modifyEmployeeExcludeFlag(
            data.getPlanID(), data.getEmployeeCD(), data.getExcludeFlag());
      }
    } catch (Exception e) {
      // システムエラーが発生する場合、
      EducationManagementException educationManagementException =
          new EducationManagementException(
              e, // ここでeをEducationManagementExceptionのコンストラクタへ渡す
              ErrorMessages.E10002,
              new Object[] {EducationManagementConst.TBL_NAME_EDU_TRAINEE});
      LOGGER.error(
          educationManagementException,
          ErrorMessages.E10002,
          new Object[] {EducationManagementConst.TBL_NAME_EDU_TRAINEE});
      throw educationManagementException;
    }

    // 更新処理は成功
    return true;
  }
  /*
   * getEmployeeInfoByPlanID
   *
   * @content: 教育プランIDより、該当教育プランの社員情報を取得する
   *
   * @param : 教育プランID,カーソル
   *
   * @return : 該当教育プランの社員情報
   */
  public BusObjectIterator<
          jp.co.intasect.educationmanagement.service.manageeduprogress.EmployeeData>
      getEmployeeInfoByPlanID(String planID, com.cordys.cpc.bsf.query.Cursor cursor)
          throws EducationManagementException {

    ArrayList<EmployeeData> arrResult = new ArrayList<EmployeeData>();

    EducationManagementUtil util = new EducationManagementUtil();

    int response = -1;

    String employeeCdList = "";

    try {
      // 受講対象者テーブルのBusObjectの全件取得用メソッドをコールする
      BusObjectIterator<EDU_TRAINEE> arrEduEmployee = EDU_TRAINEE.getEmployeeInfoByPlanID(planID);

      // 一つずつ受講対象者を戻る結果にセットする
      while (arrEduEmployee.hasMoreElements()) {
        EmployeeData data = new EmployeeData();

        EDU_TRAINEE eduEmployee = arrEduEmployee.nextElement();

        data.setEmployeeCD(eduEmployee.getEMPLOYEE_CD()); // 社員コード
        data.setPassDate(eduEmployee.getPASS_DATE()); // 合格日
        data.setGradingDate(eduEmployee.getGRADING_DATE()); // 採点日
        data.setTrainee(eduEmployee.getTRAINEE()); // 受講者開始日
        data.setGradingNum(eduEmployee.getGRADING_NUM()); // 採点回数
        data.setFirstScore(eduEmployee.getFIRST_SCORE()); // 初回点数
        data.setLastScore(eduEmployee.getLAST_SCORE()); // 最終点数
        data.setExcludeFlag(eduEmployee.getEXCLUDE_FLG()); // 除外区分

        data.setEmployeeName(""); // 社員名前
        data.setEmployeeNameKana(""); // 社員名前片仮名
        data.setHireName(""); // 雇用区分
        data.setAssignOrgName(""); // 所属
        data.setWorkLocation(""); // 勤務地

        // 社員基本情報を取得したい社員CDを組み込む
        if ("".equals(employeeCdList)) {
          employeeCdList = data.getEmployeeCD();
        } else {
          employeeCdList = employeeCdList + "," + data.getEmployeeCD();
        }

        arrResult.add(data);
      }

      // 社員基本情報を取得する
      response =
          util.getEmployeeByRequestTypeAndEmployeeCd(
              EducationManagementConst.EMPLOYEE_TYPE_SPECIAL, employeeCdList);

      // 情報を取得する場合
      if (response > 0) {
        // 基本情報と受講情報を組み込む
        for (int i = 0; i < arrResult.size(); i++) {
          // 一件基本情報を取得する
          EmployeeData employeeData = (EmployeeData) arrResult.get(i);

          XPath listPath =
              XPath.getXPathInstance(
                  ".//*[local-name()='employeeCd' and text()= '"
                      + employeeData.getEmployeeCD()
                      + "']/parent::*");

          // 親ノード配列を取得する
          NodeSet oNodeSet = listPath.selectNodeSet(response);

          // 繰り返しで親ノードを取得する
          while (oNodeSet.hasNext()) {
            // 一つ親ノードを取得する
            long iResultNode = oNodeSet.next();

            // 属性ではない、ノードの場合
            if (!ResultNode.isAttribute(iResultNode)) {
              int iNode = ResultNode.getElementNode(iResultNode);
              // 社員名前
              employeeData.setEmployeeName(Node.getDataElement(iNode, "employeeName", null));
              // 社員名前片仮名
              employeeData.setEmployeeNameKana(
                  Node.getDataElement(iNode, "employeeNameKana", null));
              // 雇用区分
              employeeData.setHireName(Node.getDataElement(iNode, "hireName", null));
              // 所属
              employeeData.setAssignOrgName(Node.getDataElement(iNode, "assignOrgName", null));

              // 勤務地
              employeeData.setWorkLocation(Node.getDataElement(iNode, "workLocation", null));
            }
          }
        }
      }

      // 結果を返却する
      BusObjectIterator<EmployeeData> result = new BusObjectArray<EmployeeData>(arrResult);

      return result;

    } catch (Exception e) {
      // システムエラーが発生する場合、
      EducationManagementException educationManagementException =
          new EducationManagementException(
              e, // ここでeをEducationManagementExceptionのコンストラクタへ渡す
              ErrorMessages.E10004,
              new Object[] {EducationManagementConst.TBL_NAME_EDU_TRAINEE});
      LOGGER.error(
          educationManagementException,
          ErrorMessages.E10004,
          new Object[] {EducationManagementConst.TBL_NAME_EDU_TRAINEE});

      throw educationManagementException;
    }
  }