/*
 * MosP - Mind Open Source Project         http://www.mosp.jp/
 * Copyright (C) 1987-2009 MIND Co., Ltd.  http://www.e-mind.co.jp/
 * 
 * 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 2
 * 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package jp.mosp.payroll.base;

import jp.mosp.common.common.BaseVo;
import jp.mosp.common.common.ListVo;
import jp.mosp.common.common.MospConst;

/**
 * 給与システムのVOで用いられる共通機能を提供する。<br><br>
 * 給与システム内の各VOは、当クラスを拡張して実装される。
 */
public abstract class PayrollVo extends ListVo {
	
	private static final long serialVersionUID = -2887585326696702206L;
	
	/**
	 * 給与計算システムVO共通初期化処理を行う。<br><br>
	 * 以下の処理を行う。
	 * <ul><li>
	 * {@link BaseVo#BaseVo()}
	 * </li><li>
	 * {@link #setViewPath(String)}
	 * </li><li>
	 * javascript出力要設定
	 * </li></ul>
	 */
	protected PayrollVo() {
		super();
		setViewPath(getClassName());
		needDirectJs = true;
	}
	
	/**
	 * 給与システムのサブタイトルを設定する。<br>
	 */
	@Override
	protected void setSubTitle() {
		super.setSubTitle();
		subTitle = "　";
		aryMenu = new String[1][2];
		aryMenu[0][0] = "P1910";
		aryMenu[0][1] = getName("C_MENU") + getName("C_TO");
	}
	
	/**
	 * javascriptを取得する。<br>
	 */
	@Override
	public String getDirectJs(Class<?> cls) throws IllegalAccessException {
		return super.getDirectJs(cls);
	}
	
	/**
	 * ボタン配列要素を追加する。<br>
	 * @param cmd   コマンド
	 * @param title ボタンタイトル
	 */
	protected void addAryMenu(String cmd, String title) {
		String[][] aryNew = new String[aryMenu.length + 1][2];
		for (int i = 0; i < aryMenu.length; i++) {
			aryNew[i][0] = aryMenu[i][0];
			aryNew[i][1] = aryMenu[i][1];
		}
		aryNew[aryMenu.length][0] = cmd  ;
		aryNew[aryMenu.length][1] = title;
		aryMenu = aryNew;
	}
	
	/**
	 * 名称取得
	 * @param code  取得対象コード
	 * @return コード名称
	 */
	protected String getCodeName(String code, String[][] array) {
		String codeName = code;
		if (array == null) {
			return codeName;
		}
		for (int i = 0; i < array.length; i++) {
			if (code.equals(array[i][0])) {
				codeName = array[i][1];
				break;
			}
		}
		return codeName;
	}
	
	/**
	 * 削除フラグ名称を取得する。
	 * @param deleteFlag 削除フラグ
	 * @return 削除フラグ名称
	 */
	protected String getDeleteName(byte deleteFlag) {
		if (deleteFlag == MospConst.DELETE_FLAG_OFF) {
			return MospConst.DELETE_FLAG_OFF_NAME;
		} else if (deleteFlag == MospConst.DELETE_FLAG_ON) {
			return MospConst.DELETE_FLAG_ON_NAME;
		}
		return "";
	}
	
	/**
	 * 3桁区切カンマを挿入する。
	 * @param strTarget 対象文字列
	 * @return 3桁区切カンマ付き文字列
	 */
	public String insertComma(String strTarget) {
		if (strTarget == null || strTarget.equals("")) {
			return "";
		}
		return strTarget.replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",",");
	}
	
	/**
	 * 明細区分配列を取得する。
	 * @return 明細区分配列
	 */
	protected String[][] getDetailTypeArray() {
		String[][] aryType = new String[8][2];
		aryType[0][0] = PayrollConst.DETAIL_TYPE_PT;
		aryType[1][0] = PayrollConst.DETAIL_TYPE_PA;
		aryType[2][0] = PayrollConst.DETAIL_TYPE_PD;
		aryType[3][0] = PayrollConst.DETAIL_TYPE_PB;
		aryType[4][0] = PayrollConst.DETAIL_TYPE_PS;
		aryType[5][0] = PayrollConst.DETAIL_TYPE_BA;
		aryType[6][0] = PayrollConst.DETAIL_TYPE_BD;
		aryType[7][0] = PayrollConst.DETAIL_TYPE_BS;
		aryType[0][1] = getName("P_PAYMENT") + getName("P_TIME");
		aryType[1][1] = getName("P_PAYMENT") + getName("P_ALLOWANCE");
		aryType[2][1] = getName("P_PAYMENT") + getName("P_DEDUCTION");
		aryType[3][1] = getName("P_PAYMENT") + getName("P_BREAKDOWN");
		aryType[4][1] = getName("P_PAYMENT") + getName("P_SUM");
		aryType[5][1] = getName("P_BONUS") + getName("P_ALLOWANCE");
		aryType[6][1] = getName("P_BONUS") + getName("P_DEDUCTION");
		aryType[7][1] = getName("P_BONUS") + getName("P_SUM");
		return aryType;
	}
	
}
