package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.bean.IntegracaoComercialHelper;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipo;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipoOperacao;
import gcom.atendimentopublico.ordemservico.FiltroTipoServico;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoBoletim;
import gcom.atendimentopublico.ordemservico.OrdemServicoPavimento;
import gcom.atendimentopublico.ordemservico.ServicoNaoCobrancaMotivo;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.atendimentopublico.ordemservico.ServicoTipoOperacao;
import gcom.atendimentopublico.registroatendimento.AtendimentoMotivoEncerramento;
import gcom.atendimentopublico.registroatendimento.AtendimentoRelacaoTipo;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.FiltroSolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoUnidade;
import gcom.atendimentopublico.registroatendimento.SolicitacaoTipoEspecificacao;
import gcom.atendimentopublico.registroatendimento.bean.ObterDadosRegistroAtendimentoHelper;
import gcom.cadastro.imovel.PavimentoCalcada;
import gcom.cadastro.imovel.PavimentoRua;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
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 java.util.HashMap;
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;
/**
* Action que define o pr�-processamento da p�gina de encerra OS caso precise
* entrar na tela
*
* @author S�vio Luiz
* @created 18/09/2006
*/
public class EncerrarOrdemServicoAction extends GcomAction {
/**
* Execute do Consultar OS Popup
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return forward
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
EncerrarOrdemServicoActionForm encerrarOrdemServicoActionForm = (EncerrarOrdemServicoActionForm) actionForm;
if ("confirmaEncerramentoRA".equals(httpServletRequest.getParameter("tipoRelatorio"))) {
sessao.setAttribute("confirmaEncerramentoRA", httpServletRequest.getParameter("confirmado"));
}
String valorConfirmacaoEncerramentoRA = (String) sessao.getAttribute("confirmaEncerramentoRA");
////////////////////////////////////////////////////////////////////////////////////////////////
if ("confirmaBoletimValorZero".equals(httpServletRequest.getParameter("tipoRelatorio"))) {
sessao.setAttribute("confirmaBoletimValorZero", httpServletRequest.getParameter("confirmado"));
}
String valorConfirmacaoBoletimValorZero = (String) sessao.getAttribute("confirmaBoletimValorZero");
///////////////////////////////////////////////////////////////////////////////////////////////
Integer idOSDiagnostico = null;
OrdemServicoBoletim ordemServicoBoletim = null;
// parte da integra��o com o sistema comercial
IntegracaoComercialHelper integracaoComercialHelper = (IntegracaoComercialHelper) sessao.getAttribute("integracaoComercialHelper");
Short indicadorServicoAceito = null;
if (encerrarOrdemServicoActionForm.getIndicadorServicoAceito() != null
&& !encerrarOrdemServicoActionForm.getIndicadorServicoAceito().equals("")) {
indicadorServicoAceito = new Short(encerrarOrdemServicoActionForm.getIndicadorServicoAceito());
}
/*
* Colocado por Raphael Rossiter em 09/05/2007
* Caso o id do motivo de n�o cobran�a venha com o valor -1 n�o ser� gerado o objeto
* ServicoNaoCobrancaMotivo dentro da OS
*/
ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;
BigDecimal valorDebito = null;
if (integracaoComercialHelper != null &&
integracaoComercialHelper.getOrdemServico() != null &&
integracaoComercialHelper.getOrdemServico().getServicoNaoCobrancaMotivo() != null &&
integracaoComercialHelper.getOrdemServico().getServicoNaoCobrancaMotivo()
.getId().equals(ConstantesSistema.NUMERO_NAO_INFORMADO)){
integracaoComercialHelper.getOrdemServico().setServicoNaoCobrancaMotivo(null);
}else if (integracaoComercialHelper != null &&
integracaoComercialHelper.getOrdemServico() != null &&
integracaoComercialHelper.getOrdemServico().getServicoNaoCobrancaMotivo() != null ) {
servicoNaoCobrancaMotivo =
integracaoComercialHelper.getOrdemServico().getServicoNaoCobrancaMotivo();
}
if(integracaoComercialHelper != null &&
integracaoComercialHelper.getOrdemServico() != null){
valorDebito = integracaoComercialHelper.getOrdemServico().getValorAtual();
}
if (valorConfirmacaoEncerramentoRA == null || valorConfirmacaoEncerramentoRA.equals("")) {
// valida enter
String idServicoTipo = encerrarOrdemServicoActionForm.getIdServicoTipo();
String descricaoServicoTipo = encerrarOrdemServicoActionForm.getDescricaoServicoTipo();
Collection colecaoManterDadosAtividadesOrdemServicoHelper = (Collection) sessao.getAttribute("colecaoManutencao");
if ((idServicoTipo != null && !idServicoTipo.equals("")) && (descricaoServicoTipo == null || descricaoServicoTipo.equals(""))) {
FiltroServicoTipo filtroServicoTipo = new FiltroServicoTipo();
filtroServicoTipo.adicionarParametro(new ParametroSimples(FiltroServicoTipo.ID, idServicoTipo));
filtroServicoTipo.adicionarParametro(new ParametroSimples(FiltroServicoTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection servicoTipoEncontrado = fachada.pesquisar(filtroServicoTipo, ServicoTipo.class.getName());
if (servicoTipoEncontrado != null && !servicoTipoEncontrado.isEmpty()) {
ServicoTipo servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(servicoTipoEncontrado);
// O servi�o tipo foi encontrado
encerrarOrdemServicoActionForm.setIdServicoTipo("" + servicoTipo.getId());
encerrarOrdemServicoActionForm.setDescricaoServicoTipo(servicoTipo.getDescricao());
} else {
throw new ActionServletException("atencao.label_inexistente", null, "Servi�o Tipo");
}
}
// caso seja a primeira vez
if (integracaoComercialHelper == null || integracaoComercialHelper.equals("")) {
// [FS0002] - Validar Tipo Servi�o
// [FS0004] - Verificar preenchimento dos campos
// [FS0007] - Validar Data de Encerramento
// [FS0008] - Validar Data do roteiro
fachada.validarCamposEncerrarOS(
encerrarOrdemServicoActionForm.getIndicadorExecucao(),
encerrarOrdemServicoActionForm.getNumeroOS(),
encerrarOrdemServicoActionForm.getIdMotivoEncerramento(),
encerrarOrdemServicoActionForm.getDataEncerramento(),
colecaoManterDadosAtividadesOrdemServicoHelper,
encerrarOrdemServicoActionForm.getTipoServicoReferenciaId(),
encerrarOrdemServicoActionForm.getIndicadorPavimento(),
encerrarOrdemServicoActionForm.getPavimento(),
encerrarOrdemServicoActionForm.getIdTipoRetornoReferida(),
encerrarOrdemServicoActionForm.getIndicadorDeferimento(),
encerrarOrdemServicoActionForm.getIndicadorTrocaServico(), idServicoTipo,
encerrarOrdemServicoActionForm.getDataRoteiro(),
encerrarOrdemServicoActionForm.getNumeroRA(),
encerrarOrdemServicoActionForm.getIndicadorVistoriaServicoTipo(),
encerrarOrdemServicoActionForm.getCodigoRetornoVistoriaOs(),
encerrarOrdemServicoActionForm.getIndicadorDiagnostico(),
encerrarOrdemServicoActionForm.getObservacaoEncerramento(),
usuarioLogado);
Map validacao = validarInformacoesBoletimMedicao(new Integer(encerrarOrdemServicoActionForm.getNumeroOS()), encerrarOrdemServicoActionForm);
ordemServicoBoletim = (OrdemServicoBoletim) validacao.get("ordemServicoBoletim");
Boolean exibirMsgConfirmacao = (Boolean) validacao.get("exibirMsgConfirmacao");
if (exibirMsgConfirmacao && (valorConfirmacaoBoletimValorZero == null || !valorConfirmacaoBoletimValorZero.equalsIgnoreCase("ok"))) {
httpServletRequest.setAttribute("caminhoActionConclusao","/gsan/encerrarOrdemServicoAction.do");
// httpServletRequest.setAttribute("cancelamento", "TRUE");
httpServletRequest.setAttribute("nomeBotao1", "Sim");
// httpServletRequest.setAttribute("nomeBotao2", "N�o");
httpServletRequest.setAttribute("tipoRelatorio", "confirmaBoletimValorZero");
return montarPaginaConfirmacao("atencao.encerrar_OS_boletim", httpServletRequest, actionMapping);
}
} else {
Map validacao = validarInformacoesBoletimMedicao(new Integer(encerrarOrdemServicoActionForm.getNumeroOS()), encerrarOrdemServicoActionForm);
ordemServicoBoletim = (OrdemServicoBoletim) validacao.get("ordemServicoBoletim");
}
// indicador execu��o seja diferente de nulo
if (encerrarOrdemServicoActionForm.getIndicadorExecucao() != null && !encerrarOrdemServicoActionForm.getIndicadorExecucao().equals("")) {
short indicadorExecucao = Short.parseShort(encerrarOrdemServicoActionForm.getIndicadorExecucao());
Integer numeroOS = Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getNumeroOS());
Date dataEncerramento = null;
if (encerrarOrdemServicoActionForm.getHoraEncerramento() != null && !encerrarOrdemServicoActionForm.getHoraEncerramento().equals("")) {
dataEncerramento = Util.converteStringParaDateHora(encerrarOrdemServicoActionForm.getDataEncerramento()
+ " "
+ encerrarOrdemServicoActionForm.getHoraEncerramento()
+ ":00");
} else {
dataEncerramento = Util.converteStringParaDateHora(encerrarOrdemServicoActionForm.getDataEncerramento()
+ " "
+ Util.formatarHoraSemSegundos(new Date())
+ ":00");
}
Date dataUltimaAlteracao = encerrarOrdemServicoActionForm.getUltimaAlteracao();
// indicador execu��o seja igual a n�o(2)
if (indicadorExecucao == AtendimentoMotivoEncerramento.INDICADOR_EXECUCAO_NAO) {
OrdemServico osFiscalizacao = null;
if (sessao.getAttribute("ordemServicoFiscalizacao") != null) {
osFiscalizacao = (OrdemServico) sessao.getAttribute("ordemServicoFiscalizacao");
}
// [SB0001] - Encerrar sem execu��o
fachada.encerrarOSSemExecucao(numeroOS,
dataEncerramento,
usuarioLogado,
encerrarOrdemServicoActionForm.getIdMotivoEncerramento(),
dataUltimaAlteracao,
encerrarOrdemServicoActionForm.getObservacaoEncerramento(),
osFiscalizacao,
encerrarOrdemServicoActionForm.getIndicadorVistoriaServicoTipo(),
encerrarOrdemServicoActionForm.getCodigoRetornoVistoriaOs(),
ordemServicoBoletim,
indicadorServicoAceito);
} else {
// indicador execu��o seja igual a sim(1)
if (indicadorExecucao == AtendimentoMotivoEncerramento.INDICADOR_EXECUCAO_SIM) {
if (encerrarOrdemServicoActionForm.getIndicadorAtualizaComercial() != null
&& !encerrarOrdemServicoActionForm.getIndicadorAtualizaComercial().equals("")) {
Short indicadorComercialAtualiza = new Short(encerrarOrdemServicoActionForm.getIndicadorAtualizaComercial());
if (indicadorComercialAtualiza.equals(ServicoTipo.INDICADOR_ATUALIZA_COMERCIAL_SIM)) {
// caso n�o exista o objeto helper na sess�o
// ent�o � a primeira vez
if (integracaoComercialHelper == null || integracaoComercialHelper.equals("")) {
// caso exista tipo de servi�o
if (encerrarOrdemServicoActionForm.getTipoServicoOSId() != null
&& !encerrarOrdemServicoActionForm.getTipoServicoOSId().equals("")) {
FiltroServicoTipoOperacao filtroServicoTipoOperacao = new FiltroServicoTipoOperacao();
filtroServicoTipoOperacao.adicionarCaminhoParaCarregamentoEntidade("operacao");
filtroServicoTipoOperacao.adicionarParametro(new ParametroSimples(FiltroServicoTipoOperacao.ID_SERVICO_TIPO, encerrarOrdemServicoActionForm.getTipoServicoOSId()));
Collection colecaoServicoTipoOperacao = fachada.pesquisar(filtroServicoTipoOperacao, ServicoTipoOperacao.class.getName());
// caso exista uma funcionalidade assiciada ao servi�o tipo
if (colecaoServicoTipoOperacao != null && !colecaoServicoTipoOperacao.isEmpty()) {
ServicoTipoOperacao servicoTipoOperacao = (ServicoTipoOperacao) Util.retonarObjetoDeColecao(colecaoServicoTipoOperacao);
String caminhoOperacao = servicoTipoOperacao.getOperacao().getCaminhoUrl();
// caso exista o caminho da opera��o
if (caminhoOperacao != null && !caminhoOperacao.equals("")) {
int tamanhoOperacao = caminhoOperacao.length();
// seta o caminho no mapeamento para ser chamado
String caminhoRetorno = caminhoOperacao.substring(0, tamanhoOperacao - 3);
httpServletRequest.setAttribute("veioEncerrarOS", encerrarOrdemServicoActionForm.getNumeroOS());
httpServletRequest.setAttribute("dataEncerramento", encerrarOrdemServicoActionForm.getDataEncerramento());
httpServletRequest.setAttribute("caminhoRetornoIntegracaoComercial", "exibirEncerrarOrdemServicoAction.do?retornoConsulta=1");
retorno = actionMapping.findForward(caminhoRetorno);
if (retorno == null) {
throw new ActionServletException("atencao.caminho_url_indisponivel");
} else {
/*
* caso seja chamado a integra��o ent�o seta a
* OS na sess�o com outro nome e remove a OS da
* sess�o visto que a integra��o usa o mesmo
* nome da OS que est� na sess�o
*/
sessao.setAttribute("osFiscalizacao", sessao.getAttribute("ordemServicoFiscalizacao"));
sessao.removeAttribute("ordemServicoFiscalizacao");
}
}
}
}
}
}
}
if (retorno.getName().equalsIgnoreCase("telaSucesso")) {
OrdemServico osFiscalizacao = null;
if (integracaoComercialHelper == null
|| integracaoComercialHelper.equals("")
&& sessao.getAttribute("ordemServicoFiscalizacao") != null) {
osFiscalizacao = (OrdemServico) sessao.getAttribute("ordemServicoFiscalizacao");
}
/*
* caso a os fiscaliza��o n�o esteja na sess�o
* ent�o n�o foi para integra��o e ent�o pode
* pegar o OS mesmo
*/
if (sessao.getAttribute("osFiscalizacao") != null
&& !sessao.getAttribute("osFiscalizacao").equals("")) {
osFiscalizacao = (OrdemServico) sessao.getAttribute("osFiscalizacao");
sessao.removeAttribute("osFiscalizacao");
}
// se o servi�o tipo referencia seja igual a nulo
if (encerrarOrdemServicoActionForm.getTipoServicoReferenciaId() == null
|| encerrarOrdemServicoActionForm.getTipoServicoReferenciaId().equals("")) {
OrdemServicoPavimento ordemServicoPavimento = new OrdemServicoPavimento();
//Verifica o id pavimento rua.
if (!"".equals(encerrarOrdemServicoActionForm.getIdPavimentoRua())
&& encerrarOrdemServicoActionForm.getIdPavimentoRua() != null) {
PavimentoRua pavimentoRua = new PavimentoRua();
pavimentoRua.setId(Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getIdPavimentoRua()));
ordemServicoPavimento.setPavimentoRua(pavimentoRua);
}
//Verifica a metragem do pavimento rua se � nulo e maior que zero
if (!"".equals(encerrarOrdemServicoActionForm.getMetragemPavimentoRua())
&& encerrarOrdemServicoActionForm.getMetragemPavimentoRua() != null) {
BigDecimal metragem = null;
Integer metragemPavimento = Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getMetragemPavimentoRua().replace(",", ""));
if (metragemPavimento <= new Integer(0).intValue()) {
throw new ActionServletException("atencao.metragemSomentePositiva");
}
metragem = Util.formatarMoedaRealparaBigDecimal(encerrarOrdemServicoActionForm.getMetragemPavimentoRua());
ordemServicoPavimento.setAreaPavimentoRua(metragem);
}
if (!"".equals(encerrarOrdemServicoActionForm.getIdPavimentoCalcada())
&& encerrarOrdemServicoActionForm.getIdPavimentoCalcada() != null) {
PavimentoCalcada pavimentoCalcada = new PavimentoCalcada();
pavimentoCalcada.setId(Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getIdPavimentoCalcada()));
ordemServicoPavimento.setPavimentoCalcada(pavimentoCalcada);
}
//Verifica a metragem do pavimento calcada se � nulo e maior que zero
if (!"".equals(encerrarOrdemServicoActionForm.getMetragemPavimentoCalcada())
&& encerrarOrdemServicoActionForm.getMetragemPavimentoCalcada() != null) {
BigDecimal metragem = null;
Integer metragemcalcada = Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getMetragemPavimentoCalcada().replace(",",""));
if (metragemcalcada.intValue() <= new Integer(0).intValue()) {
throw new ActionServletException("atencao.metragemSomentePositiva");
}
metragem = Util.formatarMoedaRealparaBigDecimal(encerrarOrdemServicoActionForm.getMetragemPavimentoCalcada());
ordemServicoPavimento.setAreaPavimentoCalcada(metragem);
}
//Unidade Repavimentadora
if (!"-1".equals(encerrarOrdemServicoActionForm.getIdUnidadeRepavimentadora())
&& encerrarOrdemServicoActionForm.getIdUnidadeRepavimentadora() != null) {
//[FS0011] � Verificar exist�ncia da unidade repavimentadora
fachada.verificaUnidadeTipoRepavimentadora(encerrarOrdemServicoActionForm.getIdUnidadeRepavimentadora());
UnidadeOrganizacional unidadeOrganizacional = new UnidadeOrganizacional();
unidadeOrganizacional.setId(new Integer(encerrarOrdemServicoActionForm.getIdUnidadeRepavimentadora()));
ordemServicoPavimento.setUnidadeRepavimentadora(unidadeOrganizacional);
}
// [SB0002] - Encerrar com execu��o e sem
// refer�ncia
fachada.encerrarOSComExecucaoSemReferencia(
numeroOS,
dataEncerramento,
usuarioLogado,
encerrarOrdemServicoActionForm.getIdMotivoEncerramento(),
dataUltimaAlteracao,
encerrarOrdemServicoActionForm.getObservacaoEncerramento(),
encerrarOrdemServicoActionForm.getIndicadorPavimento(),
encerrarOrdemServicoActionForm.getPavimento(),
colecaoManterDadosAtividadesOrdemServicoHelper,
integracaoComercialHelper,
encerrarOrdemServicoActionForm.getTipoServicoOSId(),
osFiscalizacao,
encerrarOrdemServicoActionForm.getIndicadorVistoriaServicoTipo(),
encerrarOrdemServicoActionForm.getCodigoRetornoVistoriaOs(),
ordemServicoPavimento,
ordemServicoBoletim,
indicadorServicoAceito);
} else {
/*
* [SB0003] - Encerrar com execu��o e com
* refer�ncia
*/
idOSDiagnostico = fachada
.encerrarOSComExecucaoComReferencia(
numeroOS,
dataEncerramento,
usuarioLogado,
encerrarOrdemServicoActionForm.getIdMotivoEncerramento(),
dataUltimaAlteracao,
encerrarOrdemServicoActionForm.getObservacaoEncerramento(),
encerrarOrdemServicoActionForm.getIndicadorPavimento(),
encerrarOrdemServicoActionForm.getPavimento(),
encerrarOrdemServicoActionForm.getIdTipoRetornoReferida(),
encerrarOrdemServicoActionForm.getIndicadorDeferimento(),
encerrarOrdemServicoActionForm.getIndicadorTrocaServico(),
encerrarOrdemServicoActionForm.getIdServicoTipo(),
encerrarOrdemServicoActionForm.getNumeroOSReferencia(),
encerrarOrdemServicoActionForm.getServicoTipoReferenciaOS(),
colecaoManterDadosAtividadesOrdemServicoHelper,
integracaoComercialHelper,
encerrarOrdemServicoActionForm.getTipoServicoOSId(),
osFiscalizacao,
encerrarOrdemServicoActionForm.getIndicadorVistoriaServicoTipo(),
encerrarOrdemServicoActionForm.getCodigoRetornoVistoriaOs(),
ordemServicoBoletim,
indicadorServicoAceito);
}
}
}
}
}
/**
* [RM5185]
* @author Magno Gouveia
* @since 08/08/2011
*/
FiltroTipoServico filtroTipoServico = new FiltroTipoServico();
filtroTipoServico.adicionarParametro(new ParametroSimples(FiltroTipoServico.ID, encerrarOrdemServicoActionForm.getTipoServicoOSId()));
ServicoTipo servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroTipoServico, ServicoTipo.class.getName()));
if (retorno.getName().equalsIgnoreCase("telaSucesso")) {
if (servicoTipo.getIndicadorEncAutomaticoRAQndEncOS().compareTo(ConstantesSistema.NAO) == 0) {
boolean telaConfirmacao = fachada.tramitarOuEncerrarRADaOSEncerrada(
Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getNumeroOS()),
usuarioLogado,
encerrarOrdemServicoActionForm.getIdMotivoEncerramento(),
encerrarOrdemServicoActionForm.getNumeroRA(),
encerrarOrdemServicoActionForm.getDataRoteiro());
// se for para ir para a tela de confirma��o
if(telaConfirmacao){
httpServletRequest.setAttribute("caminhoActionConclusao", "/gsan/encerrarOrdemServicoAction.do");
httpServletRequest.setAttribute("cancelamento", "TRUE");
httpServletRequest.setAttribute("nomeBotao1", "Sim");
httpServletRequest.setAttribute("nomeBotao2", "N�o");
httpServletRequest.setAttribute( "tipoRelatorio", "confirmaEncerramentoRA" );
return montarPaginaConfirmacao("atencao.encerrar_RA_da_OS", httpServletRequest, actionMapping);
} else {
}
} else {
/**
* [UC0457] Encerrar Ordem de Servi�o 5.4 do Fluxo
* Principal
*
* @author Hugo Leonardo
* @created 17/02/2011
*/
if (encerrarOrdemServicoActionForm.getNumeroRA() != null && !encerrarOrdemServicoActionForm.getNumeroRA().equals("")) {
FiltroRegistroAtendimento filtroRegistroAtendimento = new FiltroRegistroAtendimento();
filtroRegistroAtendimento.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimento.ID, encerrarOrdemServicoActionForm.getNumeroRA()));
Collection colecaoRegistroAtendimento = Fachada.getInstancia().pesquisar(filtroRegistroAtendimento, RegistroAtendimento.class.getName() );
RegistroAtendimento registroAtendimento = (RegistroAtendimento) Util.retonarObjetoDeColecao(colecaoRegistroAtendimento);
AtendimentoMotivoEncerramento atendimentoMotivoEncerramento = new AtendimentoMotivoEncerramento();
atendimentoMotivoEncerramento.setId(Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getIdMotivoEncerramento()));
atendimentoMotivoEncerramento.setIndicadorExecucao(AtendimentoMotivoEncerramento.INDICADOR_EXECUCAO_SIM);
registroAtendimento.setAtendimentoMotivoEncerramento(atendimentoMotivoEncerramento);
registroAtendimento.setCodigoSituacao(RegistroAtendimento.SITUACAO_ENCERRADO);
this.setDataEncerramentoRA(encerrarOrdemServicoActionForm, registroAtendimento);
registroAtendimento.setUltimaAlteracao(new Date());
/*
* cria o objeto para a inser��o do registro de atendimento unidade
*/
RegistroAtendimentoUnidade registroAtendimentoUnidade = new RegistroAtendimentoUnidade();
registroAtendimentoUnidade.setRegistroAtendimento(registroAtendimento);
if (usuarioLogado.getUnidadeOrganizacional() != null
&& !usuarioLogado.getUnidadeOrganizacional().equals("")) {
registroAtendimentoUnidade.setUnidadeOrganizacional(usuarioLogado.getUnidadeOrganizacional());
}
registroAtendimentoUnidade.setUsuario(usuarioLogado);
// atendimento rela��o tipo
AtendimentoRelacaoTipo atendimentoRelacaoTipo = new AtendimentoRelacaoTipo();
atendimentoRelacaoTipo.setId(AtendimentoRelacaoTipo.ENCERRAR);
registroAtendimentoUnidade.setAtendimentoRelacaoTipo(atendimentoRelacaoTipo);
registroAtendimentoUnidade.setUltimaAlteracao(new Date());
// Colocado por Raphael Rossiter em 10/03/2008
ObterDadosRegistroAtendimentoHelper registroAtendimentoHelper = Fachada.getInstancia().obterDadosRegistroAtendimento(registroAtendimento.getId());
SolicitacaoTipoEspecificacao especificacao = registroAtendimentoHelper.getRegistroAtendimento().getSolicitacaoTipoEspecificacao();
// Validamos se possivel criar um novo RA
Object[] arrayValidaGeracaoNovoRA = validarGeracaoNovoRA(registroAtendimentoHelper.getRegistroAtendimento(), httpServletRequest, actionMapping);
if ((Boolean) arrayValidaGeracaoNovoRA[2]) {
return (ActionForward) arrayValidaGeracaoNovoRA[0];
}
Boolean confirmadoGeracaoNovoRA = (Boolean) arrayValidaGeracaoNovoRA[1];
if (especificacao.getDebitoTipo() != null
&& servicoNaoCobrancaMotivo == null) {
if (valorDebito == null) {
valorDebito = especificacao.getValorDebito();
}
fachada.encerrarRegistroAtendimento(
registroAtendimento,
registroAtendimentoUnidade,
usuarioLogado,
especificacao.getDebitoTipo().getId(),
valorDebito,
1,
"100",
confirmadoGeracaoNovoRA,
null,
false);
} else {
fachada.encerrarRegistroAtendimento(
registroAtendimento,
registroAtendimentoUnidade,
usuarioLogado,
null,
null,
null,
null,
confirmadoGeracaoNovoRA,
null,
false);
}
}
}
}
} else {
/*
* se o usu�rio confirmar o encerramento da RA da OS que est� sendo
* encerrada
*/
if (valorConfirmacaoEncerramentoRA.equals("ok")) {
FiltroRegistroAtendimento filtroRegistroAtendimento = new FiltroRegistroAtendimento();
filtroRegistroAtendimento.adicionarParametro(new ParametroSimples(FiltroRegistroAtendimento.ID, encerrarOrdemServicoActionForm.getNumeroRA()));
Collection colecaoRegistroAtendimento = fachada.pesquisar(filtroRegistroAtendimento, RegistroAtendimento.class.getName());
RegistroAtendimento registroAtendimento = (RegistroAtendimento) Util.retonarObjetoDeColecao(colecaoRegistroAtendimento);
AtendimentoMotivoEncerramento atendimentoMotivoEncerramento = new AtendimentoMotivoEncerramento();
atendimentoMotivoEncerramento.setId(Util.converterStringParaInteger(encerrarOrdemServicoActionForm.getIdMotivoEncerramento()));
atendimentoMotivoEncerramento.setIndicadorExecucao(AtendimentoMotivoEncerramento.INDICADOR_EXECUCAO_SIM);
registroAtendimento.setAtendimentoMotivoEncerramento(atendimentoMotivoEncerramento);
registroAtendimento.setCodigoSituacao(RegistroAtendimento.SITUACAO_ENCERRADO);
setDataEncerramentoRA(encerrarOrdemServicoActionForm, registroAtendimento);
if (encerrarOrdemServicoActionForm.getObservacaoEncerramento() != null &&
!encerrarOrdemServicoActionForm.getObservacaoEncerramento().equals("")) {
registroAtendimento.setObservacao(encerrarOrdemServicoActionForm.getObservacaoEncerramento());
} else {
registroAtendimento.setObservacao("ENCERRADO ATRAV�S DA FUNCIONALIDADE ENCERRAMENTO DA ORDEM DE SERVI�O");
}
registroAtendimento.setUltimaAlteracao(new Date());
/*
* cria o objeto para a inser��o do registro de atendimento
* unidade
*/
RegistroAtendimentoUnidade registroAtendimentoUnidade = new RegistroAtendimentoUnidade();
registroAtendimentoUnidade.setRegistroAtendimento(registroAtendimento);
if (usuarioLogado.getUnidadeOrganizacional() != null &&
!usuarioLogado.getUnidadeOrganizacional().equals("")) {
registroAtendimentoUnidade.setUnidadeOrganizacional(usuarioLogado.getUnidadeOrganizacional());
}
registroAtendimentoUnidade.setUsuario(usuarioLogado);
// atendimento rela��o tipo
AtendimentoRelacaoTipo atendimentoRelacaoTipo = new AtendimentoRelacaoTipo();
atendimentoRelacaoTipo.setId(AtendimentoRelacaoTipo.ENCERRAR);
registroAtendimentoUnidade.setAtendimentoRelacaoTipo(atendimentoRelacaoTipo);
registroAtendimentoUnidade.setUltimaAlteracao(new Date());
//Colocado por Raphael Rossiter em 10/03/2008
ObterDadosRegistroAtendimentoHelper registroAtendimentoHelper = fachada.obterDadosRegistroAtendimento(registroAtendimento.getId());
SolicitacaoTipoEspecificacao especificacao = registroAtendimentoHelper.getRegistroAtendimento().getSolicitacaoTipoEspecificacao();
// Validamos se possivel criar um novo RA
Object[] arrayValidaGeracaoNovoRA = validarGeracaoNovoRA(
registroAtendimentoHelper.getRegistroAtendimento(),
httpServletRequest, actionMapping);
if ((Boolean) arrayValidaGeracaoNovoRA[2]) {
return (ActionForward) arrayValidaGeracaoNovoRA[0];
}
Boolean confirmadoGeracaoNovoRA = (Boolean) arrayValidaGeracaoNovoRA[1];
if (especificacao.getDebitoTipo() != null
&& servicoNaoCobrancaMotivo == null) {
if (valorDebito == null) {
valorDebito = especificacao.getValorDebito();
}
fachada.encerrarRegistroAtendimento(registroAtendimento,
registroAtendimentoUnidade,
usuarioLogado,
especificacao.getDebitoTipo().getId(),
valorDebito,
1,
"100",
confirmadoGeracaoNovoRA,null,false );
} else {
fachada.encerrarRegistroAtendimento(
registroAtendimento,
registroAtendimentoUnidade,
usuarioLogado,
null,
null,
null,
null,
confirmadoGeracaoNovoRA,null,false );
}
}
}
if (retorno.getName().equalsIgnoreCase("telaSucesso")) {
// montando p�gina de sucesso
if (idOSDiagnostico == null) {
montarPaginaSucesso(httpServletRequest,
"Ordem de Servi�o de c�digo " + encerrarOrdemServicoActionForm.getNumeroOS() + " encerrada com sucesso.",
"Voltar",
"exibirConsultarDadosOrdemServicoAction.do?menu=sim&numeroOS=" + encerrarOrdemServicoActionForm.getNumeroOS());
} else {
String msg =
"Ordem de Servi�o de c�digo " + encerrarOrdemServicoActionForm.getNumeroOS()
+ " encerrada com sucesso. Ordem de Servi�o de c�digo "
+ idOSDiagnostico
+ " gerada com sucesso";
montarPaginaSucesso(
httpServletRequest,
msg,
"Voltar",
"exibirConsultarDadosOrdemServicoAction.do?menu=sim&numeroOS=" + encerrarOrdemServicoActionForm.getNumeroOS(),
"gerarRelatorioOrdemServicoAction.do?menu=sim&idsOS=" + encerrarOrdemServicoActionForm.getNumeroOS(),
"Imprimir Ordem de Servi�o Encerrada",
"Imprimir Ordem de Servi�o Gerada",
"gerarRelatorioOrdemServicoAction.do?idsOS=" + idOSDiagnostico);
}
sessao.removeAttribute("canceladoOSFiscalizacao");
sessao.removeAttribute("integracaoComercialHelper");
sessao.removeAttribute("ordemServico");
sessao.removeAttribute("ordemServicoFiscalizacao");
sessao.removeAttribute("confirmaEncerramentoRA");
}
return retorno;
}
private void setDataEncerramentoRA(EncerrarOrdemServicoActionForm encerrarOrdemServicoActionForm, RegistroAtendimento registroAtendimento) {
if (encerrarOrdemServicoActionForm.getHoraEncerramento() != null &&
!encerrarOrdemServicoActionForm.getHoraEncerramento().equals("")) {
/*
* Verifica se a data de encerramento � menor do que
* a data de atendimento do RA, Caso seja encerra a
* RA com a data atual.
*/
if (Util.compararDataTime(registroAtendimento.getRegistroAtendimento(),
Util.converteStringParaDateHora(encerrarOrdemServicoActionForm
.getDataEncerramento() + " " + encerrarOrdemServicoActionForm.getHoraEncerramento() + ":00")) > 0) {
registroAtendimento.setDataEncerramento(new Date());
} else {
registroAtendimento.setDataEncerramento(
Util.converteStringParaDateHora(encerrarOrdemServicoActionForm
.getDataEncerramento() + " " + encerrarOrdemServicoActionForm.getHoraEncerramento() + ":00"));
}
} else {
/*
* Verifica se a data de encerramento � menor do que
* a data de atendimento do RA, Caso seja encerra a
* RA com a data atual.
*/
if (Util.compararDataTime(registroAtendimento.getRegistroAtendimento(),
Util.converteStringParaDateHora(encerrarOrdemServicoActionForm.getDataEncerramento()+ " " +
Util.formatarHoraSemSegundos(new Date()) + ":00")) > 0 ) {
registroAtendimento.setDataEncerramento(new Date());
} else {
registroAtendimento
.setDataEncerramento(Util.converteStringParaDateHora(encerrarOrdemServicoActionForm.getDataEncerramento()
+ " " + Util.formatarHoraSemSegundos(new Date()) + ":00"));
}
}
}
/**
*
* [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 confirmou 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] = ("confirmaInclusaoNovoRA".equals(request
.getParameter("tipoRelatorio")) ? 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/encerrarOrdemServicoAction.do");
request.setAttribute("cancelamento", "TRUE");
request.setAttribute("nomeBotao1", "Sim");
request.setAttribute("nomeBotao2", "N�o");
request.setAttribute( "tipoRelatorio", "confirmaInclusaoNovoRA" );
retorno[0] = montarPaginaConfirmacao(
"atencao.encerrar_ra_confirma_geracao_novo_ra",
request,
actionMapping,
solicitacaoTipoEspecificacao.getSolicitacaoTipoEspecificacaoNovoRA().getDescricao());
return retorno;
}
}
retorno[0] = actionMapping.findForward("telaSucesso");
return retorno;
}
/**
* [UC0457] Encerrar Ordem de Servi�o
* [SB0007]- Gerar Informa��es para Boletim de Medi��o.
*
* @author Vivianne Sousa
* @created 28/01/2011
*/
private Map validarInformacoesBoletimMedicao(Integer idOrdemServico, EncerrarOrdemServicoActionForm form) {
OrdemServicoBoletim ordemServicoBoletim = null;
Boolean exibirMsgConfirmacao = false;
if (form.getExibeIndicadorExistePavimento().equals("1")
|| form.getExibeQtdeReposicaoAsfalto().equals("1")
|| form.getExibeQtdeReposicaoCalcada().equals("1")
|| form.getExibeQtdeReposicaoParalelo().equals("1")) {
ordemServicoBoletim = new OrdemServicoBoletim();
ordemServicoBoletim.setId(idOrdemServico);
OrdemServico os = new OrdemServico();
os.setId(idOrdemServico);
ordemServicoBoletim.setOrdemServico(os);
if (form.getExibeIndicadorExistePavimento().equals("1")) {
if (form.getIndicadorExistePavimento() == null) {
throw new ActionServletException("atencao.campo_selecionado.obrigatorio", null, "Existe Pavimento");
} else {
ordemServicoBoletim.setIndicadorPavimento(new Short(form.getIndicadorExistePavimento()));
}
} else {
ordemServicoBoletim.setIndicadorPavimento(new Short(ConstantesSistema.NAO));
}
if (form.getExibeQtdeReposicaoAsfalto().equals("1")) {
if (form.getQtdeReposicaoAsfalto() == null
|| form.getQtdeReposicaoAsfalto().equals("")) {
form.setQtdeReposicaoAsfalto("0");
ordemServicoBoletim.setNumeroReposicaoAsfalto(new BigDecimal(0));
exibirMsgConfirmacao = true;
} else if (form.getQtdeReposicaoAsfalto().equals("0")
|| form.getQtdeReposicaoAsfalto().equals("00")
|| form.getQtdeReposicaoAsfalto().equals("0,00")) {
ordemServicoBoletim.setNumeroReposicaoAsfalto(new BigDecimal(0));
exibirMsgConfirmacao = true;
}else{
ordemServicoBoletim.setNumeroReposicaoAsfalto(Util.formatarMoedaRealparaBigDecimal(form.getQtdeReposicaoAsfalto()));
}
}
if (form.getExibeQtdeReposicaoParalelo().equals("1")) {
if (form.getQtdeReposicaoParalelo() == null
|| form.getQtdeReposicaoParalelo().equals("")) {
form.setQtdeReposicaoParalelo("0");
ordemServicoBoletim.setNumeroReposicaoParalelo(new BigDecimal(0));
exibirMsgConfirmacao = true;
} else if (form.getQtdeReposicaoParalelo().equals("0")
|| form.getQtdeReposicaoParalelo().equals("00")
|| form.getQtdeReposicaoParalelo().equals("0,00")) {
ordemServicoBoletim
.setNumeroReposicaoParalelo(new BigDecimal(0));
exibirMsgConfirmacao = true;
} else {
ordemServicoBoletim.setNumeroReposicaoParalelo(Util.formatarMoedaRealparaBigDecimal(form.getQtdeReposicaoParalelo()));
}
}
if (form.getExibeQtdeReposicaoCalcada().equals("1")) {
if (form.getQtdeReposicaoCalcada() == null
|| form.getQtdeReposicaoCalcada().equals("")) {
form.setQtdeReposicaoCalcada("0");
ordemServicoBoletim.setNumeroReposicaoCalcada(new BigDecimal(0));
exibirMsgConfirmacao = true;
} else if (form.getQtdeReposicaoCalcada().equals("0")
|| form.getQtdeReposicaoCalcada().equals("00")
|| form.getQtdeReposicaoCalcada().equals("0,00")) {
ordemServicoBoletim.setNumeroReposicaoCalcada(new BigDecimal(0));
exibirMsgConfirmacao = true;
} else {
ordemServicoBoletim.setNumeroReposicaoCalcada(Util.formatarMoedaRealparaBigDecimal(form.getQtdeReposicaoCalcada()));
}
}
ordemServicoBoletim.setUltimaAlteracao(new Date());
}
Map retorno = new HashMap();
retorno.put("ordemServicoBoletim",ordemServicoBoletim);
retorno.put("exibirMsgConfirmacao",exibirMsgConfirmacao);
return retorno;
}
}