package jp.mosp.common.part;

import java.util.Date;
import java.util.List;

import jp.mosp.common.CommonConst;

import jp.mosp.workflow.dao.AmRouteDao;
import jp.mosp.workflow.dao.AmUnitDao;
import jp.mosp.workflow.dto.AmUnitDto;

/**
 * 承認用Partクラス
 * @author yoshida
 *	@version	0.0.2
 */
public class ApprovalPart extends BasePart {

	/**
	 * コンストラクタ
	 */
	public ApprovalPart() {
		super();
	}

	/**
	 * コンストラクタ
	 * @param partInfo
	 */
	public ApprovalPart(PartInfo partInfo) {
		super(partInfo);
	}

	/**
	 * 承認用ユニットテーブル用のDAO取得
	 * @return	初期化済みAmUnitDaoインスタンス
	 * @throws Exception
	 */
	public AmUnitDao getAmUnitDao() throws Exception {
		return (AmUnitDao) getPreparedDao(AmUnitDao.class.getCanonicalName());
	}

	/**
	 * 承認用ルートテーブル用のDAO取得
	 * @return	初期化済みAmRouteDaoインスタンス
	 * @throws Exception
	 */
	public AmRouteDao getAmRouteDao() throws Exception {
		return (AmRouteDao) getPreparedDao(AmRouteDao.class.getCanonicalName());
	}

	/**
	 * 現状承認ユニットコード一覧（AM_UNIT）
	 * @return　現状の承認ユニットコードリスト
	 * @throws Exception
	 */
	public String[][] getCurrentUnitArray() throws Exception {
		String targetDate = DatePart.convDateFormattedByHyphen(DatePart.getSystemDate());
		// 情報の取得
		List<AmUnitDto> listUnit = getAmUnitDao().findForCurrentUnitArray(targetDate);
		// 配列の作成		
		String[][] aryUnitList = new String[listUnit.size()][2];
		for (int i = 0; i < listUnit.size(); i++) {
			aryUnitList[i][0] = listUnit.get(i).getUnitCode();
			StringBuffer sb = new StringBuffer();
			sb.append(human().getKName(listUnit.get(i).getMain()));
			sb.append(CommonConst.STR_SLASH_SEPARATOR);
			sb.append(human().getKName(listUnit.get(i).getAgent()));
			aryUnitList[i][1] = sb.toString();
		}
		return aryUnitList;
	}

	/**
	 * 対象年月日承認ユニット情報取得
	 * @since	0.0.2
	 * @param unitCode		対象ユニットコード
	 * @param kCode			対象社員コード
	 * @param startDate		対象開始年月日
	 * @return	対象年月日承認ユニット情報DTO
	 * @throws Exception
	 */
	public AmUnitDto getCurrentUnit(
			String unitCode,
			String kCode,
			String startDate
	) throws Exception {
		return getAmUnitDao().findForCurrentUnit(unitCode, kCode, startDate);
	}

	/**
	 * 対象年月日対象ユニットコード承認者判断
	 * @since	0.0.2
	 * @param unitcode		対象ユニットコード
	 * @param targetDate	対象年月日
	 * @return
	 * <p>
	 * 対象年月日承認ユニット情報DTOがある場合true、そうでない場合false
	 * </p>
	 * @throws Exception
	 */
	public boolean isApprover(String unitcode, Date targetDate) throws Exception {
		return VariousPart.chkExistDto(getCurrentUnit(
				unitcode,
				human().getBasisInfoOfUser().getKCode(),
				DatePart.convDateFormattedByHyphen(targetDate))
		);
	}

}
