package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoPavimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipo;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.Tramite;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeTipo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Map;
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;
/**
* Tramitar Registro de Atendimento
*
* @author Pedro Alexandre
* @date 10/01/2008
*/
public class TramitarRegistroAtendimentoAction extends GcomAction {
/**
* [UC0371] Inserir Equipe
*
* [UC0107] Registrar Transa��o
*
* @author Leonardo Regis,Pedro Alexandre
* @date 18/08/2006, 10/01/2008
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return forward
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta Retorno (Forward = Sucesso)
ActionForward retorno = actionMapping.findForward("telaSucesso");
// Form
TramitarRegistroAtendimentoActionForm tramitarRegistroAtendimentoActionForm = (TramitarRegistroAtendimentoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
sessao.setAttribute("tramitarConjunto","nao");
// Usuario logado no sistema
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// Tramite
Tramite tramite = null;
if (tramitarRegistroAtendimentoActionForm.getUnidadeDestinoId() != null) {
// Recupera informa��es do tr�mite
tramite = getTramite(tramitarRegistroAtendimentoActionForm);
//Verifica se o usu�rio apertou o bot�o na p�gian de tramitar
String primeiraVez = httpServletRequest.getParameter("primeiraVez");
//Recupera a cole��o de ordem de servi�o que j� foram processadas
Collection colecaoOrdemServicoJaTratada = (Collection)sessao.getAttribute("colecaoOrdemServicoJaTratada");
//Cria os indicadores de centralizadora e terceira
boolean flagCentralizadora = false;
boolean flagTerceira = false;
//Caso a unidade organizacional origem seja uma centralizadora
if(tramite.getUnidadeOrganizacionalOrigem().getUnidadeTipo().getId().equals(UnidadeTipo.UNIDADE_TIPO_CENTRALIZADORA_ID)){
flagCentralizadora = true;
}
//Caso a unidade organizacional destino seja uma terceira
if(tramite.getUnidadeOrganizacionalDestino().getUnidadeTipo().getId().equals(UnidadeTipo.UNIDADE_TIPO_TERCERIZADO_ID)){
flagTerceira = true;
}
Collection colecaoOrdemServicoMovimento = new ArrayList();
Collection colecaoOrdemServicoPavimento = new ArrayList();
//Exportar as ordems de servi�o
if(flagCentralizadora && flagTerceira){
Collection<OrdemServico> colecaoOrdemServicoPrestadora = new ArrayList();
if(primeiraVez != null && primeiraVez.equals("ok")){
Map dadosExportar =
this.getFachada().exportarOrdemServicoPrestadoras(Collections.singletonList(tramite));
colecaoOrdemServicoPrestadora = (Collection)dadosExportar.get("colecaoOrdemServico");
colecaoOrdemServicoMovimento = (Collection)dadosExportar.get("colecaoOrdemServicoMovimento");
sessao.setAttribute("colecaoOrdemServicoMovimento", colecaoOrdemServicoMovimento);
sessao.setAttribute("colecaoOrdemServicoPrestadora",colecaoOrdemServicoPrestadora);
}else{
colecaoOrdemServicoPrestadora = (Collection)sessao.getAttribute("colecaoOrdemServicoPrestadora");
colecaoOrdemServicoMovimento = (Collection)sessao.getAttribute("colecaoOrdemServicoMovimento");
}
if(colecaoOrdemServicoJaTratada!= null && !colecaoOrdemServicoJaTratada.isEmpty()){
colecaoOrdemServicoPrestadora.removeAll(colecaoOrdemServicoJaTratada);
}
//Caso ainda tenha ordem de servi�o de prestadora para ser processada.
if(colecaoOrdemServicoPrestadora!= null && !colecaoOrdemServicoPrestadora.isEmpty()){
for(OrdemServico ordemServico : colecaoOrdemServicoPrestadora){
//Caso a ordem de servi�o tenha im�vel, exibir o popup para
//inserir os dados do paviemnto
//Caso contr�rio inserir a ordem de servi�o pavimento
//com os dados de pavimento nulos.
if(ordemServico.getImovel() != null){
sessao.setAttribute("ordemServico",ordemServico);
sessao.setAttribute("imovel",ordemServico.getImovel());
httpServletRequest.setAttribute("indicadorPavimento","sim");
retorno = actionMapping.findForward("tramitacaoRegistroAtendimento");
return retorno;
}else{
//Inseri a OrdemServicoPavimento com os dados de pavimento
OrdemServicoPavimento ordemServicoPavimento = new OrdemServicoPavimento();
ordemServicoPavimento.setOrdemServico(ordemServico);
ordemServicoPavimento.setPavimentoRua(null);
ordemServicoPavimento.setAreaPavimentoRua(null);
ordemServicoPavimento.setPavimentoCalcada(null);
ordemServicoPavimento.setAreaPavimentoCalcada(null);
ordemServicoPavimento.setPavimentoRuaRetorno(null);
ordemServicoPavimento.setAreaPavimentoRuaRetorno(null);
ordemServicoPavimento.setPavimentoCalcadaRetorno(null);
ordemServicoPavimento.setAreaPavimentoCalcadaRetorno(null);
ordemServicoPavimento.setDataGeracao(new Date());
if(sessao.getAttribute("colecaoOrdemServicoPavimento") != null){
colecaoOrdemServicoPavimento = (Collection)sessao.getAttribute("colecaoOrdemServicoPavimento");
}
colecaoOrdemServicoPavimento.add(ordemServicoPavimento);
sessao.setAttribute("colecaoOrdemServicoPavimento", colecaoOrdemServicoPavimento);
}
}
}
}
this.getFachada().tramitarRAExportandoOSPrestadoras(tramite,
tramitarRegistroAtendimentoActionForm.getDataConcorrenciaRA(),
usuario,
colecaoOrdemServicoPavimento,
colecaoOrdemServicoMovimento);
// [FS008] Monta a p�gina de sucesso
montarPaginaSucesso(httpServletRequest,
"Registro de Atendimento "+tramite.getRegistroAtendimento().getId()+" tramitado com sucesso!",
"Efetuar outra Tramita��o do Registro de Atendimento",
"exibirTramitarRegistroAtendimentoAction.do?resetarTramitacao=true&numeroRA="+tramite.getRegistroAtendimento().getId(),
"exibirConsultarRegistroAtendimentoAction.do?numeroRA="
+ tramite.getRegistroAtendimento().getId().toString(), "Voltar");
}
return retorno;
}
/**
* Carrega Tr�mite com informa��es vindas da tela
*
* @author Leonardo Regis
* @date 18/08/2006
*
* @param form
*/
private Tramite getTramite(TramitarRegistroAtendimentoActionForm form) {
Tramite tramite = new Tramite();
// Unidade Origem
UnidadeOrganizacional unidadeOrigem = null;
if (form.getUnidadeAtualId() != null && !form.getUnidadeAtualId().equals("")) {
FiltroUnidadeOrganizacional filtroUnidadeOrigem = new FiltroUnidadeOrganizacional();
filtroUnidadeOrigem.adicionarParametro(
new ParametroSimples(
FiltroUnidadeOrganizacional.ID,
form.getUnidadeAtualId()));
filtroUnidadeOrigem.adicionarCaminhoParaCarregamentoEntidade("unidadeTipo");
Collection colecaoUnidadeOrigem =
this.getFachada().pesquisar(filtroUnidadeOrigem, UnidadeOrganizacional.class.getName());
if (colecaoUnidadeOrigem != null && !colecaoUnidadeOrigem.isEmpty()) {
unidadeOrigem = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadeOrigem);
}else{
//levanta a exce��o para a pr�xima camada
throw new ActionServletException("atencao.naocadastrado",null, "Unidade Organizacional Origem");
}
}
UnidadeOrganizacional unidadeCentralizadora = null;
if (form.getUnidadeAtualIdCentralizadora() != null &&
!form.getUnidadeAtualIdCentralizadora().equals("")) {
unidadeCentralizadora = new UnidadeOrganizacional();
unidadeCentralizadora.setId(new Integer(form.getUnidadeAtualIdCentralizadora()));
}
unidadeOrigem.setUnidadeCentralizadora(unidadeCentralizadora);
tramite.setUnidadeOrganizacionalOrigem(unidadeOrigem);
// Unidade Destino
UnidadeOrganizacional unidadeDestino = null;
// Filtra Unidade de Destino
FiltroUnidadeOrganizacional filtroUnidadeDestino = new FiltroUnidadeOrganizacional();
filtroUnidadeDestino.adicionarParametro(
new ParametroSimples(
FiltroUnidadeOrganizacional.ID,
form.getUnidadeDestinoId()));
filtroUnidadeDestino.adicionarCaminhoParaCarregamentoEntidade("unidadeTipo");
// Recupera Unidade de Destino
Collection colecaoUnidadeDestino =
this.getFachada().pesquisar(filtroUnidadeDestino, UnidadeOrganizacional.class.getName());
if (colecaoUnidadeDestino != null && !colecaoUnidadeDestino.isEmpty()) {
unidadeDestino = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadeDestino);
}else{
//levanta a exce��o para a pr�xima camada
throw new ActionServletException("atencao.naocadastrado",null, "Unidade Destino");
}
tramite.setUnidadeOrganizacionalDestino(unidadeDestino);
// Registro de Atendimento
RegistroAtendimento registroAtendimento = new RegistroAtendimento();
registroAtendimento.setId(new Integer(form.getNumeroRA()));
registroAtendimento.setCodigoSituacao(new Short(form.getCodigoSituacaoRA()));
SolicitacaoTipoEspecificacao solicitacaoTipoEspecificacao = new SolicitacaoTipoEspecificacao();
solicitacaoTipoEspecificacao.setId(new Integer(form.getEspecificacaoId()));
SolicitacaoTipo solicitacaoTipo = new SolicitacaoTipo();
solicitacaoTipo.setId(new Integer(form.getTipoSolicitacaoId()));
solicitacaoTipo.setIndicadorTarifaSocial(new Short(form.getTipoSolicitacaoIndicadorTarifaSocial()));
solicitacaoTipoEspecificacao.setSolicitacaoTipo(solicitacaoTipo);
registroAtendimento.setSolicitacaoTipoEspecificacao(solicitacaoTipoEspecificacao);
tramite.setRegistroAtendimento(registroAtendimento);
// Usu�rio Registro
Usuario usuarioRegistro = new Usuario();
usuarioRegistro.setId(new Integer(form.getUsuarioRegistroId()));
UnidadeOrganizacional unidadeOrganizacional = new UnidadeOrganizacional();
unidadeOrganizacional.setId(new Integer(form.getUsuarioRegistroUnidade()));
unidadeOrganizacional.setIndicadorTarifaSocial(new Short(form.getUsuarioRegistroUnidadeIndicadorTarifaSocial()));
usuarioRegistro.setUnidadeOrganizacional(unidadeOrganizacional);
tramite.setUsuarioRegistro(usuarioRegistro);
// Usu�rio Respons�vel
if (form.getUsuarioResponsavelId() != null &&
!form.getUsuarioResponsavelId().equals("")) {
Usuario usuarioResponsavel = new Usuario();
usuarioResponsavel.setId(new Integer(form.getUsuarioResponsavelId()));
tramite.setUsuarioResponsavel(usuarioResponsavel);
}
if(form.getParecerTramite() != null && !form.getParecerTramite().equals("")){
tramite.setParecerTramite(form.getParecerTramite());
}else{
tramite.setParecerTramite(null);
}
tramite.setDataTramite(Util.converteStringParaDateHora(form.getDataTramite()+" "+form.getHoraTramite()+":00"));
tramite.setUltimaAlteracao(new Date());
return tramite;
}
}