package gcom.gui.faturamento;
import gcom.arrecadacao.pagamento.GuiaPagamentoItem;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.bean.ObterDadosRegistroAtendimentoHelper;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.ClienteTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.cliente.FiltroClienteImovel;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.FiltroImovelCobrancaSituacao;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelCobrancaSituacao;
import gcom.cobranca.CobrancaSituacao;
import gcom.fachada.Fachada;
import gcom.faturamento.debito.DebitoTipo;
import gcom.faturamento.debito.FiltroDebitoTipo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.filtro.ParametroSimples;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
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;
public class ExibirInserirGuiaPagamentoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm,
HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("inserirGuiaPagamento");
InserirGuiaPagamentoActionForm inserirGuiaPagamentoActionForm = (InserirGuiaPagamentoActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// Verifica se o usu�rio tem permiss�o especial para inserir Guia de Pagamento sem RA(38)
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
boolean inserirGuiaPagamentoSemRa = Fachada.getInstancia().
verificarPermissaoEspecial(PermissaoEspecial.INSERIR_GUIA_DE_PAGAMENTO_SEM_RA, usuarioLogado);
httpServletRequest.setAttribute("inserirGuiaPagamentoSemRa", inserirGuiaPagamentoSemRa);
if (httpServletRequest.getParameter("menu")!=null && !httpServletRequest.getParameter("menu").equals("")){
inserirGuiaPagamentoActionForm.setNumeroTotalPrestacao(""+1);
inserirGuiaPagamentoActionForm.setIndicadorEmitirObservacao(ConstantesSistema.NAO.toString());
}
if(httpServletRequest.getParameter("limparDebitoTipo") != null){
sessao.removeAttribute("colecaoGuiaDebitoTipo");
}
if (httpServletRequest.getParameter("limparOS") != null) {
inserirGuiaPagamentoActionForm.setOrdemServico("");
inserirGuiaPagamentoActionForm.setDescricaoOrdemServico("");
}
// Carregar a data corrente do sistema
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Calendar dataCorrente = new GregorianCalendar();
// Data Corrente
httpServletRequest.setAttribute("dataAtual", formatoData.format(dataCorrente.getTime()));
// Data Corrente + 60 dias
dataCorrente.add(Calendar.DATE, 60);
httpServletRequest.setAttribute("dataAtual60", formatoData.format(dataCorrente.getTime()));
// C�digo do Cliente
String codigoDigitadoClienteEnter = inserirGuiaPagamentoActionForm.getCodigoCliente();
// Matr�cula do Im�vel
String codigoDigitadoImovelEnter = inserirGuiaPagamentoActionForm.getIdImovel();
// Verifica se o c�digo do im�vel foi digitado
if (codigoDigitadoImovelEnter != null && !codigoDigitadoImovelEnter.trim().equals("") &&
Integer.parseInt(codigoDigitadoImovelEnter) > 0) {
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao");
filtroImovel.adicionarParametro(
new ParametroSimples(FiltroImovel.ID, codigoDigitadoImovelEnter));
Collection imovelEncontrado = fachada.pesquisar(filtroImovel,Imovel.class.getName());
if (imovelEncontrado != null && !imovelEncontrado.isEmpty()) {
// O imovel foi encontrado
Imovel imovel = (Imovel) imovelEncontrado.iterator().next();
FiltroImovelCobrancaSituacao filtroImovelCobrancaSituacao = new FiltroImovelCobrancaSituacao();
filtroImovelCobrancaSituacao.adicionarCaminhoParaCarregamentoEntidade("cobrancaSituacao");
filtroImovelCobrancaSituacao.adicionarParametro(
new ParametroSimples(FiltroImovelCobrancaSituacao.IMOVEL_ID, imovel.getId()));
Collection imovelCobrancaSituacaoEncontrada =
fachada.pesquisar(filtroImovelCobrancaSituacao,ImovelCobrancaSituacao.class.getName());
if (imovel.getIndicadorExclusao() == null ? false : imovel.getIndicadorExclusao().equals(Imovel.IMOVEL_EXCLUIDO)) {
throw new ActionServletException("atencao.imovel.excluido");
}
// Verifica se o im�vel tem d�bito em cobran�a administrativa
if (imovelCobrancaSituacaoEncontrada != null && !imovelCobrancaSituacaoEncontrada.isEmpty()) {
ImovelCobrancaSituacao imovelCobrancaSituacao =
((ImovelCobrancaSituacao) ((List) imovelCobrancaSituacaoEncontrada).get(0));
if (imovelCobrancaSituacao.getCobrancaSituacao() != null) {
if (imovelCobrancaSituacao.getCobrancaSituacao().getId().equals(CobrancaSituacao.COBRANCA_ADMINISTRATIVA) &&
imovelCobrancaSituacao.getDataRetiradaCobranca() == null) {
throw new ActionServletException("atencao.pesquisa.imovel.cobranca_administrativa");
}
}
}
inserirGuiaPagamentoActionForm.setIdImovel(""+ ((Imovel) ((List) imovelEncontrado).get(0)).getId());
inserirGuiaPagamentoActionForm.setInscricaoImovel(((Imovel) ((List) imovelEncontrado).get(0)).getInscricaoFormatada());
inserirGuiaPagamentoActionForm.setSituacaoAgua(((Imovel) ((List) imovelEncontrado).get(0)).getLigacaoAguaSituacao().getDescricao());
inserirGuiaPagamentoActionForm.setSituacaoEsgoto(((Imovel) ((List) imovelEncontrado).get(0)).getLigacaoEsgotoSituacao().getDescricao());
inserirGuiaPagamentoActionForm.setLocalidade(""+ ((Imovel) ((List) imovelEncontrado).get(0)).getLocalidade().getId());
httpServletRequest.setAttribute("nomeCampo", "registroAtendimento");
FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("clienteRelacaoTipo");
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.IMOVEL_ID, codigoDigitadoImovelEnter));
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.CLIENTE_RELACAO_TIPO_ID, ClienteRelacaoTipo.USUARIO));
Collection clientesImovelEncontrado = fachada.pesquisar(filtroClienteImovel, ClienteImovel.class.getName());
ClienteImovel clienteImovel = null;
if (clientesImovelEncontrado != null && !clientesImovelEncontrado.isEmpty()) {
Iterator clienteImovelEncontradoIterator = clientesImovelEncontrado.iterator();
while (clienteImovelEncontradoIterator.hasNext()) {
clienteImovel = (ClienteImovel) clienteImovelEncontradoIterator.next();
if (clienteImovel.getDataFimRelacao() == null) {
inserirGuiaPagamentoActionForm.setNomeClienteUsuario(clienteImovel.getCliente().getNome());
}
}
}
} else {
inserirGuiaPagamentoActionForm.setIdImovel("");
throw new ActionServletException("atencao.pesquisa.imovel.inexistente.guia");
}
}
// Verifica se o do cliente c�digo foi digitado
if (codigoDigitadoClienteEnter != null && !codigoDigitadoClienteEnter.trim().equals("") &&
Integer.parseInt(codigoDigitadoClienteEnter) > 0) {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("profissao");
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("clienteTipo");
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("ramoAtividade");
filtroCliente.adicionarParametro(
new ParametroSimples(FiltroCliente.ID, codigoDigitadoClienteEnter));
Collection clienteEncontrado =
fachada.pesquisar(filtroCliente,Cliente.class.getName());
if (clienteEncontrado != null && !clienteEncontrado.isEmpty()) {
// O Cliente foi encontrado
Cliente cliente = ((Cliente) ((List) clienteEncontrado).get(0));
if (cliente.getIndicadorUso().equals(ConstantesSistema.INDICADOR_USO_DESATIVO)) {
throw new ActionServletException("atencao.cliente.inativo",null,""+cliente.getId());
}
inserirGuiaPagamentoActionForm.setNomeCliente(cliente.getNome());
httpServletRequest.setAttribute("nomeCampo", "idTipoDebito");
if (cliente.getClienteTipo().getIndicadorPessoaFisicaJuridica().equals(ClienteTipo.INDICADOR_PESSOA_FISICA)) {
if (cliente.getCpfFormatado() == null ||
cliente.getCpfFormatado().equalsIgnoreCase("null")) {
inserirGuiaPagamentoActionForm.setCpf("");
} else {
inserirGuiaPagamentoActionForm.setCpf(cliente.getCpfFormatado());
}
inserirGuiaPagamentoActionForm.setProfissao(
cliente.getProfissao() == null ? "" : cliente.getProfissao().getDescricao());
} else {
if (cliente.getCnpjFormatado() == null ||
cliente.getCnpjFormatado().equalsIgnoreCase("null")) {
inserirGuiaPagamentoActionForm.setCpf("");
} else {
inserirGuiaPagamentoActionForm.setCpf(cliente.getCnpjFormatado());
}
inserirGuiaPagamentoActionForm.setRamoAtividade(
cliente.getRamoAtividade() == null ? "": cliente.getRamoAtividade().getDescricao());
}
} else {
inserirGuiaPagamentoActionForm.setCodigoCliente("");
throw new ActionServletException("atencao.pesquisa.cliente.inexistente.guia");
}
httpServletRequest.setAttribute("nomeCampo", "registroAtendimento");
}
// Flag indicando que o usu�rio fez uma consulta a partir da tecla Enter
String idOrdemServico = inserirGuiaPagamentoActionForm.getOrdemServico();
String idRegistroAtendimento = inserirGuiaPagamentoActionForm.getRegistroAtendimento();
String descOrdemServico = inserirGuiaPagamentoActionForm.getDescricaoOrdemServico();
String descRA = inserirGuiaPagamentoActionForm.getNomeRegistroAtendimento();
if(descRA != null && !descRA.equals("") && sessao.getAttribute("idRA") != null && !((String)sessao.getAttribute("idRA")).trim().equals("")){
inserirGuiaPagamentoActionForm.setRegistroAtendimento((String)sessao.getAttribute("idRA"));
}
if(idOrdemServico == null || idOrdemServico.equals("")){
sessao.removeAttribute("desabilitaPorOS");
}
// Pesquisar Ordem Servico
if (idOrdemServico != null && !idOrdemServico.trim().equals("")
&& (descOrdemServico == null || descOrdemServico.equals(""))) {
// Faz a consulta de Ordem Servico
this.pesquisarOrdemServico(inserirGuiaPagamentoActionForm,httpServletRequest, sessao);
}
// Pesquisar Registro Atendimento
if (
idRegistroAtendimento != null &&
!idRegistroAtendimento.trim().equals("") &&
( httpServletRequest.getParameter("objetoConsulta") != null &&
httpServletRequest.getParameter("objetoConsulta").equals( "1" ) ) ) {
// && (descRA == null || descRA.equals(""))) {
// Faz a consulta de Registro Atendimento
this.pesquisarRegistroAtendimento(inserirGuiaPagamentoActionForm,httpServletRequest);
}
//Seta os request�s encontrados
this.setaRequest(httpServletRequest,inserirGuiaPagamentoActionForm);
// c�digo para checar ou naum o Atualizar
String primeiraVez = httpServletRequest.getParameter("menu");
if (primeiraVez != null && !primeiraVez.equals("")) {
inserirGuiaPagamentoActionForm.setQtdeDiasVencimento("30");
}
boolean alterarValorSugeridoEmTipoDebito = Fachada
.getInstancia()
.verificarPermissaoEspecial(
PermissaoEspecial.ALTERAR_VALOR_SUGERIDO_EM_TIPO_DEBITO,
usuarioLogado);
httpServletRequest.setAttribute("alterarValorSugeridoEmTipoDebito",
alterarValorSugeridoEmTipoDebito);
if (inserirGuiaPagamentoActionForm.getValorDebito() == null
|| inserirGuiaPagamentoActionForm.getValorDebito()
.equals("")) {
httpServletRequest.setAttribute("alterarValorSugeridoEmTipoDebito",
true);
}
if(httpServletRequest.getParameter("idGuiaPagamentoItem") != null){
removerGuiaPagamentoItem(httpServletRequest.getParameter("idGuiaPagamentoItem"), sessao);
}
return retorno;
}
/**
* Pesquisa Registro Atendimento
*
* @author Rafael Pinto
* @date 02/11/2006
*/
private void pesquisarRegistroAtendimento(InserirGuiaPagamentoActionForm form,HttpServletRequest httpServletRequest) {
// Pesquisa de acordo com os par�metros informados no filtro
ObterDadosRegistroAtendimentoHelper obterDadosRegistroAtendimentoHelper =
Fachada.getInstancia().obterDadosRegistroAtendimento(new Integer(form.getRegistroAtendimento()));
// Verifica se a pesquisa retornou algum objeto para a cole��o
if (obterDadosRegistroAtendimentoHelper != null &&
obterDadosRegistroAtendimentoHelper.getRegistroAtendimento() != null) {
// Obt�m o objeto da cole��o pesquisada
RegistroAtendimento registroAtendimento = obterDadosRegistroAtendimentoHelper.getRegistroAtendimento();
if ( registroAtendimento.getCodigoSituacao() != RegistroAtendimento.SITUACAO_PENDENTE ){
throw new ActionServletException( "atencao.registro_atendimento.nao.pendente" );
}
Integer idImovel = null;
if(form.getIdImovel() != null && !form.getIdImovel().trim().equals("") ){
idImovel = new Integer(form.getIdImovel());
}
Integer idCliente = null;
if(form.getCodigoCliente() != null && !form.getCodigoCliente().trim().equals("") ){
idCliente = new Integer(form.getCodigoCliente());
form.setLocalidade("" + registroAtendimento.getLocalidade().getId());
}
Fachada.getInstancia().validarExibirInserirGuiaPagamento(registroAtendimento,null,idImovel,idCliente);
form.setRegistroAtendimento(registroAtendimento.getId().toString());
form.setNomeRegistroAtendimento(registroAtendimento.getSolicitacaoTipoEspecificacao().getDescricao());
} else {
httpServletRequest.setAttribute("nomeCampo", "registroAtendimento");
form.setRegistroAtendimento("");
form.setNomeRegistroAtendimento("Registro Atendimento inexistente");
}
}
/**
* Pesquisa Ordem Servi�o
*
* @author Rafael Pinto
* @date 02/11/2006
*/
private void pesquisarOrdemServico(InserirGuiaPagamentoActionForm form,HttpServletRequest httpServletRequest,
HttpSession sessao) {
// Pesquisa de acordo com os par�metros informados no filtro
OrdemServico ordemServico =
Fachada.getInstancia().recuperaOSPorId(new Integer(form.getOrdemServico()));
// Verifica se a pesquisa retornou algum objeto para a cole��o
if (ordemServico != null) {
Integer idImovel = null;
if(form.getIdImovel() != null && !form.getIdImovel().trim().equals("") ){
idImovel = new Integer(form.getIdImovel());
}
Integer idCliente = null;
if(form.getCodigoCliente() != null && !form.getCodigoCliente().trim().equals("") ){
idCliente = new Integer(form.getCodigoCliente());
}
Fachada.getInstancia().validarExibirInserirGuiaPagamento(null,ordemServico,idImovel,idCliente);
form.setOrdemServico(""+ordemServico.getId());
form.setDescricaoOrdemServico(ordemServico.getServicoTipo().getDescricao());
RegistroAtendimento registroAtendimento = ordemServico.getRegistroAtendimento();
form.setRegistroAtendimento(""+registroAtendimento.getId());
form.setNomeRegistroAtendimento(registroAtendimento.getSolicitacaoTipoEspecificacao().getDescricao());
sessao.setAttribute("idRA", ""+registroAtendimento.getId());
if(ordemServico.getServicoTipo().getDebitoTipo() != null){
form.setHabilitaTipoDebito("false");
FiltroDebitoTipo filtroDebitoTipo = new FiltroDebitoTipo();
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("financiamentoTipo");
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.ID, ordemServico.getServicoTipo().getDebitoTipo().getId()));
Collection colecaoFiltro = Fachada.getInstancia().pesquisar(filtroDebitoTipo, DebitoTipo.class.getName());
if(!colecaoFiltro.isEmpty()){
DebitoTipo debitoTipo = (DebitoTipo)colecaoFiltro.iterator().next();
Collection colecaoGuiaItem = new ArrayList();
GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem();
guiaPagamentoItem.setDebitoTipo(debitoTipo);
guiaPagamentoItem.setValorDebito(debitoTipo.getValorSugerido());
colecaoGuiaItem.add(guiaPagamentoItem);
sessao.setAttribute("colecaoGuiaDebitoTipo", colecaoGuiaItem);
sessao.setAttribute("desabilitaPorOS", "sim");
}
}
} else {
httpServletRequest.setAttribute("nomeCampo", "ordemServico");
form.setOrdemServico("");
form.setDescricaoOrdemServico("Ordem de servi�o inexistente");
}
}
/**
* Seta os request com os id encontrados
*
* @author Rafael Pinto
* @date 02/11/2006
*/
private void setaRequest(HttpServletRequest httpServletRequest,InserirGuiaPagamentoActionForm form){
//Registro Atendimento
if(form.getRegistroAtendimento() != null && !form.getRegistroAtendimento().equals("") &&
form.getNomeRegistroAtendimento() != null && !form.getNomeRegistroAtendimento().equals("")){
httpServletRequest.setAttribute("numeroRAEncontrada","true");
}
//Documento Cobran�a
if(form.getOrdemServico() != null && !form.getOrdemServico().equals("") &&
form.getDescricaoOrdemServico() != null && !form.getDescricaoOrdemServico().equals("")){
httpServletRequest.setAttribute("ordemServicoEncontrada","true");
}
}
private void removerGuiaPagamentoItem(String idGuiaPagamentoItem, HttpSession sessao){
Collection colecaoSessao = (Collection)sessao.getAttribute("colecaoGuiaDebitoTipo");
Iterator iterator = colecaoSessao.iterator();
while(iterator.hasNext()){
Integer idGuiaRemover = new Integer(idGuiaPagamentoItem);
GuiaPagamentoItem guiaPagamentoItem = (GuiaPagamentoItem)iterator.next();
if(guiaPagamentoItem.getDebitoTipo().getId().equals(idGuiaRemover)){
iterator.remove();
}
}
sessao.setAttribute("colecaoGuiaDebitoTipo", colecaoSessao);
}
}