package jp.mosp.payroll.common.vo;

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

import javax.servlet.http.HttpServletRequest;

import jp.mosp.common.MosPVo;
import jp.mosp.common.common.MospException;
import jp.mosp.common.common.MospUtility;
import jp.mosp.common.dto.MosPConfDto;
import jp.mosp.common.part.DatePart;
import jp.mosp.payroll.base.Employee;
import jp.mosp.payroll.base.PayrollConst;

public class InsuranceConfSetVo extends MosPVo {
	
	private static final long serialVersionUID = 1833548315728482756L;
	
	// URL、CSS
	private static final String RETURN_URL = "/jsp/payroll/common/insuranceConfSet.jsp";
	private static final String EXTRA_JS   = "/pub/payroll/common/js/insuranceConfSet.js";
	private static final String EXTRA_CSS  = "/pub/payroll/common/css/insuranceConfSet.css";
	
	// 画面サブタイトル
	public final String SUB_TITLE = PayrollConst.TTL_SANTEI_GEPPEN_CONF;
	
	// パラメータ名
	public static final String BTN_SYORI_SELECT					= "idButtonSyori";			// 処理選択ボタン名
	public static final String BTN_SIHARAI_KISO_NISU				= "idButtonKisoNisu";		// 支払い基礎日数ボタン名
	public static final String BTN_HOUSYU_GETU_GAKU				= "idButtonGetuGaku";		// 報酬月額ボタン名
	public static final String BTN_JYOUKEN_SELECT					= "idButtonJyouken";		// 入力条件ボタン名
	public static final String BTN_KAIGO_KUBUN					= "idButtonKaigoKubun";		// 介護区分ボタン名
	
	public static final String PRM_SYOUKYU_TUKI					= "prmSyoukyuTuki";			// 昇(降）給月プルダウン
//	public static final String PRM_CYOUSYU_KAISI					= "prmCyouSyuTuki";			// 徴収開始月プルダウン
	public static final String PRM_CKR_SANTEI_KISO				= "prmCkrSanteikiso";		// ラジオボタン「算定基礎」選択
	public static final String PRM_CKR_TUKIGAKU_HENKOU			= "prmCkrTukiGakuHenkou";	// ラジオボタン「月額変更」
	public static final String PRM_CKR_SHIHARAI_ZENGETU			= "prmCkrShiharaiZenGetu";	// ラジオボタン「前月暦日を使用」選択
	public static final String PRM_CKR_SHIHARAI_TOUGETU			= "prmCkrShiharaiTouGetu";	// ラジオボタン「当月暦日を使用」選択
	public static final String PRM_CKR_HOUSYU_ZENGETU				= "prmCkrHousyuZenGetu";	// ラジオボタン「前月データを集計」選択
	public static final String PRM_CKR_HOUSYU_TOUGETU				= "prmCkrHousyuTouGetu";	// ラジオボタン「当月データを集計」選択
	public static final String PRM_CKR_JYUNJYO_KCODE 				= "prmCkrJyunjyoKcode"; 	// ラジオボタン「社員順」選択
	public static final String PRM_CKR_JYUNJYO_BUSHO 				= "prmCkrJyunjyoBusho"; 	// ラジオボタン「所属順」選択
	public static final String PRM_CKR_JYUNJYO_KENPO 				= "prmCkrJyunjyoKenpo"; 	// ラジオボタン「健保順」選択
	public static final String PRM_CKR_JYUNJYO_KOUNEN				= "prmCkrJyunjyoKounen";	// ラジオボタン「厚年順」選択
	public static final String PRM_CKR_KAIGO_KUBUN_AUTO			= "prmCkrKaigoKubunAuto";	// ラジオボタン「対象社員の区分を自動にする」選択
	public static final String PRM_CKR_KAIGO_KUBUN_MNAL			= "prmCkrKaigoKubunMnal";	// ラジオボタン「対象社員の区分を手動にする」選択
	public static final String PRM_CKB_KAIGO_KUBUN_CHK			= "prmCkbKaigoKubunChk";	// チェックボックス「介護区分チェックを行う」選択
	
	
	// フィールド
//	private int	santeiNen				;			// 算定対象年
//	private int	santeiTuki				;			// 算定対象月

	public String	idButtonSyori			;			// 処理選択内容
	public String	idButtonKisoNisu		;			// 支払い基礎日数ボタン選択内容
	public String	idButtonGetuGaku		;			// 報酬月額ボタン選択内容
	public String	idButtonJyouken			;			// 入力条件ボタン選択内容
	public String	idButtonKaigoKubun		;			// 介護区分ボタン選択内容

	public String	prmCkbKaigoKubunChk		;			// 「介護区分チェックを行う」選択フラグ
	
	public String	prmSyoukyuTuki			;			// 昇(降）給月プルダウン選択内容
	public String	prmCyouSyuTuki			;			// 徴収開始月プルダウン選択内容
	
	public String	syoukyuTukiStr			;			// 昇(落)給月（和暦）
	public String	syoukyuTukiStr_ind		;			// 昇(落)給月テーブルINDEX文字
	public String	tekiyouNenGetu			;			// 適用年月（和暦）	
	public String	chousyuKaisiTuki		;			// 徴収開始月（和暦）
	public String	chousyuKaisiTuki_ind	;			// 徴収開始月テーブルINDEX文字
	
	public Date		syoukyuTuki_Date		;			// 昇（落）給月（Date型）
	public Date		tekiyouNenGetu_Date		;			// 適用年月（Date型）	
	public Date		chousyuKaisiTuki_Date	;			// 徴収開始月（Date型）

	// 条件取得用配列
	public String[][] arySanteiTuki;
	public String[][] arySanteiTukiKiso = {
			{ "4", "04月　適用年月:07月"},
			{ "5", "05月　適用年月:08月"},
			{ "6", "06月　適用年月:09月"},
			{ "7", "07月　適用年月:10月"},
			{ "8", "08月　適用年月:11月"},
			{ "9", "09月　適用年月:12月"},
			{"10", "10月　適用年月:01月"},
			{"11", "11月　適用年月:02月"},
			{"12", "12月　適用年月:03月"},
			{ "1", "01月　適用年月:04月"},
			{ "2", "02月　適用年月:05月"},
			{ "3", "03月　適用年月:06月"}};

	public String[][]	aryChyouSyuNenGetu;				//徴収年月（和暦）テーブル
	public String[][]	aryEra;							//和暦年号変換テーブル 
	public String[]		aryKcode;						//和暦年号変換テーブル 
	public	List<Employee>	listEmployee;				//人事情報リスト
	// 設定テーブル
	public List<MosPConfDto> listConf;
	

	/**
	 * コンストラクタ
	 */
	public InsuranceConfSetVo() {
		super();
		setRetUrl(RETURN_URL);
		setExtraJs(EXTRA_JS);
		setExtraCss(EXTRA_CSS);
		syoukyuTukiStr_ind	=	arySanteiTukiKiso[0][0];
		idButtonSyori		=	"";	// 処理選択内容取得
		idButtonKisoNisu	=	"";	// 支払い基礎日数ボタン選択内容取得
		idButtonGetuGaku	=	"";	// 報酬月額ボタン選択内容取得
		idButtonJyouken		=	"";	// 入力条件ボタン選択内容取得
		idButtonKaigoKubun	=	"";	// 介護区分ボタン選択内容取得
		prmCkbKaigoKubunChk	=	"";	//「介護区分チェックを行う」選択
	}

	/**
	 * フィールド初期化
	 * @throws MospException 
	 */
	public void initFields() throws MospException {
		Date	date_tmp;
		int		tmpYear;
		int		ThisYear = MospUtility.getYear(util.getSystemDate());	  
	
		// 本年の徴収月テーブル（7月〜10月）を設定
		aryChyouSyuNenGetu = new String[4][2];
		for(int i =0 ; i < 4; i++){
			tmpYear = (ThisYear * 10000) + (( 7 + i ) * 100) + 1;
			date_tmp = DatePart.convIntegerDateToDate( tmpYear );
			aryChyouSyuNenGetu[i][0] = String.valueOf( tmpYear );
			aryChyouSyuNenGetu[i][1] = getMonthString( listConf, aryEra, date_tmp);
		}
		chousyuKaisiTuki_ind = aryChyouSyuNenGetu[3][0];	//　徴収テーブルをディフォルト「10月」に設定
	}	
	
	
	/**
	 * パラメータ設定
	 * @param request リクエスト
	 */
	public void setParamsAll(HttpServletRequest request) {
		idButtonSyori			=	getRadioButtonParam(request.getParameter(BTN_SYORI_SELECT		));	// 処理選択内容取得
		idButtonKisoNisu		=	getRadioButtonParam(request.getParameter(BTN_SIHARAI_KISO_NISU	));	// 支払い基礎日数ボタン選択内容取得
		idButtonGetuGaku		=	getRadioButtonParam(request.getParameter(BTN_HOUSYU_GETU_GAKU	));	// 報酬月額ボタン選択内容取得
		idButtonJyouken			=	getRadioButtonParam(request.getParameter(BTN_JYOUKEN_SELECT		));	// 入力条件ボタン選択内容取得
		idButtonKaigoKubun		=	getRadioButtonParam(request.getParameter(BTN_KAIGO_KUBUN		));	// 介護区分ボタン選択内容取得
		prmCkbKaigoKubunChk		=	getCheckBoxParam(request.getParameter(PRM_CKB_KAIGO_KUBUN_CHK	));	//「介護区分チェックを行う」選択
		prmSyoukyuTuki			=	request.getParameter(PRM_SYOUKYU_TUKI);								// 昇(降）給月プルダウン
//		prmCyouSyuTuki			=	request.getParameter(PRM_CYOUSYU_KAISI);							// 昇(降）給月プルダウン
	}
	
	/**
	 * ラジオボタン未取得NULL対応
	 * @param value ラジオボタン選択パラメータ値
	 * @return 変換チェックボックスリクエストパラメータ値
	 */
	public String getRadioButtonParam(String value) {
		if (value == null) {
			return "";
		} else {
			return value;
		}
	}

	/**
	 * 和暦日付文字列取得(年月)
	 * @param list 設定マスタDTOリスト
	 * @param aryEra 和暦情報リスト
	 * @param date 日
	 * @return 日付年月文字列
	 * @throws MospException
	 */
	protected String getMonthString(List<MosPConfDto> list, String[][] aryEra, Date date) throws MospException {
		if (date == null || list == null) {
			return "";
		}
		String[] strDate = getJpImperialCal(list, date);
		strDate[0] = getCodeName(strDate[0], aryEra);
		for (int i = 1; i < strDate.length; i++) {
			strDate[i] = strDate[i].length() < 2 ? PayrollConst.SUPPRESS_DATE + strDate[i] : strDate[i];
		}
		return strDate[0] + strDate[1] + PayrollConst.NAM_YEAR +
				strDate[2] + PayrollConst.NAM_MONTH;
	}

	/**
	 * 日付文字列取得(和暦)
	 * @param list 和暦情報リスト
	 * @param date 日
	 * @return 日付文字列
	 * @throws MospException
	 */
	protected String getDateString(List<MosPConfDto> list, String[][] aryEra, Date date) throws MospException {
		if (date == null || list == null) {
			return "";
		}
		String[] strDate = getJpImperialCal(list, date);
		strDate[0] = getCodeName(strDate[0], aryEra);
		for (int i = 1; i < strDate.length; i++) {
			strDate[i] = strDate[i].length() < 2 ? PayrollConst.SUPPRESS_DATE + strDate[i] : strDate[i];
		}
		return strDate[0] + strDate[1] + PayrollConst.NAM_YEAR +
				strDate[2] + PayrollConst.NAM_MONTH + strDate[3] + PayrollConst.NAM_DAY;
	}
	
	public void setSyoukyuTuki( Date set_Date ){ this.syoukyuTuki_Date = set_Date  ; } // Date型昇（降）給年月日設定
	public void setSyoukyuTukiJp( String set_Date ){
		if(set_Date.length() > 3 ){
			this.syoukyuTukiStr = set_Date.substring( 0, set_Date.length() - 3 );
		}else{
			this.syoukyuTukiStr = "";
		}
	}	

	public void setTekiyouNenGetu( Date set_Date ) throws MospException{						// 適用年月の設定 
		this.tekiyouNenGetu = getMonthString(listConf, aryEra, set_Date);
		this.tekiyouNenGetu_Date = set_Date;
	}

	public void setChousyuKaisiTukiStr( Date set_Date ) throws MospException{				 	// 徴収年月の設定
		this.chousyuKaisiTuki = getMonthString(listConf, aryEra, set_Date);
		this.chousyuKaisiTuki_Date = set_Date;
	}
	
	public String getIdButtonSyori()		{ return this.idButtonSyori		;	}	// 処理選択内容取得
	public String getIdButtonKisoNisu()		{ return this.idButtonKisoNisu		;	}	// 支払い基礎日数ボタン選択内容取得
	public String getIdButtonGetuGaku()		{ return this.idButtonGetuGaku		;	}	// 報酬月額ボタン選択内容取得
	public String getIdButtonJyouken()		{ return this.idButtonJyouken		;	}	// 入力条件ボタン選択内容取得
	public String getIdButtonKaigoKubun()	{ return this.idButtonKaigoKubun	;	}	// 介護区分ボタン選択内容取得
	public String getPrmCkbKaigoKubunChk()	{ return this.prmCkbKaigoKubunChk	;	}	//「介護区分チェックを行う」選択
	public String getSyoukyuTukiStr()		{ return this.syoukyuTukiStr		;	}	// 昇(落)給月取得（和暦）
	public String getSyoukyuTukiStrIndx()	{ return this.syoukyuTukiStr_ind	; 	}	// 昇(落)給月テーブルインデックス文字取得  
	public String getChousyuKaisiTukiStr()	{ return this.chousyuKaisiTuki		; 	}	// 徴収開始年月取得
	public String getChousyuKaisiTukiStrIndx(){ return this.chousyuKaisiTuki_ind; }	// 徴収開始年月テーブル文字列所得
	public String getTekiyouNenGetu()		{ return this.tekiyouNenGetu; }
	
}