package br.usp.nds.remote.persistencia; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Transient; @Entity public class Ticket extends Entidade implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int codigo; private Date criacao; private String decricao; @Enumerated(EnumType.STRING) private Prioridade prioridade; @Enumerated(EnumType.STRING) private Status status; @ManyToOne private Evento evento; @ManyToOne private Subsistema subsistema; @ManyToOne private Usuario criador; @ManyToOne private Usuario responsavel; @ManyToOne private Embarcacao embarcacao; @OneToMany(fetch = FetchType.EAGER, mappedBy = "ticket") @OrderBy("codigo") private List historico; @Transient private String codigosEmbarcacoes; @Transient private String inicio; @Transient private String fim; public void incluir() { criacao = new Date(); status = Status.ABERTO; criador = em.find(Usuario.class, request.getUserPrincipal().getName()); em.persist(this); TicketHistorico h = new TicketHistorico(); h.setAtualizacao(criacao); h.setComentario(decricao); h.setStatus(status); h.setTicket(this); h.setAtualizador(em.find(Usuario.class, request.getUserPrincipal().getName())); em.persist(h); } public void alterarResponsavel() { Ticket ticket = em.find(Ticket.class, codigo); ticket.setResponsavel(em.find(Usuario.class, responsavel.getEmail())); } public void alterarPrioridade() { Ticket ticket = em.find(Ticket.class, codigo); ticket.setPrioridade(prioridade); } public void alterarStatus() { Ticket ticket = em.find(Ticket.class, codigo); ticket.setStatus(status); } public void alterar() { Ticket ticket = em.find(Ticket.class, codigo); TicketHistorico h = new TicketHistorico(); h.setAtualizacao(new Date()); h.setComentario(decricao); h.setStatus(ticket.getStatus()); h.setTicket(ticket); h.setAtualizador(em.find(Usuario.class, request.getUserPrincipal().getName())); em.persist(h); } public List listar() { String sql = "SELECT t FROM Ticket t WHERE 1 = 1"; if (prioridade != null) { sql += " AND t.prioridade = '" + prioridade + "'"; } if (status != null) { sql += " AND t.status = '" + status + "'"; } if (!(codigosEmbarcacoes != null && !codigosEmbarcacoes.isEmpty())) { codigosEmbarcacoes = "0"; } sql += " AND t.embarcacao.codigo IN (" + codigosEmbarcacoes + ")"; if (inicio != null && !inicio.isEmpty()) { sql += " AND YEAR(t.criacao) * 10000 + MONTH(t.criacao) * 100 + DAY(t.criacao) >= " + inicio.substring(6, 10) + inicio.substring(3, 5) + inicio.substring(0, 2); } if (fim != null && !fim.isEmpty()) { sql += " AND YEAR(t.criacao) * 10000 + MONTH(t.criacao) * 100 + DAY(t.criacao) <= " + fim.substring(6, 10) + fim.substring(3, 5) + fim.substring(0, 2); } sql += " ORDER BY t.codigo"; return em.createQuery(sql).getResultList(); } public List listarUltimos() { return em.createQuery("SELECT t FROM Ticket t WHERE t.embarcacao.codigo = " + codigosEmbarcacoes + " ORDER BY t.codigo DESC").setMaxResults(5).getResultList(); } public Date getDataUltimaAtualizacao() { if (historico != null && !historico.isEmpty()) { return historico.get(historico.size() - 1).getAtualizacao(); } return criacao; } public String getInicio() { return inicio; } public void setInicio(String inicio) { this.inicio = inicio; } public String getFim() { return fim; } public void setFim(String fim) { this.fim = fim; } public Usuario getResponsavel() { return responsavel; } public void setResponsavel(Usuario responsavel) { this.responsavel = responsavel; } public String getCodigosEmbarcacoes() { return codigosEmbarcacoes; } public void setCodigosEmbarcacoes(String codigosEmbarcacoes) { this.codigosEmbarcacoes = codigosEmbarcacoes; } public List getHistorico() { return historico; } public void setHistorico(List historico) { this.historico = historico; } public Usuario getCriador() { return criador; } public void setCriador(Usuario criador) { this.criador = criador; } public Embarcacao getEmbarcacao() { return embarcacao; } public void setEmbarcacao(Embarcacao embarcacao) { this.embarcacao = embarcacao; } public String getDecricao() { return decricao; } public void setDecricao(String decricao) { this.decricao = decricao; } public Subsistema getSubsistema() { return subsistema; } public void setSubsistema(Subsistema subsistema) { this.subsistema = subsistema; } public Evento getEvento() { return evento; } public void setEvento(Evento evento) { this.evento = evento; } public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public Date getCriacao() { return criacao; } public void setCriacao(Date criacao) { this.criacao = criacao; } public Prioridade getPrioridade() { return prioridade; } public void setPrioridade(Prioridade prioridade) { this.prioridade = prioridade; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } }