package gcom.gui.atendimentopublico.ligacaoagua;
import gcom.atendimentopublico.ligacaoagua.CorteTipo;
import gcom.atendimentopublico.ligacaoagua.FiltroCorteTipo;
import gcom.atendimentopublico.ligacaoagua.FiltroMotivoCorte;
import gcom.atendimentopublico.ligacaoagua.MotivoCorte;
import gcom.atendimentopublico.ordemservico.FiltroServicoNaoCobrancaMotivo;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.ServicoNaoCobrancaMotivo;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroClienteImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.consumo.LigacaoTipo;
import gcom.micromedicao.hidrometro.HidrometroInstalacaoHistorico;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.Collection;
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 respons�vel pela pre-exibi��o da pagina de efetuar corte de liga��o de �gua
*
* @author Leandro Cavalcanti
* @created 20 de Junho de 2006
*
* Refeito
* @author Leonardo Regis
* @date 23/09/2006
*/
public class ExibirEfetuarCorteLigacaoAguaAction extends GcomAction {
/**
* [UC0355] Efetuar Corte de Liga��o de �gua
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return forward
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("efetuarCorteLigacaoAgua");
HttpSession sessao = httpServletRequest.getSession(false);
EfetuarCorteLigacaoAguaActionForm form = (EfetuarCorteLigacaoAguaActionForm) actionForm;
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
// Veio de Encerrar OS
Boolean veioEncerrarOS = null;
if(httpServletRequest.getAttribute("veioEncerrarOS") != null){
veioEncerrarOS = Boolean.TRUE;
}else{
if (form.getVeioEncerrarOS() != null &&
!form.getVeioEncerrarOS().equals("")) {
if (form.getVeioEncerrarOS().toLowerCase().equals("true")) {
veioEncerrarOS = veioEncerrarOS = Boolean.TRUE;
} else {
veioEncerrarOS = veioEncerrarOS = Boolean.FALSE;
}
} else {
veioEncerrarOS = Boolean.FALSE;
}
}
// Seta Cole��es
getMotivoCorteCollection(sessao);
getTipoCorteCollection(sessao);
getMotivoNaoCobrancaCollection(sessao);
String idOrdemServico = null;
if(form.getIdOrdemServico() != null){
idOrdemServico = form.getIdOrdemServico();
}else{
idOrdemServico = (String)httpServletRequest.getAttribute("veioEncerrarOS");
form.setDataCorte((String) httpServletRequest.getAttribute("dataEncerramento"));
sessao.setAttribute("caminhoRetornoIntegracaoComercial",httpServletRequest.getAttribute("caminhoRetornoIntegracaoComercial"));
}
if(httpServletRequest.getAttribute("semMenu") != null){
sessao.setAttribute("semMenu", "SIM");
}else{
sessao.removeAttribute("semMenu");
}
// Testa OS
if (idOrdemServico != null && !idOrdemServico.trim().equals("")) {
OrdemServico ordemServico = this.getFachada().recuperaOSPorId(new Integer(idOrdemServico));
if (ordemServico != null) {
sessao.setAttribute("ordemServico", ordemServico);
// Valida Exibi��o de Corte de Liga��o de �gua
this.getFachada().validarExibirCorteLigacaoAgua(ordemServico,veioEncerrarOS);
form.setVeioEncerrarOS(""+veioEncerrarOS);
// OS
form.setIdOrdemServico(ordemServico.getId()+"");
form.setNomeOrdemServico(ordemServico.getServicoTipo().getDescricao());
// Preencher dados do imovel
this.preencherDadosImovel(form, ordemServico);
// Preencher dados do Corte da Liga��o
this.pesquisarDadosCorteLigacao(sessao, form, ordemServico);
// Preencher dados da Gera��o
// Tipo D�bito
if (ordemServico.getServicoTipo().getDebitoTipo() != null) {
form.setIdTipoDebito(ordemServico.getServicoTipo().getDebitoTipo().getId()+"");
form.setDescricaoTipoDebito(ordemServico.getServicoTipo().getDebitoTipo().getDescricao()+"");
}else{
form.setIdTipoDebito("");
form.setDescricaoTipoDebito("");
}
//[FS0013] - Altera��o de Valor
this.permitirAlteracaoValor(ordemServico.getServicoTipo(), form);
String calculaValores = httpServletRequest.getParameter("calculaValores");
BigDecimal valorDebito = new BigDecimal(0);
SistemaParametro sistemaParametro = this.getFachada().pesquisarParametrosDoSistema();
Integer qtdeParcelas = null;
if(calculaValores != null && calculaValores.equals("S")){
//[UC0186] - Calcular Presta��o
BigDecimal taxaJurosFinanciamento = null;
qtdeParcelas = new Integer(form.getQuantidadeParcelas());
if(ordemServico.getServicoTipo().getIndicadorCobrarJuros() == ConstantesSistema.SIM.shortValue() &&
qtdeParcelas.intValue() != 1){
taxaJurosFinanciamento = sistemaParametro.getPercentualTaxaJurosFinanciamento();
}else{
taxaJurosFinanciamento = new BigDecimal(0);
}
BigDecimal valorPrestacao = null;
if(taxaJurosFinanciamento != null){
valorDebito = new BigDecimal(form.getValorDebito().replace(",","."));
String percentualCobranca = form.getPercentualCobranca();
if(percentualCobranca.equals("70")){
valorDebito = valorDebito.multiply(new BigDecimal(0.7));
}else if (percentualCobranca.equals("50")){
valorDebito = valorDebito.multiply(new BigDecimal(0.5));
}
valorPrestacao =
this.getFachada().calcularPrestacao(
taxaJurosFinanciamento,
qtdeParcelas,
valorDebito,
new BigDecimal("0.00"));
valorPrestacao.setScale(2,BigDecimal.ROUND_HALF_UP);
}
if (valorPrestacao != null) {
String valorPrestacaoComVirgula = Util.formataBigDecimal(valorPrestacao,2,true);
form.setValorParcelas(valorPrestacaoComVirgula);
} else {
form.setValorParcelas("0,00");
}
}else{
valorDebito =
this.getFachada().obterValorDebito(ordemServico.getServicoTipo().getId(),
ordemServico.getImovel().getId(),
new Short(LigacaoTipo.LIGACAO_AGUA+""));
if (valorDebito != null) {
String valorDebitoComVirgula = valorDebito+"";
form.setValorDebito(valorDebitoComVirgula.replace(".",","));
} else {
form.setValorDebito("0,00");
}
}
form.setQtdeMaxParcelas(sistemaParametro.getNumeroMaximoParcelasFinanciamento()+"");
if(ordemServico.getServicoNaoCobrancaMotivo() != null){
form.setMotivoNaoCobranca(ordemServico.getServicoNaoCobrancaMotivo().getId().toString());
}
if(ordemServico.getServicoNaoCobrancaMotivo() != null){
form.setPercentualCobranca(ordemServico.getPercentualCobranca().toString());
}
// Verificar permiss�o especial
boolean temPermissaoMotivoNaoCobranca =
this.getFachada().verificarPermissaoInformarMotivoNaoCobranca(usuarioLogado);
if (temPermissaoMotivoNaoCobranca) {
httpServletRequest.setAttribute("permissaoMotivoNaoCobranca", temPermissaoMotivoNaoCobranca);
}else{
form.setPercentualCobranca("100");
form.setQuantidadeParcelas("1");
form.setValorParcelas(Util.formataBigDecimal(valorDebito,2,true));
}
sessao.setAttribute("osEncontrada", "true");
} else {
sessao.removeAttribute("osEncontrada");
sessao.removeAttribute("ordemServico");
form.setNomeOrdemServico("Ordem de Servi�o inexistente");
form.setIdOrdemServico("");
}
} else {
httpServletRequest.setAttribute("nomeCampo", "idOrdemServico");
form.reset();
}
return retorno;
}
/*
* [FS0013 - Altera��o de Valor]
*
* autor: Raphael Rossiter
* data: 19/04/2007
*/
private void permitirAlteracaoValor(ServicoTipo servicoTipo, EfetuarCorteLigacaoAguaActionForm form){
if (servicoTipo.getIndicadorPermiteAlterarValor() ==
ConstantesSistema.INDICADOR_USO_ATIVO.shortValue()){
form.setAlteracaoValor("OK");
}
else{
form.setAlteracaoValor("");
}
}
/**
* Preencher dados do corte da liga��o
*
* @author Leonardo Regis
* @date 23/09/2006
*
* @param sessao
* @param form
* @param os
*/
private void pesquisarDadosCorteLigacao(HttpSession sessao, EfetuarCorteLigacaoAguaActionForm form, OrdemServico ordemServico) {
//Data Encerramento
if(ordemServico.getDataEncerramento() != null && !ordemServico.getDataEncerramento().equals("")){
form.setDataCorte(Util.formatarData(ordemServico.getDataEncerramento()));
}
//Comentado por Raphael Rossiter em 28/02/2007
// Motivo do Corte
/*if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getMotivoCorte() != null){
form.setMotivoCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getMotivoCorte().getId());
}
// Tipo do Corte
if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getCorteTipo() != null) {
form.setTipoCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getCorteTipo().getId());
}
// Leitura do Corte
HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getHidrometroInstalacaoHistorico();
if(hidrometroInstalacaoHistorico != null &&
hidrometroInstalacaoHistorico.getNumeroLeituraCorte() != null){
form.setNumLeituraCorte(""+hidrometroInstalacaoHistorico.getNumeroLeituraCorte());
}
// N�mero do Selo do Corte
if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getNumeroSeloCorte() != null){
form.setNumSeloCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getNumeroSeloCorte());
}*/
if(ordemServico.getImovel().getLigacaoAgua().getMotivoCorte() != null){
form.setMotivoCorte(""+ordemServico.getImovel().getLigacaoAgua().getMotivoCorte().getId());
}
// Tipo do Corte
if(ordemServico.getImovel().getLigacaoAgua().getCorteTipo() != null) {
form.setTipoCorte(""+ordemServico.getImovel().getLigacaoAgua().getCorteTipo().getId());
}
// Leitura do Corte
HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
ordemServico.getImovel().getLigacaoAgua().getHidrometroInstalacaoHistorico();
if(hidrometroInstalacaoHistorico != null &&
hidrometroInstalacaoHistorico.getNumeroLeituraCorte() != null){
form.setNumLeituraCorte(""+hidrometroInstalacaoHistorico.getNumeroLeituraCorte());
}
// N�mero do Selo do Corte
if(ordemServico.getImovel().getLigacaoAgua().getNumeroSeloCorte() != null){
form.setNumSeloCorte(""+ordemServico.getImovel().getLigacaoAgua().getNumeroSeloCorte());
}
}
/**
* Preencher dados do im�vel
*
* @author Leonardo Regis
* @date 23/09/2006
*
* @param form
* @param os
*/
private void preencherDadosImovel(EfetuarCorteLigacaoAguaActionForm form, OrdemServico ordemServico) {
//Comentado por Raphael Rossiter em 28/02/2007
//Imovel imovel= ordemServico.getRegistroAtendimento().getImovel();
Imovel imovel= ordemServico.getImovel();
// Matricula Im�vel
form.setMatriculaImovel(imovel.getId().toString());
// Inscri��o Im�vel
String inscricaoImovel = this.getFachada().pesquisarInscricaoImovel(imovel.getId());
form.setInscricaoImovel(inscricaoImovel);
// Situa��o da Liga��o de Agua
String situacaoLigacaoAgua = imovel.getLigacaoAguaSituacao().getDescricao();
form.setSituacaoLigacaoAgua(situacaoLigacaoAgua);
// Situa��o da Liga��o de Esgoto
String situacaoLigacaoEsgoto = imovel.getLigacaoEsgotoSituacao().getDescricao();
form.setSituacaoLigacaoEsgoto(situacaoLigacaoEsgoto);
// Cliente
this.pesquisarCliente(form, ordemServico);
}
/**
* Carrega cole��o de motivo do corte.
*
* @author Leonardo Regis
* @date 23/09/2006
*
* @param sessao
*/
private void getMotivoNaoCobrancaCollection(HttpSession sessao) {
// Filtra Motivo da N�o Cobran�a
FiltroServicoNaoCobrancaMotivo filtroServicoNaoCobrancaMotivo = new FiltroServicoNaoCobrancaMotivo();
filtroServicoNaoCobrancaMotivo.setCampoOrderBy(FiltroServicoNaoCobrancaMotivo.DESCRICAO);
Collection colecaoServicoNaoCobrancaMotivo = this.getFachada().pesquisar( filtroServicoNaoCobrancaMotivo, ServicoNaoCobrancaMotivo.class.getName());
if (colecaoServicoNaoCobrancaMotivo != null && !colecaoServicoNaoCobrancaMotivo.isEmpty()) {
sessao.setAttribute("colecaoMotivoNaoCobranca", colecaoServicoNaoCobrancaMotivo);
} else {
throw new ActionServletException("atencao.naocadastrado", null, "Motivo N�o Cobran�a");
}
}
/**
* Pesquisa Cliente
*
* @author Leonardo Regis
* @date 23/09/2006
*
* @param form
* @param os
*/
private void pesquisarCliente(EfetuarCorteLigacaoAguaActionForm form, OrdemServico ordemServico) {
// Filtro para carregar o Cliente
FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
//Comentado por Raphael Rossiter em 28/02/2007
//filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, ordemServico.getRegistroAtendimento().getImovel().getId()));
filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, ordemServico.getImovel().getId()));
filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.CLIENTE_RELACAO_TIPO, ClienteRelacaoTipo.USUARIO));
filtroClienteImovel.adicionarParametro(new ParametroNulo(FiltroClienteImovel.DATA_FIM_RELACAO));
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente");
Collection colecaoClienteImovel = this.getFachada().pesquisar(filtroClienteImovel, ClienteImovel.class.getName());
if (colecaoClienteImovel != null && !colecaoClienteImovel.isEmpty()) {
ClienteImovel clienteImovel = (ClienteImovel) colecaoClienteImovel.iterator().next();
Cliente cliente = clienteImovel.getCliente();
String documento = "";
if (cliente.getCpf() != null && !cliente.getCpf().equals("")) {
documento = cliente.getCpfFormatado();
} else {
documento = cliente.getCnpjFormatado();
}
// Cliente Nome/CPF-CNPJ
form.setClienteUsuario(cliente.getNome());
form.setCpfCnpjCliente(documento);
}else {
throw new ActionServletException("atencao.naocadastrado", null, "Cliente");
}
}
/**
* Carrega cole��o de motivo do corte.
*
* @author Leonardo Regis
* @date 23/09/2006
*
* @param sessao
*/
private void getMotivoCorteCollection(HttpSession sessao) {
// Filtro para o campo Motivo do Corte
FiltroMotivoCorte filtroMotivoCorteLigacaoAgua = new FiltroMotivoCorte();
filtroMotivoCorteLigacaoAgua.adicionarParametro(new ParametroSimples(FiltroMotivoCorte.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
filtroMotivoCorteLigacaoAgua.setCampoOrderBy(FiltroMotivoCorte.DESCRICAO);
Collection colecaoMotivoCorteLigacaoAgua = this.getFachada().pesquisar(filtroMotivoCorteLigacaoAgua, MotivoCorte.class.getName());
if (colecaoMotivoCorteLigacaoAgua != null && !colecaoMotivoCorteLigacaoAgua.isEmpty()) {
sessao.setAttribute("colecaoMotivoCorteLigacaoAgua",colecaoMotivoCorteLigacaoAgua);
} else {
throw new ActionServletException("atencao.naocadastrado",null, "Motivo do Corte");
}
}
/**
* Carrega cole��o de tipo do corte.
*
* @author Leonardo Regis
* @date 25/09/2006
*
* @param sessao
*/
private void getTipoCorteCollection(HttpSession sessao) {
// Filtro para o campo Motivo do Corte
FiltroCorteTipo filtroTipoCorteLigacaoAgua = new FiltroCorteTipo();
filtroTipoCorteLigacaoAgua.adicionarParametro(new ParametroSimples(FiltroCorteTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
filtroTipoCorteLigacaoAgua.adicionarParametro(new ParametroSimples(FiltroCorteTipo.INDICADOR_CORTE_ADMINISTRATIVO, ConstantesSistema.NAO));
filtroTipoCorteLigacaoAgua.setCampoOrderBy(FiltroCorteTipo.DESCRICAO);
Collection colecaoTipoCorteLigacaoAgua =
this.getFachada().pesquisar(filtroTipoCorteLigacaoAgua, CorteTipo.class.getName());
if (colecaoTipoCorteLigacaoAgua != null && !colecaoTipoCorteLigacaoAgua.isEmpty()) {
sessao.setAttribute("colecaoTipoCorteLigacaoAgua",colecaoTipoCorteLigacaoAgua);
} else {
throw new ActionServletException("atencao.naocadastrado",null, "Tipo do Corte");
}
}
}