package gcom.gui.atendimentopublico.registroatendimento; import gcom.atendimentopublico.ordemservico.ServicoNaoCobrancaMotivo; import gcom.atendimentopublico.registroatendimento.AtendimentoMotivoEncerramento; import gcom.atendimentopublico.registroatendimento.AtendimentoRelacaoTipo; import gcom.atendimentopublico.registroatendimento.FiltroAtendimentoMotivoEncerramento; import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipoEspecificacao; import gcom.atendimentopublico.registroatendimento.RegistroAtendimento; import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoUnidade; import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.interceptor.RegistradorOperacao; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.OperacaoEfetuada; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; 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; /** * [UC0435] Encerrar Registro Atendimento * * @author Leonardo Regis * @created 24 de Julho de 2006 */ public class EncerrarRegistroAtendimentoAction extends GcomAction { // Fachada Fachada fachada = Fachada.getInstancia(); /** * [UC0435] Encerrar Registro Atendimento * * [UC0107] Registrar Transa��o * * @author Leonardo Regis * @date 18/08/2006 * * @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 EncerrarRegistroAtendimentoActionForm encerrarRegistroAtendimentoActionForm = (EncerrarRegistroAtendimentoActionForm) actionForm; HttpSession sessao = httpServletRequest.getSession(false); Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado"); // [UC0107] Registrar Transa��o RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_REGISTRO_ATENDIMENTO_ENCERRAR, new UsuarioAcaoUsuarioHelper(usuario,UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); Operacao operacao = new Operacao(); operacao.setId(Operacao.OPERACAO_REGISTRO_ATENDIMENTO_ENCERRAR); OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada(); operacaoEfetuada.setOperacao(operacao); // Tramite RegistroAtendimento registroAtendimento = null; RegistroAtendimentoUnidade registroAtendimentoUnidade = null; if (new Integer(encerrarRegistroAtendimentoActionForm.getMotivoEncerramentoId()).intValue() != ConstantesSistema.NUMERO_NAO_INFORMADO) { // Recupera informa��es do tr�mite registroAtendimento = getDadosEncerramento(encerrarRegistroAtendimentoActionForm); // Validamos se possivel criar um novo RA Object[] arrayValidaGeracaoNovoRA = validarGeracaoNovoRA( registroAtendimento, httpServletRequest, actionMapping ); if ( ( Boolean ) arrayValidaGeracaoNovoRA[2] ){ return ( ActionForward ) arrayValidaGeracaoNovoRA[0]; } Boolean confirmadoGeracaoNovoRA = ( Boolean )arrayValidaGeracaoNovoRA[1]; registroAtendimentoUnidade = getDadosRegistroAtendimentoUnidade(usuario, registroAtendimento, encerrarRegistroAtendimentoActionForm); // Faz as valida��es de tramita��o fachada.validarEncerramentoRA(registroAtendimento); // Caso exista a possibilidade de gera��o de um novo registro de // atendimento Integer idDebitoTipo = null; BigDecimal valorDebito = null; Integer qtdParcelas = null; String percentualCobranca = null; if (encerrarRegistroAtendimentoActionForm.getMotivoEncerramentoId() != null && encerrarRegistroAtendimentoActionForm.getMotivoEncerramentoId().equals(String.valueOf(AtendimentoMotivoEncerramento.CONCLUSAO_SERVICO)) && encerrarRegistroAtendimentoActionForm.getIdTipoDebito() != null && !encerrarRegistroAtendimentoActionForm.getIdTipoDebito().equals("")){ if(encerrarRegistroAtendimentoActionForm.getMotivoNaoCobranca() == null || encerrarRegistroAtendimentoActionForm.getMotivoNaoCobranca().equals(""+ConstantesSistema.NUMERO_NAO_INFORMADO) ){ idDebitoTipo = new Integer(encerrarRegistroAtendimentoActionForm.getIdTipoDebito()); valorDebito = Util.formatarMoedaRealparaBigDecimal(encerrarRegistroAtendimentoActionForm.getValorDebito()); qtdParcelas = new Integer(encerrarRegistroAtendimentoActionForm.getQuantidadeParcelas()); percentualCobranca = encerrarRegistroAtendimentoActionForm.getPercentualCobranca(); } else{ ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = new ServicoNaoCobrancaMotivo(); servicoNaoCobrancaMotivo.setId( new Integer(encerrarRegistroAtendimentoActionForm.getMotivoNaoCobranca())); registroAtendimento.setServicoNaoCobrancaMotivo(servicoNaoCobrancaMotivo); } } // Encerrar RA fachada.encerrarRegistroAtendimento(registroAtendimento, registroAtendimentoUnidade, usuario, idDebitoTipo, valorDebito, qtdParcelas, percentualCobranca, confirmadoGeracaoNovoRA,null,false); // Setando Opera��o registroAtendimento.setOperacaoEfetuada(operacaoEfetuada); registroAtendimento.adicionarUsuario(usuario, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO); registradorOperacao.registrarOperacao(registroAtendimento); // Setando Opera��o registroAtendimentoUnidade.setOperacaoEfetuada(operacaoEfetuada); registroAtendimentoUnidade.adicionarUsuario(usuario, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO); registradorOperacao.registrarOperacao(registroAtendimentoUnidade); // [FS008] Monta a p�gina de sucesso montarPaginaSucesso(httpServletRequest, "Registro de Atendimento "+registroAtendimento.getId()+" encerrado com sucesso!", "Manter Registro de Atendimento", "exibirFiltrarRegistroAtendimentoAction.do?menu=sim", "exibirConsultarRegistroAtendimentoAction.do?numeroRA="+ registroAtendimento.getId().toString(), "Voltar"); } return retorno; } /** * Carrega Tr�mite com informa��es vindas da tela * * @author Leonardo Regis * @date 18/08/2006 * * @param form */ private RegistroAtendimento getDadosEncerramento(EncerrarRegistroAtendimentoActionForm form) { RegistroAtendimento registroAtendimento = new RegistroAtendimento(); // Registro de Atendimento registroAtendimento.setId(new Integer(form.getNumeroRA())); registroAtendimento.setRegistroAtendimento( Util.converteStringParaDateHora(form.getDataAtendimento()+" "+form.getHoraAtendimento())); AtendimentoMotivoEncerramento atendimentoMotivoEncerramento = this.consultaAtendimentoMotivoEncerramento(new Integer(form.getMotivoEncerramentoId())); registroAtendimento.setAtendimentoMotivoEncerramento(atendimentoMotivoEncerramento); RegistroAtendimento registroAtendimentoDuplicidade = null; if (form.getNumeroRAReferencia() != null && !form.getNumeroRAReferencia().equals("")) { registroAtendimentoDuplicidade = new RegistroAtendimento(); registroAtendimentoDuplicidade.setId(new Integer(form.getNumeroRAReferencia())); } registroAtendimento.setRegistroAtendimentoDuplicidade(registroAtendimentoDuplicidade); registroAtendimento.setDataEncerramento(Util.converteStringParaDateHora(form.getDataEncerramento()+" "+form.getHoraEncerramento()+":00")); if(form.getParecerEncerramento() != null && !form.getParecerEncerramento().equals("") && form.getParecerEncerramento().length() > 400){ String[] msg = new String[2]; msg[0]="Parecer"; msg[1]="400"; throw new ActionServletException("atencao.execedeu_limit_observacao",null,msg); }else if (form.getParecerEncerramento() != null && !form.getParecerEncerramento().equals("")) { registroAtendimento.setParecerEncerramento(form.getParecerEncerramento().toUpperCase()); } registroAtendimento.setUltimaAlteracao(new Date()); registroAtendimento.setSolicitacaoTipoEspecificacao( new SolicitacaoTipoEspecificacao() ); registroAtendimento.getSolicitacaoTipoEspecificacao().setId( new Integer ( form.getEspecificacaoId() ) ); return registroAtendimento; } /** * Carrega Registro Atendimento Unidade a partir do usu�rio logado. * * @author Leonardo Regis * @date 26/08/2006 * * @param usuario * @param registroAtendimento */ private RegistroAtendimentoUnidade getDadosRegistroAtendimentoUnidade(Usuario usuario, RegistroAtendimento registroAtendimento, EncerrarRegistroAtendimentoActionForm form) { RegistroAtendimentoUnidade registroAtendimentoUnidade = new RegistroAtendimentoUnidade(); registroAtendimentoUnidade.setRegistroAtendimento(registroAtendimento); registroAtendimentoUnidade.setUnidadeOrganizacional(usuario.getUnidadeOrganizacional()); registroAtendimentoUnidade.setUsuario(usuario); AtendimentoRelacaoTipo atendimentoRelacaoTipo = new AtendimentoRelacaoTipo(); atendimentoRelacaoTipo.setId(AtendimentoRelacaoTipo.ENCERRAR); registroAtendimentoUnidade.setAtendimentoRelacaoTipo(atendimentoRelacaoTipo); registroAtendimentoUnidade.setUltimaAlteracao(form.getDataConcorrenciaRA()); return registroAtendimentoUnidade; } /** * Consulta Atendimento Motivo Encerramento * * @author Rafael Pinto * @date 18/10/2006 * * @param id do Atendimento Motivo Encerramento */ private AtendimentoMotivoEncerramento consultaAtendimentoMotivoEncerramento(Integer id){ FiltroAtendimentoMotivoEncerramento filtroAtendimentoMotivoEncerramento = new FiltroAtendimentoMotivoEncerramento(); filtroAtendimentoMotivoEncerramento.adicionarParametro( new ParametroSimples(FiltroAtendimentoMotivoEncerramento.ID,id)); Collection colecao = Fachada.getInstancia().pesquisar(filtroAtendimentoMotivoEncerramento, AtendimentoMotivoEncerramento.class.getName()); AtendimentoMotivoEncerramento atendimentoMotivoEncerramento = (AtendimentoMotivoEncerramento) Util.retonarObjetoDeColecao(colecao); return atendimentoMotivoEncerramento; } /** * * [UC0435] - Encerrar Registro de Atendimento * * M�todo verifica se existe a possibilidade de ser gerada um novo RA. * Caso positivo, retorna uma tela de pergunta ao usu�rio para verificar * se ele deseja gerar esse novo RA ou n�o. Caso n�o seja necess�ria a pegun- * ta, retorna com a tela de sucesso normal ao fluxo. * * @author bruno * @date 15/04/2009 * * @param registroAtendimento: Registro do atendimento. * @param request: Onde se ser�o informados os parametros para gera��o da p�gina * @param actionMapping: Necess�rio para gera��o da p�gina * * @return Object[3] * * Object[0]: ActionFoward com a tela a ser mostrada * Object[1]: Se o usu�rio confimou ou n�o a inser��o do novo ra * Object[2]: Se ser� redirecionado ao usu�rio perguntando se ser� * inserido ou n�o o novo RA. */ private Object[] validarGeracaoNovoRA( RegistroAtendimento registroAtendimento, HttpServletRequest request, ActionMapping actionMapping ){ Object[] retorno = new Object[3]; // Verificamos se ja foi confimado... retorno[1] = ( request.getParameter("confirmado") != null ? request.getParameter("confirmado").equals("ok") : null ); retorno[2] = new Boolean( Boolean.FALSE ); if ( retorno[1] == null ){ Fachada fachada = Fachada.getInstancia(); FiltroSolicitacaoTipoEspecificacao filtro = new FiltroSolicitacaoTipoEspecificacao(); filtro.adicionarParametro( new ParametroSimples( FiltroSolicitacaoTipoEspecificacao.ID, registroAtendimento. getSolicitacaoTipoEspecificacao().getId() ) ); filtro.adicionarCaminhoParaCarregamentoEntidade( "solicitacaoTipoEspecificacaoNovoRA" ); Collection<SolicitacaoTipoEspecificacao> colSolicitacaoTipoEspecificacao = fachada.pesquisar( filtro, SolicitacaoTipoEspecificacao.class.getName() ); SolicitacaoTipoEspecificacao solicitacaoTipoEspecificacao = ( SolicitacaoTipoEspecificacao ) Util.retonarObjetoDeColecao( colSolicitacaoTipoEspecificacao ); if ( solicitacaoTipoEspecificacao. getSolicitacaoTipoEspecificacaoNovoRA()!= null ){ retorno[2] = new Boolean( Boolean.TRUE ); registroAtendimento.setSolicitacaoTipoEspecificacao( solicitacaoTipoEspecificacao ); request.setAttribute("caminhoActionConclusao", "/gsan/encerrarRegistroAtendimentoAction.do"); request.setAttribute("cancelamento", "TRUE"); request.setAttribute("nomeBotao1", "Sim"); request.setAttribute("nomeBotao2", "N�o"); retorno[0] = montarPaginaConfirmacao( "atencao.encerrar_ra_confirma_geracao_novo_ra", request, actionMapping, solicitacaoTipoEspecificacao. getSolicitacaoTipoEspecificacaoNovoRA(). getDescricao() ); return retorno; } } retorno[0] = actionMapping.findForward("telaSucesso"); return retorno; } }