/*
 * MosP - Mind Open Source Project         http://www.mosp.jp/
 * Copyright (C) 1987-2009 MIND Co., Ltd.  http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
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]);
	}
	
}
