package br.com.ec.controller.managedbean;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import br.com.ec.domain.dto.FiltroComprovanteAvaria;
import br.com.ec.domain.dto.FiltroComprovanteCupom;
import br.com.ec.domain.dto.FiltroComprovanteRegistroPonto;
import br.com.ec.domain.dto.FiltroComprovanteReserva;
import br.com.ec.domain.dto.FiltroComprovanteReservaPedido;
import br.com.ec.domain.dto.FiltroComprovanteTransferencia;
import br.com.ec.domain.dto.FiltroComprovanteTroca;
import br.com.ec.domain.dto.PedidoDTO;
import br.com.ec.domain.dto.ReservaProdutoDTO;
import br.com.ec.domain.model.Cupom;
import br.com.ec.domain.model.EstoqueAuditoria;
import br.com.ec.domain.model.Ponto;
import br.com.ec.domain.model.Transferencia;
import br.com.ec.domain.service.emissorrelatorio.EmissorRelatorioService;
import br.edu.cesmac.core.exception.NegocioException;
import br.edu.cesmac.core.util.VerificadorUtil;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
@Named
@ManagedBean
@RequestScoped
public class ComprovanteBean
implements Serializable {
// private static final String SEM_FOTO_JPG = "sem_foto.jpg";
private static final long serialVersionUID = 1L
;
private EstoqueAuditoria estoqueAuditoria
;
private ReservaProdutoDTO reservaProduto
;
private PedidoDTO pedido
;
private Cupom cupom
;
private Transferencia transferencia
;
private Ponto ponto
;
private Boolean emitirComprovante =
false;
private StreamedContent comprovanteAvariaGerado
;
private StreamedContent comprovanteTrocaGerado
;
private StreamedContent comprovanteReservaGerado
;
private StreamedContent comprovanteReservaPedidoGerado
;
private StreamedContent comprovanteCupomGerado
;
private StreamedContent comprovanteTransferenciaGerado
;
private StreamedContent comprovanteRegistroPontoGerado
;
private EmissorRelatorioService emissorRelatorioService
;
@Inject
public ComprovanteBean
(EmissorRelatorioService emissorRelatorioService
) {
this.
emissorRelatorioService = emissorRelatorioService
;
}
public EstoqueAuditoria getEstoqueAuditoria
() {
return estoqueAuditoria
;
}
public void setEstoqueAuditoria
(EstoqueAuditoria estoqueAuditoria
) {
this.
estoqueAuditoria = estoqueAuditoria
;
}
public Long getSequencialEstoqueAuditoria
() {
return VerificadorUtil.
naoEstaNulo(getEstoqueAuditoria
())? getEstoqueAuditoria
().
getSequencial() :
null;
}
public ReservaProdutoDTO getReservaProduto
() {
return reservaProduto
;
}
public void setReservaProduto
(ReservaProdutoDTO reservaProduto
) {
this.
reservaProduto = reservaProduto
;
}
public PedidoDTO getPedido
() {
return pedido
;
}
public void setPedido
(PedidoDTO pedido
) {
this.
pedido = pedido
;
}
public Long getSequencialPedido
() {
return VerificadorUtil.
naoEstaNulo(getPedido
())? getPedido
().
getSequencial() :
null;
}
public Cupom getCupom
() {
return cupom
;
}
public void setCupom
(Cupom cupom
) {
this.
cupom = cupom
;
}
public Long getSequencialCupom
() {
return VerificadorUtil.
naoEstaNulo(getCupom
())? getCupom
().
getSequencial() :
null;
}
public Transferencia getTransferencia
() {
return transferencia
;
}
public void setTransferencia
(Transferencia transferencia
) {
this.
transferencia = transferencia
;
}
public Long getSequencialTransferencia
() {
return VerificadorUtil.
naoEstaNulo(getTransferencia
())? getTransferencia
().
getSequencial() :
null;
}
public Ponto getPonto
() {
return ponto
;
}
public void setPonto
(Ponto ponto
) {
this.
ponto = ponto
;
}
/****************************************************/
public Boolean getEmitirComprovante
() {
return emitirComprovante
;
}
public void setEmitirComprovante
(Boolean emitirComprovante
) {
this.
emitirComprovante = emitirComprovante
;
}
public StreamedContent getComprovanteAvariaGerado
() {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteAvaria
(estoqueAuditoria
));
setComprovanteAvariaGerado
(gerarComprovante
(relatorio
));
setEmitirComprovante
(false);
return comprovanteAvariaGerado
;
}
return comprovanteAvariaGerado
;
}
public void setComprovanteAvariaGerado
(StreamedContent comprovanteAvariaGerado
) {
this.
comprovanteAvariaGerado = comprovanteAvariaGerado
;
}
public StreamedContent getComprovanteTrocaGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteTroca
(estoqueAuditoria
));
setComprovanteTrocaGerado
(gerarComprovante
(relatorio
));
return comprovanteTrocaGerado
;
}
} finally {
setEmitirComprovante
(false);
}
return comprovanteTrocaGerado
;
}
public void setComprovanteTrocaGerado
(StreamedContent comprovanteTrocaGerado
) {
this.
comprovanteTrocaGerado = comprovanteTrocaGerado
;
}
public StreamedContent getComprovanteReservaGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteReserva
(reservaProduto
));
setComprovanteReservaGerado
(gerarComprovante
(relatorio
));
return comprovanteReservaGerado
;
}
} finally {
setEmitirComprovante
(false);
}
return comprovanteReservaGerado
;
}
public void setComprovanteReservaGerado
(StreamedContent comprovanteReservaGerado
) {
this.
comprovanteReservaGerado = comprovanteReservaGerado
;
}
public StreamedContent getComprovanteCupomGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteCupom
(cupom
));
setComprovanteCupomGerado
(gerarComprovante
(relatorio
));
return comprovanteCupomGerado
;
}
} finally {
setEmitirComprovante
(false);
}
return comprovanteCupomGerado
;
}
public void setComprovanteCupomGerado
(StreamedContent comprovanteCupomGerado
) {
this.
comprovanteCupomGerado = comprovanteCupomGerado
;
}
public StreamedContent getComprovanteReservaPedidoGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteReservaPedido
(pedido
));
setComprovanteReservaPedidoGerado
(gerarComprovante
(relatorio
));
return comprovanteReservaPedidoGerado
;
}
} finally {
setEmitirComprovante
(false);
}
return comprovanteReservaPedidoGerado
;
}
public void setComprovanteReservaPedidoGerado
(StreamedContent comprovanteReservaPedidoGerado
) {
this.
comprovanteReservaPedidoGerado = comprovanteReservaPedidoGerado
;
}
public StreamedContent getComprovanteTransferenciaGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteTransferencia
(transferencia
));
setComprovanteTransferenciaGerado
(gerarComprovante
(relatorio
));
}
} catch (Exception e
) {
e.
printStackTrace();
} finally {
setEmitirComprovante
(false);
}
return comprovanteTransferenciaGerado
;
}
public void setComprovanteTransferenciaGerado
(StreamedContent comprovanteTransferenciaGerado
) {
this.
comprovanteTransferenciaGerado = comprovanteTransferenciaGerado
;
}
public StreamedContent getComprovanteRegistroPontoGerado
() {
try {
if (getEmitirComprovante
()) {
JasperPrint relatorio = emissorRelatorioService.
emitirComprovante(new FiltroComprovanteRegistroPonto
(ponto
));
setComprovanteRegistroPontoGerado
(gerarComprovante
(relatorio
));
}
} catch (Exception e
) {
e.
printStackTrace();
} finally {
setEmitirComprovante
(false);
}
return comprovanteRegistroPontoGerado
;
}
public void setComprovanteRegistroPontoGerado
(StreamedContent comprovanteRegistroPontoGerado
) {
this.
comprovanteRegistroPontoGerado = comprovanteRegistroPontoGerado
;
}
/*************************************/
public void prepararGerarComprovante
(PedidoDTO pedido
) {
setEmitirComprovante
(true);
setPedido
(pedido
);
}
public void prepararGerarComprovante
(EstoqueAuditoria estoqueAuditoria
) {
setEmitirComprovante
(true);
setEstoqueAuditoria
(estoqueAuditoria
);
}
public void prepararGerarComprovante
(ReservaProdutoDTO reservaProduto
) {
setEmitirComprovante
(true);
setReservaProduto
(reservaProduto
);
}
public void prepararGerarComprovante
(Cupom cupom
) {
setEmitirComprovante
(true);
setCupom
(cupom
);
}
public void prepararGerarComprovante
(Transferencia transferencia
) {
setEmitirComprovante
(true);
setTransferencia
(transferencia
);
}
public StreamedContent gerarComprovante
(JasperPrint relatorio
) {
setEmitirComprovante
(false);
return (StreamedContent
) new DefaultStreamedContent
(new ByteArrayInputStream(retornarByterRelatorio
(relatorio
)),
"image/png",
"comprovante.png");
}
private byte[] retornarByterRelatorio
(final JasperPrint relatorio
) {
byte[] imageBytes =
null;
try {
BufferedImage bufferedImage =
(BufferedImage) JasperPrintManager.
printPageToImage(relatorio,
0, 2.0f
);
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
ImageIO.
write(bufferedImage,
"png", baos
);
imageBytes = baos.
toByteArray();
} catch (Exception e
) {
e.
printStackTrace();
throw new NegocioException
(e.
getMessage());
}
return imageBytes
;
}
}