package gcom.gui.relatorio.cobranca.contratoparcelamento;
import gcom.cadastro.cliente.Cliente;
import gcom.cobranca.DocumentoTipo;
import gcom.cobranca.contratoparcelamento.ContratoParcelamento;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoCliente;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoItem;
import gcom.cobranca.contratoparcelamento.PrestacaoContratoParcelamento;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorCliente;
import gcom.relatorio.cobranca.contratoparcelamento.FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
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;
public class GerarRelatorioEmitirContratoParcelamentoPorClienteAction extends
ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
ContratoParcelamento contratoParcelamento = null;
if (httpServletRequest.getParameter("inserirContrato") != null
&& httpServletRequest.getParameter("inserirContrato").toString().trim().equalsIgnoreCase("sim")
&& httpServletRequest.getParameter("contratoNumero") != null
&& !httpServletRequest.getParameter("contratoNumero").toString().trim().equals("")) {
String numeroContrato = httpServletRequest.getParameter("contratoNumero");
contratoParcelamento = new ContratoParcelamento();
contratoParcelamento.setNumero(numeroContrato);
} else {
contratoParcelamento = (ContratoParcelamento) sessao.getAttribute("contratoManter");
}
//[FS0001] � Verificar exist�ncia de contrato com o n�mero recebido
ContratoParcelamento contratoParcelamentoBase = Fachada.getInstancia()
.pesquisarContratoParcelamento(contratoParcelamento.getNumero());
if (contratoParcelamentoBase == null || contratoParcelamentoBase.getId() == null) {
throw new ActionServletException(
"atencao.contrato_parcelamento_por_cliente.inexistente",
new String[] { contratoParcelamento.getNumero() } );
}
Collection<PrestacaoContratoParcelamento> colecaoParcelas = (Collection<PrestacaoContratoParcelamento>)
sessao.getAttribute("collParcelas");
if (colecaoParcelas == null || colecaoParcelas.isEmpty()) {
colecaoParcelas = fachada.obterDadosPrestacoesContratoParcelamento(contratoParcelamentoBase.getId());
}
Collection<ContratoParcelamentoItem> colecaoContaItens = (Collection<ContratoParcelamentoItem>)
sessao.getAttribute("colecaoContaItens");
if (colecaoContaItens == null || colecaoContaItens.isEmpty()) {
colecaoContaItens = fachada.pesquisarContratoParcelamentoItem(
contratoParcelamentoBase.getId(), DocumentoTipo.CONTA);
}
Collection<ContratoParcelamentoItem> colecaoItensDebitoACobrar = (Collection<ContratoParcelamentoItem>)
sessao.getAttribute("colecaoItensDebitoACobrar");
if (colecaoItensDebitoACobrar == null || colecaoItensDebitoACobrar.isEmpty()) {
colecaoItensDebitoACobrar = fachada.pesquisarContratoParcelamentoItem(
contratoParcelamentoBase.getId(), DocumentoTipo.DEBITO_A_COBRAR);
}
Cliente cliente = null;
if (sessao.getAttribute("clienteContrato") != null
&& !sessao.getAttribute("clienteContrato").equals("")) {
cliente = (Cliente) sessao.getAttribute("clienteContrato");
} else {
ContratoParcelamentoCliente contratoParcelamentoCliente = fachada.pesquisarClienteContrato(
contratoParcelamentoBase.getId());
cliente = contratoParcelamentoCliente.getCliente();
}
FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper helper = this.criarHelper(contratoParcelamentoBase,
cliente, colecaoParcelas, colecaoContaItens, colecaoItensDebitoACobrar);
// Parte que vai mandar o relat�rio para a tela
// cria uma inst�ncia da classe do relat�rio
RelatorioEmitirContratoParcelamentoPorCliente relatorioEmitirContratoParcelamentoPorCliente = new RelatorioEmitirContratoParcelamentoPorCliente(
(Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
//Adiciona filtro escolhido pelo usuario ao relatorio
relatorioEmitirContratoParcelamentoPorCliente.addParametro("filtrarRelatorioEmitirContratoParcelamentoPorClienteHelper", helper);
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorioEmitirContratoParcelamentoPorCliente.addParametro("tipoFormatoRelatorio", Integer
.parseInt(tipoRelatorio));
try {
retorno = processarExibicaoRelatorio(relatorioEmitirContratoParcelamentoPorCliente,
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;
}
/**
* Recupera os dados usados no formul�rio que chamou o relat�rio
* */
private FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper criarHelper(
ContratoParcelamento contratoParcelamento, Cliente cliente,
Collection<PrestacaoContratoParcelamento> colecaoParcelas,
Collection<ContratoParcelamentoItem> colecaoContaItens, Collection<ContratoParcelamentoItem> colecaoItensDebitoACobrar) {
FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper retorno = new FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper();
if (contratoParcelamento != null) {
retorno.setContratoParcelamento(
contratoParcelamento);
}
if (contratoParcelamento.getUsuarioResponsavel() != null
&& contratoParcelamento.getUsuarioResponsavel().getId() != null
&& contratoParcelamento.getUsuarioResponsavel().getNomeUsuario() != null
&& !contratoParcelamento.getUsuarioResponsavel().getNomeUsuario().equals("")) {
retorno.setUsuarioResponsavel(contratoParcelamento.getUsuarioResponsavel().getLogin()
+ " - " + contratoParcelamento.getUsuarioResponsavel().getNomeUsuario());
}
if (cliente != null) {
retorno.setCliente(cliente);
}
if (colecaoParcelas != null && !colecaoParcelas.isEmpty()) {
retorno.setColecaoParcelas(colecaoParcelas);
}
if (colecaoContaItens != null && !colecaoContaItens.isEmpty()) {
retorno.setColecaoContaItens(colecaoContaItens);
}
if (colecaoItensDebitoACobrar != null && !colecaoItensDebitoACobrar.isEmpty()) {
retorno.setColecaoItensDebitoACobrar(colecaoItensDebitoACobrar);
}
return retorno;
}
}