package jp.mosp.payroll.common.vo;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import jp.mosp.common.common.MospUtility;
import jp.mosp.payroll.base.PayrollConst;
import jp.mosp.payroll.base.PayrollVo;
import jp.mosp.payroll.bonus.dto.PhBounsDto;
import jp.mosp.payroll.common.action.ReferSlipAction;
import jp.mosp.payroll.dto.PhPaymentDto;

/**
 * 給賞与明細参照画面における情報を扱う。<br><br>
 */
public class ReferSlipVo extends PayrollVo {
	
	private static final long	serialVersionUID	= 7848063443227608842L;
	
	// フィールド
	private int					pltYear;
	private int					pltType;
	
	private String				hidKCode;
	private String				hidCmd;
	
	// フィールド(一覧)
	private String[]			aryType;
	private String[]			aryDate;
	private String[]			aryAllowance;
	private String[]			aryDeduction;
	private String[]			aryTotal;
	private String[]			aryHidDate;
	
	// プルダウン
	private String[][]			pitYear;
	private String[][]			pitType				= { { String.valueOf(PayrollConst.CALC_PAYMENT), "" },
		{ String.valueOf(PayrollConst.CALC_BONUS), "" } };
	
	/**
	 * パラメータ名(支給年)。
	 */
	public static final String	PRM_PLT_YEAR		= "pltYear";
	
	/**
	 * パラメータ名(給賞与区分)。
	 */
	public static final String	PRM_PLT_TYPE		= "pltType";
	

	/**
	 * {@link PayrollVo#PayrollVo()}を実行する。
	 */
	public ReferSlipVo() {
		super();
		aryType = new String[0];
		aryDate = new String[0];
		aryAllowance = new String[0];
		aryDeduction = new String[0];
		aryTotal = new String[0];
		aryHidDate = new String[0];
		setPageCommand(ReferSlipAction.CMD_PAGE);
		setSortKey("1");
	}
	
	/* (non-Javadoc)
	 * @see jp.mosp.payroll.base.PayrollVo#setSubTitle()
	 */
	@Override
	protected void setSubTitle() {
		super.setSubTitle();
		subTitle = getName("P_PAY_BON") + getName("P_DETAIL");
		aryMenu = new String[1][2];
		aryMenu[0][0] = "K1910";
		aryMenu[0][1] = getName("C_MENU") + getName("C_TO");
		
	}
	
	/**
	 * 項目名称を設定する。
	 */
	@Override
	protected void setFieldsName() {
		super.setFieldsName();
		pitType[0][1] = getName("P_PAYMENT");
		pitType[1][1] = getName("P_BONUS");
	}
	
	/**
	 * リクエストからパラメータを取得、設定する。
	 * @param request リクエスト
	 */
	public void setParams(HttpServletRequest request) {
		pltYear = getIntParam(request.getParameter(PRM_PLT_YEAR));
		pltType = getIntParam(request.getParameter(PRM_PLT_TYPE));
	}
	
	/**
	 * フィールドを設定する。<br>
	 * @param list DTOリスト
	 */
	public void setFields(List<?> list) {
		// データ総数の取得
		count = list.size();
		// 配列の初期化
		aryType = new String[count];
		aryDate = new String[count];
		aryAllowance = new String[count];
		aryDeduction = new String[count];
		aryTotal = new String[count];
		aryHidDate = new String[count];
		// データの設定
		for (int i = 0; i < list.size(); i++) {
			Object obj = list.get(i);
			if (obj instanceof PhPaymentDto) {
				PhPaymentDto dto = (PhPaymentDto)obj;
				aryType[i] = getCodeName(String.valueOf(pltType), pitType);
				aryDate[i] = MospUtility.getDateString(dto.getCalcMonth(), PayrollConst.FORMAT_DATE_JP);
				aryAllowance[i] = String.valueOf(dto.getAllowanceTotal());
				aryDeduction[i] = String.valueOf(dto.getDeductionTotal());
				aryTotal[i] = String.valueOf(dto.getPaymentTotal());
				aryHidDate[i] = MospUtility.getDateString(dto.getCalcMonth(), PayrollConst.FORMAT_DATE);
			} else if (obj instanceof PhBounsDto) {
				PhBounsDto dto = (PhBounsDto)obj;
				aryType[i] = getCodeName(String.valueOf(pltType), pitType);
				aryDate[i] = MospUtility.getDateString(dto.getCalcMonth(), PayrollConst.FORMAT_DATE_JP);
				aryAllowance[i] = String.valueOf(dto.getAllowanceTotal());
				aryDeduction[i] = String.valueOf(dto.getDeductionTotal());
				aryTotal[i] = String.valueOf(dto.getPaymentTotal());
				aryHidDate[i] = MospUtility.getDateString(dto.getCalcMonth(), PayrollConst.FORMAT_DATE);
			}
		}
	}
	
	/**
	 * 区分を取得する。
	 * @return 区分
	 */
	public int getPltType() {
		return pltType;
	}
	
	/**
	 * 区分を設定する。
	 * @param pltType 設定する区分
	 */
	public void setPltType(int pltType) {
		this.pltType = pltType;
	}
	
	/**
	 * 年を取得する。
	 * @return 年
	 */
	public int getPltYear() {
		return pltYear;
	}
	
	/**
	 * 年を設定する。
	 * @param pltYear 設定する年
	 */
	public void setPltYear(int pltYear) {
		this.pltYear = pltYear;
	}
	
	/**
	 * 社員コードを取得する。
	 * @return 社員コード
	 */
	public String getHidKCode() {
		return hidKCode;
	}
	
	/**
	 * 社員コードを設定する。
	 * @param hidKCode 設定する社員コード
	 */
	public void setHidKCode(String hidKCode) {
		this.hidKCode = hidKCode;
	}
	
	/**
	 * 明細出力コマンドを取得する。
	 * @return 明細出力コマンド
	 */
	public String getHidCmd() {
		return hidCmd;
	}
	
	/**
	 * 明細出力コマンドを設定する。
	 * @param hidCmd 設定する明細出力コマンド
	 */
	public void setHidCmd(String hidCmd) {
		this.hidCmd = hidCmd;
	}
	
	/**
	 * 年プルダウンアイテムを取得する。
	 * @return 年プルダウンアイテム
	 */
	public String[][] getPitYear() {
		return getAryField(pitYear);
	}
	
	/**
	 * 年プルダウンアイテムを設定する。
	 * @param pitYear 設定する年プルダウンアイテム
	 */
	public void setPitYear(String[][] pitYear) {
		this.pitYear = getAryField(pitYear);
	}
	
	/**
	 * 区分プルダウンアイテムを取得する。
	 * @return 区分プルダウンアイテム
	 */
	public String[][] getPitType() {
		return getAryField(pitType);
	}
	
	/**
	 * 区分プルダウンアイテムを設定する。
	 * @param pitType 設定する区分プルダウンアイテム
	 */
	public void setPitType(String[][] pitType) {
		this.pitType = getAryField(pitType);
	}
	
	/**
	 * 区分を取得する。
	 * @param idx インデックス
	 * @return 区分
	 */
	public String getAryType(int idx) {
		return escapeHTML(aryType[idx]);
	}
	
	/**
	 * 日を取得する。
	 * @param idx インデックス
	 * @return 日
	 */
	public String getAryDate(int idx) {
		return escapeHTML(aryDate[idx]);
	}
	
	/**
	 * 総支給金額を取得する。
	 * @param idx インデックス
	 * @return 総支給金額
	 */
	public String getAryAllowance(int idx) {
		return escapeHTML(insertComma(aryAllowance[idx]));
	}
	
	/**
	 * 総控除金額を取得する。
	 * @param idx インデックス
	 * @return 総控除金額
	 */
	public String getAryDeduction(int idx) {
		return escapeHTML(insertComma(aryDeduction[idx]));
	}
	
	/**
	 * 差引支給額を取得する。
	 * @param idx インデックス
	 * @return 差引支給額
	 */
	public String getAryTotal(int idx) {
		return escapeHTML(insertComma(aryTotal[idx]));
	}
	
	/**
	 * パラメータ用日付を取得する。
	 * @param idx インデックス
	 * @return パラメータ用日付
	 */
	public String getAryHidDate(int idx) {
		return escapeHTML(aryHidDate[idx]);
	}
	
}
