package br.com.centralit.citcorpore.ajaxForms;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.html.HTMLForm;
import br.com.centralit.citcorpore.bean.CategoriaProdutoDTO;
import br.com.centralit.citcorpore.bean.CriterioAvaliacaoDTO;
import br.com.centralit.citcorpore.bean.CriterioCotacaoCategoriaDTO;
import br.com.centralit.citcorpore.bean.UploadDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.CategoriaProdutoService;
import br.com.centralit.citcorpore.negocio.CriterioAvaliacaoService;
import br.com.centralit.citcorpore.negocio.CriterioCotacaoCategoriaService;
import br.com.centralit.citcorpore.util.Arquivo;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.centralit.citged.bean.ControleGEDDTO;
import br.com.centralit.citged.negocio.ControleGEDService;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilI18N;
import br.com.citframework.util.UtilStrings;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class CategoriaProduto extends AjaxFormAction {
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
UsuarioDTO usuario = WebUtil.getUsuario(request);
request.getSession(true).setAttribute("colUploadsGED", null);
if (usuario == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
CriterioAvaliacaoService criterioAvaliacaoService = (CriterioAvaliacaoService) ServiceLocator.getInstance().getService(CriterioAvaliacaoService.class, WebUtil.getUsuarioSistema(request));
Collection<CriterioAvaliacaoDTO> colCriterios = criterioAvaliacaoService.findByAplicavelCotacao();
request.setAttribute("colCriterios", colCriterios);
montaHierarquiaCategoria(document, request, response);
this.atualizaImagem(document, request, response);
}
public void save(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
CategoriaProdutoDTO categoriaProduto = (CategoriaProdutoDTO) document.getBean();
CategoriaProdutoService categoriaService = (CategoriaProdutoService) ServiceLocator.getInstance().getService(CategoriaProdutoService.class, null);
if (categoriaProduto != null && categoriaService != null) {
String prontuarioGedInternoBancoDados = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedInternoBD, "N");
if (categoriaService.existeIgual(categoriaProduto)) {
document.alert(UtilI18N.internacionaliza(request, "MSE01"));
return;
}
if (categoriaProduto.getIdCategoria() != null && categoriaProduto.getIdCategoria().equals(categoriaProduto.getIdCategoriaPai())) {
document.alert(UtilI18N.internacionaliza(request, "categoriaProduto.categoria_invalida"));
return;
}
if (!UtilStrings.isNotVazio(prontuarioGedInternoBancoDados)) {
prontuarioGedInternoBancoDados = "N";
}
Collection<CriterioCotacaoCategoriaDTO> colCriterios = br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(CriterioCotacaoCategoriaDTO.class, "colCriterios_Serialize",
request);
if (colCriterios != null && !colCriterios.isEmpty()) {
categoriaProduto.setColCriterios(colCriterios);
for (CriterioCotacaoCategoriaDTO criterio : colCriterios) {
if (criterio.getPesoCotacao() < 0 || criterio.getPesoCotacao() > 10) {
document.alert(String.format("%s %s %d%s %s %s", UtilI18N.internacionaliza(request, "categoriaProduto.valorInformado"),
UtilI18N.internacionaliza(request, "citcorpore.texto.artigoDefinido.o"), criterio.getSequencia(),
UtilI18N.internacionaliza(request, "citcorpore.texto.sufixo.ordemNumero.masculino"), UtilI18N.internacionaliza(request, "avaliacaoFornecedor.criterio").toLowerCase(),
UtilI18N.internacionaliza(request, "categoriaProduto.invalidoforaIntervalo")));
String seqZeros = "00000";
if (criterio.getSequencia() > 0 && criterio.getSequencia() < 10) {
seqZeros = "0000";
} else if (criterio.getSequencia() > 10 && criterio.getSequencia() < 100) {
seqZeros = "000";
} else if (criterio.getSequencia() > 100 && criterio.getSequencia() < 1000) {
seqZeros = "00";
} else if (criterio.getSequencia() > 1000 && criterio.getSequencia() < 10000) {
seqZeros = "0";
} else {
seqZeros = "";
}
document.executeScript(String.format("$('#pesoCotacao%s%s').val('').focus()", seqZeros, criterio.getSequencia()));
return;
}
}
}
Collection<UploadDTO> fotos = (Collection<UploadDTO>) request.getSession(true).getAttribute("colUploadsGED");
categoriaProduto.setFotos(fotos);
if (categoriaProduto.getIdCategoria() == null) {
categoriaProduto = (CategoriaProdutoDTO) categoriaService.create(categoriaProduto);
document.alert(UtilI18N.internacionaliza(request, "MSG05"));
} else {
categoriaService.update(categoriaProduto);
document.alert(UtilI18N.internacionaliza(request, "MSG06"));
}
request.getSession(true).setAttribute("colUploadsGED", null);
HTMLForm form = document.getForm("form");
HTMLForm formFotos = document.getForm("formUpload");
formFotos.clear();
form.clear();
document.setBean(new CategoriaProdutoDTO());
montaHierarquiaCategoria(document, request, response);
document.executeScript("situacaoAtivo()");
document.executeScript("document.getElementById('divImgFoto').innerHTML = ''");
}
}
public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
request.getSession(true).setAttribute("colUploadsGED", null);
CategoriaProdutoDTO categoriaProduto = (CategoriaProdutoDTO) document.getBean();
CategoriaProdutoService categoriaService = (CategoriaProdutoService) ServiceLocator.getInstance().getService(CategoriaProdutoService.class, null);
if (categoriaProduto != null && categoriaService != null) {
categoriaProduto = (CategoriaProdutoDTO) categoriaService.restore(categoriaProduto);
if (categoriaProduto != null) {
if (categoriaProduto.getIdCategoriaPai() != null) {
CategoriaProdutoDTO categoriaProdutoPai = new CategoriaProdutoDTO();
categoriaProdutoPai.setIdCategoria(categoriaProduto.getIdCategoriaPai());
categoriaProdutoPai = (CategoriaProdutoDTO) categoriaService.restore(categoriaProdutoPai);
/*
* Rodrigo Pecci Acorse - 19/03/2014 10h40 - #132777
* StringEscapeUtils.escapeJavaScript removido pois estava quebrando a acentua��o na exibi��o do nome
*/
categoriaProduto.setNomeCategoriaPai(categoriaProdutoPai.getNomeCategoria());
}
if(categoriaProduto.getNomeCategoria()!=null){
//categoriaProduto.setNomeCategoria(StringEscapeUtils.escapeJavaScript(categoriaProduto.getNomeCategoria()));
categoriaProduto.setNomeCategoria(UtilStrings.decodeCaracteresEspeciais(categoriaProduto.getNomeCategoria()));
}
HTMLForm form = document.getForm("form");
HTMLForm formFotos = document.getForm("formUpload");
form.clear();
formFotos.clear();
form.setValues(categoriaProduto);
restaurarAnexos(request, categoriaProduto.getIdCategoria());
CriterioCotacaoCategoriaService criterioCotacaoService = (CriterioCotacaoCategoriaService) ServiceLocator.getInstance().getService(CriterioCotacaoCategoriaService.class, null);
Collection<CriterioCotacaoCategoriaDTO> colCriterios = criterioCotacaoService.findByIdCategoria(categoriaProduto.getIdCategoria());
document.executeScript("GRID_CRITERIOS.deleteAllRows();");
if (colCriterios != null) {
int i = 0;
for (CriterioCotacaoCategoriaDTO criterioDto : colCriterios) {
i++;
document.executeScript("GRID_CRITERIOS.addRow()");
criterioDto.setSequencia(i);
document.executeScript("seqCriterio = NumberUtil.zerosAEsquerda(" + i + ",5)");
document.executeScript("exibeCriterio('" + br.com.citframework.util.WebUtil.serializeObject(criterioDto, WebUtil.getLanguage(request)) + "')");
}
}
categoriaService.recuperaImagem(categoriaProduto);
document.executeScript("document.getElementById('divImgFoto').innerHTML = '<img id=\"img\" name=\"img\" style=\"max-height: 100px; max-width: 60%;\" src=\""+(categoriaProduto.getImagem() != null ? categoriaProduto.getImagem() : "")+"\" />'");
}
} else {
document.executeScript("document.getElementById('divImgFoto').innerHTML = ''");
}
}
public void remove(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
CategoriaProdutoDTO categoriaProduto = (CategoriaProdutoDTO) document.getBean();
CategoriaProdutoService categoriaService = (CategoriaProdutoService) ServiceLocator.getInstance().getService(CategoriaProdutoService.class, null);
try {
categoriaService.delete(categoriaProduto);
document.alert(UtilI18N.internacionaliza(request, "MSG07"));
request.getSession(true).setAttribute("colUploadsGED", null);
HTMLForm form = document.getForm("form");
HTMLForm formFotos = document.getForm("formUpload");
formFotos.clear();
form.clear();
document.executeScript("document.getElementById('divImgFoto').innerHTML = ''");
document.setBean(new CategoriaProdutoDTO());
montaHierarquiaCategoria(document, request, response);
} catch (Exception e) {
document.alert(UtilI18N.internacionaliza(request, "categoriaProduto.possui_relacionamento"));
}
}
protected void restaurarAnexos(HttpServletRequest request, Integer idCategoria) throws ServiceException, Exception {
ControleGEDService controleGedService = (ControleGEDService) ServiceLocator.getInstance().getService(ControleGEDService.class, null);
Collection colAnexos = controleGedService.listByIdTabelaAndID(ControleGEDDTO.TABELA_CATEGORIAPRODUTO, idCategoria);
Collection colAnexosUploadDTO = controleGedService.convertListControleGEDToUploadDTO(colAnexos);
request.getSession(true).setAttribute("colUploadsGED", colAnexosUploadDTO);
}
public void montaHierarquiaCategoria(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
String result = "";
CategoriaProdutoService categoriaProdutoService = (CategoriaProdutoService) ServiceLocator.getInstance().getService(CategoriaProdutoService.class, WebUtil.getUsuarioSistema(request));
Collection<CategoriaProdutoDTO> colCategorias = categoriaProdutoService.list();
if (colCategorias != null) {
int maiorNivel = 0;
for (CategoriaProdutoDTO categoriaProdutoDto : colCategorias) {
if (categoriaProdutoDto.getNivel().intValue() > maiorNivel)
maiorNivel = categoriaProdutoDto.getNivel().intValue();
}
result = "<table>";
for (CategoriaProdutoDTO categoriaProdutoDto : colCategorias) {
categoriaProdutoService.recuperaImagem(categoriaProdutoDto);
String path = categoriaProdutoDto.getImagem();
if (path == null || path.equals(""))
path = Constantes.getValue("CONTEXTO_APLICACAO") + "/imagens/folder.png";
result += "<tr id='trCateg_" + categoriaProdutoDto.getIdCategoria() + "' style=\"cursor: pointer;\" >";
result += "<td><table><tr>";
for (int i = 0; i <= categoriaProdutoDto.getNivel().intValue(); i++) {
if (i < categoriaProdutoDto.getNivel().intValue())
result += "<td width='20px'> </td>";
else
result += "<td onclick=\"restaurarCategoria(" + categoriaProdutoDto.getIdCategoria() + ");\"><img style='width:16px;height:16px' src=\"" + path + "\" />"
+ categoriaProdutoDto.getNomeCategoria() + "</td>";
}
result += "</tr></table></td>";
result += "</tr>";
}
result += "</table>";
}
document.getElementById("divCategoria").setInnerHTML(result);
}
public void atualizaImagem(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws ServiceException, Exception{
CategoriaProdutoDTO categoriaProduto = (CategoriaProdutoDTO) document.getBean();
CategoriaProdutoService categoriaService = (CategoriaProdutoService) ServiceLocator.getInstance().getService(CategoriaProdutoService.class, null);
categoriaService.recuperaImagem(categoriaProduto);
document.executeScript("document.getElementById('divImgFoto').innerHTML = '<img id=\"img\" name=\"img\" style=\"max-height: 100px; max-width: 60%;\" src=\""+(categoriaProduto.getImagem() != null ? categoriaProduto.getImagem() : "") +"\" />'");
}
public void mostraImagem(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws ServiceException, Exception{
Collection<UploadDTO> fotos = (Collection<UploadDTO>) request.getSession(true).getAttribute("colUploadsGED");
if (fotos != null && fotos.size() > 0) {
for (UploadDTO uploadDTO : fotos) {
document.executeScript("document.getElementById('divImgFoto').innerHTML = '<img id=\"img\" name=\"img\" style=\"max-height: 100px; max-width: 60%;\" src=\""+ (Arquivo.getDirUploadImagem(uploadDTO) != null ? Arquivo.getDirUploadImagem(uploadDTO) : "") +"\" />'");
}
}
}
/**
* Copia Arquivo do diretorio temporario para Diretorio definitivo.
*
* @param fonte
* @param destino
* @throws IOException
* @author valdoilo.damasceno
*/
public void copiarArquivo(File fonte, String destino) throws IOException {
InputStream in;
try {
in = new FileInputStream(fonte);
OutputStream out = new FileOutputStream(new File(destino));
byte[] buf = new byte[1024];
int len;
try {
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
in.close();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
public Class getBeanClass() {
return CategoriaProdutoDTO.class;
}
}