package gcom.gui.faturamento.conta;
import gcom.arrecadacao.pagamento.FiltroPagamento;
import gcom.arrecadacao.pagamento.Pagamento;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.conta.ContaMotivoCancelamento;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
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 CancelarContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirCancelarConta");
HttpSession sessao = httpServletRequest.getSession(false);
//Inst�ncia do formul�rio que est� sendo utilizado
CancelarContaActionForm cancelarContaActionForm = (CancelarContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
//Contas selecionadas pelo usu�rio
String identificadoresConta = cancelarContaActionForm.getContaSelected();
String[] arrayIdentificadores = identificadoresConta.split(",");
//Controlamos o cancelamento de contas pagas
Object[] arrayValidaContasCanceladasPagas = validarContasCanceladasPagasRA(
arrayIdentificadores,
httpServletRequest,
actionMapping );
if ( ( Boolean ) arrayValidaContasCanceladasPagas[2] ){
return ( ActionForward ) arrayValidaContasCanceladasPagas[0];
}
Boolean confirmadoCancelamentoContasPagas = ( Boolean )arrayValidaContasCanceladasPagas[1];
if ( confirmadoCancelamentoContasPagas != null && !confirmadoCancelamentoContasPagas ){
return retorno;
}
if ( confirmadoCancelamentoContasPagas == null ){
confirmadoCancelamentoContasPagas = new Boolean( Boolean.FALSE );
}
int flag = 0;
for (int i = 0; i < arrayIdentificadores.length; i++) {
// Carregando a conta que est� na base
String dadosConta = arrayIdentificadores[i];
String[] idUltimaAlteracao = dadosConta.split("-");
Calendar data = new GregorianCalendar();
data.setTimeInMillis(new Long(idUltimaAlteracao[1].trim())
.longValue());
data.set(Calendar.MILLISECOND, 0);
Object dataUltimaAlteracaoConta = fachada.pesquisarDataUltimaAlteracaoConta(new Integer(idUltimaAlteracao[0]));
Calendar calendarDataUltimaAlteracaoNaBase = Calendar.getInstance();
calendarDataUltimaAlteracaoNaBase.setTime((Date)dataUltimaAlteracaoConta);
calendarDataUltimaAlteracaoNaBase.set(Calendar.MILLISECOND, 0);
if (calendarDataUltimaAlteracaoNaBase.compareTo(data) > 0 ) {
httpServletRequest.setAttribute("reloadPage", "OK");
flag = 1;
sessao.setAttribute("erroConcorrencia","erroConcorrencia");
}
}
//MotivoCancelamentoConta selecinado pelo usu�rio
ContaMotivoCancelamento contaMotivoCancelamento = new ContaMotivoCancelamento();
contaMotivoCancelamento.setId(new Integer(cancelarContaActionForm.getMotivoCancelamentoContaID()));
if (sessao.getAttribute("colecaoContaImovel") != null && (identificadoresConta != null &&
!identificadoresConta.equalsIgnoreCase("")) && flag == 0){
Collection<Conta> colecaoContaImovel = (Collection) sessao.getAttribute("colecaoContaImovel");
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
//Cancelando uma ou v�rias contas
fachada.cancelarConta(colecaoContaImovel, identificadoresConta, contaMotivoCancelamento,
usuarioLogado, confirmadoCancelamentoContasPagas );
//Realizar um reload na tela de manter conta
httpServletRequest.setAttribute("reloadPage", "OK");
}
sessao.setAttribute("cancelar", "1");
return retorno;
}
/**
*
* [UC0146ManterConta] - Manter Conta
*
* Metodo verifica se existe contas j� pagas nas contas que ser�o canceladas.
* Em caso afirmativo, apresenta todos os meses de referencia das contas
* para informar ao usu�rio.
*
* @author bruno
* @date 06/05/2009
*
* @param String[]: Vetor com todos os id's das contas
* @param request: Onde se ser�o informados os parametros para gera��o da p�gina
* @param actionMapping: Necess�rio para gera��o da p�gina
*
* @return Object[3]
*
* Object[0]: ActionFoward com a tela a ser mostrada
* Object[1]: Se o usu�rio confimou ou n�o a inser��o do novo ra
* Object[2]: Se ser� redirecionado ao usu�rio perguntando se as
* contas ter�o os cnta_id removidos dos pagamentos.
*/
private Object[] validarContasCanceladasPagasRA(
String[] idsContas,
HttpServletRequest request,
ActionMapping actionMapping ){
Object[] retorno = new Object[3];
// Verificamos se ja foi confimado...
retorno[1] =
( request.getParameter("confirmado") != null ?
request.getParameter("confirmado").equals("ok") :
null );
retorno[2] = new Boolean( Boolean.FALSE );
if ( retorno[1] == null ){
Fachada fachada = Fachada.getInstancia();
Collection<String> colContasPagas = new ArrayList();
for ( int i=0; i<idsContas.length; i++ ){
String dadosConta = idsContas[i];
String id = dadosConta.split("-")[0];
FiltroPagamento filtro =
new FiltroPagamento();
filtro.adicionarParametro( new ParametroSimples(
FiltroPagamento.CONTA_ID,
Integer.valueOf(id) ) );
Collection<Pagamento> colPagamento =
fachada.pesquisar(
filtro,
Pagamento.class.getName() );
Pagamento pagamento = ( Pagamento )Util.retonarObjetoDeColecao( colPagamento );
if ( pagamento != null ){
if ( colContasPagas.size() == 0 ){
colContasPagas.add( Util.formatarAnoMesParaMesAno( pagamento.getAnoMesReferenciaPagamento() ) );
} else {
colContasPagas.add( ", " + Util.formatarAnoMesParaMesAno( pagamento.getAnoMesReferenciaPagamento() ) );
}
}
}
if ( colContasPagas.size() > 0 ){
String[] arrayIdsContas = new String[ colContasPagas.size() ];
System.arraycopy( colContasPagas.toArray(), 0, arrayIdsContas, 0, arrayIdsContas.length );
request.setAttribute("caminhoActionConclusao",
"/gsan/cancelarContaAction.do");
request.setAttribute("cancelamento", "TRUE");
request.setAttribute("nomeBotao1", "Sim");
request.setAttribute("nomeBotao2", "N�o");
retorno[0] = montarPaginaConfirmacao(
"atencao.contas_cancelamento_pagas",
request,
actionMapping,
arrayIdsContas );
retorno[2] = new Boolean( Boolean.TRUE );
}
return retorno;
}
retorno[0] = actionMapping.findForward("telaSucesso");
return retorno;
}
}