/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2008 Aimluck,Inc.
 * http://aipostyle.com/
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package com.aimluck.eip.account;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.cayenne.access.DataContext;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;

import com.aimluck.commons.field.ALStringField;
import com.aimluck.eip.account.util.AccountUtils;
import com.aimluck.eip.cayenne.om.account.EipMPost;
import com.aimluck.eip.common.ALAbstractFormData;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALEipConstants;
import com.aimluck.eip.common.ALEipManager;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.orm.DatabaseOrmService;
import com.aimluck.eip.util.ALEipUtils;

import com.aimluck.commons.field.ALNumberField;

/**
 * 部署のフォームデータを管理するクラスです。 <BR>
 * 
 */
public class AccountPostDisable extends ALAbstractFormData {

  /** logger */
  private static final JetspeedLogger logger = JetspeedLogFactoryService
      .getLogger(AccountPostDisable.class.getName());

  private String mode;

  /**
   * 
   * @param mode
   */
  public void setMode(String mode) {
    this.mode = mode;
  }

  /**
   * 
   * @return
   */
  public String getMode() {
    return mode;
  }

  /** 部署名 */
  private ALStringField post_name;

  /** 郵便番号 */
  private ALStringField zipcode1;

  /** 郵便番号 */
  private ALStringField zipcode2;

  /** 住所 */
  private ALStringField address;

  /** 電話番号(外線)1 */
  private ALStringField post_out_telephone1;

  /** 電話番号(外線)2 */
  private ALStringField post_out_telephone2;

  /** 電話番号(外線)3 */
  private ALStringField post_out_telephone3;

  /** 電話番号(内線) */
  private ALStringField post_in_telephone;

  /** FAX番号 */
  private ALStringField fax_number1;

  /** FAX番号 */
  private ALStringField fax_number2;

  /** FAX番号 */
  private ALStringField fax_number3;

  /*Add 2010/07/21 キョク Start---*/
  private ALStringField disabled;
  /*Add 2010/07/21 キョク End---*/
  
  /** 所属メンバー */
  private ArrayList memberList;

  /*Add 2010/07/25 キョク Start---*/
  private ArrayList parentList;
  /*Add 2010/07/25 キョク End---*/
  /** */
  private boolean is_join_member = true;

  /** 部署ID */
  private int post_id;

  /*Add 2010/07/21 キョク Start---*/
  /*Update 2010/07/25 キョク Start---*/
  //  private  parent_post_id;
  private ALNumberField parent_post_id;

  /*Update 2010/07/25 キョク End---*/
  /*Add 2010/07/21 キョク End---*/
  private ALStringField group_name;

  private DataContext dataContext;

  /**
   * 初期化します。
   * 
   * @param action
   * @param rundata
   * @param context
   * @see com.aimluck.eip.common.ALAbstractFormData#init(com.aimluck.eip.modules.actions.common.ALAction,
   *      org.apache.turbine.util.RunData, org.apache.velocity.context.Context)
   */
  public void init(ALAction action, RunData rundata, Context context)
      throws ALPageNotFoundException, ALDBErrorException {
    super.init(action, rundata, context);
  }

  /**
   * 各フィールドを初期化します。 <BR>
   * 
   * @see com.aimluck.eip.common.ALData#initField()
   */
  public void initField() {
    dataContext = DatabaseOrmService.getInstance().getDataContext();
  }

  /**
   * 
   * @param rundata
   * @param context
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#setFormData(org.apache.turbine.util.RunData,
   *      org.apache.velocity.context.Context, java.util.ArrayList)
   */
  protected boolean setFormData(RunData rundata, Context context,
      ArrayList msgList) throws ALPageNotFoundException, ALDBErrorException {
    boolean res = super.setFormData(rundata, context, msgList);

    return res;
  }

  /**
   * 各フィールドに対する制約条件を設定します。 <BR>
   * 
   * @see com.aimluck.eip.common.ALAbstractFormData#setValidator()
   */
  protected void setValidator() {
  }

  /**
   * フォームに入力されたデータの妥当性検証を行います。 <BR>
   * 
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#validate(java.util.ArrayList)
   */
  protected boolean validate(ArrayList msgList) {
    return (msgList.size() == 0);
  }

  /**
   * 『部署』を読み込みます。 <BR>
   * 
   * @param rundata
   * @param context
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#loadFormData(org.apache.turbine.util.RunData,
   *      org.apache.velocity.context.Context, java.util.ArrayList)
   */
  protected boolean loadFormData(RunData rundata, Context context,
      ArrayList msgList) {

    return true;
  }

  /**
   * 『部署』を追加します。 <BR>
   * 
   * @param rundata
   * @param context
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#insertFormData(org.apache.turbine.util.RunData,
   *      org.apache.velocity.context.Context, java.util.ArrayList)
   */
  protected boolean insertFormData(RunData rundata, Context context,
      ArrayList msgList) {

    return true;
  }

  /**
   * 『部署』を更新します。 <BR>
   * 
   * @param rundata
   * @param context
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#updateFormData(org.apache.turbine.util.RunData,
   *      org.apache.velocity.context.Context, java.util.ArrayList)
   */
  protected boolean updateFormData(RunData rundata, Context context,
      ArrayList msgList) {
    try {
      // オブジェクトモデルを取得
      EipMPost record = AccountUtils.getEipMPost(rundata, context);
      if (record == null)
        return false;

      DataContext dataContext = DatabaseOrmService.getInstance()
          .getDataContext();
      if (ALEipConstants.MODE_Disable.equals(mode)) {
        
        /* Add 2010/07/29 キョク Start--- */
        if (AccountUtils.getPostUser(record.getPostId())==true) {
          msgList.add("部署に所属のユーザーが存在します");
          return false;
        }
     // 所属ユーザーがない場合、無効にする
        record.setDisabled(ALEipConstants.USER_STAT_NUTRAL);
        /* Add 2010/07/29 キョク End--- */
      } else if (ALEipConstants.MODE_Enable.equals(mode)) {
        //有効にするボタンを押す場合、有効（"F"）にする
        record.setDisabled(ALEipConstants.USER_STAT_ENABLED);
      }

      dataContext.commitChanges();

    } catch (Exception ex) {
      logger.error("Exception", ex);
      return false;
    }
    return true;
  }

  /**
   * 『部署』を削除します。 <BR>
   * このとき部署に関連づけられているグループも削除します。 <BR>
   * 
   * @param rundata
   * @param context
   * @param msgList
   * @return
   * @see com.aimluck.eip.common.ALAbstractFormData#deleteFormData(org.apache.turbine.util.RunData,
   *      org.apache.velocity.context.Context, java.util.ArrayList)
   */
  protected boolean deleteFormData(RunData rundata, Context context,
      ArrayList msgList) {

    return true;
  }

  /**
   * 部署名を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getPostName() {
    return post_name;
  }

  /**
   * 住所を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getAddress() {
    return address;
  }

  /**
   * FAX番号を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getFaxNumber1() {
    return fax_number1;
  }

  /**
   * FAX番号を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getFaxNumber2() {
    return fax_number2;
  }

  /**
   * FAX番号を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getFaxNumber3() {
    return fax_number3;
  }

  /**
   * 電話番号（外線）を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getOutTelephone1() {
    return post_out_telephone1;
  }

  /**
   * 電話番号（外線）を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getOutTelephone2() {
    return post_out_telephone2;
  }

  /**
   * 電話番号（外線）を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getOutTelephone3() {
    return post_out_telephone3;
  }

  /**
   * 電話番号（内線）を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getInTelephone() {
    return post_in_telephone;
  }

  /**
   * 郵便番号を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getZipcode1() {
    return zipcode1;
  }

  /**
   * 郵便番号を取得します。 <BR>
   * 
   * @return
   */
  public ALStringField getZipcode2() {
    return zipcode2;
  }

  /**
   * 所属メンバーを取得します。 <BR>
   * 
   * @return
   */
  public ArrayList getMemberList() {
    return memberList;
  }

  public ALStringField getGroupName() {
    return group_name;
  }

  /*Add 2010/07/25 キョク Start---*/
  /**
   * 親部署を取得します。 <BR>
   * 
   * @return
   */
  public ArrayList getParentList() {
    return parentList;
  }

  /*Add 2010/07/25 キョク End---*/

  /**
   * 
   * @param groupname
   * @return
   */
  public List getUsers(String groupname) {
    try {
      return ALEipUtils.getUsers(groupname);
      // return getUsers2(groupname);
    } catch (Exception e) {
      logger.error("[ERROR}", e);
      return new ArrayList();
    }
  }

  /**
   * 
   * @return
   */
  public Map getPostMap() {
    return ALEipManager.getInstance().getPostMap();
  }

  /**
   * 
   * @param bool
   */
  public void setJoinMember(boolean bool) {
    is_join_member = bool;
  }

  /**
   * 
   * @return
   */
  public boolean isJoinMember() {
    return is_join_member;
  }

  /**
   * 
   * @return
   */
  public int getPostId() {
    return post_id;
  }

  /*Add 2010/07/23 キョク Start---*/
  public ALNumberField getParentPostId() {
    return parent_post_id;
    /*Add 2010/07/23 キョク End---*/
  }
}
