package jp.mosp.payroll.bonus.vo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import jp.mosp.payroll.bonus.action.BonusListAction;
import jp.mosp.payroll.bonus.dto.BonusListDto;
import jp.mosp.payroll.base.PayrollVo;
import jp.mosp.payroll.bonus.BonusConst;
import jp.mosp.common.common.MospConst;
import jp.mosp.common.common.MospException;

public class BonusListVo  extends PayrollVo {

	private static final long serialVersionUID = 3752144327980358655L;
	
	//画面サブタイトル
	public final String SUB_TITLE = "賞与データ一覧";
	public final String CMD_MENU_PAYROLL = "P1910";
	
	// フィールド
	private int      pltYear;
	private int      pltMonth;
	private int      pltDay;
	private String   txtKCode;
	private String   txtKKana;
	private String   pltOffice;
	private String   pltSection;
	private String   pltPosition;
	private String   lblTargetMonth;

	// フィールド(一覧)
	private String[] aryKCode;
	private String[] aryKName;
	private String[] aryOffice;
	private String[] arySection;
	private String[] aryPosition;
	private String[] aryPayTotal;

	// プルダウン
	private String[][] pitYear ;
	private String[][] pitMonth;
	private String[][] pitDay;
	private String[][] pitOffice;
	private String[][] pitSection ;
	private String[][] pitPosition;

	/**
	 * パラメータ名(賞与支給年)。
	 */
	public static final String PRM_PLT_YEAR = "pltYear";

	/**
	 * パラメータ名(賞与支給月)。
	 */
	public static final String PRM_PLT_MONTH = "pltMonth";

	/**
	 * パラメータ名(賞与支給日)。
	 */
	public static final String PRM_PLT_DAY = "pltDay";

	/**
	 * パラメータ名(社員コード)。
	 */
	public static final String PRM_TXT_K_CODE = "txtKCode";

	/**
	 * パラメータ名(社員カナ)。
	 */
	public static final String PRM_TXT_K_KANA = "txtKKana";

	/**
	 * パラメータ名(事業所)。
	 */
	public static final String PRM_PLT_OFFICE = "pltOffice";

	/**
	 * パラメータ名(所属)。
	 */
	public static final String PRM_PLT_SECTION = "pltSection";

	/**
	 * パラメータ名(役職)。
	 */
	public static final String PRM_PLT_POSITION = "pltPosition";

	/**
	 * {@link PayrollVo#PayrollVo()}を実行する。
	 */
	public BonusListVo() {
		super();
		aryKCode	= new String[0];
		aryKName	= new String[0];
		aryOffice	= new String[0];
		arySection	= new String[0];
		aryPosition	= new String[0];
		aryPayTotal	= new String[0];
		setPageCommand(BonusListAction.CMD_PAGE);
		setSortKey("1");
	}

	/* (non-Javadoc)
	 * @see jp.mosp.payroll.base.PayrollVo#setSubTitle()
	 */
	@Override
	protected void setSubTitle() {
		super.setSubTitle();
		subTitle = BonusConst.TTL_BONUS_LIST;
	}


	/**
	 * サブタイトル取得
	 * @param subTitle サブタイトル
	 * @param cmdMenu  メニューコマンド
	 * @return サブタイトルHTML文字列
	 */
	public String getSubTitle(String subTitle, String cmdMenu) {
		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("P2001");
		sb.append("')\">賞与計算へ</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();
	}
	
	/**
	 * リクエストからパラメータを取得、設定する。
	 * @param request リクエスト
	 */
	public void setParams(HttpServletRequest request) throws MospException {
		pltYear     = getIntParam(request.getParameter(PRM_PLT_YEAR));
		pltMonth    = getIntParam(request.getParameter(PRM_PLT_MONTH));
		pltDay      = getIntParam(request.getParameter(PRM_PLT_DAY));
		txtKCode    = request.getParameter(PRM_TXT_K_CODE);
		txtKKana    = request.getParameter(PRM_TXT_K_KANA);
		pltOffice   = request.getParameter(PRM_PLT_OFFICE);
		pltSection  = request.getParameter(PRM_PLT_SECTION);
		pltPosition = request.getParameter(PRM_PLT_POSITION);
	}
	
	/**
	 * フィールドを設定する。<br>
	 * @param list DTOリスト
	 */
	public void setFields(List<BonusListDto> list) {
		// データ総数の取得
		count = list.size();
		// 配列の初期化
		aryKCode	= new String[count];
		aryKName	= new String[count];
		aryOffice	= new String[count];
		arySection	= new String[count];
		aryPosition	= new String[count];
		aryPayTotal	= new String[count];
		// データの設定
		for (int i = 0; i < list.size(); i++) {
			BonusListDto dto = list.get(i);
			aryKCode	[i] = dto.getKCode();
			aryKName	[i] = dto.getSimei();
			aryOffice	[i] = dto.getOfficeName();
			arySection	[i] = dto.getSectionName();
			aryPosition	[i] = dto.getPositionName();
			aryPayTotal	[i] = String.valueOf(dto.getPaymentTotal());
		}
	}

	/**
	 * 賞与支給年を取得する。
	 * @return 賞与支給年
	 */
	public int getPltYear() {
		return pltYear;
	}

	/**
	 * 賞与支給年を設定する。
	 * @param pltYear 設定する賞与支給年
	 */
	public void setPltYear(int pltYear) {
		this.pltYear = pltYear;
	}

	/**
	 * 賞与支給月を取得する。
	 * @return 賞与支給月
	 */
	public int getPltMonth() {
		return pltMonth;
	}
	
	/**
	 * 賞与支給月を設定する。
	 * @param pltMonth 設定する賞与支給月
	 */
	public void setPltMonth(int pltMonth) {
		this.pltMonth = pltMonth;
	}

	/**
	 * 賞与支給日を取得する。
	 * @return 賞与支給日
	 */
	public int getPltDay() {
		return pltDay;
	}
	
	/**
	 * 賞与支給日を設定する。
	 * @param pltMonth 設定する賞与支給日
	 */
	public void setPltDay(int pltDay) {
		this.pltDay = pltDay;
	}

	/**
	 * 年プルダウンアイテムを取得する。
	 * @return 年プルダウンアイテム
	 */
	public String[][] getPitYear() {
		return getAryField(pitYear);
	}
	
	/**
	 * 年プルダウンアイテムを設定する。
	 * @param pitYear 設定する年プルダウンアイテム
	 */
	public void setPitYear(String[][] pitYear) {
		this.pitYear = getAryField(pitYear);
	}

	/**
	 * 月プルダウンアイテムを取得する。
	 * @return 月プルダウンアイテム
	 */
	public String[][] getPitMonth() {
		return getAryField(pitMonth);
	}
	
	/**
	 * 月プルダウンアイテムを設定する。
	 * @param pitMonth 設定する月プルダウンアイテム
	 */
	public void setPitMonth(String[][] pitMonth) {
		this.pitMonth = getAryField(pitMonth);
	}

	/**
	 * 日プルダウンアイテムを取得する。
	 * @return 月プルダウンアイテム
	 */
	public String[][] getPitDay() {
		return getAryField(pitDay);
	}
	
	/**
	 * 日プルダウンアイテムを設定する。
	 * @param pitMonth 設定する月プルダウンアイテム
	 */
	public void setPitDay(String[][] pitDay) {
		this.pitDay = getAryField(pitDay);
	}

	/**
	 * 事業所プルダウンアイテムを取得する。
	 * @return 事業所プルダウンアイテム
	 */
	public String[][] getPitOffice() {
		return getAryField(pitOffice);
	}
	
	/**
	 * 事業所プルダウンアイテムを設定する。
	 * @param pitOffice 設定する事業所プルダウンアイテム
	 */
	public void setPitOffice(String[][] pitOffice) {
		this.pitOffice = getAryField(pitOffice);
	}

	/**
	 * 役職プルダウンアイテムを取得する。
	 * @return 役職プルダウンアイテム
	 */
	public String[][] getPitPosition() {
		return getAryField(pitPosition);
	}

	/**
	 * 役職プルダウンアイテムを設定する。
	 * @param pitPosition 設定する役職プルダウンアイテム
	 */
	public void setPitPosition(String[][] pitPosition) {
		this.pitPosition = getAryField(pitPosition);
	}

	/**
	 * 所属プルダウンアイテムを取得する。
	 * @return 所属プルダウンアイテム
	 */
	public String[][] getPitSection() {
		return getAryField(pitSection);
	}

	/**
	 * 所属プルダウンアイテムを設定する。
	 * @param pitSection 設定する所属プルダウンアイテム
	 */
	public void setPitSection(String[][] pitSection) {
		this.pitSection = getAryField(pitSection);
	}
	
	/**
	 * 事業所コードを取得する。
	 * @return 事業所コード
	 */
	public String getPltOffice() {
		return pltOffice;
	}
	
	/**
	 * 事業所コードを設定する。
	 * @param pltOffice 設定する事業所コード
	 */
	public void setPltOffice(String pltOffice) {
		this.pltOffice = pltOffice;
	}

	/**
	 * 役職コードを取得する。
	 * @return 役職コード
	 */
	public String getPltPosition() {
		return pltPosition;
	}

	/**
	 * 役職コードを設定する。
	 * @param pltPosition 設定する役職コード
	 */
	public void setPltPosition(String pltPosition) {
		this.pltPosition = pltPosition;
	}

	/**
	 * 所属コードを取得する。
	 * @return 所属コード
	 */
	public String getPltSection() {
		return pltSection;
	}

	/**
	 * 所属コードを設定する。
	 * @param pltSection 設定する所属コード
	 */
	public void setPltSection(String pltSection) {
		this.pltSection = pltSection;
	}

	/**
	 * 社員コードを取得する。
	 * @return 社員コード
	 */
	public String getTxtKCode() {
		return txtKCode;
	}

	/**
	 * 社員コードを取得する(エスケープ)。
	 * @return 社員コード
	 */
	public String getEscTxtKCode() {
		return escapeHTML(txtKCode);
	}
	
	/**
	 * 社員コードを設定する。
	 * @param txtKCode 設定する社員コード
	 */
	public void setTxtKCode(String txtKCode) {
		this.txtKCode = txtKCode;
	}

	/**
	 * 社員カナを取得する。
	 * @return 社員カナ
	 */
	public String getTxtKKana() {
		return txtKKana;
	}

	/**
	 * 社員カナを取得する(エスケープ)。
	 * @return 社員カナ
	 */
	public String getEscTxtKKana() {
		return escapeHTML(txtKKana);
	}

	/**
	 * 社員カナを設定する。
	 * @param txtKKana 設定する社員カナ
	 */
	public void setTxtKKana(String txtKKana) {
		this.txtKKana = txtKKana;
	}

	/**
	 * 対象年月を取得する。
	 * @return 対象年月
	 */
	public String getLblTargetMonth() {
		return lblTargetMonth;
	}

	/**
	 * 対象年月を設定する。
	 * @param lblTargetMonth 設定する対象年月
	 */
	public void setLblTargetMonth(String lblTargetMonth) {
		this.lblTargetMonth = lblTargetMonth;
	}

	/**
	 * 社員コード(一覧)を取得する。
	 * @param idx インデックス
	 * @return 社員コード
	 */
	public String getAryKCode(int idx) {
		return escapeHTML(aryKCode[idx]);
	}

	/**
	 * 社員名(一覧)を取得する。
	 * @param idx インデックス
	 * @return 社員名
	 */
	public String getAryKName(int idx) {
		return escapeHTML(aryKName[idx]);
	}

	/**
	 * 事業所(一覧)を取得する。
	 * @param idx インデックス
	 * @return 事業所
	 */
	public String getAryOffice(int idx) {
		return escapeHTML(aryOffice[idx]);
	}

	/**
	 * 役職(一覧)を取得する。
	 * @param idx インデックス
	 * @return 役職
	 */
	public String getAryPosition(int idx) {
		return escapeHTML(aryPosition[idx]);
	}

	/**
	 * 所属(一覧)を取得する。
	 * @param idx インデックス
	 * @return 所属
	 */
	public String getArySection(int idx) {
		return escapeHTML(arySection[idx]);
	}
	
	/**
	 * 差引支給額(一覧)を取得する。
	 * @param idx インデックス
	 * @return 差引支給額
	 */
	public String getAryPayTotal(int idx) {
		return escapeHTML(aryPayTotal[idx]);
	}

}
