package gcom.gui.cadastro.imovel;
import gcom.cadastro.cliente.FiltroRamoAtividade;
import gcom.cadastro.cliente.RamoAtividade;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroCategoria;
import gcom.cadastro.imovel.FiltroSubCategoria;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelRamoAtividade;
import gcom.cadastro.imovel.ImovelRamoAtividadePK;
import gcom.cadastro.imovel.ImovelSubcategoria;
import gcom.cadastro.imovel.ImovelSubcategoriaPK;
import gcom.cadastro.imovel.Subcategoria;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
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 java.util.HashSet;
import java.util.Iterator;
import java.util.List;
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;
import org.apache.struts.validator.DynaValidatorForm;
/**
* Classe respon�vel pelo recebimento dos dados das categorias e subcategoria do im�vel
*
* @author Raphael Rossiter
* @date 12/05/2009
*/
public class ExibirAtualizarImovelSubCategoriaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("atualizarImovelSubCategoria");
HttpSession sessao = httpServletRequest.getSession(false);
sessao.removeAttribute("gis");
DynaValidatorForm inserirImovelActionForm = (DynaValidatorForm) actionForm;
Collection colecaoImovelSubCategorias = null;
Collection colecaoImovelRamoAtividade = null;
Fachada fachada = Fachada.getInstancia();
Collection categorias = new HashSet();
Collection ramosAtividades = null;
Collection subCategorias = new HashSet();
String botaoAdicionar = httpServletRequest.getParameter("botaoAdicionar");
String botaoAdicionar1 = httpServletRequest.getParameter("botaoAdicionar1");
if (botaoAdicionar == null && httpServletRequest.getParameter("confirmado") != null) {
botaoAdicionar = (String) sessao.getAttribute("botaoAdicionar");
}
else {
sessao.removeAttribute("botaoAdicionar");
}
if (botaoAdicionar1 == null && httpServletRequest.getParameter("confirmado") != null) {
botaoAdicionar1 = (String) sessao.getAttribute("botaoAdicionar1");
}else {
sessao.removeAttribute("botaoAdicionar1");
}
if (sessao.getAttribute("colecaoImovelRamosAtividade") != null) {
colecaoImovelRamoAtividade = (Collection) sessao.getAttribute("colecaoImovelRamosAtividade");
}
else {
colecaoImovelRamoAtividade = new ArrayList();
}
if(sessao.getAttribute("ramosAtividades") != null){
ramosAtividades = (Collection) sessao.getAttribute("ramosAtividades");
}
FiltroSubCategoria filtroSubCategoria = new FiltroSubCategoria(FiltroSubCategoria.DESCRICAO);
filtroSubCategoria.adicionarCaminhoParaCarregamentoEntidade("categoria");
Imovel imovel = (Imovel) sessao.getAttribute("imovelAtualizacao");
if (sessao.getAttribute("categorias") == null) {
FiltroCategoria filtroCategoriaNova = new FiltroCategoria();
filtroCategoriaNova.adicionarParametro(new ParametroSimples(
FiltroCategoria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
if (imovel.getImovelPerfil().getId().equals(ConstantesSistema.INDICADOR_TARIFA_SOCIAL)) {
filtroCategoriaNova.adicionarParametro(new ParametroSimples(
FiltroCategoria.CODIGO, ConstantesSistema.INDICADOR_CATEGORIA_RESIDENCIA));
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.CATEGORIA_ID,ConstantesSistema.INDICADOR_CATEGORIA_RESIDENCIA));
}
categorias = fachada.pesquisar(filtroCategoriaNova, Categoria.class.getName());
}
else {
categorias = (Collection) sessao.getAttribute("categorias");
}
if (sessao.getAttribute("colecaoImovelSubCategorias") != null) {
colecaoImovelSubCategorias = (Collection) sessao
.getAttribute("colecaoImovelSubCategorias");
}
else {
colecaoImovelSubCategorias = new ArrayList();
}
if (botaoAdicionar != null && !botaoAdicionar.equals("")) {
short quantidadeEconomia = new Short(inserirImovelActionForm.get(
"quantidadeEconomia").toString()).shortValue();
Short qtdUniadePrivativa = null;
Short qtdUniadeColetiva = null;
//QUANTIDADE DE UNIDADES COM INSTALA��ES PRIVATIVAS
if (inserirImovelActionForm.get("qtdUnidadePrivativa") != null &&
!((inserirImovelActionForm.get("qtdUnidadePrivativa").toString())).equals("")){
qtdUniadePrivativa = new Short(inserirImovelActionForm.get(
"qtdUnidadePrivativa").toString()).shortValue();
}
//QUANTIDADE DE UNIDADES COM INSTALA��ES COLETIVAS
if (inserirImovelActionForm.get("qtdUnidadeColetiva") != null &&
!((inserirImovelActionForm.get("qtdUnidadeColetiva").toString())).equals("")){
qtdUniadeColetiva = new Short(inserirImovelActionForm.get(
"qtdUnidadeColetiva").toString()).shortValue();
}
FiltroCategoria filtroCategoria = new FiltroCategoria();
filtroCategoria.adicionarParametro(new ParametroSimples(
FiltroCategoria.CODIGO, inserirImovelActionForm.get("idCategoria")));
Collection colecaoCategoria = fachada.pesquisar(filtroCategoria,
Categoria.class.getName());
Categoria categoriaNaBase = (Categoria) Util
.retonarObjetoDeColecao(colecaoCategoria);
//[FS0018] - Verificar quantidade de economias
if (categoriaNaBase.getConsumoMaximoEconomiasValidacao() < new Integer(quantidadeEconomia)) {
if (httpServletRequest.getParameter("confirmado") == null) {
httpServletRequest.setAttribute("destino", "4");
sessao.setAttribute("botaoAdicionar", botaoAdicionar);
retorno = montarPaginaConfirmacaoWizard(
"atencao.usuario.limite_ultrapassado_economias_validacao",
httpServletRequest, actionMapping, ""+categoriaNaBase.getConsumoMaximoEconomiasValidacao());
}
else if (httpServletRequest.getParameter("confirmado").equalsIgnoreCase("ok")) {
adicionaObjetoColecao(inserirImovelActionForm, sessao,
colecaoImovelSubCategorias, quantidadeEconomia,
fachada, filtroSubCategoria, qtdUniadePrivativa, qtdUniadeColetiva);
sessao.removeAttribute(botaoAdicionar);
}
}
else {
adicionaObjetoColecao(inserirImovelActionForm, sessao,
colecaoImovelSubCategorias, quantidadeEconomia, fachada,
filtroSubCategoria, qtdUniadePrivativa, qtdUniadeColetiva);
}
}
else {
if (inserirImovelActionForm.get("idCategoria") != null &&
!inserirImovelActionForm.get("idCategoria").equals("0") &&
!inserirImovelActionForm.get("idCategoria").equals("")) {
String idCategoria = (String) inserirImovelActionForm.get("idCategoria");
String idSubCategoria = (String) inserirImovelActionForm.get("idSubCategoria");
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.CATEGORIA_ID, idCategoria));
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
subCategorias = fachada.pesquisar(filtroSubCategoria, Subcategoria.class.getName());
//[FS0001] - Verificar exist�ncia de dados (SUBCATEGORIA)
if (subCategorias == null || subCategorias.isEmpty()) {
throw new ActionServletException("atencao.categoria.sub_categoria.inexistente");
}
else {
Iterator isubCategorias = subCategorias.iterator();
while (isubCategorias.hasNext()) {
Subcategoria sub = (Subcategoria) isubCategorias.next();
if (sub.getId().toString().equals(idSubCategoria)) {
inserirImovelActionForm.set("textoSelecionadoSubCategoria", sub.getDescricao());
}
}
sessao.setAttribute("subCategorias", subCategorias);
sessao.setAttribute("categorias", categorias);
}
// Serve para setar a categoria quando o usuario selecionar s� a
// sub categoria
}
else if (inserirImovelActionForm.get("idCategoria").toString().trim().equalsIgnoreCase("0") &&
!inserirImovelActionForm.get("idSubCategoria").toString().trim().equalsIgnoreCase("0") &&
(httpServletRequest.getParameter("subCategoriaEscolhida") != null &&
httpServletRequest.getParameter("subCategoriaEscolhida").trim().equalsIgnoreCase("1"))) {
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.ID, inserirImovelActionForm.get("idSubCategoria").toString()));
filtroSubCategoria.adicionarCaminhoParaCarregamentoEntidade(FiltroSubCategoria.CATEGORIA);
Collection subCategoriasTeste = fachada.pesquisar(
filtroSubCategoria, Subcategoria.class.getName());
Subcategoria subCategoria = (Subcategoria) subCategoriasTeste.iterator().next();
filtroSubCategoria.limparListaParametros();
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.CATEGORIA_ID, subCategoria.getCategoria().getId()));
subCategorias = fachada.pesquisar(filtroSubCategoria,
Subcategoria.class.getName());
sessao.setAttribute("subCategorias", subCategorias);
inserirImovelActionForm.set("idCategoria", subCategoria.getCategoria().getId().toString());
inserirImovelActionForm.set("textoSelecionadoCategoria",subCategoria.getCategoria().getDescricao());
}
else if (inserirImovelActionForm.get("idCategoria").equals("")
|| inserirImovelActionForm.get("idCategoria").equals("0")
|| inserirImovelActionForm.get("idCategoria") == null) {
//CARREGAMENTO INICIAL DA ABA DE CATEGORIAS E SUBCATEGORIAS
FiltroCategoria filtroCategoria = new FiltroCategoria(
FiltroCategoria.DESCRICAO);
filtroCategoria.adicionarParametro(new ParametroSimples(
FiltroCategoria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
if (imovel.getImovelPerfil().getId().equals(ConstantesSistema.INDICADOR_TARIFA_SOCIAL)) {
filtroCategoria.adicionarParametro(new ParametroSimples(
FiltroCategoria.CODIGO, ConstantesSistema.INDICADOR_CATEGORIA_RESIDENCIA));
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.CATEGORIA_ID, ConstantesSistema.INDICADOR_CATEGORIA_RESIDENCIA));
}
categorias = fachada.pesquisar(filtroCategoria, Categoria.class.getName());
//[FS0001] - Verificar exist�ncia de dados (CATEGORIA)
if (categorias == null || categorias.equals("")) {
throw new ActionServletException("atencao.naocadastrado", null, "categoria");
}
else {
if (inserirImovelActionForm.get("textoSelecionadoCategoria") == null ||
inserirImovelActionForm.get("textoSelecionadoCategoria").equals("")) {
inserirImovelActionForm.set("textoSelecionadoCategoria",
((Categoria) ((List) categorias).get(0)).getDescricao());
}
else {
inserirImovelActionForm.set("textoSelecionadoCategoria", "");
}
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
subCategorias = fachada.pesquisar(filtroSubCategoria, Subcategoria.class.getName());
//[FS0001] - Verificar exist�ncia de dados (SUBCATEGORIA)
if (subCategorias == null || subCategorias.equals("")) {
throw new ActionServletException("atencao.naocadastrado", null, "sub categoria");
}
else {
if (inserirImovelActionForm.get("textoSelecionadoSubCategoria") == null ||
inserirImovelActionForm.get("textoSelecionadoSubCategoria").equals("")) {
inserirImovelActionForm.set("textoSelecionadoSubCategoria",
((Subcategoria) ((List) subCategorias).get(0)).getDescricao());
}
else {
inserirImovelActionForm.set("textoSelecionadoSubCategoria", "");
inserirImovelActionForm.set("idSubCategoria", "");
}
}
sessao.setAttribute("categorias", categorias);
sessao.setAttribute("subCategorias", subCategorias);
}
}
}
sessao.setAttribute("colecaoImovelSubCategorias", colecaoImovelSubCategorias);
Collection ramosAtividades1 = null;
boolean carregou = false;
if(ramosAtividades == null || ramosAtividades.isEmpty()){
FiltroRamoAtividade filtroRamoAtividade = new FiltroRamoAtividade(FiltroRamoAtividade.DESCRICAO);
filtroRamoAtividade.adicionarParametro(new ParametroSimples(
FiltroRamoAtividade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
ramosAtividades = fachada.pesquisar(filtroRamoAtividade, RamoAtividade.class.getName());
if (ramosAtividades == null || ramosAtividades.equals("")) {
throw new ActionServletException("atencao.naocadastrado",
null, "ramo de atividade");
}else{
if (inserirImovelActionForm.get("textoSelecionadoRamoAtividade") == null ||
inserirImovelActionForm.get("textoSelecionadoRamoAtividade").equals("")) {
inserirImovelActionForm.set("textoSelecionadoRamoAtividade",
((RamoAtividade) ((List) ramosAtividades).get(0)).getDescricao());
}else{
inserirImovelActionForm.set("textoSelecionadoRamoAtividade", "");
inserirImovelActionForm.set("idRamoAtividade", "");
}
}
carregou = true;
sessao.setAttribute("ramosAtividades", ramosAtividades);
}
if (botaoAdicionar1 != null && !botaoAdicionar1.equals("")) {
if (inserirImovelActionForm.get("idRamoAtividade") != null
&& !inserirImovelActionForm.get("idRamoAtividade").equals("0")
&& !inserirImovelActionForm.get("idRamoAtividade").equals("")) {
String idRamoAtividade = (String) inserirImovelActionForm.get("idRamoAtividade");
FiltroRamoAtividade filtroRamoAtividade = new FiltroRamoAtividade(
FiltroRamoAtividade.DESCRICAO);
filtroRamoAtividade.adicionarParametro(new ParametroSimples(
FiltroRamoAtividade.ID,idRamoAtividade));
filtroRamoAtividade.adicionarParametro(new ParametroSimples(
FiltroRamoAtividade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
ramosAtividades1 = fachada.pesquisar(filtroRamoAtividade, RamoAtividade.class.getName());
if (ramosAtividades1 == null || ramosAtividades1.isEmpty()) {
throw new ActionServletException("atencao.ramos.atividade.inexistente");
}
else {
Iterator iramosAtividades = ramosAtividades1.iterator();
while (iramosAtividades.hasNext()) {
RamoAtividade rat = (RamoAtividade) iramosAtividades.next();
if (rat.getId().toString().equals(idRamoAtividade)) {
inserirImovelActionForm.set("textoSelecionadoRamoAtividade", rat.getDescricao());
adicionaObjetoColecao(inserirImovelActionForm,sessao,colecaoImovelRamoAtividade);
break;
}
}
sessao.setAttribute("ramosAtividades", ramosAtividades);
}
}
}else{
if((inserirImovelActionForm.get("idRamoAtividade").equals("")
|| inserirImovelActionForm.get("idRamoAtividade").equals("0")
|| inserirImovelActionForm.get("idRamoAtividade") == null) && !carregou){
FiltroRamoAtividade filtroRamoAtividade = new FiltroRamoAtividade(FiltroRamoAtividade.DESCRICAO);
filtroRamoAtividade.adicionarParametro(new ParametroSimples(
FiltroRamoAtividade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
ramosAtividades = fachada.pesquisar(filtroRamoAtividade, RamoAtividade.class.getName());
if (ramosAtividades == null || ramosAtividades.equals("")) {
throw new ActionServletException("atencao.naocadastrado",
null, "ramo de atividade");
}else{
if (inserirImovelActionForm.get("textoSelecionadoRamoAtividade") == null ||
inserirImovelActionForm.get("textoSelecionadoRamoAtividade").equals("")) {
inserirImovelActionForm.set("textoSelecionadoRamoAtividade",
((RamoAtividade) ((List) ramosAtividades).get(0)).getDescricao());
}else{
inserirImovelActionForm.set("textoSelecionadoRamoAtividade", "");
inserirImovelActionForm.set("idRamoAtividade", "");
}
}
}else if(inserirImovelActionForm.get("idRamoAtividade").equals("")
|| inserirImovelActionForm.get("idRamoAtividade").equals("0")
|| inserirImovelActionForm.get("idRamoAtividade") == null){
}
sessao.setAttribute("ramosAtividades", ramosAtividades);
}
sessao.setAttribute("colecaoImovelRamosAtividade",colecaoImovelRamoAtividade);
sessao.setAttribute("botaoAdicionar1",null);
return retorno;
}
/**
* Este m�todo retorna o id tempor�rio baseado no timestamp do objeto para
* exibi��o na mem�ria, enquanto o usu�rio estiver inserindo
*
* @param objeto
* @return
*/
public static long obterTimestampIdImovelSubcategoria(
ImovelSubcategoria imovelSubcategoria) {
long retorno = 0L;
Integer idImovel = null;
if (imovelSubcategoria != null
&& imovelSubcategoria.getComp_id() != null
&& imovelSubcategoria.getComp_id().getImovel() != null) {
idImovel = imovelSubcategoria.getComp_id().getImovel().getId();
}
Integer idSubcategoria = null;
if (imovelSubcategoria != null
&& imovelSubcategoria.getComp_id() != null
&& imovelSubcategoria.getComp_id().getSubcategoria() != null) {
idSubcategoria = imovelSubcategoria.getComp_id().getSubcategoria()
.getId();
}
Date ultimaAlteracao = imovelSubcategoria.getUltimaAlteracao();
retorno = ultimaAlteracao.getTime();
if (idImovel != null) {
retorno = retorno + idImovel;
}
if (idSubcategoria != null) {
retorno = retorno + idSubcategoria;
}
return retorno;
}
public static long obterTimestampIdImovelRamoAtividade(
ImovelRamoAtividade imovelRamoAtividade) {
long retorno = 0L;
Integer idImovel = null;
if (imovelRamoAtividade != null
&& imovelRamoAtividade.getComp_id() != null
&& imovelRamoAtividade.getComp_id().getImovel() != null) {
idImovel = imovelRamoAtividade.getComp_id().getImovel().getId();
}
Integer idRamoAtividade = null;
if (imovelRamoAtividade != null
&& imovelRamoAtividade.getComp_id() != null
&& imovelRamoAtividade.getComp_id().getRamo_atividade() != null) {
idRamoAtividade = imovelRamoAtividade.getComp_id().getRamo_atividade()
.getId();
}
Date ultimaAlteracao = imovelRamoAtividade.getUltimaAlteracao();
retorno = ultimaAlteracao.getTime();
if (idImovel != null) {
retorno = retorno + idImovel;
}
if (idRamoAtividade != null) {
retorno = retorno + idRamoAtividade;
}
return retorno;
}
private void adicionaObjetoColecao(
DynaValidatorForm inserirImovelActionForm, HttpSession sessao,
Collection colecaoImovelSubCategorias, short quantidadeEconomia,
Fachada fachada, FiltroSubCategoria filtroSubCategoria,
Short quantidadeUnidadesPrivativas, Short quantidadeUnidadesColetivas) {
filtroSubCategoria.adicionarCaminhoParaCarregamentoEntidade("categoria");
filtroSubCategoria.adicionarParametro(new ParametroSimples(
FiltroSubCategoria.ID, inserirImovelActionForm.get("idSubCategoria").toString()));
Collection SubCategoriasDescricao = fachada.pesquisar(
filtroSubCategoria, Subcategoria.class.getName());
Subcategoria subCategoria = (Subcategoria) SubCategoriasDescricao.iterator().next();
ImovelSubcategoriaPK imovelSubcategoriaPK = new ImovelSubcategoriaPK(
null, subCategoria);
ImovelSubcategoria imovelSubCategoria = new ImovelSubcategoria(
imovelSubcategoriaPK, quantidadeEconomia, quantidadeUnidadesPrivativas,
quantidadeUnidadesColetivas, new Date());
boolean existe = false;
if (colecaoImovelSubCategorias != null && !colecaoImovelSubCategorias.isEmpty()) {
Iterator icolecaoImovelSubCategorias = colecaoImovelSubCategorias.iterator();
while (icolecaoImovelSubCategorias.hasNext()) {
ImovelSubcategoria imovelSubcategoria2 =
(ImovelSubcategoria) icolecaoImovelSubCategorias.next();
if (imovelSubcategoria2.getComp_id().getSubcategoria().getId()
.intValue() == imovelSubCategoria.getComp_id()
.getSubcategoria().getId().intValue()) {
existe = true;
}
}
}
if (!existe) {
colecaoImovelSubCategorias.add(imovelSubCategoria);
inserirImovelActionForm.set("idSubCategoriaImovel",
imovelSubCategoria.getComp_id().getSubcategoria().getId().toString());
// manda para a sess�o a cole��o
sessao.setAttribute("colecaoImovelSubCategorias",
colecaoImovelSubCategorias);
}
else {
throw new ActionServletException("atencao.ja_cadastradado.sub_categoria");
}
inserirImovelActionForm.set("quantidadeEconomia", null);
inserirImovelActionForm.set("qtdUnidadePrivativa", null);
inserirImovelActionForm.set("qtdUnidadeColetiva", null);
inserirImovelActionForm.set("idCategoria", "0");
inserirImovelActionForm.set("idSubCategoria", "-1");
}
private void adicionaObjetoColecao(
DynaValidatorForm inserirImovelActionForm, HttpSession sessao,
Collection colecaoImoveisRamoAtividades) {
RamoAtividade ramoAtividade = new RamoAtividade();
ramoAtividade.setId(new Integer(inserirImovelActionForm.get("idRamoAtividade").toString()));
ramoAtividade.setDescricao(new String(inserirImovelActionForm.get("textoSelecionadoRamoAtividade").toString()));
ImovelRamoAtividadePK imovelRamoAtividadePK = new ImovelRamoAtividadePK(null, ramoAtividade);
ImovelRamoAtividade imovelRamoAtividade = new ImovelRamoAtividade(
imovelRamoAtividadePK, new Date());
Iterator iteratorColecaoImoveisRamoAtiviades = colecaoImoveisRamoAtividades.iterator();
ImovelRamoAtividade imoRamAti = new ImovelRamoAtividade();
while ( iteratorColecaoImoveisRamoAtiviades.hasNext() ) {
imoRamAti = (ImovelRamoAtividade) iteratorColecaoImoveisRamoAtiviades.next();
if (imoRamAti.getComp_id().getRamo_atividade().getId().toString().equals(
imovelRamoAtividade.getComp_id().getRamo_atividade().getId().toString())){
throw new ActionServletException("atencao.ja_cadastradado.ramo.atividade");
}
}
colecaoImoveisRamoAtividades.add(imovelRamoAtividade);
inserirImovelActionForm.set("idRamoAtividade",
imovelRamoAtividade.getComp_id().getRamo_atividade().getId().toString());
sessao.setAttribute("colecaoImovelRamosAtividade",
colecaoImoveisRamoAtividades);
sessao.removeAttribute("botaoAdicionar1");
}
}