package com.jasamedika.medifirst2000.entities;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.helper.Caption;

@Entity
@Table(name="KartuPengendali_T")
public class KartuPengendali extends BaseTransaction{
	
	@Column(name="NoUsulan", nullable = false)
	@Caption(value="No Usulan")
	private String noUsulan;
	
	@NotNull(message="tanggal")
	@Column(name="Tanggal", nullable = false)
	@Caption(value="Tanggal")
	private Date tanggal;
	
	@Column(name="TanggalDibutuhkan", nullable = true)
	@Caption(value="TanggalDibtuhkan")
	private Date tanggalDibutuhkan;
	
	@JsonManagedReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "kartuPengendali")
	private List<KartuPengendaliDetail> kartuPengendaliDetail = new ArrayList<KartuPengendaliDetail>();
	
	@Column(name="Jumlah", nullable = true)
	@Caption(value="Jumlah")
	private Double jumlah;
	
	@Column(name="Ppn", nullable = true)
	@Caption(value="Ppn")
	private Double ppn;
	
	@Column(name="Total", nullable = true)
	@Caption(value="Total")
	private Double total;
	
	@Column(name="Pembulatan", nullable = true)
	@Caption(value="Pembulatan")
	private Double pembulatan;
	
	@Column(name="Terbilang", nullable = true)
	@Caption(value="Terbilang")
	private String terbilang;
	
	@Column(name="keterangan", nullable = true)
	@Caption(value="keterangan")
	private String keterangan;
	
	@Column(name="paketPengadaan", nullable = true)
	@Caption(value="paketPengadaan")
	private String paketPengadaan;
	
	@ManyToOne
	@JoinColumn(name = "ObjectAsalProdukFk")
	@Caption(value = "Object Asal Produk")
	private AsalProduk asalProduk;
	
	@Column(name = "ObjectAsalProdukFk", insertable = false, updatable = false, nullable = true)
	private Integer asalProdukId;
	
	@ManyToOne
	@JoinColumn(name = "ObjectMataAnggaranFk")
	@Caption(value = "Object Mata Anggaran")
	private MataAnggaran mataAnggaran;
	
	@Column(name = "ObjectMataAnggaranFk", insertable = false, updatable = false, nullable = true)
	private Integer mataAnggaranId;

	public String getNoUsulan() {
		return noUsulan;
	}

	public void setNoUsulan(String noUsulan) {
		this.noUsulan = noUsulan;
	}

	public Date getTanggal() {
		return tanggal;
	}

	public void setTanggal(Date tanggal) {
		this.tanggal = tanggal;
	}

	public List<KartuPengendaliDetail> getKartuPengendaliDetail() {
		return kartuPengendaliDetail;
	}

	public void setKartuPengendaliDetail(List<KartuPengendaliDetail> kartuPengendaliDetail) {
		this.kartuPengendaliDetail = kartuPengendaliDetail;
	}

	public Double getJumlah() {
		return jumlah;
	}

	public void setJumlah(Double jumlah) {
		this.jumlah = jumlah;
	}

	public Double getPpn() {
		return ppn;
	}

	public void setPpn(Double ppn) {
		this.ppn = ppn;
	}

	public Double getTotal() {
		return total;
	}

	public void setTotal(Double total) {
		this.total = total;
	}

	public Double getPembulatan() {
		return pembulatan;
	}

	public void setPembulatan(Double pembulatan) {
		this.pembulatan = pembulatan;
	}

	public String getTerbilang() {
		return terbilang;
	}

	public void setTerbilang(String terbilang) {
		this.terbilang = terbilang;
	}

	public String getKeterangan() {
		return keterangan;
	}

	public void setKeterangan(String keterangan) {
		this.keterangan = keterangan;
	}

	public String getPaketPengadaan() {
		return paketPengadaan;
	}

	public void setPaketPengadaan(String paketPengadaan) {
		this.paketPengadaan = paketPengadaan;
	}

	public AsalProduk getAsalProduk() {
		return asalProduk;
	}

	public void setAsalProduk(AsalProduk asalProduk) {
		this.asalProduk = asalProduk;
	}

	public Integer getAsalProdukId() {
		return asalProdukId;
	}

	public void setAsalProdukId(Integer asalProdukId) {
		this.asalProdukId = asalProdukId;
	}

	public Date getTanggalDibutuhkan() {
		return tanggalDibutuhkan;
	}

	public void setTanggalDibutuhkan(Date tanggalDibutuhkan) {
		this.tanggalDibutuhkan = tanggalDibutuhkan;
	}

	public MataAnggaran getMataAnggaran() {
		return mataAnggaran;
	}

	public void setMataAnggaran(MataAnggaran mataAnggaran) {
		this.mataAnggaran = mataAnggaran;
	}

	public Integer getMataAnggaranId() {
		return mataAnggaranId;
	}

	public void setMataAnggaranId(Integer mataAnggaranId) {
		this.mataAnggaranId = mataAnggaranId;
	}
	
	
}
