package jp.mosp.payroll.dto;

import java.util.Date;

import jp.mosp.common.common.BaseDto;

/**
 * 給与ヘッダ
 * @author koike
 *
 */
public class PhPaymentDto extends BaseDto {
	
	private static final long	serialVersionUID	= 5167119611329975677L;
	
	private String				kCode;
	private Date				calcMonth;
	private Date				payDate;
	private String				slipCode;
	private int					allowanceTotal;							// 総支給金額
	private int					deductionTotal;
	private int					paymentTotal;
	private int					taxation;									// 課税支給額
	private int					socInsTotal;								// 社会保険合計
	private int					dependent;
	private int					incomeTax;
	private int					adjustedTax;
	private int					insureMoney;
	private int					insureInKind;
	private int					insureFixed;
	private int					insureUnemploy;
	private int					bonusBase;
	

	/**
	 * 調整税額を取得する。
	 * @return 調整税額
	 */
	public int getAdjustedTax() {
		return adjustedTax;
	}
	
	/**
	 * 調整税額を設定する。
	 * @param adjustedTax 設定する調整税額
	 */
	public void setAdjustedTax(int adjustedTax) {
		this.adjustedTax = adjustedTax;
	}
	
	/**
	 * 総支給金額を取得する。
	 * @return 総支給金額
	 */
	public int getAllowanceTotal() {
		return allowanceTotal;
	}
	
	/**
	 * 総支給金額を設定する。
	 * @param allowanceTotal 設定する総支給金額
	 */
	public void setAllowanceTotal(int allowanceTotal) {
		this.allowanceTotal = allowanceTotal;
	}
	
	/**
	 * 計算年月を取得する。
	 * @return 計算年月
	 */
	public Date getCalcMonth() {
		return getDateField(calcMonth);
	}
	
	/**
	 * 計算年月を設定する。
	 * @param calcMonth 設定する計算年月
	 */
	public void setCalcMonth(Date calcMonth) {
		this.calcMonth = getDateField(calcMonth);
	}
	
	/**
	 * 総控除金額を取得する。
	 * @return 総控除金額
	 */
	public int getDeductionTotal() {
		return deductionTotal;
	}
	
	/**
	 * 総控除金額を設定する。
	 * @param deductionTotal 設定する総控除金額
	 */
	public void setDeductionTotal(int deductionTotal) {
		this.deductionTotal = deductionTotal;
	}
	
	/**
	 * 扶養等の数を取得する。
	 * @return 扶養等の数
	 */
	public int getDependent() {
		return dependent;
	}
	
	/**
	 * 扶養等の数を設定する。
	 * @param dependent 設定する扶養等の数
	 */
	public void setDependent(int dependent) {
		this.dependent = dependent;
	}
	
	/**
	 * 所得税額を取得する。
	 * @return 所得税額
	 */
	public int getIncomeTax() {
		return incomeTax;
	}
	
	/**
	 * 所得税額を設定する。
	 * @param incomeTax 設定する所得税額
	 */
	public void setIncomeTax(int incomeTax) {
		this.incomeTax = incomeTax;
	}
	
	/**
	 * 社員コードを取得する。
	 * @return 社員コード
	 */
	public String getKCode() {
		return kCode;
	}
	
	/**
	 * 社員コードを設定する。
	 * @param kCode 設定する社員コード
	 */
	public void setKCode(String kCode) {
		this.kCode = kCode;
	}
	
	/**
	 * 支給日を取得する。
	 * @return 支給日
	 */
	public Date getPayDate() {
		return getDateField(payDate);
	}
	
	/**
	 * 支給日を設定する。
	 * @param payDate 設定する支給日
	 */
	public void setPayDate(Date payDate) {
		this.payDate = getDateField(payDate);
	}
	
	/**
	 * 差引支給額を取得する。
	 * @return 差引支給額
	 */
	public int getPaymentTotal() {
		return paymentTotal;
	}
	
	/**
	 * 差引支給額を設定する。
	 * @param paymentTotal 設定する差引支給額
	 */
	public void setPaymentTotal(int paymentTotal) {
		this.paymentTotal = paymentTotal;
	}
	
	/**
	 * 社会保険料を取得する。
	 * @return 社会保険料
	 */
	public int getSocInsTotal() {
		return socInsTotal;
	}
	
	/**
	 * 社会保険料を設定する。
	 * @param socInsTotal 設定する社会保険料
	 */
	public void setSocInsTotal(int socInsTotal) {
		this.socInsTotal = socInsTotal;
	}
	
	/**
	 * 課税対象額を取得する。(課税支給額と課税対象額が同一の場合)
	 * @return 課税対象額
	 */
	public int getTaxation() {
		return taxation;
	}
	
	/**
	 * 課税対象額を設定する。
	 * @param taxation 設定する課税対象額
	 */
	public void setTaxation(int taxation) {
		this.taxation = taxation;
	}
	
	/**
	 * 伝票コードを取得する。
	 * @return 伝票コード
	 */
	public String getSlipCode() {
		return slipCode;
	}
	
	/**
	 * 伝票コードを設定する。
	 * @param slipCode 設定する伝票コード
	 */
	public void setSlipCode(String slipCode) {
		this.slipCode = slipCode;
	}
	
	/**
	 * 社会保険対象固定賃金を取得する。
	 * @return 社会保険対象固定賃金
	 */
	public int getInsureFixed() {
		return insureFixed;
	}
	
	/**
	 * 社会保険対象固定賃金を設定する。
	 * @param insureFixed 設定する社会保険対象固定賃金
	 */
	public void setInsureFixed(int insureFixed) {
		this.insureFixed = insureFixed;
	}
	
	/**
	 * 社会保険対象現物を取得する。
	 * @return 社会保険対象現物
	 */
	public int getInsureInKind() {
		return insureInKind;
	}
	
	/**
	 * 社会保険対象現物を設定する。
	 * @param insureInKind 設定する社会保険対象現物
	 */
	public void setInsureInKind(int insureInKind) {
		this.insureInKind = insureInKind;
	}
	
	/**
	 * 社会保険対象金銭を取得する。
	 * @return 社会保険対象金銭
	 */
	public int getInsureMoney() {
		return insureMoney;
	}
	
	/**
	 * 社会保険対象金銭を設定する。
	 * @param insureMoney 設定する社会保険対象金銭
	 */
	public void setInsureMoney(int insureMoney) {
		this.insureMoney = insureMoney;
	}
	
	/**
	 * 雇用保険対象額を取得する。
	 * @return 雇用保険対象額
	 */
	public int getInsureUnemploy() {
		return insureUnemploy;
	}
	
	/**
	 * 雇用保険対象額を設定する。
	 * @param insureUnemploy 設定する雇用保険対象額
	 */
	public void setInsureUnemploy(int insureUnemploy) {
		this.insureUnemploy = insureUnemploy;
	}
	
	/**
	 * 賞与計算対象額を取得する。
	 * @return 賞与計算対象額
	 */
	public int getBonusBase() {
		return bonusBase;
	}
	
	/**
	 * 賞与計算対象額を設定する。
	 * @param bonusBase 設定する賞与計算対象額
	 */
	public void setBonusBase(int bonusBase) {
		this.bonusBase = bonusBase;
	}
	
	/**
	 * 非課税額取得
	 * @return 非課税額
	 */
	public int getTaxExempt() {
		int taxExempt;
		if (allowanceTotal > 0 && allowanceTotal > taxation) {
			// 総支給額-課税支給額
			taxExempt = allowanceTotal - taxation;
		} else {
			taxExempt = 0;
		}
		// 総支給額-社会保険合計-課税対象額
		//int taxExempt = allowanceTotal- socInsTotal  - amountToTaxation;
		// 総支給額0且つ課税対象額0なら非課税額0。
		//if (allowanceTotal == 0 && amountToTaxation == 0) {
		//	taxExempt = 0;
		//}
		
		/*
		if (taxExempt < 0) {
			taxExempt = 0;
		}
		*/
		return taxExempt;
	}
	
	/**
	 * 課税対象額を取得する。
	 * @return 課税対象額
	 */
	public int getAmountToTaxation() {
		int amountToTaxation;
		if (taxation > 0 && taxation > socInsTotal) {
			// 課税給額 - 社会保険合計
			amountToTaxation = taxation - socInsTotal;
		} else {
			amountToTaxation = 0;
		}
		return amountToTaxation;
	}
	
}
