package gcom.gui.portal;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimentoSolicitante;
import gcom.atendimentopublico.registroatendimento.MeioSolicitacao;
import gcom.atendimentopublico.registroatendimento.RABuilder;
import gcom.atendimentopublico.registroatendimento.RADadosGeraisHelper;
import gcom.atendimentopublico.registroatendimento.RALocalOcorrenciaHelper;
import gcom.atendimentopublico.registroatendimento.RASolicitanteHelper;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoSolicitante;
import gcom.atendimentopublico.registroatendimento.bean.DefinirDataPrevistaUnidadeDestinoEspecificacaoHelper;
import gcom.cadastro.cliente.ClienteFone;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.FiltroClienteImovel;
import gcom.cadastro.cliente.FoneTipo;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
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.ParametroNulo;
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 org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
*
* <p>
* <b>[RM2923]</b> Inserir Solicita��o de Servicos - Loja Virtual da Compesa
* </p>
* <p>
* <b>[UC1189]</b> Inserir Registro de Atendimento Loja Virtual</b>
* </p>
* <p>
* Gerar Registro de Atendimento
* </p>
*
* @author Magno Gouveia
* @date 19/05/2011
*
*/
public class InserirSolicitacaoServicosPortalAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("validarDados");
Fachada fachada = Fachada.getInstancia();
InserirSolicitacaoServicosPortalActionForm form = (InserirSolicitacaoServicosPortalActionForm) actionForm;
Imovel imovel = null;
if(Util.verificarIdNaoVazio(form.getMatricula())){
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, form.getMatricula()));
Collection colecaoImoveis = fachada.pesquisar(filtroImovel, Imovel.class.getName());
if(!Util.isVazioOrNulo(colecaoImoveis)){
imovel = (Imovel) Util.retonarObjetoDeColecao(colecaoImoveis);
}
}
// 2.2.1
if (!Util.verificarNaoVazio(form.getNomeSolicitante())) {
httpServletRequest.setAttribute("exception", "O nome do solicitante � obrigat�rio!");
return retorno;
}
// 2.2.2
if(!Util.verificarNaoVazio(form.getTelefoneContato())){
httpServletRequest.setAttribute("exception", "O telefone de contato � obrigat�rio!");
return retorno;
}
// 2.2.4
if(!Util.verificarIdNaoVazio(form.getSolicitacaoTipo())){
httpServletRequest.setAttribute("exception", "O tipo de solicita��o � obrigat�rio!");
return retorno;
}
if(!Util.verificarNaoVazio(form.getPontoReferencia())){
httpServletRequest.setAttribute("exception", "O ponto de refer�ncia � obrigat�rio!");
return retorno;
}
// 2.2.5
Date dataPrevista = null;
if (Util.verificarIdNaoVazio(form.getEspecificacao())) {
DefinirDataPrevistaUnidadeDestinoEspecificacaoHelper definirDataPrevistaUnidadeDestinoEspecificacaoHelper = fachada
.definirDataPrevistaUnidadeDestinoEspecificacao(new Date(),
Integer.parseInt(form.getEspecificacao()));
dataPrevista = Util
.formatarDataFinal(definirDataPrevistaUnidadeDestinoEspecificacaoHelper
.getDataPrevista());
} else {
httpServletRequest.setAttribute("exception", "A especifica��o � obrigat�ria!");
return retorno;
}
FiltroRegistroAtendimento filtroRegistroAtendimento = new FiltroRegistroAtendimento();
filtroRegistroAtendimento.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimento.IMOVEL_ID, form.getMatricula()));
filtroRegistroAtendimento.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimento.ID_SOLICITACAO_TIPO_ESPECIFICACAO, form.getEspecificacao()));
filtroRegistroAtendimento.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimento.CODIGO_SITUACAO, RegistroAtendimento.SITUACAO_PENDENTE));
Collection colecaoRegistroAtendimento = fachada.pesquisar(filtroRegistroAtendimento, RegistroAtendimento.class.getName());
if (Util.isVazioOrNulo(colecaoRegistroAtendimento)) {
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.INDICADOR_USUARIO_INTERNET,
ConstantesSistema.INDICADOR_USO_ATIVO));
Usuario usuarioLogado =
(Usuario) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroUsuario, Usuario.class.getName()));
Integer idUsuarioLogado = (usuarioLogado != null)? usuarioLogado.getId() : null;
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro(
new ParametroSimples(FiltroUnidadeOrganizacional.CODIGO_CONSTANTE,
1));
Collection colecaoUnidadeOrganizacional =
fachada.pesquisar(filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName());
Integer idUnidadeOrganizacional = null;
if(!Util.isVazioOrNulo(colecaoUnidadeOrganizacional)){
UnidadeOrganizacional unidadeOrganizacional = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadeOrganizacional);
idUnidadeOrganizacional = unidadeOrganizacional.getId();
}
Collection<ClienteFone> colecaoTelefone = null;
if(form.getTelefoneContato() != null && !form.getTelefoneContato().trim().equals("")){
colecaoTelefone = new ArrayList<ClienteFone>();
FoneTipo foneTipo = new FoneTipo();
foneTipo.setId(FoneTipo.RESIDENCIAL);
String telefone = form.getTelefoneContato().trim();
telefone = telefone.replace("(", "");
telefone = telefone.replace(")", "");
telefone = telefone.replace("-", "");
telefone = telefone.replace(" ", "");
String ddd = telefone.substring(0, 2);
String numeroTelefone = telefone.substring(2);
ClienteFone clienteFone = new ClienteFone();
clienteFone.setFoneTipo(foneTipo);
clienteFone.setDdd(ddd);
clienteFone.setTelefone(numeroTelefone);
colecaoTelefone.add(clienteFone);
}
Collection colecaoEndereco = new ArrayList();
Imovel imovelEndereco = fachada.pesquisarImovelParaEndereco(imovel.getId());
colecaoEndereco.add(imovelEndereco);
String observacao = form.getObservacoes();
if(observacao.length() > 400){
observacao = observacao.substring(0, 400);
}
String pontoReferencia = form.getPontoReferencia();
if(pontoReferencia.length() > 200){
pontoReferencia = pontoReferencia.substring(0, 200);
}
try {
FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, imovel.getId()));
filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.CLIENTE_RELACAO_TIPO_ID, 2));
filtroClienteImovel.adicionarParametro(new ParametroNulo(FiltroClienteImovel.DATA_FIM_RELACAO));
ClienteImovel clienteImovel = (ClienteImovel) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroClienteImovel, ClienteImovel.class.getName()));
String protocolo = this.getFachada().obterProtocoloAtendimento();
RADadosGeraisHelper raDadosGerais = RABuilder.buildRADadosGerais(form, ConstantesSistema.SIM, MeioSolicitacao.INTERNET, dataPrevista, observacao,
idUnidadeOrganizacional, idUsuarioLogado, protocolo, observacao);
RALocalOcorrenciaHelper raLocalOcorrencia = RABuilder.buildRALocalOcorrencia(imovel, colecaoEndereco, ConstantesSistema.NAO);
RASolicitanteHelper raSolicitante = RABuilder.buildRASolicitante(form, clienteImovel.getCliente().getId(), pontoReferencia, false, colecaoTelefone);
@SuppressWarnings("unused")
Integer[] idRASolicitada =
fachada.inserirRegistroAtendimento(raDadosGerais, raLocalOcorrencia, raSolicitante);
httpServletRequest.setAttribute("RASolicitadaComSucesso", true);
httpServletRequest.setAttribute("mensagemRA", protocolo);
httpServletRequest.setAttribute("dataPrevistaAtendimentoRA", Util.formatarData(dataPrevista));
retorno = actionMapping.findForward("RASolicitadaComSucesso");
} catch (Exception e) {
httpServletRequest.setAttribute("exception", "N�o foi poss�vel inserir a solicita��o: \n" + e.getMessage());
e.printStackTrace();
}
} else {
RegistroAtendimento registroAtendimento = (RegistroAtendimento) Util.retonarObjetoDeColecao(colecaoRegistroAtendimento);
FiltroRegistroAtendimentoSolicitante filtroRegistroAtendimentoSolicitante = new FiltroRegistroAtendimentoSolicitante();
filtroRegistroAtendimentoSolicitante.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimentoSolicitante.REGISTRO_ATENDIMENTO_ID, registroAtendimento.getId()));
RegistroAtendimentoSolicitante registroAtendimentoSolicitante = (RegistroAtendimentoSolicitante) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroRegistroAtendimentoSolicitante, RegistroAtendimentoSolicitante.class.getName()));
httpServletRequest.setAttribute("RAJaSolicitada", true);
httpServletRequest.setAttribute("mensagemRA", registroAtendimentoSolicitante.getNumeroProtocoloAtendimento());
httpServletRequest.setAttribute("dataPrevistaAtendimentoRA", Util.formatarData(registroAtendimento.getDataPrevistaAtual()));
}
return retorno;
}
}