package br.com.centralit.citcorpore.ajaxForms;
import java.util.Collection;
import java.util.List;
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.citajax.html.HTMLTable;
import br.com.centralit.citcorpore.bean.CentroResultadoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.HistoricoRespCentroResultadoDTO;
import br.com.centralit.citcorpore.bean.ProcessoNegocioDTO;
import br.com.centralit.citcorpore.bean.ResponsavelCentroResultadoDTO;
import br.com.centralit.citcorpore.bean.ResponsavelCentroResultadoProcessoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.CentroResultadoService;
import br.com.centralit.citcorpore.negocio.EmpregadoService;
import br.com.centralit.citcorpore.negocio.HistoricoRespCentroResultadoService;
import br.com.centralit.citcorpore.negocio.ProcessoNegocioService;
import br.com.centralit.citcorpore.negocio.ResponsavelCentroResultadoProcessoService;
import br.com.centralit.citcorpore.negocio.ResponsavelCentroResultadoService;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilI18N;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class CentroResultado extends AjaxFormAction {
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
UsuarioDTO usuario = WebUtil.getUsuario(request);
CentroResultadoDTO centroResultadoDTO = (CentroResultadoDTO) document.getBean();
if (usuario == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
// L�gica de verifica��o dos radiobuttons de acordo com a opera��o: inser��o ou atualiza��o.
document.executeScript("$('#permiteRequisicaoProdutoSim').attr('checked', true)");
document.executeScript("$('#situacaoAtivo').attr('checked', true)");
if (centroResultadoDTO != null && centroResultadoDTO.getIdCentroResultado() == null) {
document.executeScript("$('#situacaoInativo').attr('disabled', true)");
}
document.executeScript("GRID_RESPONSAVEIS.deleteAllRows();");
HTMLTable tblHistorico = document.getTableById("tblHistorico");
tblHistorico.deleteAllRows();
ProcessoNegocioService processoNegocioService = (ProcessoNegocioService) ServiceLocator.getInstance().getService(ProcessoNegocioService.class, WebUtil.getUsuarioSistema(request));
Collection<ProcessoNegocioDTO> colProcessosNegocio = processoNegocioService.list();
request.setAttribute("colProcessosNegocio", colProcessosNegocio);
}
public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
CentroResultadoDTO centroResultadoDTO = (CentroResultadoDTO) document.getBean();
CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, null);
if (centroResultadoDTO == null || centroResultadoDTO.getIdCentroResultado() == null)
return;
centroResultadoDTO = (CentroResultadoDTO) centroResultadoService.restore(centroResultadoDTO);
if (centroResultadoDTO != null) {
if (centroResultadoDTO.getIdCentroResultadoPai() != null) {
CentroResultadoDTO centroResultadoPaiDTO = new CentroResultadoDTO();
centroResultadoPaiDTO.setIdCentroResultado(centroResultadoDTO.getIdCentroResultadoPai());
centroResultadoPaiDTO = (CentroResultadoDTO) centroResultadoService.restore(centroResultadoPaiDTO);
centroResultadoDTO.setNomeCentroResultadoPai(centroResultadoPaiDTO.getNomeCentroResultado());
}
HTMLForm form = document.getForm("form");
form.clear();
form.setValues(centroResultadoDTO);
document.executeScript("$('#situacaoInativo').attr('disabled', false)");
ResponsavelCentroResultadoService responsavelCentroResultadoService = (ResponsavelCentroResultadoService) ServiceLocator.getInstance().getService(ResponsavelCentroResultadoService.class, null);
Collection<ResponsavelCentroResultadoDTO> colResponsaveis = responsavelCentroResultadoService.findByIdCentroResultado(centroResultadoDTO.getIdCentroResultado());
document.executeScript("GRID_RESPONSAVEIS.deleteAllRows();");
if (colResponsaveis != null) {
ResponsavelCentroResultadoProcessoService responsavelCentroResultadoProcessoService = (ResponsavelCentroResultadoProcessoService) ServiceLocator.getInstance().getService(ResponsavelCentroResultadoProcessoService.class, null);
EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null);
int i = 0;
for (ResponsavelCentroResultadoDTO responsavelDto : colResponsaveis) {
EmpregadoDTO empregadoDto = empregadoService.restoreByIdEmpregado(responsavelDto.getIdResponsavel());
if (empregadoDto != null)
responsavelDto.setNomeEmpregado(empregadoDto.getNome());
Collection<ResponsavelCentroResultadoProcessoDTO> colProcessos = responsavelCentroResultadoProcessoService.findByIdCentroResultadoAndIdResponsavel(responsavelDto.getIdCentroResultado(), responsavelDto.getIdResponsavel());
if (colProcessos != null) {
String idProcessoNegocioStr = "";
int p = 0;
for (ResponsavelCentroResultadoProcessoDTO processoDto: colProcessos) {
if (p > 0)
idProcessoNegocioStr += ",";
idProcessoNegocioStr += ""+processoDto.getIdProcessoNegocio();
p++;
}
responsavelDto.setIdProcessoNegocioStr(idProcessoNegocioStr);
}
i++;
document.executeScript("GRID_RESPONSAVEIS.addRow()");
responsavelDto.setSequencia(i);
document.executeScript("seqResponsavel = NumberUtil.zerosAEsquerda(" + i + ",5)");
document.executeScript("exibeResponsavel('" + br.com.citframework.util.WebUtil.serializeObject(responsavelDto, WebUtil.getLanguage(request)) + "')");
}
}
HTMLTable tblHistorico = document.getTableById("tblHistorico");
tblHistorico.deleteAllRows();
HistoricoRespCentroResultadoService historicoRespCentroResultadoService = (HistoricoRespCentroResultadoService) ServiceLocator.getInstance().getService(HistoricoRespCentroResultadoService.class, WebUtil.getUsuarioSistema(request));
Collection<HistoricoRespCentroResultadoDTO> colHistorico = historicoRespCentroResultadoService.findByIdCentroResultado(centroResultadoDTO.getIdCentroResultado());
if (colHistorico != null) {
for (HistoricoRespCentroResultadoDTO historicoDto : colHistorico) {
EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null);
EmpregadoDTO empregadoDto = empregadoService.restoreByIdEmpregado(historicoDto.getIdResponsavel());
if (empregadoDto != null)
historicoDto.setNomeEmpregado(empregadoDto.getNome());
}
tblHistorico.addRowsByCollection(colHistorico,
new String[] {"nomeEmpregado","dataInicio","dataFim"},
null,
"",
null,
null,
null);
}
}
}
public void save(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
// Obtendo o DTO
CentroResultadoDTO centroResultadoDTO = (CentroResultadoDTO) document.getBean();
// Obtendo um Service
CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, null);
Collection<ResponsavelCentroResultadoDTO> colResponsaveis = br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(ResponsavelCentroResultadoDTO.class, "colResponsaveis_Serialize", request);
if (colResponsaveis != null) {
for (ResponsavelCentroResultadoDTO responsavelCentroResultadoDto : colResponsaveis) {
if (responsavelCentroResultadoDto.getIdProcessoNegocioStr() != null) {
String[] ids = responsavelCentroResultadoDto.getIdProcessoNegocioStr().split(",");
Integer[] idProcessoNegocio = new Integer[ids.length];
for (int i = 0; i < ids.length; i++) {
idProcessoNegocio[i] = new Integer(ids[i]);
}
responsavelCentroResultadoDto.setIdProcessoNegocio(idProcessoNegocio);
}
}
centroResultadoDTO.setColResponsaveis(colResponsaveis);
}
// Verificando a exist�ncia do centro de resultado
if (centroResultadoDTO != null && centroResultadoService != null) {
// Inser��o
if (centroResultadoDTO.getIdCentroResultado() == null) {
// Verificar se um DTO com o mesmo nome j� existe
List lista = (List) centroResultadoService.find(centroResultadoDTO);
if (lista != null && !lista.isEmpty()) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroJaCadastrado"));
return;
}
if (centroResultadoDTO.getIdCentroResultadoPai() != null) {
Integer idCentroResuladoPai = 0;
idCentroResuladoPai = centroResultadoDTO.getIdCentroResultadoPai();
if (centroResultadoDTO.getIdCentroResultado() != null) {
if (centroResultadoDTO.getIdCentroResultado() == idCentroResuladoPai.intValue()) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroPaiIgual"));
return;
}
}
}
centroResultadoDTO.setSituacao("A");
centroResultadoService.create(centroResultadoDTO);
document.alert(UtilI18N.internacionaliza(request, "MSG05"));
} else { // Atualiza��o
if (centroResultadoDTO.getIdCentroResultadoPai() != null) {
Integer idCentroResuladoPai = 0;
idCentroResuladoPai = centroResultadoDTO.getIdCentroResultadoPai();
if (centroResultadoDTO.getIdCentroResultado() == idCentroResuladoPai.intValue()) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroPaiIgual"));
return;
}
}
centroResultadoService.update(centroResultadoDTO);
document.alert(UtilI18N.internacionaliza(request, "MSG06"));
}
HTMLForm form = document.getForm("form");
// Limpando o formul�rio
form.clear();
// Configurando objeto de transfer�ncia de dados ao documento de vis�o (p�gina .jsp)
document.setBean(new CentroResultadoDTO());
// Carregando a p�gina
load(document, request, response);
}
}
public void delete(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
CentroResultadoDTO centroResultadoDTO = (CentroResultadoDTO) document.getBean();
CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, null);
ResponsavelCentroResultadoService responsavelCentroResultadoService = (ResponsavelCentroResultadoService) ServiceLocator.getInstance().getService(ResponsavelCentroResultadoService.class, null);
if (centroResultadoDTO != null && centroResultadoDTO.getIdCentroResultado() != null && centroResultadoService != null) {
Collection<CentroResultadoDTO> centrosResultadoDependentes = centroResultadoService.findByIdPai(centroResultadoDTO.getIdCentroResultado());
// Excluir apenas centros de resultado que n�o possuem centros de resultado dependentes (filhos).
if (centrosResultadoDependentes != null) {
if (centrosResultadoDependentes.size() > 0) {
document.alert(UtilI18N.internacionaliza(request, "centroResultado.naoPodeSerExcluido.possuiRelacionamentos") );
return;
}
}
// Exclui o centro resultado
centroResultadoService.delete(centroResultadoDTO);
document.alert(UtilI18N.internacionaliza(request, "MSG07"));
// Obtem o formul�rio na p�gina .jsp associado a esta Action.
HTMLForm form = document.getForm("form");
// Limpa o formul�rio
form.clear();
// Configura o objeto de transfer�ncia de dados ao documento de vis�o (p�gina .jsp)
document.setBean(new CentroResultadoDTO());
// Carrega a p�gina
load(document, request, response);
}
}
@Override
public Class getBeanClass() {
return CentroResultadoDTO.class;
}
/**
* M�todo respons�vel por apresentar a hierarquia de centros de resultado para o usu�rio da aplica��o.
*
* @author thiagomonteiro
* @param document
* @param request
* @param response
* @throws Exception
*/
public void visualizarHierarquiaCentrosResultado(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
// Verificar se o elemento div onde a hierarquia ser� construida existe
if (document.getElementById("divApresentacaoHierarquiaCentroResultado") != null) {
// Definir uma lista para iniciar a representa��o da hierarquia.
String htmlHierarquia = "<ul id=\"hierarquiaCentroResultado\" class=\"filetree treeview\">";
// Obter o objeto da camada de servi�os para realizar consultas no banco de dados.
CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, null);
// Obter a lista de centros de resultado sem pai (raizes ou elementos de n�vel mais alto na hierarquia - sem ancestrais).
List centrosResultado = (List) centroResultadoService.findSemPai();
// Gerar HTML para o primeiro n�vel da hierarquia.
htmlHierarquia += construirHierarquiaCentrosResultado(centroResultadoService, centrosResultado, 1);
// Finalizar a constru��o da hierarquia.
htmlHierarquia += "</ul>";
// Atribuir o HTML gerado a divApresentacaoHierarquiaCentroResultado.
document.getElementById("divApresentacaoHierarquiaCentroResultado").setInnerHTML(htmlHierarquia);
// Gerar a apresenta��o na forma de uma �rvore.
document.executeScript("$(\"#hierarquiaCentroResultado\").treeview();");
}
}
/**
* M�todo recursivo para constru��o da hierarquia de centros de resultado.
*
* @author thiago.monteiro
* @param centroResultadoService
* @param centrosResultado
* @param nivel
* @return
* @throws Exception
*/
public String construirHierarquiaCentrosResultado(CentroResultadoService centroResultadoService, List centrosResultado, int nivel) throws Exception {
// Definir objeto que ir� armazenar o HTML a ser gerado
// para cada n�vel da hierarquia de centros de resultado.
String htmlHierarquia = "";
// Verificar se o servico e a lista de centros de resultado existe
if (centroResultadoService != null && centrosResultado != null) {
// Verificar se a lista passada n�o � vazia.
if (!centrosResultado.isEmpty() ) {
// Iterar sobre a lista de centros de resultado.
for (int i = 0; i < centrosResultado.size(); i++) {
// Obter o centro de resultado na itera��o.
CentroResultadoDTO centroResultadoDTO = (CentroResultadoDTO) centrosResultado.get(i);
// Verificar se o centro de resultado possui filhos.
if (centroResultadoService.temFilhos(centroResultadoDTO.getIdCentroResultado() ) ) {
// Se possuir, construir uma nova hierarquia.
// Criar uma nova lista de centros de resultado.
htmlHierarquia += String.format("<li><a href=\"#%d\">%s</a><ul></li>", centroResultadoDTO.getIdCentroResultado(), centroResultadoDTO.getNomeCentroResultado() );
// Obter todos os centros de resultado dependentes.
List centrosResultadoAux = (List) centroResultadoService.findByIdPai(centroResultadoDTO.getIdCentroResultado() );
// Construir a hieraquia com base no centro de resultado atual informando seu n�vel.
htmlHierarquia += construirHierarquiaCentrosResultado(centroResultadoService, centrosResultadoAux, ++nivel);
// Finalizar a defini��o do n�vel atual.
htmlHierarquia += "</li></ul>";
// Voltar para o n�vel superior.
--nivel;
} else {
// Sen�o, renderizar o centro de resultado.
htmlHierarquia += String.format("<li><a href=\"#%d\">%s</a></li>", centroResultadoDTO.getIdCentroResultado(), centroResultadoDTO.getNomeCentroResultado() );
}
}
}
}
// Retorna a hierarquia completa.
return htmlHierarquia;
}
}