package gcom.gui.cobranca;
import gcom.batch.FiltroProcesso;
import gcom.batch.Processo;
import gcom.cobranca.CobrancaAcao;
import gcom.cobranca.CobrancaAtividade;
import gcom.cobranca.FiltroCobrancaAcao;
import gcom.cobranca.FiltroCobrancaAtividade;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.filtro.ParametroSimples;
import gcom.util.filtro.ParametroSimplesDiferenteDe;
import java.util.Collection;
import java.util.Date;
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;
/**
* < <Descri��o da Classe>>
*
* @author Tiago Moreno, Mariana Victor
*/
public class AtualizarAtividadeCobrancaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("telaSucesso");
AtualizarAtividadeCobrancaActionForm atualizarAtividadeCobrancaActionForm = (AtualizarAtividadeCobrancaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
// Recuperando os dados do formul�rio
String id = (String) sessao.getAttribute("idAtividadeCobranca");
String descricaoAtividadeCobranca = atualizarAtividadeCobrancaActionForm
.getDescricaoAtividadeCobranca();
String atividadePredecessora = atualizarAtividadeCobrancaActionForm
.getIdAtividadePredecessora();
String ordemCronograma = atualizarAtividadeCobrancaActionForm
.getOrdemCronograma();
String processoAssociado = atualizarAtividadeCobrancaActionForm
.getIdProcessoAssociado();
String opcaoCompoeCronograma = atualizarAtividadeCobrancaActionForm
.getOpcaoCompoeCronograda();
String opcaoAtividadeObrigatoria = atualizarAtividadeCobrancaActionForm
.getOpcaoAtividadeObrigatoria();
String opcaoComandada = atualizarAtividadeCobrancaActionForm
.getOpcaoPodeSerComandada();
String opcaoExecutada = atualizarAtividadeCobrancaActionForm
.getOpcaoPodeSerExecutada();
Date ultimaAlteracaoAtividade = atualizarAtividadeCobrancaActionForm
.getUltimaAlteracao();
String diasExecucao = atualizarAtividadeCobrancaActionForm
.getQuantidadeDiasExecucao();
String cobrancaAcao = atualizarAtividadeCobrancaActionForm
.getCobrancaAcao();
FiltroCobrancaAtividade filtroCobrancaAtividade = new FiltroCobrancaAtividade();
// FS0002 - Numero de ordem j� utilizado
filtroCobrancaAtividade
.adicionarParametro(new ParametroSimplesDiferenteDe(
FiltroCobrancaAtividade.ID, id));
filtroCobrancaAtividade.adicionarParametro(new ParametroSimples(
FiltroCobrancaAtividade.ORDEM_REALIZACAO, ordemCronograma));
Collection colecaoCobrancaAtividade = fachada.pesquisar(
filtroCobrancaAtividade, CobrancaAtividade.class.getName());
if (colecaoCobrancaAtividade != null
&& !colecaoCobrancaAtividade.isEmpty()) {
throw new ActionServletException("atencao.numero_ordem_informado");
}
// FS0002 - Fim do Bloco
filtroCobrancaAtividade.limparListaParametros();
CobrancaAtividade cobrancaAtividadePredecessora = new CobrancaAtividade();
// FS0003 - Numero de ordem menor que o da predecessora
if (atividadePredecessora != null
&& !atividadePredecessora.equalsIgnoreCase("")) {
filtroCobrancaAtividade.adicionarParametro(new ParametroSimples(
FiltroCobrancaAtividade.ID, atividadePredecessora));
cobrancaAtividadePredecessora = (CobrancaAtividade) fachada
.pesquisar(filtroCobrancaAtividade,
CobrancaAtividade.class.getName()).iterator()
.next();
int ordemRealizacao = new Integer(ordemCronograma);
int ordemPredecessora = cobrancaAtividadePredecessora
.getOrdemRealizacao();
if (ordemRealizacao < ordemPredecessora) {
throw new ActionServletException(
"atencao.predecessota_menor_atual");
}
}
// FS0003 - Fim do Bloco
// FS0005 - Atividade Obrigat�ria deve compor Cronograma
if (opcaoCompoeCronograma.equals(ConstantesSistema.NAO.toString())) {
if (opcaoAtividadeObrigatoria.equals(ConstantesSistema.SIM
.toString())) {
throw new ActionServletException(
"atencao.atividade_obrigatoria_compoe_cronograma");
}
}
// FS0005 - Fim do Bloco
// FS0006 - Atividade Obrigat�ria deve compor Cronograma
if (atividadePredecessora != null) {
if (id != null && id.equals(atividadePredecessora)) {
throw new ActionServletException(
"atencao.atividade_predecessora_nao_igual_atividade");
}
}
// FS0006 - Fim do Bloco
// Montando o Objeto a ser Inserido
CobrancaAtividade cobrancaAtividade = new CobrancaAtividade();
FiltroCobrancaAtividade filtroCobrancaAtividadeNoBanco = new FiltroCobrancaAtividade();
filtroCobrancaAtividadeNoBanco.adicionarParametro(new ParametroSimples(
FiltroCobrancaAtividade.ID, id));
filtroCobrancaAtividadeNoBanco
.adicionarCaminhoParaCarregamentoEntidade("processo");
cobrancaAtividade = (CobrancaAtividade) fachada.pesquisar(
filtroCobrancaAtividadeNoBanco,
CobrancaAtividade.class.getName()).iterator().next();
if (descricaoAtividadeCobranca != null
&& !descricaoAtividadeCobranca.equalsIgnoreCase("")) {
cobrancaAtividade
.setDescricaoCobrancaAtividade(descricaoAtividadeCobranca);
}
if (atividadePredecessora != null
&& !atividadePredecessora.equalsIgnoreCase("")) {
cobrancaAtividade
.setCobrancaAtividadePredecessora(cobrancaAtividadePredecessora);
}
if (ordemCronograma != null && !ordemCronograma.equalsIgnoreCase("")) {
cobrancaAtividade.setOrdemRealizacao(new Short(ordemCronograma));
}
if (processoAssociado != null
&& !processoAssociado.equalsIgnoreCase("")) {
FiltroProcesso filtroProcesso = new FiltroProcesso();
filtroProcesso.adicionarParametro(new ParametroSimples(
FiltroProcesso.ID, processoAssociado));
Collection processoNaBase = fachada.pesquisar(filtroProcesso,
Processo.class.getName());
if (processoNaBase != null && !processoNaBase.isEmpty()) {
Processo processo = new Processo();
processo.setId(new Integer(processoAssociado));
cobrancaAtividade.setProcesso(processo);
}
}
if (opcaoCompoeCronograma != null
&& !opcaoCompoeCronograma.equalsIgnoreCase("")) {
cobrancaAtividade.setIndicadorCronograma(new Short(
opcaoCompoeCronograma));
}
if (opcaoAtividadeObrigatoria != null
&& !opcaoAtividadeObrigatoria.equalsIgnoreCase("")) {
cobrancaAtividade.setIndicadorObrigatoriedade(new Short(
opcaoAtividadeObrigatoria));
}
if (opcaoComandada != null && !opcaoComandada.equalsIgnoreCase("")) {
cobrancaAtividade.setIndicadorComando(new Short(opcaoComandada));
}
if (opcaoExecutada != null && !opcaoExecutada.equalsIgnoreCase("")) {
cobrancaAtividade.setIndicadorExecucao(new Short(opcaoExecutada));
}
if (diasExecucao != null && !diasExecucao.equalsIgnoreCase("")) {
cobrancaAtividade.setNumeroDiasExecucao(new Integer(diasExecucao));
}
if (cobrancaAcao != null && !cobrancaAcao.equalsIgnoreCase("")){
FiltroCobrancaAcao filtroCobrancaAcao = new FiltroCobrancaAcao();
filtroCobrancaAcao.adicionarParametro(new ParametroSimples(FiltroCobrancaAcao.ID, cobrancaAcao));
Collection colecaoCobrancaAcao = fachada.pesquisar(filtroCobrancaAcao, CobrancaAcao.class.getName());
if (colecaoCobrancaAcao != null && !colecaoCobrancaAcao.isEmpty()) {
CobrancaAcao acaoCobranca = new CobrancaAcao();
acaoCobranca.setId(new Integer(cobrancaAcao));
cobrancaAtividade.setCobrancaAcao(acaoCobranca);
}
}
cobrancaAtividade.setIndicadorUso(new Short("1"));
// Verificar se o cobran�a atividade j� foi atualizado por outro usu�rio
// durante
// esta atualiza��o
if (cobrancaAtividade == null
|| cobrancaAtividade.getUltimaAlteracao().after(
ultimaAlteracaoAtividade)) {
throw new ActionServletException(
"atencao.atualizacao.timestamp");
}
cobrancaAtividade.setUltimaAlteracao(new Date());
// FS0007 - Inserindo na base
fachada.atualizar(cobrancaAtividade);
montarPaginaSucesso(httpServletRequest, "Atividade de Cobranca " + id
+ " atualizada com sucesso.",
"Atualizar outra Atividade de Cobranca",
"exibirManterAtividadeCobrancaAction.do?menu=sim");
return retorno;
}
}