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.cadastro.imovel.PocoTipo;
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;
/**
* Descri��o da classe
*
* @author Ana Maria
* @date 30/06/2006
*/
public class EfetuarInstalacaoHidrometroAction extends GcomAction {
/**
* Este caso de uso permite efetuar instala��o de hidr�metro
*
* [UC0362] Efetuar Instala��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");
EfetuarInstalacaoHidrometroActionForm efetuarInstalacaoHidrometroActionForm =
(EfetuarInstalacaoHidrometroActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
//Usuario logado no sistema
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
String numeroHidrometro = efetuarInstalacaoHidrometroActionForm.getNumeroHidrometro();
String idServicoMotivoNaoCobranca = efetuarInstalacaoHidrometroActionForm.getMotivoNaoCobranca();
String valorPercentual = efetuarInstalacaoHidrometroActionForm.getPercentualCobranca();
String qtdParcelas = efetuarInstalacaoHidrometroActionForm.getQuantidadeParcelas();
//String nmLacre = efetuarInstalacaoHidrometroActionForm.getNumeroLacre();
HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico = new HidrometroInstalacaoHistorico();
OrdemServico ordemServico = (OrdemServico) sessao.getAttribute("ordemServico");
Imovel imovel = null;
if(ordemServico.getImovel() != null){
imovel = ordemServico.getImovel();
}else{
imovel = ordemServico.getRegistroAtendimento().getImovel();
}
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 = fachada.pesquisar(filtroHidrometro,Hidrometro.class.getName());
//verificar se o n�mero do hidr�metro n�o est� cadastrado
if (colecaoHidrometro == null || colecaoHidrometro.isEmpty()) {
throw new ActionServletException("atencao.hidrometro_inexistente");
}
Iterator iteratorHidrometro = colecaoHidrometro.iterator();
Hidrometro hidrometro = (Hidrometro) iteratorHidrometro.next();
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade.hidrometroLocalArmazenagem");
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, imovel.getId()));
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
efetuarInstalacaoHidrometroActionForm.setFormValues(hidrometroInstalacaoHistorico);
// Informa que o usu�rio que fez a instala��o � o usu�rio logado
hidrometroInstalacaoHistorico.setUsuarioInstalacao( usuario );
if(ordemServico != null
&& efetuarInstalacaoHidrometroActionForm.getIdTipoDebito() != null){
ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;
ordemServico.setIndicadorComercialAtualizado(ConstantesSistema.SIM);
BigDecimal valorAtual = new BigDecimal(0);
if (efetuarInstalacaoHidrometroActionForm.getValorDebito() != null) {
String valorDebito = efetuarInstalacaoHidrometroActionForm
.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(efetuarInstalacaoHidrometroActionForm.getPercentualCobranca()));
}
ordemServico.setUltimaAlteracao(new Date());
}
if (efetuarInstalacaoHidrometroActionForm.getTipoPoco() != null &&
!efetuarInstalacaoHidrometroActionForm.getTipoPoco().equals("-1")){
PocoTipo pocoTipo = new PocoTipo();
pocoTipo.setId(new Integer(efetuarInstalacaoHidrometroActionForm.getTipoPoco()));
imovel.setPocoTipo(pocoTipo);
}
IntegracaoComercialHelper integracaoComercialHelper = new IntegracaoComercialHelper();
integracaoComercialHelper.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
integracaoComercialHelper.setOrdemServico(ordemServico);
integracaoComercialHelper.setQtdParcelas(qtdParcelas);
integracaoComercialHelper.setUsuarioLogado(usuario);
integracaoComercialHelper.setImovel(imovel);
if(efetuarInstalacaoHidrometroActionForm.getVeioEncerrarOS().equalsIgnoreCase("FALSE")){
integracaoComercialHelper.setVeioEncerrarOS(Boolean.FALSE);
fachada.efetuarInstalacaoHidrometro(integracaoComercialHelper);
}else{
fachada.validacaoInstalacaoHidrometro(numeroHidrometro);
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");
}
if(retorno.getName().equalsIgnoreCase("telaSucesso")){
//Monta a p�gina de sucesso
montarPaginaSucesso(httpServletRequest, "Instala��o de Hidr�metro para o im�vel "+imovel.getId()
+ " efetuada com sucesso.", "Efetuar outra Instala��o de Hidr�metro",
"exibirEfetuarInstalacaoHidrometroAction.do");
}
sessao.removeAttribute("EfetuarInstalacaoHidrometroActionForm");
return retorno;
}
}