package gcom.gui.faturamento;
import gcom.fachada.Fachada;
import gcom.faturamento.FaturamentoAtividadeCronograma;
import gcom.faturamento.FaturamentoGrupo;
import gcom.faturamento.FaturamentoGrupoCronogramaMensal;
import gcom.faturamento.FiltroFaturamentoGrupo;
import gcom.faturamento.FiltroFaturamentoGrupoCronogramaMensal;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
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;
/**
* @author Fl�vio Cordeiro
*/
public class InserirFaturamentoCronogramaAction extends GcomAction {
/**
* Este Action cuida da montagem de objetos baseados nos dados fornecidos
* pelo usuario faz alguma valida��es e envia os objetos(FaturamentoGrupoCronogramaMensal, FaturamentoAtividadeCronogra)
* para inser��o, onde ser� feito a valida��o, parte de negocio, e inserido o objeto.
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("telaSucesso");
FaturamentoActionForm faturamentoActionForm = (FaturamentoActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute(Usuario.USUARIO_LOGADO);
String idGrupo = faturamentoActionForm.getIdGrupoFaturamento();
String mesAno = faturamentoActionForm.getMesAno();
Collection faturamentoAtividades = (Collection) sessao.getAttribute("faturamentoAtividades");
Collection faturamentoAtividadeCronogramas = new ArrayList();
Collection colecaoTestePredecessoraVazia = new ArrayList();
Iterator iterateFaturamentoAtividades = faturamentoAtividades.iterator();
FaturamentoAtividadeCronograma faturamentoAtividadeCronograma = null;
// Instancia objeto FaturamenatoGrupo
FaturamentoGrupo faturamentoGrupo = new FaturamentoGrupo();
faturamentoGrupo.setId(new Integer(idGrupo));
while (iterateFaturamentoAtividades.hasNext()) {
faturamentoAtividadeCronograma = new FaturamentoAtividadeCronograma();
FaturamentoCronogramaAtividadeHelp help = (FaturamentoCronogramaAtividadeHelp) iterateFaturamentoAtividades.next();
faturamentoAtividadeCronograma.setFaturamentoAtividade(help.getFaturamentoAtividade());
String dataPrevista = (String) httpServletRequest.getParameter("n" + faturamentoAtividadeCronograma.getFaturamentoAtividade().getId().toString());
SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
try {
if (!dataPrevista.trim().equalsIgnoreCase("")) {
faturamentoAtividadeCronograma.setDataPrevista(data.parse(dataPrevista));
faturamentoAtividadeCronogramas.add(faturamentoAtividadeCronograma);
colecaoTestePredecessoraVazia.add(faturamentoAtividadeCronograma);
} else if (faturamentoAtividadeCronograma.getFaturamentoAtividade().getIndicadorObrigatoriedadeAtividade().intValue() == 1
&& dataPrevista.trim().equalsIgnoreCase("")) {
throw new ActionServletException("atencao.campos_obrigatorios_cronograma_nao_preenchidos");
} else if (faturamentoAtividadeCronograma.getFaturamentoAtividade().getIndicadorObrigatoriedadeAtividade().intValue() == 1) {
colecaoTestePredecessoraVazia.add(faturamentoAtividadeCronograma);
} else if (faturamentoAtividadeCronograma.getFaturamentoAtividade().getIndicadorObrigatoriedadeAtividade().intValue() == ConstantesSistema.INDICADOR_USO_DESATIVO
&& dataPrevista.trim().equalsIgnoreCase("")) {
colecaoTestePredecessoraVazia.add(faturamentoAtividadeCronograma);
iterateFaturamentoAtividades.remove();
}
// se foi marcado o check de comandar a atividade
// sera atribuido o valor de comando
// este valor ser� igual ao da data prevista
String idsAtividadesComandadas = httpServletRequest.getParameter("idsAtividadesComandadas");
if (idsAtividadesComandadas != null && !idsAtividadesComandadas.equals("")) {
for (int i = 0; i < idsAtividadesComandadas.length(); i++) {
String idAtivividade = idsAtividadesComandadas.substring(idsAtividadesComandadas.indexOf("c"), idsAtividadesComandadas.indexOf("-") + 1);
String idAtividadeAux = idAtivividade.replace("c", "").replace("-", "");
if (Util.validarStringNumerica(idAtividadeAux)) {
if (new Integer(idAtividadeAux).intValue() == faturamentoAtividadeCronograma.getFaturamentoAtividade().getId().intValue()) {
if (dataPrevista != null && !dataPrevista.trim().equals("")) {
faturamentoAtividadeCronograma.setComando(data.parse(dataPrevista));
}
}
}
idsAtividadesComandadas = idsAtividadesComandadas.replace(idAtivividade, "");
}
}
} catch (ParseException ex) {
throw new ActionServletException("atencao.cobranca.data_prevista_mes_ano_menor_sem_parametros");
}
}
// Instancia objeto FaturamentoGrupoCronogramaMensal
FaturamentoGrupoCronogramaMensal faturamentoGrupoCronogramaMensal = new FaturamentoGrupoCronogramaMensal();
// Seta o objeto FaturamentoGrupo no objeto
// FaturamentoGrupoCronogramaMensal
faturamentoGrupoCronogramaMensal.setFaturamentoGrupo(faturamentoGrupo);
// Concatena ano mes para insercao
String mes = mesAno.substring(0, 2);
String ano = mesAno.substring(3, 7);
mesAno = ano + "" + mes;
// Seta o mes ano no objeto FaturamentoGrupoCronogramaMensal
faturamentoGrupoCronogramaMensal.setAnoMesReferencia(new Integer(mesAno));
// validar as datas e seguencias do crongrama
fachada.validarFaturamentoCronogramaAtividadeMaiorQueMesAnoCronograma((new Integer(mesAno)).intValue(), colecaoTestePredecessoraVazia);
fachada.validarFaturamentoCronograma(colecaoTestePredecessoraVazia);
fachada.inserirFaturamentoGrupoCronogramaMensal(faturamentoGrupoCronogramaMensal, faturamentoAtividadeCronogramas, usuarioLogado, new Integer(mesAno));
// pega o grupo de faturamento para mostrar a descricao na tela de
// sucesso
FiltroFaturamentoGrupo filtroFaturamentoGrupo = new FiltroFaturamentoGrupo();
filtroFaturamentoGrupo.adicionarParametro(new ParametroSimples(FiltroFaturamentoGrupo.ID, faturamentoGrupo.getId()));
Collection colecaoFaturamentoGrupo = fachada.pesquisar(filtroFaturamentoGrupo, FaturamentoGrupo.class.getName());
FaturamentoGrupo faturamentoGrupoDescricao = new FaturamentoGrupo();
// pega o id do faturamento grupo cronograma mensal para o caso de
// chamar direto o atualizar
FiltroFaturamentoGrupoCronogramaMensal filtroFaturamentoGrupoCronogramaMensal = new FiltroFaturamentoGrupoCronogramaMensal();
filtroFaturamentoGrupoCronogramaMensal.adicionarParametro(
new ParametroSimples(FiltroFaturamentoGrupoCronogramaMensal.ANO_MES_REFERENCIA, mesAno));
filtroFaturamentoGrupoCronogramaMensal.adicionarParametro(new ParametroSimples(
FiltroFaturamentoGrupoCronogramaMensal.FATURAMENTO_GRUPO, faturamentoGrupo.getId()));
filtroFaturamentoGrupoCronogramaMensal.adicionarCaminhoParaCarregamentoEntidade("faturamentoGrupo");
Collection colecaoFaturamentoGrupoCronogramaMensal = fachada.pesquisar(filtroFaturamentoGrupoCronogramaMensal,
FaturamentoGrupoCronogramaMensal.class.getName());
FaturamentoGrupoCronogramaMensal faturamentoGrupoCronogramaMensalComId = (FaturamentoGrupoCronogramaMensal) Util
.retonarObjetoDeColecao(colecaoFaturamentoGrupoCronogramaMensal);
if (!colecaoFaturamentoGrupo.isEmpty()) {
faturamentoGrupoDescricao = (FaturamentoGrupo) colecaoFaturamentoGrupo.iterator().next();
}
montarPaginaSucesso(httpServletRequest,
"Cronograma de Faturamento do grupo " + faturamentoGrupoDescricao.getId() + " referente ao m�s/ano: "
+ faturamentoGrupoCronogramaMensal.getMesAno() + " inserido com sucesso.",
"Inserir outro Cronograma de Faturamento.", "exibirInserirFaturamentoCronogramaAction.do?menu=sim",
"exibirAtualizarFaturamentoCronogramaAction.do?idRegistroAtualizacao="
+ faturamentoGrupoCronogramaMensalComId.getId(),
"Atualizar Cronograma de Faturamento Inserido");
sessao.removeAttribute("faturamentoAtividades");
sessao.setAttribute("voltar", "filtrar");
return retorno;
}
}