package gcom.gui.seguranca.acesso.usuario;
import gcom.cadastro.empresa.Empresa;
import gcom.cadastro.empresa.FiltroEmpresa;
import gcom.cadastro.funcionario.FiltroFuncionario;
import gcom.cadastro.funcionario.Funcionario;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.FiltroGrupo;
import gcom.seguranca.acesso.Grupo;
import gcom.seguranca.acesso.usuario.FiltroUsuarioGrupo;
import gcom.seguranca.acesso.usuario.FiltroUsuarioTipo;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.seguranca.acesso.usuario.UsuarioGrupo;
import gcom.seguranca.acesso.usuario.UsuarioTipo;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC1092] Inserir Solicita��o de Acesso
*
* @author Hugo Leonardo
*
* @date 03/11/2010
*/
public class ExibirInserirSolicitacaoAcessoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirInserirSolicitacaoAcessoAction");
HttpSession sessao = httpServletRequest.getSession(false);
// Form
ExibirInserirSolicitacaoAcessoActionForm form =
(ExibirInserirSolicitacaoAcessoActionForm) actionForm;
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
if (httpServletRequest.getParameter("menu") != null
&& httpServletRequest.getParameter("menu").equals("sim")) {
if(usuario.getFuncionario() != null){
form.setIdFuncionarioSolicitante(""+usuario.getFuncionario().getId());
form.setNomeFuncionarioSolicitante(usuario.getFuncionario().getNome());
}else{
throw new ActionServletException("atencao.acesso.solicitacao_funcionario");
}
// Verifica se o Usu�rio pertence ao grupo "Superintendente"
boolean superintendente = false;
FiltroUsuarioGrupo filtroUsuarioGrupo = new FiltroUsuarioGrupo();
filtroUsuarioGrupo.adicionarCaminhoParaCarregamentoEntidade(
FiltroUsuarioGrupo.GRUPO);
filtroUsuarioGrupo.adicionarParametro(new ParametroSimples(
FiltroUsuarioGrupo.USUARIO_ID, usuario.getId()));
Collection colecaoUsuarioGrupo = this.getFachada().pesquisar(filtroUsuarioGrupo,
UsuarioGrupo.class.getName());
if(colecaoUsuarioGrupo != null && !colecaoUsuarioGrupo.isEmpty()){
Iterator colecaoIterator = colecaoUsuarioGrupo.iterator();
while (colecaoIterator.hasNext()) {
UsuarioGrupo usuarioGrupo = (UsuarioGrupo) colecaoIterator.next();
if(usuarioGrupo.getGrupo().getIndicadorSuperintendencia()
.compareTo(ConstantesSistema.INDICADOR_SUPERINTENDENCIA) == 0){
superintendente = true;
break;
}
}
}
// Caso Usu�rio perten�a ao grupo "Superintendente"
if(superintendente){
form.setIdFuncionarioSuperior(""+usuario.getFuncionario().getId());
form.setNomeFuncionarioSuperior(usuario.getFuncionario().getNome());
form.setIcNotificar("1");
}else{
form.setIcNotificar("0");
}
// Pesquisar Grupo
this.pesquisarGrupo(sessao, form);
//Pesquisar Tipo Usuario
this.pesquisarTipoUsuario(sessao, form);
//Pesquisar Empresa
this.pesquisarEmpresa(sessao, form);
}
if(httpServletRequest.getParameter("usuarioTipo") != null &&
!httpServletRequest.getParameter("usuarioTipo").equals("") ){
String idUsuarioTipo = httpServletRequest.getParameter("usuarioTipo").toString();
// Se n�o for "Prestador de Servi�os"
if(!idUsuarioTipo.equals("8") && Util.verificarNaoVazio(form.getIdFuncionario())){
// Pesquisa a fincion�rio
FiltroFuncionario filtroFuncionario = new FiltroFuncionario();
filtroFuncionario.adicionarParametro(new ParametroSimples(
FiltroFuncionario.ID, form.getIdFuncionario()));
Collection<Funcionario> funcionarioPesquisado = this.getFachada().pesquisar(
filtroFuncionario, Funcionario.class.getName());
// Se nenhum usu�rio for encontrado a mensagem � enviada para a p�gina
if (funcionarioPesquisado != null && !funcionarioPesquisado.isEmpty()) {
Funcionario funcionario = (Funcionario) Util.retonarObjetoDeColecao(funcionarioPesquisado);
if(funcionario.getNumeroCpf() != null){
form.setCpf(""+funcionario.getNumeroCpf());
}
if(funcionario.getDataNascimento() != null){
form.setDataNascimento(""+Util.formatarData(funcionario.getDataNascimento()));
}
int tamanhoMaximoCampo = 50;
if (tamanhoMaximoCampo < funcionario.getNome().length()) {
// trunca a String
String strTruncado = funcionario.getNome().substring(0, tamanhoMaximoCampo);
form.setNomeUsuario(strTruncado);
}else{
form.setNomeUsuario(funcionario.getNome());
}
}
}else{
form.setCpf("");
form.setDataNascimento("");
form.setNomeUsuario("");
}
}
httpServletRequest.setAttribute("dataAtual", Util.formatarData(new Date()));
// IDADE M�NIMA
httpServletRequest.setAttribute("idadeMinimaUsuario", "18");
// Flag indicando que o usu�rio fez uma consulta a partir da tecla Enter
String objetoConsulta = httpServletRequest.getParameter("objetoConsulta");
if (objetoConsulta != null && !objetoConsulta.trim().equals("") &&
(objetoConsulta.trim().equals("1")|| objetoConsulta.trim().equals("2"))) {
// Pega os codigos que o usuario digitou para a pesquisa direta do funcion�rio
if (form.getIdFuncionario() != null && !form.getIdFuncionario().trim().equals("")
|| (form.getIdFuncionarioSuperior() != null && !form.getIdFuncionarioSuperior().trim().equals(""))) {
this.pesquisarFuncionario( httpServletRequest, form, objetoConsulta);
}
}
// Pega os codigos que o usuario digitou para a pesquisa direta da lota��o
if(form.getIdLotacao() != null && !form.getIdLotacao().trim().equals("")){
this.pesquisarLotacao(httpServletRequest, form);
}
return retorno;
}
/**
* Pesquisar Funcion�rio
*
* @author Hugo Leonardo
* @date 09/11/2010
*/
private void pesquisarFuncionario(HttpServletRequest httpServletRequest,
ExibirInserirSolicitacaoAcessoActionForm form, String objetoConsulta) {
Fachada fachada = Fachada.getInstancia();
Object local = null;
if(objetoConsulta.trim().equals("1")){
local = form.getIdFuncionarioSuperior();
}else if(objetoConsulta.trim().equals("2")){
local = form.getIdFuncionario();
}
FiltroFuncionario filtroFuncionario = new FiltroFuncionario();
filtroFuncionario.adicionarCaminhoParaCarregamentoEntidade(FiltroFuncionario.UNIDADE_ORGANIZACIONAL);
filtroFuncionario.adicionarParametro(new ParametroSimples(
FiltroFuncionario.ID, local));
Collection<Funcionario> funcionarioPesquisado = fachada.pesquisar(
filtroFuncionario, Funcionario.class.getName());
if (funcionarioPesquisado != null && !funcionarioPesquisado.isEmpty()) {
Funcionario funcionario = (Funcionario) Util.retonarObjetoDeColecao(funcionarioPesquisado);
if(objetoConsulta.trim().equals("1")){
form.setIdFuncionarioSuperior(""+funcionario.getId());
form.setNomeFuncionarioSuperior(funcionario.getNome());
}else if(objetoConsulta.trim().equals("2")){
form.setIdFuncionario("" + funcionario.getId());
form.setNomeFuncionario( funcionario.getNome());
if(funcionario.getNumeroCpf() != null){
form.setCpf(funcionario.getNumeroCpf());
}
if(funcionario.getDataNascimento() != null){
form.setDataNascimento(Util.formatarData(funcionario.getDataNascimento()));
}
if(funcionario.getUnidadeOrganizacional() != null){
form.setIdLotacao("" + funcionario.getUnidadeOrganizacional().getId());
form.setNomeLotacao(funcionario.getUnidadeOrganizacional().getDescricao());
}
}
} else {
if(objetoConsulta.trim().equals("1")){
form.setIdFuncionarioSuperior(null);
form.setNomeFuncionarioSuperior("FUNCION�RIO INEXISTENTE");
httpServletRequest.setAttribute("funcionarioInexistente1","true");
}
if(objetoConsulta.trim().equals("2")){
form.setIdFuncionario(null);
form.setNomeFuncionario("FUNCION�RIO INEXISTENTE");
httpServletRequest.setAttribute("funcionarioInexistente","true");
}
}
}
/**
* Pesquisar Grupo
*
* @author Hugo Leonardo
* @date 09/11/2010
*/
private void pesquisarGrupo(HttpSession sessao, ExibirInserirSolicitacaoAcessoActionForm form) {
FiltroGrupo filtroGrupo = new FiltroGrupo();
filtroGrupo.setConsultaSemLimites(true);
filtroGrupo.adicionarParametro(new ParametroSimples(
FiltroGrupo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroGrupo.setCampoOrderBy(FiltroGrupo.DESCRICAO);
Collection colecaoGrupo = this.getFachada().pesquisar(filtroGrupo, Grupo.class.getName());
if(colecaoGrupo == null || colecaoGrupo.isEmpty()){
throw new ActionServletException("atencao.naocadastrado", null, "Grupos");
}else{
sessao.setAttribute("colecaoGrupo", colecaoGrupo);
}
}
/**
* Pesquisar Usuario Tipo
*
* @author Hugo Leonardo
* @date 09/11/2010
*/
private void pesquisarTipoUsuario(HttpSession sessao, ExibirInserirSolicitacaoAcessoActionForm form) {
FiltroUsuarioTipo filtroUsuarioTipo = new FiltroUsuarioTipo();
filtroUsuarioTipo.setConsultaSemLimites(true);
filtroUsuarioTipo.adicionarParametro(new ParametroSimples(
FiltroUsuarioTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroUsuarioTipo.setCampoOrderBy(FiltroUsuarioTipo.DESCRICAO);
Collection colecaoUsuarioTipo = this.getFachada().pesquisar(filtroUsuarioTipo, UsuarioTipo.class.getName());
if(colecaoUsuarioTipo == null || colecaoUsuarioTipo.isEmpty()){
throw new ActionServletException("atencao.naocadastrado", null, "Usu�rio Tipo");
}else{
sessao.setAttribute("colecaoUsuarioTipo", colecaoUsuarioTipo);
}
}
/**
* Pesquisar Empresa
*
* @author Hugo Leonardo
* @date 10/11/2010
*/
private void pesquisarEmpresa(HttpSession sessao, ExibirInserirSolicitacaoAcessoActionForm form) {
FiltroEmpresa filtroEmpresa = new FiltroEmpresa();
filtroEmpresa.setConsultaSemLimites(true);
filtroEmpresa.adicionarParametro(new ParametroSimples(
FiltroUsuarioTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroEmpresa.setCampoOrderBy(FiltroEmpresa.DESCRICAO);
Collection colecaoEmpresa = this.getFachada().pesquisar(filtroEmpresa, Empresa.class.getName());
if(colecaoEmpresa == null || colecaoEmpresa.isEmpty()){
throw new ActionServletException("atencao.naocadastrado", null, "Empresa");
}else{
sessao.setAttribute("colecaoEmpresa", colecaoEmpresa);
}
}
/**
* Pesquisar Lota��o
*
* @author Hugo Leonardo
* @date 10/11/2010
*/
private void pesquisarLotacao(HttpServletRequest httpServletRequest,
ExibirInserirSolicitacaoAcessoActionForm form) {
Fachada fachada = Fachada.getInstancia();
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, form.getIdLotacao()));
Collection<UnidadeOrganizacional> lotacaoPesquisada = fachada.pesquisar(
filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName());
if (lotacaoPesquisada != null && !lotacaoPesquisada.isEmpty()) {
UnidadeOrganizacional unidadeOrganizacional = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(lotacaoPesquisada);
form.setIdLotacao("" + unidadeOrganizacional.getId());
form.setNomeLotacao( unidadeOrganizacional.getDescricao());
} else {
form.setIdLotacao("");
form.setNomeLotacao("LOTA��O INEXISTENTE");
httpServletRequest.setAttribute("lotacaoInexistente",true);
httpServletRequest.setAttribute("nomeCampo", "idLotacao");
}
}
}