package cokr.xit.fims.rcvm;

import cokr.xit.fims.levy.Levy;
import cokr.xit.foundation.AbstractEntity;
import lombok.Getter;
import lombok.Setter;

/**
 * 수납 대장
 * @author JoJH
 */
@Getter
@Setter
public class Rcvmt extends AbstractEntity {
	public static final Rcvmt create(Levy levy) {
		Rcvmt rcvmt = new Rcvmt(); // 수납등록
		rcvmt.setSggCd(levy.getSggCd());
		rcvmt.setTaskSeCd(levy.getTaskSeCd());
		rcvmt.setDeptCd(levy.getDeptCd());
		rcvmt.setLevyId(levy.getLevyId());
		rcvmt.setRcvmtInptSeCd("11");            // 수납입력구분: 세외수입(FIM044)
		rcvmt.setFyr(levy.getFyr());             // 회계연도
		rcvmt.setAcntgSeCd(levy.getAcntgSeCd()); // 회계구분
		rcvmt.setSpclBizCd(levy.getSpclBizCd());
		rcvmt.setTxitmCd(levy.getTxitmCd());     // 세목
		rcvmt.setLevyNo(levy.getLevyNo());       // 부과번호
		rcvmt.setIspySn(null);                   // 분납 일련번호
		String rcvmtYmd = levy.getRcvmtYmd();
		rcvmt.setRcvmtYmd(rcvmtYmd);  // 수납일자
		rcvmt.setAcntgYmd(rcvmtYmd);  // 회계일자
		rcvmt.setTsfYmd(rcvmtYmd);    // 이체일자
		rcvmt.setPayMthdSeCd("10");              // 납부방법구분: 기타 (FIM045)
		rcvmt.setEpayno(levy.getEpayno());       // 전자납부번호

		rcvmt.setRcvmtPcptax(levy.getRcvmtPcptax());
		rcvmt.setRcvmtAdamt(levy.getRcvmtAdamt());

		rcvmt.setLastPcptax(levy.lastPcptax()); // 최종본세
		rcvmt.setLastAdamt(levy.lastAdamt());   // 최종가산금

		return rcvmt;
	}

	/**
	 * 수납 ID
	 */
	private String rcvmtId;

	/**
	 * 시군구 코드
	 */
	private String sggCd;

	/**
	 * 업무 구분 코드
	 */
	private String taskSeCd;

	/**
	 * 부과 ID
	 */
	private String levyId;

	/**
	 * 수납 입력 구분 코드
	 */
	private String rcvmtInptSeCd;

	/**
	 * 부서 코드
	 */
	private String deptCd;

	/**
	 * 특별회계 사업 코드
	 */
	private String spclBizCd;

	/**
	 * 회계 연도
	 */
	private String fyr;

	/**
	 * 회계 구분 코드
	 */
	private String acntgSeCd;

	/**
	 * 세목 코드
	 */
	private String txitmCd;

	/**
	 * 부과 번호
	 */
	private String levyNo;

	/**
	 * 분납 일련번호
	 */
	private String ispySn;

	/**
	 * 최종 본세
	 */
	private Integer lastPcptax;

	/**
	 * 최종 가산금
	 */
	private Integer lastAdamt;

	/**
	 * 수납 일련번호
	 */
	private String rcvmtSn;

	/**
	 * 수납 구분 코드
	 */
	private String rcvmtSeCd;

	/**
	 * 수납 일자
	 */
	private String rcvmtYmd;

	/**
	 * 회계 일자
	 */
	private String acntgYmd;

	/**
	 * 이체 일자
	 */
	private String tsfYmd;

	/**
	 * 수납 금액
	 */
	private Integer rcvmtAmt;

	/**
	 * 수납 본세
	 */
	private Integer rcvmtPcptax;

	/**
	 * 수납 가산금
	 */
	private Integer rcvmtAdamt;

	/**
	 * 수납 이자
	 */
	private Integer rcvmtInt;

	/**
	 * 수납 은행 명
	 */
	private String rcvmtBankNm;

	/**
	 * 납부 방법 구분 코드
	 */
	private String payMthdSeCd;

	/**
	 * 전자납부번호
	 */
	private String epayno;

    /**
     * 가상계좌번호
     */
    private String vrActno;

	/**
	 * 수납 취소 여부
	 */
	private String rcvmtRtrcnYn;

	/**
	 * 수납 취소 일시
	 */
	private String rcvmtRtrcnDt;

	/**
	 * 수납 취소 사유
	 */
	private String rcvmtRtrcnRsn;

	/**
	 * 수납 상태 코드
	 */
	private String rcvmtSttsCd;

	/**
	 * 삭제 여부
	 */
	private String delYn;

	/**
	 * 삭제 사유
	 */
	private String delRsn;

	/**수납본세와 가산금을 계산하고, 수납상태를 설정한다.
	 * 수납금액을 설정된 후 호출해야 한다.
	public void calcAmts() {
		if (lastPcptax == null || lastAdamt == null) return;

		if (lastPcptax + lastAdamt == 0) {
			rcvmtPcptax = rcvmtAdamt = 0;
			rcvmtSeCd = "02"; // 이중수납
		} else {
			rcvmtPcptax = lastPcptax;
			rcvmtAdamt = lastAdamt;
			int rcvmtAmt = toInt(this.rcvmtAmt);

			if (lastPcptax + lastAdamt == rcvmtAmt)
				rcvmtSeCd = "01"; // 완납
			else if (lastPcptax + lastAdamt < rcvmtAmt)
				rcvmtSeCd = "04"; // 과납
			else if (lastPcptax + lastAdamt > rcvmtAmt) {
				if (rcvmtAmt > lastPcptax) {
					rcvmtAdamt = rcvmtAmt - lastPcptax;
				} else {
					rcvmtPcptax = rcvmtAmt;
					rcvmtAdamt = 0;
				}
				rcvmtSeCd = "06"; // 일부수납
			}
		}
	}
	*/
}