package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.FiltroOrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.atendimentopublico.ordemservico.ServicoTipoSeletiva;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelSubcategoria;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.cobranca.RelatorioOrdemCorteOnline;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC0983] Emitir Ordem de Fiscaliza��o
*
* Este Caso Uso permite realizar a emiss�o de Documentos de Ordem de Fiscaliza��o
* de forma individual para um determinado im�vel.
*
* @author Hugo Amorim
* @data 08/02/2010
*
*/
public class EmitirOrdemCorteAction extends
ExibidorProcessamentoTarefaRelatorio {
/**
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return forward
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// cria a vari�vel de retorno
ActionForward retorno = null;
Fachada fachada = Fachada.getInstancia();
EmitirOrdemCorteForm form =
(EmitirOrdemCorteForm) actionForm;
this.pesquisarEconomias(form,fachada);
this.pesquisarDadosImovel(form,fachada);
String idOrdemServico = null;
String dataGeracaoOs = null;
ServicoTipo servicoTipo =
fachada.recuperaServicoTipoPorConstante(
ServicoTipo.TIPO_CORTE_LIGACAO_AGUA);
if(servicoTipo==null){
servicoTipo =
fachada.recuperaServicoTipoPorConstanteServicoTipoSeletivo(
ServicoTipoSeletiva.CORTE_SELETIVO);
}
String referenciaInicial = "01/0001";
String referenciaFinal = "12/9999";
String dataVencimentoInicial = "01/01/0001";
String dataVencimentoFinal = "31/12/9999";
// Para auxiliar na formata��o de uma data
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
String mesInicial = referenciaInicial.substring(0, 2);
String anoInicial = referenciaInicial.substring(3, referenciaInicial.length());
String anoMesInicial = anoInicial + mesInicial;
String mesFinal = referenciaFinal.substring(0, 2);
String anoFinal = referenciaFinal.substring(3, referenciaFinal.length());
String anoMesFinal = anoFinal + mesFinal;
Date dataVencimentoDebitoI;
Date dataVencimentoDebitoF;
try {
dataVencimentoDebitoI = formatoData.parse(dataVencimentoInicial);
} catch (ParseException ex) {
dataVencimentoDebitoI = null;
}
try {
dataVencimentoDebitoF = formatoData.parse(dataVencimentoFinal);
} catch (ParseException ex) {
dataVencimentoDebitoF = null;
}
// seta valores constantes para chamar o metodo que consulta debitos do imovel
Integer tipoImovel = new Integer(1);
Integer indicadorPagamento = new Integer(1);
Integer indicadorConta = new Integer(1);
Integer indicadorDebito = new Integer(2);
Integer indicadorCredito = new Integer(2);
Integer indicadorNotas = new Integer(2);
Integer indicadorGuias = new Integer(2);
Integer indicadorAtualizar = new Integer(1);
// Obtendo os d�bitos do imovel
ObterDebitoImovelOuClienteHelper colecaoDebitoImovel = fachada
.obterDebitoImovelOuCliente(tipoImovel.intValue(),
form.getMatriculaImovel().toString().trim(), null, null,
anoMesInicial, anoMesFinal,
dataVencimentoDebitoI,
dataVencimentoDebitoF, indicadorPagamento
.intValue(), indicadorConta
.intValue(), indicadorDebito
.intValue(), indicadorCredito
.intValue(), indicadorNotas
.intValue(), indicadorGuias
.intValue(), indicadorAtualizar
.intValue(), null);
Collection<ContaValoresHelper> colecaoContaValores = colecaoDebitoImovel.getColecaoContasValores();
if(colecaoContaValores == null || colecaoContaValores .isEmpty()){
throw new ActionServletException("atencao.imovel.sem.debito",form.getMatriculaImovel().toString().trim());
}
if(servicoTipo==null){
throw new ActionServletException("atencao.servico_tipo_nao_existe");
}
FiltroOrdemServico filtro = new FiltroOrdemServico();
filtro.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.ID_IMOVEL, form.getMatriculaImovel()));
filtro.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.SITUACAO, OrdemServico.SITUACAO_PENDENTE));
filtro.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.ID_SERVICO_TIPO,servicoTipo.getId()));
Collection colecaoOrdensServido
= fachada.pesquisar(filtro, OrdemServico.class.getName());
OrdemServico ordemServico = (OrdemServico) Util.retonarObjetoDeColecao(colecaoOrdensServido);
if(ordemServico == null){
servicoTipo =
fachada.recuperaServicoTipoPorConstanteServicoTipoSeletivo(
ServicoTipoSeletiva.CORTE_SELETIVO);
FiltroOrdemServico filtroSeletiva = new FiltroOrdemServico();
filtroSeletiva.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.ID_IMOVEL, form.getMatriculaImovel()));
filtroSeletiva.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.SITUACAO, OrdemServico.SITUACAO_PENDENTE));
filtroSeletiva.adicionarParametro(
new ParametroSimples(FiltroOrdemServico.ID_SERVICO_TIPO,servicoTipo.getId()));
Collection colecaoOrdensServicoSeletiva
= fachada.pesquisar(filtroSeletiva, OrdemServico.class.getName());
ordemServico = (OrdemServico) Util.retonarObjetoDeColecao(colecaoOrdensServicoSeletiva);
}
if(ordemServico!=null){
idOrdemServico = ordemServico.getId().toString();
}
if(idOrdemServico==null){
throw new ActionServletException("atencao.ordem_servico_nao_encontrada");
}
Date dataAtual = new Date();
dataGeracaoOs = Util.formatarData(dataAtual);
ordemServico.setDataEmissao(dataAtual);
fachada.atualizar(ordemServico);
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
RelatorioOrdemCorteOnline relatorioOrdemCorteOnline =
new RelatorioOrdemCorteOnline((Usuario)
(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
relatorioOrdemCorteOnline.addParametro("idsOrdemServico", idOrdemServico);
relatorioOrdemCorteOnline.addParametro("endereco", form.getEnderecoImovel());
relatorioOrdemCorteOnline.addParametro("matricula", new Integer(form.getMatriculaImovel()));
relatorioOrdemCorteOnline.addParametro("situacaoAgua", form.getSituacaoLigacaoAgua());
relatorioOrdemCorteOnline.addParametro("sistuacaoEsgoto",form.getSituacaoLigacaoEsgoto());
relatorioOrdemCorteOnline.addParametro("inscricao", form.getInscricaoImovel());
relatorioOrdemCorteOnline.addParametro("numeroHidrometro", form.getNumeroHidrometro());
relatorioOrdemCorteOnline.addParametro("grupo", form.getFaturamentoGrupo());
relatorioOrdemCorteOnline.addParametro("dataGeracaoOs", dataGeracaoOs);
relatorioOrdemCorteOnline.addParametro("nomeCliente", form.getNomeCliente());
relatorioOrdemCorteOnline.addParametro("anoMesfaturamentoGrupo",Util.formatarAnoMesParaMesAno(form.getAnoMesfaturamentoGrupo()));
relatorioOrdemCorteOnline.addParametro("perfilImovel", form.getDescricaoPerfilImovel());
relatorioOrdemCorteOnline.addParametro("unidadeNegocio", form.getUnidadeNegocio());
relatorioOrdemCorteOnline.addParametro("qtdeEconResidencial",
form.getQtdeEconResidencial()!=null?
form.getQtdeEconResidencial().toString():null);
relatorioOrdemCorteOnline.addParametro("qtdeEconComercial",
form.getQtdeEconComercial()!=null?
form.getQtdeEconComercial().toString():null);
relatorioOrdemCorteOnline.addParametro("qtdeEconIndustrial",
form.getQtdeEconIndustrial()!=null?
form.getQtdeEconIndustrial().toString():null);
relatorioOrdemCorteOnline.addParametro("qtdeEconPublica",
form.getQtdeEconPublica()!=null?
form.getQtdeEconPublica().toString():null);
relatorioOrdemCorteOnline.addParametro("qtdeEconTotal",
form.getQtdeEconTotal()!=null?
form.getQtdeEconTotal().toString():null);
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorioOrdemCorteOnline.addParametro("tipoFormatoRelatorio", Integer
.parseInt(tipoRelatorio));
retorno = processarExibicaoRelatorio(relatorioOrdemCorteOnline,
tipoRelatorio, httpServletRequest, httpServletResponse,
actionMapping);
// devolve o mapeamento contido na vari�vel retorno
return retorno;
}
private void pesquisarEconomias(EmitirOrdemCorteForm form,
Fachada fachada) {
Collection imovelSubcategorias =
fachada.pesquisarCategoriasImovel(
new Integer(form.getMatriculaImovel().trim()));
form.setQtdeEconResidencial(new Integer(0));
form.setQtdeEconComercial(new Integer(0));
form.setQtdeEconIndustrial(new Integer(0));
form.setQtdeEconPublica(new Integer(0));
form.setQtdeEconTotal(new Integer(0));
for (Iterator iterator = imovelSubcategorias.iterator(); iterator
.hasNext();) {
ImovelSubcategoria imovelSubcategoria = (ImovelSubcategoria) iterator.next();
if(imovelSubcategoria
.getComp_id().getSubcategoria()
.getCategoria().getId().compareTo(Categoria.RESIDENCIAL)==0){
form.setQtdeEconResidencial(form.getQtdeEconResidencial()+
imovelSubcategoria.getQuantidadeEconomias());
form.setQtdeEconTotal(form.getQtdeEconTotal()+
imovelSubcategoria.getQuantidadeEconomias());
}
if(imovelSubcategoria
.getComp_id().getSubcategoria()
.getCategoria().getId().compareTo(Categoria.COMERCIAL)==0){
form.setQtdeEconComercial(form.getQtdeEconComercial()+
imovelSubcategoria.getQuantidadeEconomias());
form.setQtdeEconTotal(form.getQtdeEconTotal()+
imovelSubcategoria.getQuantidadeEconomias());
}
if(imovelSubcategoria
.getComp_id().getSubcategoria()
.getCategoria().getId().compareTo(Categoria.INDUSTRIAL)==0){
form.setQtdeEconIndustrial(form.getQtdeEconIndustrial()+
imovelSubcategoria.getQuantidadeEconomias());
form.setQtdeEconTotal(form.getQtdeEconTotal()+
imovelSubcategoria.getQuantidadeEconomias());
}
if(imovelSubcategoria
.getComp_id().getSubcategoria()
.getCategoria().getId().compareTo(Categoria.PUBLICO)==0){
form.setQtdeEconPublica(form.getQtdeEconPublica()+
imovelSubcategoria.getQuantidadeEconomias());
form.setQtdeEconTotal(form.getQtdeEconTotal()+
imovelSubcategoria.getQuantidadeEconomias());
}
}
}
private void pesquisarDadosImovel(EmitirOrdemCorteForm form,
Fachada fachada) {
FiltroImovel filtro = new FiltroImovel();
filtro.adicionarParametro(new ParametroSimples(FiltroImovel.ID, form.getMatriculaImovel()));
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.IMOVEL_PERFIL);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.FATURAMENTO_GRUPO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_AGUA_SITUACAO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_ESGOTO_SITUACAO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_AGUA);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.CLIENTES_IMOVEIS);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.UNIDADE_FEDERACAO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LOCALIDADE_UNIDADE_NEGOCIO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_AGUA_HIDROMETRO_INSTALACAO_HISTORICO);
filtro.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_AGUA_HIDROMETRO_INSTALACAO_HISTORICO_HIDROMETRO);
Collection<Imovel> imoveis = fachada.pesquisar(filtro, Imovel.class.getName());
Imovel imovel = (Imovel) Util.retonarObjetoDeColecao(imoveis);
form.setFaturamentoGrupo(imovel.getQuadra().getRota().getFaturamentoGrupo().getDescricaoAbreviada().toString());
form.setUnidadeNegocio(imovel.getLocalidade().getUnidadeNegocio().getNome());
form.setAnoMesfaturamentoGrupo(imovel.getQuadra().getRota().getFaturamentoGrupo().getAnoMesReferencia().toString());
form.setSituacaoLigacaoAgua(imovel.getLigacaoAguaSituacao().getDescricao());
form.setSituacaoLigacaoEsgoto(imovel.getLigacaoEsgotoSituacao().getDescricao());
form.setDescricaoPerfilImovel(imovel.getImovelPerfil().getDescricao());
Cliente clienteUsuario = imovel.getClienteUsuario();
if(clienteUsuario!=null){
form.setNomeCliente(clienteUsuario.getNome());
}
if(imovel!=null
&& imovel.getLigacaoAgua()!=null
&& imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico()!=null
&& imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico().getHidrometro()!=null){
form.setNumeroHidrometro(imovel
.getLigacaoAgua()
.getHidrometroInstalacaoHistorico()
.getHidrometro().getNumero());
}
}
}