//// Obter configura��o de grupo de meta f�sica
ConfiguracaoCfg cfg = configuracaoDao.getConfiguracao();
ArrayList<SisAtributoSatb> listAtribMetasFisicasCfg = new ArrayList<SisAtributoSatb>();
TipoAcompanhamentoTa ta = (TipoAcompanhamentoTa) tipoAcompanhamentoDao.buscar(TipoAcompanhamentoTa.class, acompanhamento.getTipoAcompanhamentoTa().getCodTa());
if(cfg.getSisGrupoAtributoSgaByCodSgaGrAtrMetasFisicas() != null) {
ArrayList listSatb = new ArrayList(ta.getSisAtributoSatbs());
if( listSatb != null ) {
for (Iterator itSatbs = listSatb.iterator(); itSatbs.hasNext();) {
SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) itSatbs.next();
if( sisAtributoSatb.getSisGrupoAtributoSga().equals(cfg.getSisGrupoAtributoSgaByCodSgaGrAtrMetasFisicas()) ) {
listAtribMetasFisicasCfg.add(sisAtributoSatb);
}
}
}
}
////
/*
* itensSelecionados em Tela ser�o os checkboxes marcados em selecaoItem.jsp
*/
List<ItemEstruturaIett> itensSelecionadosEmTela = new ArrayList<ItemEstruturaIett>();
String[] itemSelecao = request.getParameterValues("iett");
if(itemSelecao != null){
for(int i = 0; i < itemSelecao.length; i++){
ItemEstruturaIett item = (ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(itemSelecao[i]));
// se for separado por orgao e o item selecionado tiver o mesmo orgao da referencia OU
if((acompanhamento.getTipoAcompanhamentoTa().getIndSepararOrgaoTa() != null &&
acompanhamento.getTipoAcompanhamentoTa().getIndSepararOrgaoTa().equals(Dominios.SIM) &&
(item.getOrgaoOrgByCodOrgaoResponsavel1Iett() == null && acompanhamento.getOrgaoOrg() == null) ||
(item.getOrgaoOrgByCodOrgaoResponsavel1Iett() != null && acompanhamento.getOrgaoOrg() != null &&
item.getOrgaoOrgByCodOrgaoResponsavel1Iett().getCodOrg().equals(acompanhamento.getOrgaoOrg().getCodOrg()))) ||
//se nao for separado por orgao OU
(acompanhamento.getTipoAcompanhamentoTa().getIndSepararOrgaoTa() == null || acompanhamento.getTipoAcompanhamentoTa().getIndSepararOrgaoTa().equals(Dominios.NAO)) ||
//se for altera��o, mesmo que n�o seja do mesmo �rg�o e estiver marcado vai continuar sendo acompanhado.
(acompanhamento.getCodAref() != null)) {
itensSelecionadosEmTela.add(item);
}
}
}
List listaCompletaItens = adicionaDescendentesQuantidadePrevista(itensSelecionadosEmTela, acompanhamento);
for (Iterator itAref = listAcompReferenciaAref.iterator(); itAref.hasNext();) {
acompanhamento = (AcompReferenciaAref) itAref.next();
/*
* Cria uma vari�vel acompAuxiliar para receber o objeto acompanhamento com os dados que estavam ne session do
* servidor e foram setados a partir de dados do Formul�rio.
* Faz buscar do acompanhamento que esta sendo alterado e seta as valores que estavam em acompAuxiliar para
* acompanhamento
*/
if(acompanhamento.getCodAref() != null && acompanhamento.getCodAref().longValue() > 0){
AcompReferenciaAref acompAuxiliar = acompanhamento;
acompanhamento = (AcompReferenciaAref) this.buscar(AcompReferenciaAref.class, acompAuxiliar.getCodAref());
acompanhamento.setDataInicioAref(acompAuxiliar.getDataInicioAref());
acompanhamento.setDataLimiteAcompFisicoAref(acompAuxiliar.getDataLimiteAcompFisicoAref());
acompanhamento.setNomeAref(acompAuxiliar.getNomeAref());
acompanhamento.setAcompRefLimitesArls(acompAuxiliar.getAcompRefLimitesArls());
session.update(acompanhamento);
}
else {
session.save(acompanhamento);
}
objetos.add(acompanhamento);
/* lista com os itens monitorados pelo acompanhamento (no caso de inclus�o de acompanhamento essa ser� um lista
* vazia
*/
List itensMonitoradosBancoDeDados = getListaItensAcompanhamento(acompanhamento);
Collection objetosParaSalvar = Util.diferenca(listaCompletaItens, itensMonitoradosBancoDeDados);
Collection objetosParaAlterar = Util.intersecao(listaCompletaItens, itensMonitoradosBancoDeDados);
Collection objetosParaExcluir = Util.diferenca(itensMonitoradosBancoDeDados, listaCompletaItens);
/*
* Itera e salva ( ou altera ) os limites do acompanhamento
*/
for (Iterator itLimites = acompanhamento.getAcompRefLimitesArls().iterator(); itLimites
.hasNext();) {
AcompRefLimitesArl acompLimites = (AcompRefLimitesArl) itLimites.next();
if(acompLimites.getComp_id() != null){
session.update(acompLimites);
} else{
AcompRefLimitesArlPK pk = new AcompRefLimitesArlPK();
pk.setCodAref(acompLimites.getAcompReferenciaAref().getCodAref());
pk.setCodTpfa(acompLimites.getTipoFuncAcompTpfa().getCodTpfa());
acompLimites.setComp_id(pk);
session.save(acompLimites);
}
objetos.add(acompLimites);
}
/*cria os novos acompanhamento de item */
for (Iterator itObjetosIncluidos = objetosParaSalvar.iterator(); itObjetosIncluidos
.hasNext();) {
ItemEstruturaIett iett = (ItemEstruturaIett) itObjetosIncluidos.next();
AcompReferenciaItemAri acompReferenciaItem = criaNovoAcompReferenciaItemAri(acompanhamento, iett, request, itensSelecionadosEmTela, usuario);
session.save(acompReferenciaItem);
objetos.add(acompReferenciaItem);
for (Iterator itAcompReferenciaItemLimites = acompReferenciaItem.getAcompRefItemLimitesArlis().iterator(); itAcompReferenciaItemLimites
.hasNext();) {
AcompRefItemLimitesArli limite = (AcompRefItemLimitesArli) itAcompReferenciaItemLimites.next();
setPKAcompReferenciaItemLimite(limite);
session.save(limite);
objetos.add(limite);
}
/* salva os realizados fisicos conforme regra*/
if(iett.getItemEstrtIndResulIettrs() != null && !iett.getItemEstrtIndResulIettrs().isEmpty()){
boolean gravaARF = false;
if(listNiveis != null && listNiveis.size() > 0) {
if(iett.getItemEstruturaNivelIettns() != null && iett.getItemEstruturaNivelIettns().size() > 0) {
Iterator itNiveis = iett.getItemEstruturaNivelIettns().iterator();
while(itNiveis.hasNext() && !gravaARF) {
SisAtributoSatb nivel = (SisAtributoSatb) itNiveis.next();
if(listNiveis.contains(nivel)) {
gravaARF = true;
}
}
}
} else {
gravaARF = true;
}
if(gravaARF) {
for (Iterator itIettir = iett.getItemEstrtIndResulIettrs().iterator(); itIettir
.hasNext();) {
ItemEstrtIndResulIettr iettir = (ItemEstrtIndResulIettr) itIettir.next();
//Mantis-POA: caso 0010021
//Testar se indicador (iettir) est� exclu�do antes de criar ARF para ele.
//Se indicador est� exclu�do, n�o cria ARF
if("N".equals(iettir.getIndAtivoIettr())){
continue;
}
//verificacao de grupo de meta f�sica
if(!listAtribMetasFisicasCfg.isEmpty()) {
if(iettir.getSisAtributoSatb() == null || !listAtribMetasFisicasCfg.contains(iettir.getSisAtributoSatb())) {
// n�o gravar ARF para o indicador, se o indicador n�o tiver a meta f�sica configurada no tipo de acomp.
continue;
}
}
////
// verificar a exist�ncia do ARF
AcompRealFisicoArf arf = arfDao.buscarPorIettir(
Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getMesAref()),
Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getAnoAref()),
iettir.getCodIettir());
if(arf == null) {
long mes = Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getMesAref()).longValue();
long ano = Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getAnoAref()).longValue();
AcompRealFisicoArf arfAnterior = arfDao.getArfAnterior(iettir, mes, ano);
if(arfAnterior != null){
if(arfAnterior.getSituacaoSit() != null && "S".equals(arfAnterior.getSituacaoSit().getIndConcluidoSit())){
//Se o ARF anterior representa conclus�o, n�o gero ARF deste indicador para o acompanhamento.
continue;
}
}
arf = new AcompRealFisicoArf();
arf.setItemEstrtIndResulIettr(iettir);
arf.setDataInclusaoArf(Data.getDataAtual());
arf.setItemEstruturaIett(iett);
arf.setMesArf(Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getMesAref()));
arf.setAnoArf(Long.valueOf(acompReferenciaItem.getAcompReferenciaAref().getAnoAref()));
session.save(arf);
objetos.add(arf);
}
}
}
}
/* salva os relat�rios (se existirem) */
if(acompReferenciaItem.getAcompRelatorioArels() != null){
for (Iterator itAcompRel = acompReferenciaItem.getAcompRelatorioArels().iterator(); itAcompRel
.hasNext();) {
AcompRelatorioArel acompRel = (AcompRelatorioArel) itAcompRel.next();
session.save(acompRel);
objetos.add(acompRel);
}
}
}
for (Iterator itObjetosDeletados = objetosParaExcluir.iterator(); itObjetosDeletados
.hasNext();) {
ItemEstruturaIett itemRemoverMonitoramento = (ItemEstruturaIett) itObjetosDeletados.next();
AcompReferenciaItemAri acompReferenciaItemAExcluir = this.getAcompReferenciaItemByItemEstruturaIett(acompanhamento, itemRemoverMonitoramento);
List filhos = new ArrayList();
/* excluir os realizados f�sico e Relatorios do acompanhamento */
filhos.addAll(acompReferenciaItemAExcluir.getAcompRelatorioArels());
if (acompReferenciaItemAExcluir.getItemEstrUplCategIettuc() != null && acompReferenciaItemAExcluir.getItemEstrUplCategIettuc().size() > 0){
List<ItemEstrUplCategIettuc> categoriasUpload = new ArrayList<ItemEstrUplCategIettuc>(acompReferenciaItemAExcluir.getItemEstrUplCategIettuc());
List historicosCategoriaExcluir = new HistoricoItemEstrutUploadDao(request).getHistoricoPorCategoriaUpload(categoriasUpload);
//Adiciona o hist�rico de upload aos objetos a serem exclu�dos
filhos.addAll(historicosCategoriaExcluir);
}
// verificar o ARF correspondente ao ARI que podem ser exclu�do
StringBuilder query = new StringBuilder("select ARI from AcompReferenciaItemAri as ARI")
.append(" where ARI.itemEstruturaIett.codIett = :codIett")
.append(" and ARI.acompReferenciaAref.diaAref = :dia")
.append(" and ARI.acompReferenciaAref.mesAref = :mes")
.append(" and ARI.acompReferenciaAref.anoAref = :ano")
.append(" and ARI.codAri<> :codAri")
.append(" and ARI.itemEstruturaIett.indAtivoIett = 'S'");
Query q = this.getSession().createQuery(query.toString());
q.setLong("codIett", acompReferenciaItemAExcluir.getItemEstruturaIett().getCodIett().longValue());
q.setString("dia", acompReferenciaItemAExcluir.getAcompReferenciaAref().getDiaAref());
q.setString("mes", acompReferenciaItemAExcluir.getAcompReferenciaAref().getMesAref());
q.setString("ano", acompReferenciaItemAExcluir.getAcompReferenciaAref().getAnoAref());
q.setLong("codAri", acompReferenciaItemAExcluir.getCodAri().longValue());
List listaARI = q.list();
if(listaARI == null || listaARI.isEmpty()) {
// o ARF correspondente pode ser removido pois n�o est� em uso
List listArf = arfDao.buscarPorIett(
acompReferenciaItemAExcluir.getItemEstruturaIett().getCodIett(),
Long.valueOf(acompReferenciaItemAExcluir.getAcompReferenciaAref().getMesAref()),
Long.valueOf(acompReferenciaItemAExcluir.getAcompReferenciaAref().getAnoAref()));
if(listArf != null && !listArf.isEmpty()) {
for (Iterator itListArf = listArf.iterator(); itListArf
.hasNext();) {
filhos.add(itListArf.next());
}
}
}
for (Iterator itExcluirFilhos = filhos.iterator(); itExcluirFilhos.hasNext();) {
session.delete(itExcluirFilhos.next());
}
for (Iterator itExcluirFilhos = filhos.iterator(); itExcluirFilhos.hasNext();) {
objetos.add(itExcluirFilhos.next());
}
session.delete(acompReferenciaItemAExcluir);
objetos.add(acompReferenciaItemAExcluir);
}
Set setNovosArlis = new HashSet();
Set setNovosArels = new HashSet();
for (Iterator itObjetosAlterados = objetosParaAlterar.iterator(); itObjetosAlterados.hasNext();) {
ItemEstruturaIett itemAlterarMonitoramento = (ItemEstruturaIett) itObjetosAlterados.next();
AcompReferenciaItemAri acompReferenciaItemAlterar = this.getAcompReferenciaItemByItemEstruturaIett(acompanhamento, itemAlterarMonitoramento);
acompReferenciaItemAlterar.setDataUltManutAri(Data.getDataAtual());
acompReferenciaItemAlterar.setDataInicioAri(acompanhamento.getDataInicioAref());
acompReferenciaItemAlterar.setDataLimiteAcompFisicoAri(acompanhamento.getDataLimiteAcompFisicoAref());
acompReferenciaItemAlterar.setCodUsuUltManutAri(Long.valueOf(Pagina.getParamStr(request, "codUsuario")));
session.update(acompReferenciaItemAlterar);
objetos.add(acompReferenciaItemAlterar);
for (Iterator it = acompReferenciaItemAlterar.getAcompRefItemLimitesArlis().iterator(); it.hasNext();) {
AcompRefItemLimitesArli acompRefItemLimites = (AcompRefItemLimitesArli) it.next();
AcompRefLimitesArl limiteAcomp = acompReferenciaDao.getAcompRefLimitesByFuncaoAcomp(acompanhamento, acompRefItemLimites.getTipoFuncAcompTpfa());
acompRefItemLimites.setDataLimiteArli(limiteAcomp.getDataLimiteArl());
session.update(acompRefItemLimites);
objetos.add(acompRefItemLimites);
}
// Mantis: 10715 (Criar AREL (parecer) para novas fun��es de acompanhamento)
//Testar confirma��o do usu�rio se confirma cria��o de parecer para novas fun��es de acompanhamento
if("S".equals(Pagina.getParamStr(request, "existeAriFaltandoParecerConfirma"))) {
// S� gerar AREL(parecer) para itens que foram selecionados na tela
if(itensSelecionadosEmTela.contains(itemAlterarMonitoramento)) {
Set arelsGravados = acompReferenciaItemAlterar.getAcompRelatorioArels();
// obtem as fun��es de acompanhamento do item que emitem posi��o
Iterator it = itemEstUsutpfuacDao.getFuacEmitePosicaoOrderByFuncAcomp(itemAlterarMonitoramento).iterator();
while(it.hasNext()){
TipoFuncAcompTpfa funcAcomp = ((ItemEstUsutpfuacIettutfa)it.next()).getTipoFuncAcompTpfa();
// S� gerar AREL(parecer) para as fun��es cadastradas no tipo de acompanhamento
Iterator itTafc = ta.getTipoAcompFuncAcompTafcs().iterator();
while(itTafc.hasNext()){
TipoAcompFuncAcompTafc tafc = (TipoAcompFuncAcompTafc) itTafc.next();
//verifica a fun��o e se ela n�o est� como "ignorar"
if(tafc.getTipoFuncAcompTpfa().equals(funcAcomp) && (tafc.getIndObrigatorio().equals("S") || tafc.getIndOpcional().equals("S"))){
boolean existeArelParaFuncao = false;