package gcom.gui.relatorio.faturamento.conta;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.conta.ContaHistorico;
import gcom.faturamento.conta.ContaMotivoRevisao;
import gcom.faturamento.conta.FiltroConta;
import gcom.faturamento.conta.FiltroContaHistorico;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.faturamento.conta.Relatorio2ViaConta;
import gcom.relatorio.faturamento.conta.Relatorio2ViaContaCaern;
import gcom.relatorio.faturamento.conta.Relatorio2ViaContaTipo2;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
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;
/**
* [UC0482] Emitir 2� Via de Conta
* @author Vivianne Sousa
* @date 15/09/2006
*/
public class GerarRelatorio2ViaContaAction extends
ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
Collection idsConta = new ArrayList();
Integer idContaHistorico = null;
boolean conjuntoContaRevisao = false;
if (sessao.getAttribute("idContaHistorico") != null && !sessao.getAttribute("idContaHistorico").equals("")){
//Consultar Imovel (aba Faturamento)
idContaHistorico = new Integer("" + sessao.getAttribute("idContaHistorico"));
idsConta.add(idContaHistorico);
}else if (sessao.getAttribute("idConta") != null && !sessao.getAttribute("idConta").equals("")){
//popup de conta
idsConta.add(new Integer("" + sessao.getAttribute("idConta")));
if (sessao.getAttribute("conta") != null){
Conta conta = (Conta)sessao.getAttribute("conta");
conta.getValorTotalConta();
}
}else if(httpServletRequest.getParameter("idConta") != null && !httpServletRequest.getParameter("idConta").equals("")){
idsConta.add(new Integer("" + httpServletRequest.getParameter("idConta")));
}else if (sessao.getAttribute("idsContaEP") != null){
//Parcelamento
idsConta = (Collection)sessao.getAttribute("idsContaEP");
}else if(sessao.getAttribute("colecaoImovel") != null){
//Manter Conjunto Conta
Integer anoMes = 0;
if(httpServletRequest.getParameter("mesAno") != null){
anoMes = Util.formatarMesAnoComBarraParaAnoMes(httpServletRequest.getParameter("mesAno"));
sessao.setAttribute("anoMes", anoMes);
}else{
anoMes = new Integer("" + sessao.getAttribute("anoMes"));
sessao.removeAttribute("anoMes");
}
Integer anoMesFim = anoMes;
if(httpServletRequest.getParameter("mesAnoFim") != null){
anoMesFim = Util.formatarMesAnoComBarraParaAnoMes(httpServletRequest.getParameter("mesAnoFim"));
sessao.setAttribute("anoMesFim", anoMesFim);
}else if (sessao.getAttribute("anoMesFim") != null){
anoMesFim = new Integer("" + sessao.getAttribute("anoMesFim"));
sessao.removeAttribute("anoMesFim");
}
Date dataVencimentoContaInicio = null;
Date dataVencimentoContaFim = null;
String indicadorContaPaga = null;
Integer idGrupoFaturamento = null;
String dataVencimentoContaInicioParam = httpServletRequest.getParameter("dataVencimentoContaInicial");
if (dataVencimentoContaInicioParam != null &&
!dataVencimentoContaInicioParam.equals("")){
dataVencimentoContaInicio = Util.converteStringParaDate(httpServletRequest.getParameter("dataVencimentoContaInicial"));
sessao.setAttribute("dataVencimentoContaInicial", dataVencimentoContaInicio);
}else if (sessao.getAttribute("dataVencimentoContaInicial") != null){
dataVencimentoContaInicio = Util.converteStringParaDate("" + sessao.getAttribute("dataVencimentoContaInicial"));
sessao.removeAttribute("dataVencimentoContaInicial");
}
String dataVencimentoContaFimParam = httpServletRequest.getParameter("dataVencimentoContaFinal");
if (dataVencimentoContaFimParam != null &&
!dataVencimentoContaFimParam.equals("")){
dataVencimentoContaFim = Util.converteStringParaDate(httpServletRequest.getParameter("dataVencimentoContaFinal"));
sessao.setAttribute("dataVencimentoContaFinal", dataVencimentoContaFim);
}else if (sessao.getAttribute("dataVencimentoContaFinal") != null){
dataVencimentoContaFim = Util.converteStringParaDate("" + sessao.getAttribute("dataVencimentoContaFinal"));
sessao.removeAttribute("dataVencimentoContaFinal");
}
if (httpServletRequest.getParameter("indicadorContaPaga") != null){
indicadorContaPaga = httpServletRequest.getParameter("indicadorContaPaga");
sessao.setAttribute("indicadorContaPaga", indicadorContaPaga);
}else if(sessao.getAttribute("indicadorContaPaga") != null){
indicadorContaPaga = (String)sessao.getAttribute("indicadorContaPaga");
sessao.removeAttribute("indicadorContaPaga");
}
String idGrupoFaturamentoParam = httpServletRequest.getParameter("idGrupoFaturamento");
if (idGrupoFaturamentoParam != null &&
!idGrupoFaturamentoParam.equals("")){
idGrupoFaturamento = new Integer((String) httpServletRequest.getParameter("idGrupoFaturamento"));
sessao.setAttribute("idGrupoFaturamento", idGrupoFaturamento);
}else if (sessao.getAttribute("idGrupoFaturamento") != null){
idGrupoFaturamento = (Integer)sessao.getAttribute("idGrupoFaturamento");
sessao.removeAttribute("idGrupoFaturamento");
}
Collection colecaoImovel = (Collection)sessao.getAttribute("colecaoImovel");
if (idGrupoFaturamento != null){
idsConta = fachada.pesquisarConjuntoContaEmitir2Via(idGrupoFaturamento,anoMes,
dataVencimentoContaInicio, dataVencimentoContaFim, anoMesFim);
}
else{
idsConta = fachada.pesquisarConjuntoContaEmitir2Via(colecaoImovel,anoMes,
dataVencimentoContaInicio, dataVencimentoContaFim, anoMesFim, indicadorContaPaga);
}
/**
* [UC0407] Filtrar Im�veis para Inserir ou Manter Conta
* 3. Caso o indicador de bloqueio de contas vinculadas a contrato de parcelamento no manter contas esteja ativo
* retirar da lista de contas selecionadas as contas vinculadas a algum contrato de parcelamento ativo
*
* RM 1887 - Contrato Parcelamento por Cliente
* Adicionado por: Mariana Victor
* Data: 14/07/2011
*
* */
SistemaParametro sistemaParametro = fachada
.pesquisarParametrosDoSistema();
if (sistemaParametro.getIndicadorBloqueioContasContratoParcelManterConta() != null
&& sistemaParametro.getIndicadorBloqueioContasContratoParcelManterConta().equals(ConstantesSistema.SIM)) {
idsConta = fachada.obterColecaoSemContasEmContratoParcelamentoIDs(
idsConta);
}
/**
* FIM DA ALTERA��O
* */
if(sessao.getAttribute("contaRevisao") != null){
conjuntoContaRevisao = true;
}
}else{
// a partir do Manter Conta
String contaSelected = httpServletRequest.getParameter("conta");
String[] arrayIdentificadores = contaSelected.split(",");
for (int i = 0; i < arrayIdentificadores.length; i++) {
String dadosConta = arrayIdentificadores[i];
String[] idContaArray = dadosConta.split("-");
Integer idConta = new Integer (idContaArray[0]);
idsConta.add(idConta);
}
}
if(idsConta != null && !conjuntoContaRevisao){
Collection colecaoContaDataRevisao = null;
colecaoContaDataRevisao = fachada.pesquisarDataRevisaoConta(idsConta);
if (sessao.getAttribute("idsContaEP") == null &&
colecaoContaDataRevisao != null && !colecaoContaDataRevisao.isEmpty()){
Iterator colecaoContaDataRevisaoIterator = colecaoContaDataRevisao.iterator();
while (colecaoContaDataRevisaoIterator.hasNext()) {
Conta conta = (Conta) colecaoContaDataRevisaoIterator.next();
if (conta.getContaMotivoRevisao() != null && !conta.getContaMotivoRevisao().getId().equals(ContaMotivoRevisao.REVISAO_ENTRADA_DE_PARCELAMENTO)) {
throw new ActionServletException("atencao.nao_permite_emitir_conta_em_revisao");
}
}
}
}
Short contaSemCodigoBarras = ConstantesSistema.NAO;
if (httpServletRequest.getParameter("contaSemCodigoBarras")!= null
&& httpServletRequest.getParameter("contaSemCodigoBarras").equals("1")){
contaSemCodigoBarras = ConstantesSistema.SIM;
sessao.setAttribute("contaSemCodigoBarras", contaSemCodigoBarras);
}else if(sessao.getAttribute("contaSemCodigoBarras") != null){
contaSemCodigoBarras = (Short)sessao.getAttribute("contaSemCodigoBarras");
}
boolean cobrarTaxaEmissaoConta = true;
if(httpServletRequest.getParameter("cobrarTaxaEmissaoConta")!= null
&& httpServletRequest.getParameter("cobrarTaxaEmissaoConta").equals("N")){
cobrarTaxaEmissaoConta = false;
sessao.setAttribute("cobrarTaxaEmissaoConta", cobrarTaxaEmissaoConta);
}else if(sessao.getAttribute("cobrarTaxaEmissaoConta") != null){
cobrarTaxaEmissaoConta = (Boolean)sessao.getAttribute("cobrarTaxaEmissaoConta");
}
Integer qtdeContas = new Integer("0");
if (httpServletRequest.getParameter("qtdeContas") != null) {
qtdeContas = new Integer(httpServletRequest.getParameter("qtdeContas"));
sessao.setAttribute("qtdeContas", qtdeContas);
} else if (sessao.getAttribute("qtdeContas") != null) {
qtdeContas = (Integer) sessao.getAttribute("qtdeContas");
}
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
String nomeEmpresa = sistemaParametro.getNomeAbreviadoEmpresa();
/*
* Colocado por Raphael Rossiter em 24/10/2008 - Analista: Rosana Carvalho
*
* [FS0002] - Cliente sem documento
*/
Integer idConta = (Integer) idsConta.iterator().next();
FiltroConta filtroConta = new FiltroConta();
filtroConta.adicionarCaminhoParaCarregamentoEntidade("imovel");
filtroConta.adicionarCaminhoParaCarregamentoEntidade(FiltroConta.IMOVEL_PERFIL);
filtroConta.adicionarCaminhoParaCarregamentoEntidade("imovel.imovelPerfil");
filtroConta.adicionarCaminhoParaCarregamentoEntidade("imovel.cobrancaSituacaoTipo");
filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.ID, idConta));
Collection colecaoConta = fachada.pesquisar(filtroConta, Conta.class.getName());
Imovel imovel = null;
if (colecaoConta != null && !colecaoConta.isEmpty()){
Conta conta = (Conta) colecaoConta.iterator().next();
imovel = conta.getImovel();
/*
* Caso o indicador de gera��o de d�bito de segunda via de conta associado ao perfil do im�vel da conta
* esteja ativo (IPER_ICGERARDEBITOSEGUNDAVIACONTA=1 da tabela IMOVEL_PERFIL com IPER_ID=IPER_ID da tabela CONTA),
* o sistema dever� gerar um d�bito a cobrar referente a taxa de emiss�o da segunda via da conta.
*
* Desenvolvedor Hugo Amorim
* Analista Nelson Carvalho
* Data: 17/05/2010
*/
if(conta.getImovel().getImovelPerfil()!=null &&
conta.getImovel().getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta()!=null
&& cobrarTaxaEmissaoConta){
if(conta.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta().compareTo(ConstantesSistema.NAO)==0){
cobrarTaxaEmissaoConta = false;
}
}else{
if(imovel.getImovelPerfil()!=null &&
imovel.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta()!=null
&& cobrarTaxaEmissaoConta){
if(imovel.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta().compareTo(ConstantesSistema.NAO)==0){
cobrarTaxaEmissaoConta = false;
}
}
}
}
else{
FiltroContaHistorico filtroContaHistorico = new FiltroContaHistorico();
filtroContaHistorico.adicionarCaminhoParaCarregamentoEntidade("imovel");
filtroContaHistorico.adicionarCaminhoParaCarregamentoEntidade(FiltroContaHistorico.IMOVEL_PERFIL);
filtroContaHistorico.adicionarParametro(new ParametroSimples(FiltroContaHistorico.ID, idConta));
filtroContaHistorico.adicionarCaminhoParaCarregamentoEntidade("imovel.imovelPerfil");
filtroContaHistorico.adicionarCaminhoParaCarregamentoEntidade("imovel.cobrancaSituacaoTipo");
colecaoConta = fachada.pesquisar(filtroContaHistorico, ContaHistorico.class.getName());
ContaHistorico contaHistorico = (ContaHistorico) colecaoConta.iterator().next();
imovel = contaHistorico.getImovel();
/*
* Caso o indicador de gera��o de d�bito de segunda via de conta associado ao perfil do im�vel da conta
* esteja ativo (IPER_ICGERARDEBITOSEGUNDAVIACONTA=1 da tabela IMOVEL_PERFIL com IPER_ID=IPER_ID da tabela CONTA),
* o sistema dever� gerar um d�bito a cobrar referente a taxa de emiss�o da segunda via da conta.
*
* Desenvolvedor Hugo Amorim
* Analista Nelson Carvalho
* Data: 17/05/2010
*/
if(contaHistorico.getImovelPerfil()!=null &&
contaHistorico.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta()!=null &&
cobrarTaxaEmissaoConta){
if(contaHistorico.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta().compareTo(ConstantesSistema.NAO)==0){
cobrarTaxaEmissaoConta = false;
}
}else{
if(imovel.getImovelPerfil()!=null &&
imovel.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta()!=null &&
cobrarTaxaEmissaoConta){
if(imovel.getImovelPerfil().getIndicadorGeraDebitoSegundaViaConta().compareTo(ConstantesSistema.NAO)==0){
cobrarTaxaEmissaoConta = false;
}
}
}
}
/*
* --Erivan Sousa--
* Impede que a segunda via seja emitida caso o indicador cbsp_icemitedoccobranca
* da tabela cobranca.cobranca_situacao_tipo seja igual a 2
*/
if(imovel != null && imovel.getCobrancaSituacaoTipo() != null){
if(imovel.getCobrancaSituacaoTipo().getIndicadorEmitirDocumentoCobranca().equals(ConstantesSistema.NAO)){
throw new ActionServletException("atencao.segundavianaoemitido_imovel_situacaoespecial");
}
}
fachada.verificarClienteSemDocumento(imovel.getId(),
(Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
if(sistemaParametro.getCodigoEmpresaFebraban()
.equals(SistemaParametro.CODIGO_EMPRESA_FEBRABAN_CAER)){
//Parte que vai mandar o relat�rio para a tela
// cria uma inst�ncia da classe do relat�rio
Relatorio2ViaContaTipo2 relatorio2ViaContaTipo2 = new Relatorio2ViaContaTipo2((Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
//relatorio2ViaContaTipo2.addParametro("colecaoEmitirContaHelper",colecaoEmitirContaHelper);
relatorio2ViaContaTipo2.addParametro("idsConta", idsConta);
relatorio2ViaContaTipo2.addParametro("cobrarTaxaEmissaoConta", cobrarTaxaEmissaoConta);
relatorio2ViaContaTipo2.addParametro("contaSemCodigoBarrasPesquisa", contaSemCodigoBarras);
relatorio2ViaContaTipo2.addParametro("idContaHistorico",idContaHistorico);
relatorio2ViaContaTipo2.addParametro("qtdeContas", qtdeContas);
//String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
//if (tipoRelatorio == null) {
String tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
//}
relatorio2ViaContaTipo2.addParametro("tipoFormatoRelatorio", Integer
.parseInt(tipoRelatorio));
relatorio2ViaContaTipo2.addParametro("nomeEmpresa",nomeEmpresa);
try {
retorno = processarExibicaoRelatorio(relatorio2ViaContaTipo2,
tipoRelatorio, httpServletRequest, httpServletResponse,
actionMapping);
} catch (RelatorioVazioException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "atencao.relatorio.vazio");
// seta o mapeamento de retorno para a tela de aten��o de popup
retorno = actionMapping.findForward("telaAtencaoPopup");
}
} else {
Relatorio2ViaConta relatorio2ViaConta = new Relatorio2ViaConta((Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
if("CAERN".equals(nomeEmpresa))
relatorio2ViaConta = new Relatorio2ViaContaCaern((Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
// Parte que vai mandar o relat�rio para a tela
// cria uma inst�ncia da classe do relat�rio
relatorio2ViaConta.addParametro("idsConta", idsConta);
relatorio2ViaConta.addParametro("cobrarTaxaEmissaoConta", cobrarTaxaEmissaoConta);
relatorio2ViaConta.addParametro("contaSemCodigoBarras", contaSemCodigoBarras);
relatorio2ViaConta.addParametro("qtdeContas", qtdeContas);
String tipoRelatorio = TarefaRelatorio.TIPO_PDF +"";
relatorio2ViaConta.addParametro("tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));
relatorio2ViaConta.addParametro("nomeEmpresa",nomeEmpresa);
relatorio2ViaConta.addParametro("idContaHistorico",idContaHistorico);
try {
retorno = processarExibicaoRelatorio(relatorio2ViaConta,
tipoRelatorio, httpServletRequest, httpServletResponse, actionMapping);
} catch (RelatorioVazioException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "atencao.relatorio.vazio");
// seta o mapeamento de retorno para a tela de aten��o de popup
retorno = actionMapping.findForward("telaAtencaoPopup");
}
}
return retorno;
}
}