package com.jasamedika.medifirst2000.entities;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.helper.Caption;

@Entity
@Table(name="DetailSpekAnggaran_T")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class DetailSpekAnggaran extends BaseTransaction{
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectDetailAnggaranFk")
	@Caption(value="detail Anggaran")
	private DetailAnggaran detailAnggaran;
	
	@Column(name="ObjectDetailAnggaranFk", columnDefinition = "CHAR(32)", insertable = false, updatable = false, nullable = false)
	private String detailAnggaranId;
	
	@ManyToOne
	@JoinColumn(name = "ObjectProdukFk")
	@Caption(value="Produk")
	private Produk produk;
	
	@Column(name="ObjectProdukFk", insertable = false, updatable = false, nullable = true)
	private Integer produkId;
	
	@Column(name = "VolumeBarang", nullable = true)
	@Caption(value = "Volume Barang")
	private float volumeBarang;

	@Caption(value = "Harga Satuan Barang")
	@Column(name = "HargaSatuanBarang")
	private Double hargaSatuanBarang;

	@Caption(value = "Total Harga Barang")
	@Column(name = "TotalHargaBarang", nullable = true)
	private Double totalHargaBarang;
	
	@Column(name = "StatusCode", nullable = true)
	@Caption(value = "Status Code")
	private Integer statusCode;
	
	@Column(name = "isVerifikasi")
	public String isVerifikasi;
	
	@Column(name = "isActive")
	public Boolean isActive;
	
	@ManyToOne
	@JoinColumn(name = "ObjectRuanganFk")
	@Caption(value = "Ruangan")
	private Ruangan ruangan;
	
	@Column(name = "ObjectRuanganFk", nullable = true, insertable = false, updatable = false)
	private Integer ruanganId;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectJenisBelanjaFk")
	@Caption(value = "Jenis Belanja")
	private JenisBelanja jenisBelanja;
	
	@Column(name = "ObjectJenisBelanjaFk", nullable = true, insertable = false, updatable = false)
	private Integer jenisBelanjaId;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectJenisPengadaanFk")
	@Caption(value = "Jenis Pengadaan")
	private JenisPengadaan jenisPengadaan;
	
	@Column(name = "ObjectJenisBelanjaFk", nullable = true, insertable = false, updatable = false)
	private Integer jenisPengadaanId;
	
	@Column(name = "PeriodeAwal", nullable = true)
	@Caption(value = "Periode Awal")
	private Date periodeAwal;
	
	@Column(name = "PeriodeAhir", nullable = true)
	@Caption(value = "Periode Ahir")
	private Date periodeAhir;
	
	@Column(name = "keterangan", nullable = true)
	@Caption(value="Keterangan")
	private String keterangan;
	
	@ManyToOne
	@JoinColumn(name = "ObjectPengendaliFk")
	@Caption(value = "Object Pengendali")
	private Pengendali pengendali;

	@Column(name = "ObjectPengendaliFk", insertable = false, updatable = false, nullable = true)
	private Integer pengendaliId;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectDetailSpekAnggaranFk")
	@Caption(value = "Detail Spek ANggaran")
	@JsonBackReference
	private DetailSpekAnggaran detailSpekAnggaran;
	
	@Column(name = "ObjectDetailSpekAnggaranFk", columnDefinition = "CHAR(32)", nullable = true, insertable = false, updatable = false)
	private String detailSpekAnggaranId;
	
	@Column(name = "Spesifikasi", nullable = true)
	@Caption(value="Spesifikasi")
	private String spesifikasi;
	
	@Column(name = "Tipe", nullable = true)
	@Caption(value="Tipe")
	private String tipe;
	
	@JsonManagedReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "detailSpekAnggaran")
	private Set<DetailSpekAnggaran> detailSpekAnggaranSet = new HashSet<DetailSpekAnggaran>();
	
	@Transient
	private Date pelaksanaanPemilihanAwal;
	
	@Transient
	private Date pelaksanaanPemilihanAhir;
	
	@Transient
	private Date pelaksanaanPekerjaanAwal;
	
	@Transient
	private Date pelaksanaanPekerjaanAhir;
	
	@Transient
	private String keteranganRup;

	public DetailAnggaran getDetailAnggaran() {
		return detailAnggaran;
	}

	public void setDetailAnggaran(DetailAnggaran detailAnggaran) {
		this.detailAnggaran = detailAnggaran;
	}

	public String getDetailAnggaranId() {
		return detailAnggaranId;
	}

	public void setDetailAnggaranId(String detailAnggaranId) {
		this.detailAnggaranId = detailAnggaranId;
	}

	public Produk getProduk() {
		return produk;
	}

	public void setProduk(Produk produk) {
		this.produk = produk;
	}

	public Integer getProdukId() {
		return produkId;
	}

	public void setProdukId(Integer produkId) {
		this.produkId = produkId;
	}

	public float getVolumeBarang() {
		return volumeBarang;
	}

	public void setVolumeBarang(float volumeBarang) {
		this.volumeBarang = volumeBarang;
	}

	public Double getHargaSatuanBarang() {
		return hargaSatuanBarang;
	}

	public void setHargaSatuanBarang(Double hargaSatuanBarang) {
		this.hargaSatuanBarang = hargaSatuanBarang;
	}

	public Double getTotalHargaBarang() {
		return totalHargaBarang;
	}

	public void setTotalHargaBarang(Double totalHargaBarang) {
		this.totalHargaBarang = totalHargaBarang;
	}

	public Integer getStatusCode() {
		return statusCode;
	}

	public void setStatusCode(Integer statusCode) {
		this.statusCode = statusCode;
	}


	public Boolean getIsActive() {
		return isActive;
	}

	public void setIsActive(Boolean isActive) {
		this.isActive = isActive;
	}

	public Ruangan getRuangan() {
		return ruangan;
	}

	public void setRuangan(Ruangan ruangan) {
		this.ruangan = ruangan;
	}

	public Integer getRuanganId() {
		return ruanganId;
	}

	public void setRuanganId(Integer ruanganId) {
		this.ruanganId = ruanganId;
	}

	public JenisBelanja getJenisBelanja() {
		return jenisBelanja;
	}

	public void setJenisBelanja(JenisBelanja jenisBelanja) {
		this.jenisBelanja = jenisBelanja;
	}

	public Integer getJenisBelanjaId() {
		return jenisBelanjaId;
	}

	public void setJenisBelanjaId(Integer jenisBelanjaId) {
		this.jenisBelanjaId = jenisBelanjaId;
	}

	public JenisPengadaan getJenisPengadaan() {
		return jenisPengadaan;
	}

	public void setJenisPengadaan(JenisPengadaan jenisPengadaan) {
		this.jenisPengadaan = jenisPengadaan;
	}

	public Integer getJenisPengadaanId() {
		return jenisPengadaanId;
	}

	public void setJenisPengadaanId(Integer jenisPengadaanId) {
		this.jenisPengadaanId = jenisPengadaanId;
	}

	public Date getPeriodeAwal() {
		return periodeAwal;
	}

	public void setPeriodeAwal(Date periodeAwal) {
		this.periodeAwal = periodeAwal;
	}

	public Date getPeriodeAhir() {
		return periodeAhir;
	}

	public void setPeriodeAhir(Date periodeAhir) {
		this.periodeAhir = periodeAhir;
	}

	public String getKeterangan() {
		return keterangan;
	}

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

	public Pengendali getPengendali() {
		return pengendali;
	}

	public void setPengendali(Pengendali pengendali) {
		this.pengendali = pengendali;
	}

	public Integer getPengendaliId() {
		return pengendaliId;
	}

	public void setPengendaliId(Integer pengendaliId) {
		this.pengendaliId = pengendaliId;
	}

	public DetailSpekAnggaran getDetailSpekAnggaran() {
		return detailSpekAnggaran;
	}

	public void setDetailSpekAnggaran(DetailSpekAnggaran detailSpekAnggaran) {
		this.detailSpekAnggaran = detailSpekAnggaran;
	}

	public String getDetailSpekAnggaranId() {
		return detailSpekAnggaranId;
	}

	public void setDetailSpekAnggaranId(String detailSpekAnggaranId) {
		this.detailSpekAnggaranId = detailSpekAnggaranId;
	}

	public String getSpesifikasi() {
		return spesifikasi;
	}

	public void setSpesifikasi(String spesifikasi) {
		this.spesifikasi = spesifikasi;
	}

	public Set<DetailSpekAnggaran> getDetailSpekAnggaranSet() {
		return detailSpekAnggaranSet;
	}

	public void setDetailSpekAnggaranSet(Set<DetailSpekAnggaran> detailSpekAnggaranSet) {
		this.detailSpekAnggaranSet = detailSpekAnggaranSet;
	}

	public Date getPelaksanaanPemilihanAwal() {
		return pelaksanaanPemilihanAwal;
	}

	public void setPelaksanaanPemilihanAwal(Date pelaksanaanPemilihanAwal) {
		this.pelaksanaanPemilihanAwal = pelaksanaanPemilihanAwal;
	}

	public Date getPelaksanaanPemilihanAhir() {
		return pelaksanaanPemilihanAhir;
	}

	public void setPelaksanaanPemilihanAhir(Date pelaksanaanPemilihanAhir) {
		this.pelaksanaanPemilihanAhir = pelaksanaanPemilihanAhir;
	}

	public Date getPelaksanaanPekerjaanAwal() {
		return pelaksanaanPekerjaanAwal;
	}

	public void setPelaksanaanPekerjaanAwal(Date pelaksanaanPekerjaanAwal) {
		this.pelaksanaanPekerjaanAwal = pelaksanaanPekerjaanAwal;
	}

	public Date getPelaksanaanPekerjaanAhir() {
		return pelaksanaanPekerjaanAhir;
	}

	public void setPelaksanaanPekerjaanAhir(Date pelaksanaanPekerjaanAhir) {
		this.pelaksanaanPekerjaanAhir = pelaksanaanPekerjaanAhir;
	}

	public String getKeteranganRup() {
		return keteranganRup;
	}

	public void setKeteranganRup(String keteranganRup) {
		this.keteranganRup = keteranganRup;
	}

	public String getTipe() {
		return tipe;
	}

	public void setTipe(String tipe) {
		this.tipe = tipe;
	}

	public String getIsVerifikasi() {
		return isVerifikasi;
	}

	public void setIsVerifikasi(String isVerifikasi) {
		this.isVerifikasi = isVerifikasi;
	}

	
}
