package com.jasamedika.medifirst2000.entities;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.jasamedika.medifirst2000.base.BaseMaster;
import com.jasamedika.medifirst2000.helper.Caption;

@Entity
@Table(name="PegawaiSKCuti_M")
public class PegawaiSKCuti extends BaseMaster{

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "public.pegawaiskcuti_m_id_seq")
	@javax.persistence.SequenceGenerator(name = "public.pegawaiskcuti_m_id_seq", sequenceName = "public.pegawaiskcuti_m_id_seq", allocationSize = 1)
	@Column(name = "id")
	protected Integer id;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@Caption(value="Object Triger Akumulasi")
	@JoinColumn(name="ObjectTrigerAkumulasi")
	private PegawaiSKCuti trigerAkumulasi;
	
	@Column(name="ObjectTrigerAkumulasi", nullable=true, insertable=false, updatable=false)
	private Integer trigerAkumulasiId;
	
	@JsonBackReference
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "trigerAkumulasi")
	private Set<PegawaiSKCuti> trigerAkumulasiSet = new HashSet<>();

	@ManyToOne(fetch=FetchType.LAZY)
	@Caption(value="Object Kategory Pegawai")
	@JoinColumn(name="ObjectKategoryPegawaiFk")
	private KategoryPegawai kategoryPegawai;
	
	@Column(name="ObjectKategoryPegawaiFk", nullable=true, insertable=false, updatable=false)
	private Integer kategoryPegawaiId;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@Caption(value="Object Range Masa Kerja")
	@JoinColumn(name="ObjectRangeMasaKerjaFk")
	private Range rangeMasaKerja;
	
	@Column(name="ObjectRangeMasaKerjaFk", nullable=true, insertable=false, updatable=false)
	private Integer rangeMasaKerjaId;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@Caption(value="Object Status Pegawai")
	@JoinColumn(name="ObjectStatusPegawaiFk")
	private StatusPegawai statusPegawai;
	
	@Column(name="ObjectStatusPegawaiFk", nullable=true, insertable=false, updatable=false)
	private Integer statusPegawaiId;
	
	@Column(name="KuotaTotalHari")
	@Caption(value="Kuota Total Hari")
	private Integer kuotaTotalHari;
	
	@Column(name="KuotaMinHariTake")
	@Caption(value="Kuota Min Hari Take")
	private Integer kuotaMinHariTake;
	
	@Column(name="QtyMaxTake")
	@Caption(value="Qty Max Take")
	private Integer qtyMaxTake;
	
	@Column(name="IsByMonth")
	@Caption(value="Is By Month")
	private Integer isByMonth;
	
	@Column(name="IsByYear")
	@Caption(value="Is By Year")
	private Integer isByYear;
	
	@Column(name="IsProRate")
	@Caption(value="Is Pro Rate")
	private Integer isProRate;
	
	@Column(name="TglKuotaTotalHariReset")
	@Caption(value="Tgl Kuota Total Hari Reset")
	private Date tglKuotaTotalHariReset;
	
	@Column(name="IsAkumulasi")
	@Caption(value="Is Akumulasi")
	private Integer isAkumulasi;
	
	@Column(name="KeteranganLainya", length=150)
	@Caption(value="Keterangan Lainya")
	private String keteranganLainya;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public KategoryPegawai getKategoryPegawai() {
		return kategoryPegawai;
	}

	public void setKategoryPegawai(KategoryPegawai kategoryPegawai) {
		this.kategoryPegawai = kategoryPegawai;
	}

	public Integer getKategoryPegawaiId() {
		return kategoryPegawaiId;
	}

	public void setKategoryPegawaiId(Integer kategoryPegawaiId) {
		this.kategoryPegawaiId = kategoryPegawaiId;
	}

	public Range getRangeMasaKerja() {
		return rangeMasaKerja;
	}

	public void setRangeMasaKerja(Range rangeMasaKerja) {
		this.rangeMasaKerja = rangeMasaKerja;
	}

	public Integer getRangeMasaKerjaId() {
		return rangeMasaKerjaId;
	}

	public void setRangeMasaKerjaId(Integer rangeMasaKerjaId) {
		this.rangeMasaKerjaId = rangeMasaKerjaId;
	}

	public StatusPegawai getStatusPegawai() {
		return statusPegawai;
	}

	public void setStatusPegawai(StatusPegawai statusPegawai) {
		this.statusPegawai = statusPegawai;
	}

	public Integer getStatusPegawaiId() {
		return statusPegawaiId;
	}

	public void setStatusPegawaiId(Integer statusPegawaiId) {
		this.statusPegawaiId = statusPegawaiId;
	}

	public Integer getKuotaTotalHari() {
		return kuotaTotalHari;
	}

	public void setKuotaTotalHari(Integer kuotaTotalHari) {
		this.kuotaTotalHari = kuotaTotalHari;
	}

	public Integer getKuotaMinHariTake() {
		return kuotaMinHariTake;
	}

	public void setKuotaMinHariTake(Integer kuotaMinHariTake) {
		this.kuotaMinHariTake = kuotaMinHariTake;
	}

	public Integer getQtyMaxTake() {
		return qtyMaxTake;
	}

	public void setQtyMaxTake(Integer qtyMaxTake) {
		this.qtyMaxTake = qtyMaxTake;
	}

	public Integer getIsByMonth() {
		return isByMonth;
	}

	public void setIsByMonth(Integer isByMonth) {
		this.isByMonth = isByMonth;
	}

	public Integer getIsByYear() {
		return isByYear;
	}

	public void setIsByYear(Integer isByYear) {
		this.isByYear = isByYear;
	}

	public Integer getIsProRate() {
		return isProRate;
	}

	public void setIsProRate(Integer isProRate) {
		this.isProRate = isProRate;
	}

	public Date getTglKuotaTotalHariReset() {
		return tglKuotaTotalHariReset;
	}

	public void setTglKuotaTotalHariReset(Date tglKuotaTotalHariReset) {
		this.tglKuotaTotalHariReset = tglKuotaTotalHariReset;
	}

	public Integer getIsAkumulasi() {
		return isAkumulasi;
	}

	public void setIsAkumulasi(Integer isAkumulasi) {
		this.isAkumulasi = isAkumulasi;
	}

	public String getKeteranganLainya() {
		return keteranganLainya;
	}

	public void setKeteranganLainya(String keteranganLainya) {
		this.keteranganLainya = keteranganLainya;
	}

	public PegawaiSKCuti getTrigerAkumulasi() {
		return trigerAkumulasi;
	}

	public void setTrigerAkumulasi(PegawaiSKCuti trigerAkumulasi) {
		this.trigerAkumulasi = trigerAkumulasi;
	}

	public Integer getTrigerAkumulasiId() {
		return trigerAkumulasiId;
	}

	public void setTrigerAkumulasiId(Integer trigerAkumulasiId) {
		this.trigerAkumulasiId = trigerAkumulasiId;
	}

	public Set<PegawaiSKCuti> getTrigerAkumulasiSet() {
		return trigerAkumulasiSet;
	}

	public void setTrigerAkumulasiSet(Set<PegawaiSKCuti> trigerAkumulasiSet) {
		this.trigerAkumulasiSet = trigerAkumulasiSet;
	}
}
