View Javadoc

1   /*
2    * Created on 02/12/2004
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Iterator;
8   import java.util.List;
9   import java.util.Set;
10  
11  import javax.servlet.http.HttpServletRequest;
12  
13  import comum.database.Dao;
14  
15  import ecar.exception.ECARException;
16  import ecar.pojo.AtributoDemandaAtbdem;
17  import ecar.pojo.ObjetoDemanda;
18  import ecar.pojo.SisAtributoSatb;
19  import ecar.pojo.SisGrupoAtributoSga;
20  import ecar.pojo.TipoAcompanhamentoTa;
21  import ecar.util.Dominios;
22  
23  /**
24   * @author evandro
25   * @author felipe
26   */
27  public class SisGrupoAtributoDao extends Dao {
28    /**
29     * Construtor. Chama o Session factory do Hibernate
30     */
31    public SisGrupoAtributoDao(HttpServletRequest request) {
32      super();
33      this.request = request;
34    }
35  
36    /**
37     * Construtor padrão.
38     * @author garten
39     */
40    public SisGrupoAtributoDao() {
41      super();
42    }
43  
44    /**
45     * Devolve uma lista com os Grupos de Atributo que devem aparecer no cadastro
46     * do usuário, ou seja, os ativos e os que não são atributos do sistema,
47     * ordenados pela sequência de apresentação.
48     * @return
49     * @throws ECARException
50     */
51    public List getGruposAtributosCadastro(String indTabelaUso) throws ECARException {
52      SisGrupoAtributoSga sisGrupoAtributo = new SisGrupoAtributoSga();
53      sisGrupoAtributo.setIndAtivoSga("S");
54      sisGrupoAtributo.setIndSistemaSga("N");
55      if ("U".equals(indTabelaUso)) {
56        sisGrupoAtributo.setIndCadUsuSga("S");
57      }
58      else {
59        sisGrupoAtributo.setIndTabelaUsoSga(indTabelaUso);
60      }
61      return this.pesquisar(sisGrupoAtributo, new String[] { "seqApresentacaoSga", "asc" });
62    }
63  
64    /**
65     * Devolve uma lista com os Grupos de Atributo que devem aparecer no cadastro
66     * do usuário, ou seja, os ativos e os que não são atributos do sistema,
67     * ordenados pela sequência de apresentação.
68     * @return
69     * @throws ECARException
70     */
71    public List getGruposAtributosCadastroUsuarioSite() throws ECARException {
72      SisGrupoAtributoSga sisGrupoAtributo = new SisGrupoAtributoSga();
73      sisGrupoAtributo.setIndAtivoSga("S");
74      sisGrupoAtributo.setIndSistemaSga("N");
75      sisGrupoAtributo.setIndCadSiteSga("S");
76      return this.pesquisar(sisGrupoAtributo, new String[] { "seqApresentacaoSga", "asc" });
77    }
78  
79    /**
80     * Retorna um List com os Atributos de um Grupo de Atributos ordenados de
81     * acordo com o parâmetro para definir ordenação dos atributos do grupo
82     * @param sisGrupoAtributo
83     * @return
84     * @throws ECARException
85     */
86    public List getAtributosOrdenados(SisGrupoAtributoSga sisGrupoAtributo) throws ECARException {
87      List retorno = new ArrayList();
88      if (sisGrupoAtributo.getSisTipoOrdenacaoSto() != null) {
89        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.CODIGO_ASC))
90          retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.codSatb", "asc");
91        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.CODIGO_DESC))
92          retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.codSatb", "desc");
93        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.DESCRICAO_ASC))
94          retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.descricaoSatb", "asc");
95        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.DESCRICAO_DESC))
96          retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.descricaoSatb", "desc");
97        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.INF_COMPLEMENTAR_ASC))
98          retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.atribInfCompSatb", "asc");
99        if (sisGrupoAtributo.getSisTipoOrdenacaoSto().getCodSto().toString().equals(SisTipoOrdenacaoDao.INF_COMPLEMENTAR_DESC))
100         retorno = this.ordenaSet(sisGrupoAtributo.getSisAtributoSatbs(), "this.atribInfCompSatb", "desc");
101 
102     }
103     else {
104       retorno.addAll(sisGrupoAtributo.getSisAtributoSatbs());
105     }
106     return retorno;
107   }
108 
109   public void excluir(SisGrupoAtributoSga sisGrupoAtributo) throws ECARException {
110     try {
111       boolean excluir = true;
112       if (contar(sisGrupoAtributo.getSegmentoSgts()) > 0) {
113         excluir = false;
114         throw new ECARException("sisGrupoAtributo.exclusao.erro.segmentoSgts");
115       }
116       if (contar(sisGrupoAtributo.getSisAtributoSatbs()) > 0) {
117         excluir = false;
118         throw new ECARException("sisGrupoAtributo.exclusao.erro.sisAtributoSatbs");
119       }
120       if (contar(sisGrupoAtributo.getConfiguracaoCfgsByCodSgaGrAtrPgIni()) > 0) {
121         excluir = false;
122         throw new ECARException("sisGrupoAtributo.exclusao.erro.configuracaoCfgsByCodSgaGrAtrPgIni");
123       }
124       if (contar(sisGrupoAtributo.getConfiguracaoCfgsByCodSgaGrAtrNvPlan()) > 0) {
125         excluir = false;
126         throw new ECARException("sisGrupoAtributo.exclusao.erro.configuracaoCfgsByCodSgaGrAtrNvPlan");
127       }
128       if (contar(sisGrupoAtributo.getConfiguracaoCfgsByCodSgaGrAtrClAcesso()) > 0) {
129         excluir = false;
130         throw new ECARException("sisGrupoAtributo.exclusao.erro.configuracaoCfgsByCodSgaGrAtrClAcesso");
131       }
132       if (contar(sisGrupoAtributo.getConfiguracaoCfgsByCodSgaGrAtrLeiCapa()) > 0) {
133         excluir = false;
134         throw new ECARException("sisGrupoAtributo.exclusao.erro.configuracaoCfgsByCodSgaGrAtrLeiCapa");
135       }
136       if (contar(sisGrupoAtributo.getConfiguracaoCfgsByCodSgaGrAtrTpAcesso()) > 0) {
137         excluir = false;
138         throw new ECARException("sisGrupoAtributo.exclusao.erro.configuracaoCfgsByCodSgaGrAtrTpAcesso");
139       }
140 
141       // pesquisa nos grupos de atributos na demanda
142       if (sisGrupoAtributo.getIndTabelaUsoSga().equals("D")) {
143         // valida a exclusao para o caso de demandas
144         excluir = validaExclusaoDemanda(sisGrupoAtributo);
145 
146       }
147 
148       if (excluir)
149         super.excluir(sisGrupoAtributo);
150 
151     } catch (ECARException e) {
152       this.logger.error(e);
153       throw e;
154     }
155   }
156 
157   /**
158    * Retornar os Atributos definidos como Classes de Acesso em Configurações.
159    * @return
160    * @throws ECARException
161    */
162   public Set getClassesDeAcesso() throws ECARException {
163 
164     SisGrupoAtributoSga grupoAtributosClasseAcesso = new ConfiguracaoDao(request).getConfiguracao().getSisGrupoAtributoSgaByCodSgaGrAtrClAcesso();
165     Set lAtributosClasseAcesso = grupoAtributosClasseAcesso.getSisAtributoSatbs();
166 
167     return lAtributosClasseAcesso;
168   }
169 
170   /**
171    * Devolve uma String com código Javascript para validar Grupos de Atributos
172    * da Lista
173    * @param atributosObrigatorios
174    * @return String com codigo Javascript
175    */
176   public String getValidacoesAtributos(List atributosObrigatorios) {
177     return getValidacoesAtributos(atributosObrigatorios, false);
178   }
179 
180   /**
181    * Devolve uma String com código Javascript para validar Grupos de Atributos
182    * da Lista
183    * @param atributosObrigatorios
184    * @return String com codigo Javascript
185    */
186   public String getValidacoesAtributos(List atributosObrigatorios, boolean cadastroUsuario) {
187     StringBuilder script = new StringBuilder("");
188     Iterator it = atributosObrigatorios.iterator();
189     while (it.hasNext()) {
190       SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();
191       script.append(this.getValidacaoAtributo(grupoAtributo, cadastroUsuario));
192     }
193     return script.toString();
194   }
195 
196   public String getValidacaoAtributo(SisGrupoAtributoSga grupoAtributo) {
197     return getValidacaoAtributo(grupoAtributo, false);
198   }
199 
200   public String getValidacaoAtributo(SisGrupoAtributoSga grupoAtributo, boolean cadastroUsuario) {
201     StringBuilder script = new StringBuilder("");
202 
203     boolean possuiAtributoAtivo = false;
204 
205     for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
206       if (((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().toArray()[i]).getIndAtivoSatb().equals("S")) {
207         possuiAtributoAtivo = true;
208       }
209     }
210 
211     String tipoExibicao = "";
212     if (cadastroUsuario && grupoAtributo.getSisTipoExibicGrupoCadUsuSteg() != null) {
213       tipoExibicao = grupoAtributo.getSisTipoExibicGrupoCadUsuSteg().getCodSteg().toString();
214     }
215     else {
216       tipoExibicao = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();
217     }
218 
219     if (possuiAtributoAtivo) {
220 
221       if (SisTipoExibicGrupoDao.CHECKBOX.equals(tipoExibicao)) {
222 
223         script.append(" numChecks = verificaChecks(form, \"").append("a").append(grupoAtributo.getCodSga()).append("\");\n").append("encontrouChecked = false;\n").append("if(numChecks > 1){\n").append("for(i = 0; i < form.").append("a").append(grupoAtributo.getCodSga()).append(".length; i++){\n").append("if(form.").append("a").append(grupoAtributo.getCodSga()).append("[i].checked == true){\n").append("encontrouChecked = true;").append("}\n").append("}\n").append("}else{").append("if(form.").append("a").append(grupoAtributo.getCodSga()).append(".checked == true){\n").append("encontrouChecked = true;}\n").append("}\n").append("if(!encontrouChecked){\n").append("alert(\"Obrigatória a seleção do Campo ").append(grupoAtributo.getDescricaoSga()).append("\");\n").append("return false;\n").append("}\n");
224       }
225       if (SisTipoExibicGrupoDao.COMBOBOX.equals(tipoExibicao) || SisTipoExibicGrupoDao.LISTBOX.equals(tipoExibicao) || SisTipoExibicGrupoDao.TEXTAREA.equals(tipoExibicao) || SisTipoExibicGrupoDao.TEXT.equals(tipoExibicao)) {
226 
227         script.append("if(");
228         script.append(" form.a").append(grupoAtributo.getCodSga()).append("!= null &&");
229         script.append(" !validaString(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(grupoAtributo.getDescricaoSga()).append("\", true)){ \n");
230         script.append("return false;\n");
231         script.append("}\n");
232       }
233       if (SisTipoExibicGrupoDao.RADIO_BUTTON.equals(tipoExibicao)) {
234 
235         // quando tiver apenas 1
236         if (grupoAtributo.getSisAtributoSatbs().size() == 1) {
237           script.append("if(");
238           script.append(" form.a").append(grupoAtributo.getCodSga()).append("!= null &&");
239           script.append(" form.a").append(grupoAtributo.getCodSga()).append(".checked == false ");
240           script.append("){\n").append("alert(\"Obrigatória a seleção do Campo ").append(grupoAtributo.getDescricaoSga()).append("\");\n").append("return false;\n").append("}");
241 
242         }
243         else {
244 
245           script.append("if(");
246           for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
247             if (i > 0)
248               script.append("&&");
249             script.append(" form.a").append(grupoAtributo.getCodSga()).append("[").append(i).append("] != null &&");
250             script.append(" form.a").append(grupoAtributo.getCodSga()).append("[").append(i).append("].checked == false ");
251           }
252           script.append("){\n").append("alert(\"Obrigatória a seleção do Campo ").append(grupoAtributo.getDescricaoSga()).append("\");\n").append("return false;\n").append("}");
253 
254         }
255       }
256       if (SisTipoExibicGrupoDao.MULTITEXTO.equals(tipoExibicao)) {
257         script.append("if(");
258         for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
259           SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().toArray()[i];
260           if (i > 0)
261             script.append(" || ");
262           script.append(" Trim(form.a").append(grupoAtributo.getCodSga()).append("_").append(sisAtributoSatb.getCodSatb().toString()).append(".value)==\"\"");
263         }
264         script.append("){\n").append("alert(\"Obrigatório o preenchimento de todas as linhas do campo ").append(grupoAtributo.getDescricaoSga()).append("\");\n").append("return false;\n").append("}");
265       }
266       if (SisTipoExibicGrupoDao.IMAGEM.equals(tipoExibicao)) {
267         String path = "";
268         String imageDefault = "";
269         if (request != null) {
270           path = request.getContextPath();
271           imageDefault = "/images/ImagemIndisponivel.gif";
272         }
273         script.append(" if(!validaImage(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(grupoAtributo.getDescricaoSga()).append("\", true")
274         // .append(", \"").append("/ecar/images/ImagemIndisponivel.gif"+"\")){ \n");
275         .append(", \"").append(path + imageDefault + "\")){ \n");
276         script.append("return false;\n");
277         script.append("}\n");
278       }
279       if (SisTipoExibicGrupoDao.VALIDACAO.equals(tipoExibicao)) {
280         script.append(" if(!validaString(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(grupoAtributo.getDescricaoSga()).append("\", true)){ \n");
281         script.append("return false;\n");
282         script.append("}\n");
283       }
284     }
285 
286     return script.toString();
287   }
288 
289   public String getValidacaoAtributo(SisGrupoAtributoSga grupoAtributo, String novoLabelGrupo) {
290     return getValidacaoAtributo(grupoAtributo, novoLabelGrupo, false);
291   }
292 
293   // M�todo igual ao getValidacaoAtributo(SisGrupoAtributoSga grupoAtributo),
294   // s� que leva em considera��o
295   // o label passado
296   public String getValidacaoAtributo(SisGrupoAtributoSga grupoAtributo, String novoLabelGrupo, boolean cadastroUsuario) {
297     StringBuilder script = new StringBuilder("");
298 
299     boolean possuiAtributoAtivo = false;
300 
301     for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
302       if (((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().toArray()[i]).getIndAtivoSatb().equals("S")) {
303         possuiAtributoAtivo = true;
304       }
305     }
306 
307     String tipoExibicao = "";
308     if (cadastroUsuario && grupoAtributo.getSisTipoExibicGrupoCadUsuSteg() != null) {
309       tipoExibicao = grupoAtributo.getSisTipoExibicGrupoCadUsuSteg().getCodSteg().toString();
310     }
311     else {
312       tipoExibicao = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();
313     }
314 
315     if (possuiAtributoAtivo) {
316 
317       if (SisTipoExibicGrupoDao.CHECKBOX.equals(tipoExibicao)) {
318 
319         script.append(" numChecks = verificaChecks(form, \"").append("a").append(grupoAtributo.getCodSga()).append("\");\n").append("encontrouChecked = false;\n").append("if(numChecks > 1){\n").append("for(i = 0; i < form.").append("a").append(grupoAtributo.getCodSga()).append(".length; i++){\n").append("if(form.").append("a").append(grupoAtributo.getCodSga()).append("[i].checked == true){\n").append("encontrouChecked = true;").append("}\n").append("}\n").append("}else{").append("if(form.").append("a").append(grupoAtributo.getCodSga()).append(".checked == true){\n").append("encontrouChecked = true;}\n").append("}\n").append("if(!encontrouChecked){\n").append("alert(\"Obrigatória a seleção do Campo ").append(novoLabelGrupo).append("\");\n").append("return false;\n").append("}\n");
320 
321       }
322       if (SisTipoExibicGrupoDao.COMBOBOX.equals(tipoExibicao) || SisTipoExibicGrupoDao.LISTBOX.equals(tipoExibicao) || SisTipoExibicGrupoDao.TEXTAREA.equals(tipoExibicao) || SisTipoExibicGrupoDao.TEXT.equals(tipoExibicao)) {
323 
324         // valida atributo apenas se seu grupo estiver ativo
325         if (grupoAtributo.getIndAtivoSga().equals("S")) {
326           script.append(" if(!validaString(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(novoLabelGrupo).append("\", true)){ \n");
327           script.append("return false;\n");
328           script.append("}\n");
329         }
330 
331       }
332       if (SisTipoExibicGrupoDao.RADIO_BUTTON.equals(tipoExibicao)) {
333         script.append("if(");
334         if (grupoAtributo.getSisAtributoSatbs().size() == 1) {
335           script.append(" form.a").append(grupoAtributo.getCodSga()).append(".checked == false ").append("){\n").append("alert(\"Obrigatória a seleção do Campo ").append(novoLabelGrupo).append("\");\n").append("return false;\n").append("}");
336         }
337         else {
338 
339           for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
340 
341             if (i > 0)
342               script.append("&&");
343             script.append(" form.a").append(grupoAtributo.getCodSga()).append("[").append(i).append("].checked == false ");
344 
345           }
346 
347           script.append("){\n").append("alert(\"Obrigatória a seleção do Campo ").append(novoLabelGrupo).append("\");\n").append("return false;\n").append("}");
348 
349         }
350       }
351       if (SisTipoExibicGrupoDao.MULTITEXTO.equals(tipoExibicao)) {
352 
353         script.append("if(");
354         for (int i = 0; i < grupoAtributo.getSisAtributoSatbs().size(); i++) {
355           SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().toArray()[i];
356 
357           if (i > 0)
358             script.append(" || ");
359           script.append(" Trim(form.a").append(grupoAtributo.getCodSga()).append("_").append(sisAtributoSatb.getCodSatb().toString()).append(".value)==\"\"");
360 
361         }
362 
363         script.append("){\n").append("alert(\"Obrigatório o preenchimento de todas as linhas do campo ").append(novoLabelGrupo).append("\");\n").append("return false;\n").append("}");
364 
365       }
366       if (SisTipoExibicGrupoDao.IMAGEM.equals(tipoExibicao)) {
367         String path = "";
368         String imageDefault = "";
369         if (request != null) {
370           path = request.getContextPath();
371           imageDefault = "/images/ImagemIndisponivel.gif";
372         }
373 
374         script.append(" if(!validaImage(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(novoLabelGrupo).append("\", true")
375         // .append(", \"").append("/ecar/images/ImagemIndisponivel.gif"+"\")){ \n");
376         .append(", \"").append(path + imageDefault + "\")){ \n");
377         script.append("return false;\n");
378         script.append("}\n");
379 
380       }
381       if (SisTipoExibicGrupoDao.VALIDACAO.equals(tipoExibicao)) {
382 
383         script.append(" if(!validaString(form.").append("a").append(grupoAtributo.getCodSga()).append(", \"").append(novoLabelGrupo).append("\", true)){ \n");
384         script.append("return false;\n");
385         script.append("}\n");
386 
387       }
388     }
389 
390     return script.toString();
391   }
392 
393   /**
394    * Validações de exclusão se o grupo de atributos for de demanda
395    * @param sisGrupoAtributo
396    * @return existe Se for true, pode excluir. Se for false, nao pode excluir
397    */
398   public boolean validaExclusaoDemanda(SisGrupoAtributoSga sisGrupoAtributo) throws ECARException {
399 
400     boolean excluir = false;
401 
402     AtributoDemandaAtbdem atributoDemandaAtbdem = new AtributoDemandaAtbdem();
403     atributoDemandaAtbdem.setSisGrupoAtributoSga(sisGrupoAtributo);
404 
405     // pesquisa se existe algum atributo do grupo de atributos que esteja sendo
406     // usado em demanda
407     if (this.pesquisar(atributoDemandaAtbdem, null).size() > 0) {
408       throw new ECARException("sisGrupoAtributo.exclusao.erro.atributoAssociadoDemanda");
409     }
410     else {
411       excluir = true;
412     }
413 
414     return excluir;
415   }
416 
417 }