package br.com.ec.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.file.UploadedFile;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.ArquivoUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ImagemDTO;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.model.Avaliacao;
import br.com.ec.domain.model.AvaliacaoProduto;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.AvaliacaoService;
import br.com.ec.domain.service.ImagemService;
import br.com.ec.domain.service.VigenciaService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;
@Named
@Scope
("view")
public class GestaoMensalArquivosBean
extends AbstractBean
<Vigencia
> implements Serializable {
private static final long serialVersionUID = 1L
;
private VigenciaService vigenciaService
;
private AvaliacaoService avaliacaoService
;
private ImagemService imagemService
;
private VigenciaDTO vigenciaSelecionada
;
private List<AvaliacaoProduto
> produtosPromocaoInterna
;
private String codigoProdutoParaVincular
;
private ImagemDTO imagemDTO
;
private UploadedFile imagemParaUpload
;
@Inject
public GestaoMensalArquivosBean
(VigenciaService vigenciaService, AvaliacaoService avaliacaoService, ImagemService imagemService
) {
this.
vigenciaService = vigenciaService
;
this.
avaliacaoService = avaliacaoService
;
this.
imagemService = imagemService
;
}
@
Override
public void preCarregamento
() {
limparEntidade
();
}
@PostConstruct
private void posCarregamento
() {
if (VerificadorUtil.
estaNulo(vigenciaSelecionada
)) {
if (VerificadorUtil.
naoEstaNulo(getParametro
("vigencia"))) {
setVigenciaSelecionada
(vigenciaService.
consultarVigencia(new Long(getParametro
("vigencia").
toString())));
}
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new Vigencia
());
}
@
Override
public GenericService
<Vigencia
> getService
() {
return vigenciaService
;
}
@
Override
public Vigencia getEntidade
() {
return entidade
;
}
@
Override
public void preConsultar
() {
setTipoOperacao
(TipoOperacao.
CONSULTAR);
}
@
Override
public Vigencia getId
() {
return getEntidade
();
}
public VigenciaDTO getVigenciaSelecionada
() {
return vigenciaSelecionada
;
}
public void setVigenciaSelecionada
(VigenciaDTO vigenciaSelecionada
) {
this.
vigenciaSelecionada = vigenciaSelecionada
;
}
public List<AvaliacaoProduto
> getProdutosPromocaoInterna
() {
return produtosPromocaoInterna
;
}
public void setProdutosPromocaoInterna
(List<AvaliacaoProduto
> produtosPromocaoInterna
) {
this.
produtosPromocaoInterna = produtosPromocaoInterna
;
}
public String getCodigoProdutoParaVincular
() {
return codigoProdutoParaVincular
;
}
public void setCodigoProdutoParaVincular
(String codigoProdutoParaVincular
) {
this.
codigoProdutoParaVincular = codigoProdutoParaVincular
;
}
public ImagemDTO getImagemDTO
() {
return imagemDTO
;
}
public void setImagemDTO
(ImagemDTO imagemDTO
) {
this.
imagemDTO = imagemDTO
;
}
public UploadedFile getImagemParaUpload
() {
return imagemParaUpload
;
}
public void setImagemParaUpload
(UploadedFile imagemParaUpload
) {
this.
imagemParaUpload = imagemParaUpload
;
}
/***************************************************************/
public void uploadImagemPromocoes
(final FileUploadEvent e
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
uploadImagem
(e,
"promocoes_");
}
});
}
public void uploadImagemEscala
(final FileUploadEvent e
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
uploadImagem
(e,
"escala_");
}
});
}
public void uploadImagemDestaques
(final FileUploadEvent e
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
uploadImagem
(e,
"destaques_");
}
});
}
private void uploadImagem
(final FileUploadEvent e,
String caminho
) {
ImagemDTO imagemAdicionada = gerarArquivo
(e.
getFile());
imagemAdicionada.
setDescricao(caminho + getVigenciaSelecionada
().
getSequencial());
// imagemAdicionada.compactarImagem();
// imagemAdicionada.converterPngParaJpg();
lancarExcecaoCasoArquivoExcedeuLimite
(imagemAdicionada
);
setImagemParaUpload
(e.
getFile());
uploadFisico
(imagemAdicionada
);
}
public ImagemDTO gerarArquivo
(UploadedFile file
) {
ImagemDTO arquivo =
new ImagemDTO
();
arquivo.
setArquivo(file.
getContent());
arquivo.
setDescricao(file.
getFileName());
arquivo.
setExtensao(ArquivoUtil.
retornarExtensaoDoArquivo(file.
getFileName()));
return arquivo
;
}
private void lancarExcecaoCasoArquivoExcedeuLimite
(ImagemDTO arquivoGerado
) {
if (arquivoGerado.
isExcedeuLimite()) {
throw new NegocioException
("Arquivo: " + arquivoGerado.
getDescricao() +
" excedeu o limite de 3000 kbytes. ");
}
}
public void uploadFisico
(ImagemDTO arquivoGerado
) {
String caminho = imagemService.
caminhoPastaImagens() + arquivoGerado.
getDescricao() +
"." + arquivoGerado.
getExtensao();
FileOutputStream fos
;
try {
fos =
new FileOutputStream(caminho
);
fos.
write(arquivoGerado.
getArquivo());
fos.
close();
} catch (Exception e1
) {
e1.
printStackTrace();
}
}
public void removerImagemPromocoes
() {
String caminhoPromocao = getVigenciaSelecionada
().
getImagemPromocoes();
if (!caminhoPromocao.
contains("SEM")) {
File imagem =
new File(caminhoPromocao
);
imagem.
delete();
}
}
public void removerImagemEscala
() {
String caminhoPromocao = getVigenciaSelecionada
().
getImagemEscala();
if (!caminhoPromocao.
contains("SEM")) {
File imagem =
new File(caminhoPromocao
);
imagem.
delete();
}
}
public void removerImagemDestaques
() {
String caminhoPromocao = getVigenciaSelecionada
().
getImagemDestaques();
if (!caminhoPromocao.
contains("SEM")) {
File imagem =
new File(caminhoPromocao
);
imagem.
delete();
}
}
/**************************************************/
public void redirecionarGestaoMensal
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
try {
LancadorMensagem.
redirecionarTela("/sistema/gestao_mensal/gestao_mensal.xhtml");
} catch (IOException e
) {
e.
printStackTrace();
}
}
});
}
public void consultarProdutosPromocaoInterna
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setProdutosPromocaoInterna
(avaliacaoService.
consultarProdutosPromocaoInterna(getEntidade
().
getSequencial()));
}
});
}
public void vincularProdutoPromocaoInterna
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
// avaliacaoService.cadastrarProdutoPromocaoInterna(getEntidade(), getCodigoProdutoParaVincular());
// setProdutosPromocaoInterna(avaliacaoService.consultarProdutosPromocaoInterna(getEntidade().getSequencial()));
// LancadorMensagem.lancarSucesso("PRODUTO " + getCodigoProdutoParaVincular() + " VINCULADO COM SUCESSO");
// setCodigoProdutoParaVincular(null);
}
});
}
public void desvincularProdutoPromocaoInterna
(final AvaliacaoProduto avaliacaoProduto
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
avaliacaoService.
excluirProdutoPromocaoInterna(avaliacaoProduto
);
setProdutosPromocaoInterna
(avaliacaoService.
consultarProdutosPromocaoInterna(getEntidade
().
getSequencial()));
LancadorMensagem.
lancarSucesso("PRODUTO DESVINCULADO COM SUCESSO");
}
});
}
}