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 = "IpsrsPelaksanaanPerbaikan_T")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class IpsrsPelaksanaanPerbaikan extends BaseTransaction {
	
	
	@OneToOne(fetch = FetchType.LAZY)
	@Caption(value = "Ipsrs Perbaikan")
	@JoinColumn(name = "ObjectIpsrsPerbaikanFk")
	private IpsrsPerbaikan ipsrsPerbaikan;
	
	@Column(name = "ObjectIpsrsPerbaikanFk", columnDefinition = "CHAR(32)", nullable = false, insertable = false, updatable = false)
	private String ipsrsPerbaikanId;

	@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;
	
	@JsonBackReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "ipsrsPelaksanaanPerbaikan")
	private Set<IpsrsPelaksanaanPerbaikanSukuCadang> ipsrsPelaksanaanPerbaikanSukuCadang = new HashSet<IpsrsPelaksanaanPerbaikanSukuCadang>();
	
	@JsonBackReference
	@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "ipsrsPelaksanaanPerbaikan")
	private Set<IpsrsPelaksanaanPerbaikanListTeknisi> ipsrsPelaksanaanPerbaikanListTeknisi = new HashSet<IpsrsPelaksanaanPerbaikanListTeknisi>();

	@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 IpsrsPerbaikan getIpsrsPerbaikan() {
		return ipsrsPerbaikan;
	}

	public void setIpsrsPerbaikan(IpsrsPerbaikan ipsrsPerbaikan) {
		this.ipsrsPerbaikan = ipsrsPerbaikan;
	}

	public String getIpsrsPerbaikanId() {
		return ipsrsPerbaikanId;
	}

	public void setIpsrsPerbaikanId(String ipsrsPerbaikanId) {
		this.ipsrsPerbaikanId = ipsrsPerbaikanId;
	}

	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<IpsrsPelaksanaanPerbaikanSukuCadang> getIpsrsPelaksanaanPerbaikanSukuCadang() {
		return ipsrsPelaksanaanPerbaikanSukuCadang;
	}

	public void setIpsrsPelaksanaanPerbaikanSukuCadang(
			Set<IpsrsPelaksanaanPerbaikanSukuCadang> ipsrsPelaksanaanPerbaikanSukuCadang) {
		this.ipsrsPelaksanaanPerbaikanSukuCadang = ipsrsPelaksanaanPerbaikanSukuCadang;
	}

	public Set<IpsrsPelaksanaanPerbaikanListTeknisi> getIpsrsPelaksanaanPerbaikanListTeknisi() {
		return ipsrsPelaksanaanPerbaikanListTeknisi;
	}

	public void setIpsrsPelaksanaanPerbaikanListTeknisi(
			Set<IpsrsPelaksanaanPerbaikanListTeknisi> ipsrsPelaksanaanPerbaikanListTeknisi) {
		this.ipsrsPelaksanaanPerbaikanListTeknisi = ipsrsPelaksanaanPerbaikanListTeknisi;
	}

	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;
	}

}
