package jp.mosp.payroll.common.vo;

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

import javax.servlet.http.HttpServletRequest;

import jp.mosp.common.common.MospConst;
import jp.mosp.common.common.MospException;
import jp.mosp.common.dto.MosPConfDto;
import jp.mosp.payroll.base.PayrollConst;
import jp.mosp.payroll.base.PayrollVo;

public class FirmBankingOutputVo extends PayrollVo {
	
	private static final long	serialVersionUID		= 3281945937471826907L;
	
	// URL、CSS
	private static final String	RETURN_URL				= "/jsp/payroll/common/firmBankingOutput.jsp";
	private static final String	EXTRA_JS				= "/pub/payroll/common/js/firmBankingOutput.js";
	private static final String	EXTRA_CSS				= "/pub/payroll/common/css/firmBankingOutput.css";
	
	// 画面サブタイトル
	public final String			SUB_TITLE				= PayrollConst.TTL_FIRM_BANKING;
	
	public static final String	PRM_PLT_OUTPUT_DETAIL	= "pltOutputDetail";								// 出力内容
	public static final String	PRM_PLT_SPECIFY_YEAR	= "pltSpecifyYear";								// 指定年月(年)
	public static final String	PRM_PLT_SPECIFY_MONTH	= "pltSpecifyMonth";								// 指定年月(月)
	public static final String	PRM_PLT_SPECIFY_DAY		= "pltSpecifyDay";									// 指定年月(日)
	public static final String	PRM_PLT_CODE_TYPE		= "pltCodeType";									// コード区分 
	public static final String	PRM_PLT_RECORD_TYPE		= "pltRecordType";									// レコード区分区切
	public static final String	PRM_PLT_END_RECORD		= "pltEndRecord";									// エンドレコード区分区切
	public static final String	PRM_PLT_DEADLINE_YEAR	= "pltDeadlineYear";								// 納期限(年)
	public static final String	PRM_PLT_DEADLINE_MONTH	= "pltDeadlineMonth";								// 納期限(月)
	public static final String	PRM_PLT_DEADLINE_DAY	= "pltDeadlineDay";								// 納期限(日)
	public static final String	PRM_PLT_COBANK_CODE		= "pltCobankCode";									// 会社銀行コード
																											
	public static final String	PRM_TXT_COMPANY_CODE	= "txtCompanyCode";								// 会社コード
	public static final String	PRM_TXT_RECORD_LENGTH	= "txtRecordLength";								// レコード長
	public static final String	PRM_TXT_TYPE_CODE		= "txtTypeCode";									// 種別コード
	public static final String	PRM_TXT_CO_ADDRESS		= "txtCoAddress";									// 会社住所
	public static final String	PRM_TXT_COMPANY_NAME	= "txtCompanyName";								// 会社名
																											
	public final String			CMD_MENU_PAYROLL		= "P1910";
	
	// 定数
	public static final int		MODE_SHOW				= 0;
	public static final int		MODE_SELECT				= 1;
	
	// モード(0：表示、1：検索)
	private int					mode;
	
	// フィールド
	private String				pltOutputDetail;
	private String				pltSpecifyYear;
	private String				pltSpecifyMonth;
	private String				pltSpecifyDay;
	private String				pltCodeType;
	private String				pltRecordType;
	private String				pltEndRecord;
	private String				pltDeadlineYear;
	private String				pltDeadlineMonth;
	private String				pltDeadlineDay;
	private String				pltCoBankCode;
	
	private String				txtCompanyCode;
	private String				txtRecordLength;
	private String				txtTypeCode;
	private String				txtCoAddress;
	private String				txtCompanyName;
	
	private String				key1;
	
	// フィールド名及び制限
	public static final String	NAM_OUTPUT_DETAIL		= PayrollConst.NAM_OUTPUT_DETAIL;
	public static final String	NAM_SPECIFY_MONTH		= PayrollConst.NAM_SPECIFY_MONTH;
	public static final String	NAM_PAYDAY				= PayrollConst.NAM_PAYDAY;
	public static final String	NAM_CO_BANK_CODE		= PayrollConst.NAM_CO_BANK_CODE;
	public static final String	NAM_COMPANY_CODE		= PayrollConst.NAM_COMPANY_CODE;
	public static final String	NAM_RECORD_LENGTH		= PayrollConst.NAM_RECORD_LENGTH;
	public static final String	NAM_TYPE_CODE			= PayrollConst.NAM_TYPE_CODE;
	public static final String	NAM_CODE_TYPE			= PayrollConst.NAM_CODE_TYPE;
	public static final String	NAM_RECORD_TYPE			= PayrollConst.NAM_RECORD_TYPE;
	public static final String	NAM_END_RECORD			= PayrollConst.NAM_END_RECORD;
	public static final String	NAM_DEADLINE_DATE		= PayrollConst.NAM_DEADLINE_DATE;
	public static final String	NAM_CO_ADDRESS			= PayrollConst.NAM_CO_ADDRESS;
	public static final String	NAM_COMPANY_NAME		= PayrollConst.NAM_COMPANY_NAME;
	
	public static final int		LEN_FB_COMPANY_CODE		= PayrollConst.LEN_FB_COMPANY_CODE;
	public static final int		LEN_FB_RECORD_LENGTH	= PayrollConst.LEN_FB_RECORD_LENGTH;
	public static final int		LEN_FB_TYPE_CODE		= PayrollConst.LEN_FB_TYPE_CODE;
	
	public static final int		LEN_FB_CO_ADDRESS		= PayrollConst.LEN_FB_CO_ADDRESS;
	public static final int		LEN_FB_COMPANY_NAME		= PayrollConst.LEN_FB_COMPANY_NAME;
	
	// プルダウンリスト
	public String[][]			aryPltOutputDetail;
	public String[][]			aryPltSpecifyYear;
	public String[][]			aryPltSpecifyMonth;
	public String[][]			aryPltSpecifyDay;
	public String[][]			aryPltCodeType;
	public String[][]			aryPltRecordType;
	public String[][]			aryPltEndRecord;
	public String[][]			aryPltDeadlineYear;
	public String[][]			aryPltDeadlineMonth;
	public String[][]			aryPltDeadlineDay;
	public String[][]			aryPltCoBankCode;
	
	public List<MosPConfDto>	listConf;
	
	//	 フィールド
	Date						calcDate;
	

	// パラメータ名
	
	/**
	 * コンストラクタ
	 */
	public FirmBankingOutputVo() {
		super();
		setRetUrl(RETURN_URL);
		setExtraJs(EXTRA_JS);
		setExtraCss(EXTRA_CSS);
	}
	
	/**
	 * パラメータ設定
	 */
	public void setParams(HttpServletRequest request) {
		pltOutputDetail = request.getParameter(PRM_PLT_OUTPUT_DETAIL);
		pltSpecifyYear = request.getParameter(PRM_PLT_SPECIFY_YEAR);
		pltSpecifyMonth = request.getParameter(PRM_PLT_SPECIFY_MONTH);
		pltSpecifyDay = request.getParameter(PRM_PLT_SPECIFY_DAY);
		pltCodeType = request.getParameter(PRM_PLT_CODE_TYPE);
		pltRecordType = request.getParameter(PRM_PLT_RECORD_TYPE);
		pltEndRecord = request.getParameter(PRM_PLT_END_RECORD);
		pltDeadlineYear = request.getParameter(PRM_PLT_DEADLINE_YEAR);
		pltDeadlineMonth = request.getParameter(PRM_PLT_DEADLINE_MONTH);
		pltDeadlineDay = request.getParameter(PRM_PLT_DEADLINE_DAY);
		pltCoBankCode = request.getParameter(PRM_PLT_COBANK_CODE);
		
		txtCompanyCode = request.getParameter(PRM_TXT_COMPANY_CODE);
		txtRecordLength = request.getParameter(PRM_TXT_RECORD_LENGTH);
		txtTypeCode = request.getParameter(PRM_TXT_TYPE_CODE);
		txtCoAddress = request.getParameter(PRM_TXT_CO_ADDRESS);
		txtCompanyName = request.getParameter(PRM_TXT_COMPANY_NAME);
	}
	
	/**
	 * フィールドの妥当性確認
	 * @throws MospException
	 */
	public void validate() throws MospException {
		// 妥当性確認開始時処理
		startValidation();
		// 必須確認
		// カナ確認
		// 種別コード必須確認
		checkRequired(txtTypeCode, NAM_TYPE_CODE, PRM_TXT_TYPE_CODE);
		// 会社コード必須確認
		checkRequired(txtCompanyCode, NAM_COMPANY_CODE, PRM_TXT_COMPANY_CODE);
		// 会社住所必須確認
		checkRequired(txtCoAddress, NAM_CO_ADDRESS, PRM_TXT_CO_ADDRESS);
		// 会社カナ必須確認
		checkRequired(txtCompanyName, NAM_COMPANY_NAME, PRM_TXT_COMPANY_NAME);
		// レコード長必須確認
		checkRequired(txtRecordLength, NAM_RECORD_LENGTH, PRM_TXT_RECORD_LENGTH);
		// 種別コード数値確認
		checkNumeric(txtTypeCode, NAM_TYPE_CODE, PRM_TXT_TYPE_CODE);
		// 会社コード数値確認
		checkNumeric(txtCompanyCode, NAM_COMPANY_CODE, PRM_TXT_COMPANY_CODE);
		// レコード長数値確認
		checkNumeric(txtRecordLength, NAM_RECORD_LENGTH, PRM_TXT_RECORD_LENGTH);
		// 妥当性確認終了時処理
		endValidation();
	}
	
	/**
	 * 計算年月を取得する。
	 * @return 計算年月
	 */
	public Date getCalcDate() {
		return getDateField(calcDate);
	}
	
	/**
	 * 計算年月を設定する。
	 * @param calcDate 設定する計算年月
	 */
	public void setCalcDate(Date calcDate) {
		this.calcDate = getDateField(calcDate);
	}
	
	/**
	 * サブタイトル取得
	 * @param subTitle サブタイトル
	 * @param cmdMenu  メニューコマンド
	 * @return サブタイトルHTML文字列
	 */
	public String getSubTitle(String subTitle, String cmdMenu) {
		String buttonName = "給与計算メニューへ";
		String cmd = "P1001";
		if (getFirmBankOutputType().equals("1")) {
			buttonName = "賞与計算へ";
			cmd = "P2001";
		}
		StringBuffer sb = new StringBuffer();
		sb.append("<div class=\"Header\">");
		sb.append("<div class=\"MenuButtonBar\">");
		sb.append("<button type=\"button\" ");
		sb.append("onclick=\"doSubmit(document.form, '");
		sb.append(cmd);
		sb.append("')\">" + buttonName + "</button>");
		sb.append("<button type=\"button\" ");
		sb.append("onclick=\"doSubmit(document.form, '");
		sb.append(cmdMenu);
		sb.append("')\">メニューへ</button>");
		sb.append("<button type=\"button\" id=\"btnLogout\" ");
		sb.append("onclick=\"doSubmit(document.form, '");
		sb.append(MospConst.CMD_LOGOUT);
		sb.append("')\">ログアウト</button>");
		sb.append("</div>");
		sb.append("<div class=\"SubTitleBar\">");
		sb.append(subTitle);
		sb.append("</div>");
		sb.append("</div>");
		return sb.toString();
	}
	
	/**
	 * JavaScript設定
	 * @param cls 情報取得クラス
	 * @throws IllegalAccessException
	 */
	@Override
	public String getDirectJs(Class cls) throws IllegalAccessException {
		StringBuffer sb = new StringBuffer();
		sb.append(super.getDirectJs(cls));
		sb.append("var MODE = ");
		sb.append(mode);
		sb.append(";");
		return sb.toString();
	}
	
	// アクセサメソッド
	public String getPltOutputDetail() {
		return pltOutputDetail;
	}
	
	public String getPltSpecifyYear() {
		return pltSpecifyYear;
	}
	
	public String getPltSpecifyMonth() {
		return pltSpecifyMonth;
	}
	
	public String getPltSpecifyDay() {
		return pltSpecifyDay;
	}
	
	public String getPltCodeType() {
		return pltCodeType;
	}
	
	public String getPltRecordType() {
		return pltRecordType;
	}
	
	public String getPltEndRecord() {
		return pltEndRecord;
	}
	
	public String getPltDeadlineYear() {
		return pltDeadlineYear;
	}
	
	public String getPltDeadlineMonth() {
		return pltDeadlineMonth;
	}
	
	public String getPltDeadlineDay() {
		return pltDeadlineDay;
	}
	
	public String getPltCoBankCode() {
		return pltCoBankCode;
	}
	
	public String getTxtCompanyCode() {
		return txtCompanyCode;
	}
	
	public String getTxtRecordLength() {
		return txtRecordLength;
	}
	
	public String getTxtTypeCode() {
		return txtTypeCode;
	}
	
	public String getTxtCoAddress() {
		return txtCoAddress;
	}
	
	public String getTxtCompanyName() {
		return txtCompanyName;
	}
	
	public String getEscTxtCompanyCode() {
		return escapeHTML(txtCompanyCode);
	}
	
	public String getEscTxtRecordLength() {
		return escapeHTML(txtRecordLength);
	}
	
	public String getEscTxtTypeCode() {
		return escapeHTML(txtTypeCode);
	}
	
	public String getEscTxtCoAddress() {
		return escapeHTML(txtCoAddress);
	}
	
	public String getEscTxtCompanyName() {
		return escapeHTML(txtCompanyName);
	}
	
	public String getFirmBankOutputType() {
		return key1;
	}
	
	public void setPltOutputDetail(String pltOutputDetail) {
		this.pltOutputDetail = pltOutputDetail;
	}
	
	public void setPltSpecifyYear(String pltSpecifyYear) {
		this.pltSpecifyYear = pltSpecifyYear;
	}
	
	public void setPltSpecifyMonth(String pltSpecifyMonth) {
		this.pltSpecifyMonth = pltSpecifyMonth;
	}
	
	public void setPltSpecifyDay(String pltSpecifyDay) {
		this.pltSpecifyDay = pltSpecifyDay;
	}
	
	public void setPltCodeType(String pltCodeType) {
		this.pltCodeType = pltCodeType;
	}
	
	public void setPltRecordType(String pltRecordType) {
		this.pltRecordType = pltRecordType;
	}
	
	public void setPltEndRecord(String pltEndRecord) {
		this.pltEndRecord = pltEndRecord;
	}
	
	public void setPltDeadlineYear(String pltDeadlineYear) {
		this.pltDeadlineYear = pltDeadlineYear;
	}
	
	public void setPltDeadlineMonth(String pltDeadlineMonth) {
		this.pltDeadlineMonth = pltDeadlineMonth;
	}
	
	public void setPltDeadlineDay(String pltDeadlineDay) {
		this.pltDeadlineDay = pltDeadlineDay;
	}
	
	public void setPltCoBankCode(String pltCoBankCode) {
		this.pltCoBankCode = pltCoBankCode;
	}
	
	public void setTxtCompanyCode(String txtCompanyCode) {
		this.txtCompanyCode = txtCompanyCode;
	}
	
	public void setTxtRecordLength(String txtRecordLength) {
		this.txtRecordLength = txtRecordLength;
	}
	
	public void setTxtTypeCode(String txtTypeCode) {
		this.txtTypeCode = txtTypeCode;
	}
	
	public void setTxtCoAddress(String txtCoAddress) {
		this.txtCoAddress = txtCoAddress;
	}
	
	public void setTxtCompanyName(String txtCompanyName) {
		this.txtCompanyName = txtCompanyName;
	}
	
	public void setFirmBankOutputType(String key1) {
		this.key1 = key1;
	}
	
	public void setMode(int mode) {
		this.mode = mode;
	}
	
	public int getMode() {
		return mode;
	}
	
}
