package gcom.gui.cobranca;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.cobranca.FiltroUnidadeNegocioTestemunha;
import gcom.cobranca.UnidadeNegocioTestemunha;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
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;
/**
* Action que faz a exibi��o da tela para o usu�rio setar os campos e permitir
* que ele insera uma resolu��o de diretoria [UC0217] Inserir Resolu��o de
* Diretoria
*
* @author Rafael Corr�a
* @since 30/03/2006
*/
public class ExibirInformarUnidadeNegocioTestemunhaAction extends GcomAction {
/**
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirInformarUnidadeNegocioTestemunha");
InformarUnidadeNegocioTestemunhaActionForm informarUnidadeNegocioTestemunhaActionForm = (InformarUnidadeNegocioTestemunhaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// Carrega as cole��es que ser�o exibidas na tela
if (sessao.getAttribute("colecaoUnidadeNegocio") == null) {
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(
FiltroUnidadeNegocio.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoUnidadeNegocio = fachada.pesquisar(
filtroUnidadeNegocio, UnidadeNegocio.class.getName());
if (colecaoUnidadeNegocio != null
&& !colecaoUnidadeNegocio.isEmpty()) {
sessao.setAttribute("colecaoUnidadeNegocio",
colecaoUnidadeNegocio);
} else {
throw new ActionServletException(
"atencao.pesquisa.nenhum_registro_tabela", null,
"UNIDADE_NEGOCIO");
}
}
String idUnidadeNegocio = informarUnidadeNegocioTestemunhaActionForm.getIdUnidadeNegocio();
String idTestemunha = informarUnidadeNegocioTestemunhaActionForm.getIdTestemunha();
String loginTestemunha = informarUnidadeNegocioTestemunhaActionForm.getLoginTestemunha();
// Pesquisa a testemunha
if ((loginTestemunha != null && !loginTestemunha.trim().equals("")) || (idTestemunha != null && !idTestemunha.trim().equals(""))) {
// Verifica se deve desabilitar o bot�o adicionar e a testemunha,
// caso o usu�rio
// tenha alterado a unidade de neg�cio deixa o bot�o desabilitado
if (httpServletRequest.getParameter("desabilitaCampos") != null
&& !httpServletRequest.getParameter("desabilitaCampos")
.trim().equals("")) {
httpServletRequest.setAttribute("desabilitaCampos", "sim");
}
FiltroUsuario filtroUsuario = new FiltroUsuario();
// Verifica se a pesquisa foi pelo enter
if ((loginTestemunha != null && !loginTestemunha.trim().equals(""))) {
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.LOGIN, loginTestemunha));
}
// Verifica se a pesquisa foi feita pela lupa
else {
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.ID, idTestemunha));
}
Collection colecaoUsuario = fachada.pesquisar(filtroUsuario, Usuario.class.getName());
if (colecaoUsuario != null && !colecaoUsuario.isEmpty()) {
Usuario usuario = (Usuario) Util.retonarObjetoDeColecao(colecaoUsuario);
informarUnidadeNegocioTestemunhaActionForm.setIdTestemunha(usuario.getId().toString());
informarUnidadeNegocioTestemunhaActionForm.setLoginTestemunha(usuario.getLogin());
informarUnidadeNegocioTestemunhaActionForm.setNomeTestemunha(usuario.getNomeUsuario());
} else {
informarUnidadeNegocioTestemunhaActionForm.setIdTestemunha("");
informarUnidadeNegocioTestemunhaActionForm.setLoginTestemunha("");
informarUnidadeNegocioTestemunhaActionForm.setNomeTestemunha("TESTEMUNHA INEXISTENTE");
httpServletRequest.setAttribute("testemunhaInexistente", true);
httpServletRequest.setAttribute("nomeCampo", "idTestemunha");
}
} else {
informarUnidadeNegocioTestemunhaActionForm.setNomeTestemunha("");
}
// Cole��o retornada na consulta
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunha = (Collection<UnidadeNegocioTestemunha>) sessao.getAttribute("colecaoUnidadeNegocioTestemunha");
// Cole��o com os objetos adicionados pelo usu�rio
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunhaAdicionadas = (Collection<UnidadeNegocioTestemunha>) sessao.getAttribute("colecaoUnidadeNegocioTestemunhaAdicionadas");
// Cole��o com os objetos removidos pelo usu�rio
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunhaRemovidas = (Collection<UnidadeNegocioTestemunha>) sessao
.getAttribute("colecaoUnidadeNegocioTestemunhaRemovidas");
// Consulta as Unidades de Neg�cio Testemunha
if (httpServletRequest.getParameter("consultar") != null && !httpServletRequest.getParameter("consultar").equals("")) {
colecaoUnidadeNegocioTestemunhaAdicionadas = new ArrayList<UnidadeNegocioTestemunha>();
colecaoUnidadeNegocioTestemunhaRemovidas = new ArrayList<UnidadeNegocioTestemunha>();
sessao.setAttribute("colecaoUnidadeNegocioTestemunhaAdicionadas", colecaoUnidadeNegocioTestemunhaAdicionadas);
sessao.setAttribute("colecaoUnidadeNegocioTestemunhaRemovidas", colecaoUnidadeNegocioTestemunhaRemovidas);
colecaoUnidadeNegocioTestemunha = consultarUnidadeNegocioTestemunha(idUnidadeNegocio);
if (colecaoUnidadeNegocioTestemunha == null) {
colecaoUnidadeNegocioTestemunha = new ArrayList<UnidadeNegocioTestemunha>();
}
sessao.setAttribute("colecaoUnidadeNegocioTestemunha", colecaoUnidadeNegocioTestemunha);
}
// Adiciona a Unidade de Neg�cio Testemunha
if (httpServletRequest.getParameter("adicionar") != null && !httpServletRequest.getParameter("adicionar").equals("")) {
UnidadeNegocioTestemunha unidadeNegocioTestemunha = criarUnidadeNegocioTestemunha(idUnidadeNegocio, loginTestemunha);
colecaoUnidadeNegocioTestemunhaAdicionadas = adicionarUnidadeNegocioTestemunha(colecaoUnidadeNegocioTestemunha, colecaoUnidadeNegocioTestemunhaAdicionadas, unidadeNegocioTestemunha);
sessao.setAttribute("colecaoUnidadeNegocioTestemunhaAdicionadas",
colecaoUnidadeNegocioTestemunhaAdicionadas);
}
// Remove a Unidade de Neg�cio Testemunha
if (httpServletRequest.getParameter("removerUnidadeNegocioTestemunha") != null && !httpServletRequest.getParameter("removerUnidadeNegocioTestemunha").equals("")) {
Integer posicaoRemocao = new Integer(httpServletRequest
.getParameter("removerUnidadeNegocioTestemunha"));
removerUnidadeNegocioTestemunha(colecaoUnidadeNegocioTestemunha,
posicaoRemocao, colecaoUnidadeNegocioTestemunhaRemovidas,
colecaoUnidadeNegocioTestemunhaAdicionadas);
sessao.setAttribute("colecaoUnidadeNegocioTestemunhaRemovidas",
colecaoUnidadeNegocioTestemunhaRemovidas);
}
return retorno;
}
/**
* Adiciona a Unidade de Neg�cio Testemunha selecionada pelo usu�rio
*
* @author Rafael Corr�a
* @date 19/05/2008
*
* @param colecaoUnidadeNegocioTestemunha
* @param colecaoUnidadeNegocioTestemunhaAdicionadas
* @param unidadeNegocioTestemunha
* @return
*/
private Collection<UnidadeNegocioTestemunha> adicionarUnidadeNegocioTestemunha(
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunha,
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunhaAdicionadas,
UnidadeNegocioTestemunha unidadeNegocioTestemunhaAdicionar) {
if (colecaoUnidadeNegocioTestemunhaAdicionadas == null) {
colecaoUnidadeNegocioTestemunhaAdicionadas = new ArrayList<UnidadeNegocioTestemunha>();
} else {
// [FS0001] - Validar data rela��o fim
for (UnidadeNegocioTestemunha unidadeNegocioTestemunha : colecaoUnidadeNegocioTestemunha) {
if (unidadeNegocioTestemunha.getDataFimRelacao() == null
&& unidadeNegocioTestemunha.getUsuario().getId()
.equals(
unidadeNegocioTestemunhaAdicionar
.getUsuario().getId())) {
throw new ActionServletException(
"atencao.testemunha.ja.existente",
unidadeNegocioTestemunhaAdicionar
.getUnidadeNegocio().getNome(),
unidadeNegocioTestemunhaAdicionar.getUsuario()
.getNomeUsuario());
}
}
}
colecaoUnidadeNegocioTestemunhaAdicionadas.add(unidadeNegocioTestemunhaAdicionar);
colecaoUnidadeNegocioTestemunha.add(unidadeNegocioTestemunhaAdicionar);
return colecaoUnidadeNegocioTestemunhaAdicionadas;
}
/**
* Executa a consulta feita pelo usu�rio
*
* @author Rafa
* @date 16/05/2008
*
* @param idUnidadeNegocio
* @param idTestemunha
* @return
*/
@SuppressWarnings("unchecked")
private Collection<UnidadeNegocioTestemunha> consultarUnidadeNegocioTestemunha(String idUnidadeNegocio) {
Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunha;
FiltroUnidadeNegocioTestemunha filtroUnidadeNegocioTestemunha = new FiltroUnidadeNegocioTestemunha();
filtroUnidadeNegocioTestemunha.adicionarCaminhoParaCarregamentoEntidade(FiltroUnidadeNegocioTestemunha.UNIDADE_NEGOCIO);
filtroUnidadeNegocioTestemunha.adicionarCaminhoParaCarregamentoEntidade(FiltroUnidadeNegocioTestemunha.USUARIO);
filtroUnidadeNegocioTestemunha.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocioTestemunha.UNIDADE_NEGOCIO_ID, idUnidadeNegocio));
colecaoUnidadeNegocioTestemunha = Fachada.getInstancia().pesquisar(filtroUnidadeNegocioTestemunha, UnidadeNegocioTestemunha.class.getName());
return colecaoUnidadeNegocioTestemunha;
}
/**
* Remove a Unidade de Neg�cio Testemunha
*
* @author Rafael Corr�a
* @date 16/05/2008
*
* @param colecaoUnidadeNegocioTestemunha
* @param posicao
*/
private void removerUnidadeNegocioTestemunha(Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunha, int posicaoRemocao, Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunhaRemovidas, Collection<UnidadeNegocioTestemunha> colecaoUnidadeNegocioTestemunhaAdicionadas) {
int i = 0;
for (UnidadeNegocioTestemunha unidadeNegocioTestemunha : colecaoUnidadeNegocioTestemunha) {
i++;
// Verifica se � este o objeto a ser removido
if (i == posicaoRemocao) {
if (unidadeNegocioTestemunha.getId() == null) {
colecaoUnidadeNegocioTestemunha.remove(unidadeNegocioTestemunha);
colecaoUnidadeNegocioTestemunhaAdicionadas.remove(unidadeNegocioTestemunha);
} else {
unidadeNegocioTestemunha.setDataFimRelacao(new Date());
if (colecaoUnidadeNegocioTestemunhaRemovidas == null) {
colecaoUnidadeNegocioTestemunhaRemovidas = new ArrayList<UnidadeNegocioTestemunha>();
}
colecaoUnidadeNegocioTestemunhaRemovidas.add(unidadeNegocioTestemunha);
}
break;
}
}
}
/**
* Cria a Unidade de Neg�cio Testemunha
*
* @author Rafael Corr�a
* @date 16/05/2008
*
* @param idUnidadeNegocio
* @param idUsuario
*/
private UnidadeNegocioTestemunha criarUnidadeNegocioTestemunha(String idUnidadeNegocio, String loginUsuario) {
Fachada fachada = Fachada.getInstancia();
UnidadeNegocioTestemunha retorno = new UnidadeNegocioTestemunha();
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocio.ID, idUnidadeNegocio));
Collection colecaoUnidadeNegocio = fachada.pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
UnidadeNegocio unidadeNegocio = (UnidadeNegocio) Util.retonarObjetoDeColecao(colecaoUnidadeNegocio);
retorno.setUnidadeNegocio(unidadeNegocio);
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.LOGIN, loginUsuario));
Collection colecaoUsuario = fachada.pesquisar(filtroUsuario, Usuario.class.getName());
if (colecaoUsuario != null && !colecaoUsuario.isEmpty()) {
Usuario usuario = (Usuario) Util.retonarObjetoDeColecao(colecaoUsuario);
retorno.setUsuario(usuario);
retorno.setDataInicioRelacao(new Date());
} else {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Testemunha");
}
return retorno;
}
}