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.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

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

@Entity
@Table(name = "ItPelaksanaanPerbaikan_T")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class ItPelaksanaanPerbaikan extends BaseTransaction{

	@OneToOne(fetch = FetchType.LAZY)
	@Caption(value = "It Perbaikan")
	@JoinColumn(name = "ObjectItPerbaikanFk")
	private ItPerbaikan itPerbaikan;
	
	@Column(name = "ObjectItPerbaikanFk", columnDefinition = "CHAR(32)", nullable = false, insertable = false, updatable = false)
	private String itPerbaikanId;

	@Temporal(TemporalType.TIMESTAMP)
	@Caption(value = "Tgl Mulai Periksa")
	@Column(name = "TglMulaiPeriksa")
	private Date tglMulaiPeriksa;
	
	@Caption(value = "Analisa Teknisi")
	@Column(name = "AnalisaTeknisi")
	private String analisaTeknisi;
	
	@Caption(value = "Analisa Kerusakan")
	@Column(name = "AnalisaKerusakan")
	private String analisaKerusakan;
	
	@Caption(value = "Jenis Pekerjaan")
	@Column(name = "JenisPekerjaan")
	private String jenisPekerjaan;
	
	@JsonBackReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "itPelaksanaanPerbaikan")
	private Set<ItPelaksanaanPerbaikanSukuCadang> itPelaksanaanPerbaikanSukuCadang = new HashSet<>();
	
	@JsonBackReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "itPelaksanaanPerbaikan")
	private Set<ItPelaksanaanPerbaikanListTeknisi> itPelaksanaanPerbaikanListTeknisi = new HashSet<>();

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectUserFk")
	@Caption(value = "User")
	private Pegawai user;
	
	@Column(name = "ObjectUserFk",nullable=false, insertable = false, updatable = false)
	private Integer userId;

	public ItPerbaikan getItPerbaikan() {
		return itPerbaikan;
	}

	public void setItPerbaikan(ItPerbaikan itPerbaikan) {
		this.itPerbaikan = itPerbaikan;
	}

	public String getItPerbaikanId() {
		return itPerbaikanId;
	}

	public void setItPerbaikanId(String itPerbaikanId) {
		this.itPerbaikanId = itPerbaikanId;
	}

	public Date getTglMulaiPeriksa() {
		return tglMulaiPeriksa;
	}

	public void setTglMulaiPeriksa(Date tglMulaiPeriksa) {
		this.tglMulaiPeriksa = tglMulaiPeriksa;
	}

	public String getAnalisaTeknisi() {
		return analisaTeknisi;
	}

	public void setAnalisaTeknisi(String analisaTeknisi) {
		this.analisaTeknisi = analisaTeknisi;
	}

	public String getAnalisaKerusakan() {
		return analisaKerusakan;
	}

	public void setAnalisaKerusakan(String analisaKerusakan) {
		this.analisaKerusakan = analisaKerusakan;
	}

	public Set<ItPelaksanaanPerbaikanSukuCadang> getItPelaksanaanPerbaikanSukuCadang() {
		return itPelaksanaanPerbaikanSukuCadang;
	}

	public void setItPelaksanaanPerbaikanSukuCadang(
			Set<ItPelaksanaanPerbaikanSukuCadang> itPelaksanaanPerbaikanSukuCadang) {
		this.itPelaksanaanPerbaikanSukuCadang = itPelaksanaanPerbaikanSukuCadang;
	}

	public Set<ItPelaksanaanPerbaikanListTeknisi> getItPelaksanaanPerbaikanListTeknisi() {
		return itPelaksanaanPerbaikanListTeknisi;
	}

	public void setItPelaksanaanPerbaikanListTeknisi(
			Set<ItPelaksanaanPerbaikanListTeknisi> itPelaksanaanPerbaikanListTeknisi) {
		this.itPelaksanaanPerbaikanListTeknisi = itPelaksanaanPerbaikanListTeknisi;
	}

	public Pegawai getUser() {
		return user;
	}

	public void setUser(Pegawai user) {
		this.user = user;
	}

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getJenisPekerjaan() {
		return jenisPekerjaan;
	}

	public void setJenisPekerjaan(String jenisPekerjaan) {
		this.jenisPekerjaan = jenisPekerjaan;
	}

	
	
}
