package gcom.gui.atendimentopublico.hidrometro;
import gcom.atendimentopublico.bean.IntegracaoComercialHelper;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.ServicoNaoCobrancaMotivo;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.hidrometro.FiltroHidrometro;
import gcom.micromedicao.hidrometro.Hidrometro;
import gcom.micromedicao.hidrometro.HidrometroInstalacaoHistorico;
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.Iterator;
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;
/**
* Efetua a substitui��o do hidr�metro de acordo com os par�metros informados
*
* @author Ana Maria
* @date 19/07/2006
*/
public class EfetuarSubstituicaoHidrometroAction extends GcomAction {
/**
* Este caso de uso permite efetuar substitui��o de hidr�metro
*
* [UC0364] Efetuar Substitui��o de Hidr�metro
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("telaSucesso");
EfetuarSubstituicaoHidrometroActionForm efetuarSubstituicaoHidrometroActionForm =
(EfetuarSubstituicaoHidrometroActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
//Usuario logado no sistema
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
String matriculaImovel = efetuarSubstituicaoHidrometroActionForm.getMatriculaImovel();
String numeroHidrometro = efetuarSubstituicaoHidrometroActionForm.getNumeroHidrometro();
String tipoMedicaoAtual = efetuarSubstituicaoHidrometroActionForm.getTipoMedicaoAtual();
String situacaoHidrometroSubstituido = efetuarSubstituicaoHidrometroActionForm.getSituacaoHidrometro();
String localArmazenagemHidrometro = null;
String hidrometroExtraviado = (String) sessao.getAttribute("hidrometroExtravido");
sessao.removeAttribute("hidrometroExtravido");
// caso o hidrometro esteja extraviado, nao pega o local de armazenagem
if(hidrometroExtraviado == null || !hidrometroExtraviado.equals("sim")){
localArmazenagemHidrometro = efetuarSubstituicaoHidrometroActionForm.getLocalArmazenagemHidrometro();
}
String numeroLeituraRetiradaHidrometro = efetuarSubstituicaoHidrometroActionForm.getNumeroLeitura();
String idServicoMotivoNaoCobranca = efetuarSubstituicaoHidrometroActionForm.getMotivoNaoCobranca();
String valorPercentual = efetuarSubstituicaoHidrometroActionForm.getPercentualCobranca();
HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico = new HidrometroInstalacaoHistorico();
//Constr�i o filtro para pesquisa da Ordem de Servi�o
OrdemServico ordemServico = (OrdemServico) sessao.getAttribute("ordemServico");
if(ordemServico.getImovel() != null){
matriculaImovel = ordemServico.getImovel().getId().toString();
}else{
matriculaImovel = ordemServico.getRegistroAtendimento().getImovel().getId().toString();
}
if (numeroHidrometro != null) {
//Constr�i o filtro para pesquisa do Hidr�metro
FiltroHidrometro filtroHidrometro = new FiltroHidrometro();
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.NUMERO_HIDROMETRO, numeroHidrometro));
//Realiza a pesquisa do Hidr�metro
Collection colecaoHidrometro = null;
colecaoHidrometro = fachada.pesquisar(filtroHidrometro,Hidrometro.class.getName());
//verifica se o n�mero do hidr�metro n�o est� cadastrado
if (colecaoHidrometro == null || colecaoHidrometro.isEmpty()) {
throw new ActionServletException("atencao.numero_hidrometro_inexistente", null,
efetuarSubstituicaoHidrometroActionForm.getNumeroHidrometro());
}
Iterator iteratorHidrometro = colecaoHidrometro.iterator();
Hidrometro hidrometro = (Hidrometro) iteratorHidrometro.next();
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade.hidrometroLocalArmazenagem");
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, matriculaImovel));
Collection colecaoImoveis = fachada.pesquisar(filtroImovel, Imovel.class.getName());
Imovel imovelComLocalidade = (Imovel) Util.retonarObjetoDeColecao(colecaoImoveis);
if (imovelComLocalidade != null && imovelComLocalidade.getLocalidade().getHidrometroLocalArmazenagem() != null &&
hidrometro.getHidrometroLocalArmazenagem() != null &&
!hidrometro.getHidrometroLocalArmazenagem().getId().equals(imovelComLocalidade.getLocalidade().getHidrometroLocalArmazenagem().getId())) {
throw new ActionServletException("atencao.hidrometro_local_armazenagem_imovel_diferente_hidrometro_local_armazenagem_hidrometro");
}
hidrometroInstalacaoHistorico.setHidrometro(hidrometro);
}
//Atualiza a entidade com os valores do formul�rio
efetuarSubstituicaoHidrometroActionForm.setFormValues(hidrometroInstalacaoHistorico);
HidrometroInstalacaoHistorico hidrometroSubstituicaoHistorico =
(HidrometroInstalacaoHistorico)sessao.getAttribute("hidrometroSubstituicaoHistorico");
Date dataRetirada = Util.converteStringParaDate(efetuarSubstituicaoHidrometroActionForm.getDataRetirada());
hidrometroSubstituicaoHistorico.setDataRetirada(dataRetirada);
if (numeroLeituraRetiradaHidrometro != null &&
!numeroLeituraRetiradaHidrometro.equalsIgnoreCase("")){
hidrometroSubstituicaoHistorico.setNumeroLeituraRetirada(new Integer(numeroLeituraRetiradaHidrometro));
}
hidrometroSubstituicaoHistorico.setUltimaAlteracao(new Date());
BigDecimal valorAtual = new BigDecimal(0);
if(ordemServico != null
&& efetuarSubstituicaoHidrometroActionForm.getIdTipoDebito() != null){
ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;
ordemServico.setIndicadorComercialAtualizado(ConstantesSistema.SIM);
if (efetuarSubstituicaoHidrometroActionForm.getValorDebito() != null
&& !efetuarSubstituicaoHidrometroActionForm.getValorDebito().equals("") ) {
String valorDebito = efetuarSubstituicaoHidrometroActionForm
.getValorDebito().toString().replace(".", "");
valorDebito = valorDebito.replace(",", ".");
valorAtual = new BigDecimal(valorDebito);
ordemServico.setValorAtual(valorAtual);
}
if(idServicoMotivoNaoCobranca != null && !idServicoMotivoNaoCobranca.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)){
servicoNaoCobrancaMotivo = new ServicoNaoCobrancaMotivo();
servicoNaoCobrancaMotivo.setId(new Integer(idServicoMotivoNaoCobranca));
}
ordemServico.setServicoNaoCobrancaMotivo(servicoNaoCobrancaMotivo);
if(valorPercentual != null){
ordemServico.setPercentualCobranca(new BigDecimal(efetuarSubstituicaoHidrometroActionForm.getPercentualCobranca()));
}
ordemServico.setUltimaAlteracao(new Date());
}
String qtdParcelas = efetuarSubstituicaoHidrometroActionForm.getQuantidadeParcelas();
IntegracaoComercialHelper integracaoComercialHelper = new IntegracaoComercialHelper();
integracaoComercialHelper.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
integracaoComercialHelper.setHidrometroSubstituicaoHistorico(hidrometroSubstituicaoHistorico);
integracaoComercialHelper.setSituacaoHidrometroSubstituido(situacaoHidrometroSubstituido);
if(localArmazenagemHidrometro != null){
integracaoComercialHelper.setLocalArmazenagemHidrometro(new Integer(localArmazenagemHidrometro));
}
integracaoComercialHelper.setMatriculaImovel(matriculaImovel);
integracaoComercialHelper.setOrdemServico(ordemServico);
integracaoComercialHelper.setQtdParcelas(qtdParcelas);
integracaoComercialHelper.setUsuarioLogado(usuario);
if(efetuarSubstituicaoHidrometroActionForm.getVeioEncerrarOS().equalsIgnoreCase("FALSE")){
integracaoComercialHelper.setVeioEncerrarOS(Boolean.FALSE);
fachada.efetuarSubstituicaoHidrometro(integracaoComercialHelper);
}else{
// fachada.validacaoSubstituicaoHidrometro(matriculaImovel,hidrometroInstalacaoHistorico.getHidrometro().getNumero(),hidrometroInstalacaoHistorico.getHidrometro().getHidrometroSituacao().getId().toString());
fachada.validacaoSubstituicaoHidrometro(matriculaImovel,hidrometroInstalacaoHistorico.getHidrometro().getNumero(), situacaoHidrometroSubstituido);
integracaoComercialHelper.setVeioEncerrarOS(Boolean.TRUE);
sessao.setAttribute("integracaoComercialHelper", integracaoComercialHelper);
if(sessao.getAttribute("semMenu") == null){
retorno = actionMapping.findForward("encerrarOrdemServicoAction");
}else{
retorno = actionMapping.findForward("encerrarOrdemServicoPopupAction");
}
sessao.removeAttribute("caminhoRetornoIntegracaoComercial");
}
//Inserir na base de dados a instala��o de hidr�metro e a atualiza��o da substitui��o do hidr�metro
/* fachada.efetuarSubstituicaoHidrometro(hidrometroInstalacaoHistorico,matriculaImovel, hidrometroSubstituicaoHistorico,
situacaoHidrometroSubstituido, new Integer(localArmazenagemHidrometro), ordemServico, efetuarSubstituicaoHidrometroActionForm.getVeioEncerrarOS().toString());
*/
if(retorno.getName().equalsIgnoreCase("telaSucesso")){
// Monta a p�gina de sucesso
montarPaginaSucesso(httpServletRequest, "Substitui��o de Hidr�metro para "+ tipoMedicaoAtual +
" no im�vel "+matriculaImovel+ " efetuada com sucesso.",
"Efetuar outra Substitui��o de Hidr�metro", "exibirEfetuarSubstituicaoHidrometroAction.do");
}
sessao.removeAttribute("EfetuarSubstituicaoHidrometroActionForm");
sessao.removeAttribute("hidrometroSubstituicaoHistorico");
return retorno;
}
}