package jp.mosp.payroll.payment.vo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import jp.mosp.payroll.base.PayrollVo;
import jp.mosp.payroll.dto.PaymentListDto;
import jp.mosp.payroll.payment.action.PaymentListAction;

public class PaymentListVo extends PayrollVo {
	
	private static final long	serialVersionUID	= -6810707735163877932L;
	
	// フィールド
	private int					pltYear;
	private int					pltMonth;
	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[][]			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_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 PaymentListVo() {
		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(PaymentListAction.CMD_PAGE);
		setSortKey("1");
	}
	
	/* (non-Javadoc)
	 * @see jp.mosp.payroll.base.PayrollVo#setSubTitle()
	 */
	@Override
	protected void setSubTitle() {
		super.setSubTitle();
		subTitle = getName("P_PAYROLL") + getName("C_DATA") + getName("C_LIST");
		addAryMenu("P1001", getName("P_PAYMENT") + getName("P_CALCULATE") + getName("C_MENU") + getName("C_TO"));
	}
	
	/**
	 * リクエストからパラメータを取得、設定する。
	 * @param request リクエスト
	 */
	public void setParams(HttpServletRequest request) {
		pltYear = getIntParam(request.getParameter(PRM_PLT_YEAR));
		pltMonth = getIntParam(request.getParameter(PRM_PLT_MONTH));
		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<PaymentListDto> 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++) {
			PaymentListDto 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 getPltMonth() {
		return pltMonth;
	}
	
	/**
	 * 給与計算開始月を設定する。
	 * @param pltMonth 設定する給与計算開始月
	 */
	public void setPltMonth(int pltMonth) {
		this.pltMonth = pltMonth;
	}
	
	/**
	 * 給与計算開始年を取得する。
	 * @return 給与計算開始年
	 */
	public int getPltYear() {
		return pltYear;
	}
	
	/**
	 * 給与計算開始年を設定する。
	 * @param pltYear 設定する給与計算開始年
	 */
	public void setPltYear(int pltYear) {
		this.pltYear = pltYear;
	}
	
	/**
	 * 月プルダウンアイテムを取得する。
	 * @return 月プルダウンアイテム
	 */
	public String[][] getPitMonth() {
		return getAryField(pitMonth);
	}
	
	/**
	 * 月プルダウンアイテムを設定する。
	 * @param pitMonth 設定する月プルダウンアイテム
	 */
	public void setPitMonth(String[][] pitMonth) {
		this.pitMonth = getAryField(pitMonth);
	}
	
	/**
	 * 年プルダウンアイテムを取得する。
	 * @return 年プルダウンアイテム
	 */
	public String[][] getPitYear() {
		return getAryField(pitYear);
	}
	
	/**
	 * 年プルダウンアイテムを設定する。
	 * @param pitYear 設定する年プルダウンアイテム
	 */
	public void setPitYear(String[][] pitYear) {
		this.pitYear = getAryField(pitYear);
	}
	
	/**
	 * 事業所プルダウンアイテムを取得する。
	 * @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]);
	}
	
}
