Commit ad86a75b4ad131aaf43078d3e2fafc2a5240b540

Authored by rogerio.costa
1 parent 2b0dc333
Exists in master

#268 Pesquisar Documentos e Processos

Showing 33 changed files with 644 additions and 78 deletions   Show diff stats
cit-ecm-api/src/main/java/br/com/centralit/api/dao/UnidadeProcessoDao.java
@@ -149,4 +149,23 @@ public interface UnidadeProcessoDao extends CitGenericDAO { @@ -149,4 +149,23 @@ public interface UnidadeProcessoDao extends CitGenericDAO {
149 */ 149 */
150 Boolean isProcessoEnviado(Long idProcesso); 150 Boolean isProcessoEnviado(Long idProcesso);
151 151
  152 + /**
  153 + * <p>
  154 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  155 + * </p>
  156 + *
  157 + * <p>
  158 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  159 + * </p>
  160 + *
  161 + * Método responsável por verificar se o processo pertence a unidade
  162 + *
  163 + * @author rogerio.costa
  164 + *
  165 + * @param idProcesso
  166 + * @param idUnidade
  167 + * @return boolean
  168 + */
  169 + boolean isProcessoNaUnidadeUsuarioLogado(Long idProcesso, Long idUnidade);
  170 +
152 } 171 }
cit-ecm-api/src/main/java/br/com/centralit/api/dao/impl/UnidadeProcessoDaoHibernate.java
@@ -321,4 +321,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un @@ -321,4 +321,35 @@ public class UnidadeProcessoDaoHibernate extends CitGenericDAOImpl implements Un
321 321
322 return detachedCriteriaPrivilegio; 322 return detachedCriteriaPrivilegio;
323 } 323 }
  324 +
  325 + /**
  326 + * <p>
  327 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  328 + * </p>
  329 + *
  330 + * <p>
  331 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  332 + * </p>
  333 + *
  334 + * Método responsável por verificar se o processo pertence a unidade
  335 + *
  336 + * @author rogerio.costa
  337 + *
  338 + * @param idProcesso
  339 + * @param idUnidade
  340 + * @return boolean
  341 + */
  342 + public boolean isProcessoNaUnidadeUsuarioLogado(Long idProcesso, Long idUnidade) {
  343 +
  344 + Criteria criteria = this.newCriteria();
  345 +
  346 + criteria.setProjection(Projections.id());
  347 + criteria.add(Restrictions.eq("processo.id", idProcesso));
  348 + criteria.add(Restrictions.eq("unidade.id", idUnidade));
  349 + criteria.add(Restrictions.isNull("dataInativo"));
  350 + criteria.setMaxResults(1);
  351 +
  352 + return UtilObjeto.isReferencia(criteria.uniqueResult());
  353 +
  354 + }
324 } 355 }
cit-ecm-api/src/main/java/br/com/centralit/api/model/AnexoGed.java
@@ -94,7 +94,7 @@ public class AnexoGed extends PersistentObjectUnidade implements DocumentoGedInt @@ -94,7 +94,7 @@ public class AnexoGed extends PersistentObjectUnidade implements DocumentoGedInt
94 94
95 /** Atributo dominioTipoAnexo. */ 95 /** Atributo dominioTipoAnexo. */
96 @ManyToOne(fetch = FetchType.EAGER, optional = true) 96 @ManyToOne(fetch = FetchType.EAGER, optional = true)
97 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 97 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class})
98 private Dominio dominioTipoAnexo; 98 private Dominio dominioTipoAnexo;
99 99
100 /** Atributo MultipartFile. */ 100 /** Atributo MultipartFile. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
@@ -79,11 +79,11 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -79,11 +79,11 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
79 private Long id; 79 private Long id;
80 80
81 /** Atributo assuntoComplementar. */ 81 /** Atributo assuntoComplementar. */
82 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 82 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class})
83 private String assuntoComplementar; 83 private String assuntoComplementar;
84 84
85 /** Atributo numero. */ 85 /** Atributo numero. */
86 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 86 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class})
87 private String numero; 87 private String numero;
88 88
89 /** Atributo idRaiz. */ 89 /** Atributo idRaiz. */
@@ -95,23 +95,23 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -95,23 +95,23 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
95 private Boolean novaVersao; 95 private Boolean novaVersao;
96 96
97 /** Atributo versaoDocumento. */ 97 /** Atributo versaoDocumento. */
98 - @JsonView({ Views.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 98 + @JsonView({ Views.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class})
99 private Double versaoDocumento; 99 private Double versaoDocumento;
100 100
101 /** Atributo cancelado. */ 101 /** Atributo cancelado. */
102 - @JsonView({ Views.ProcessoEdit.class }) 102 + @JsonView({ Views.ProcessoEdit.class, Views.processoVHview.class})
103 private Boolean cancelado; 103 private Boolean cancelado;
104 104
105 @JsonView({ Views.DocumentoGedEdit.class }) 105 @JsonView({ Views.DocumentoGedEdit.class })
106 private String localizacao; 106 private String localizacao;
107 107
108 /** Atributo conteudo. */ 108 /** Atributo conteudo. */
109 - @JsonView({ ViewsEcm.DocumentoGedEdit.class }) 109 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.processoVHview.class})
110 @Transient 110 @Transient
111 private String conteudo; 111 private String conteudo;
112 112
113 /** Atributo tipoAssunto. */ 113 /** Atributo tipoAssunto. */
114 - @JsonView({ Views.DocumentoGedEdit.class }) 114 + @JsonView({ Views.DocumentoGedEdit.class, Views.processoVHview.class })
115 private String tipoAssunto; 115 private String tipoAssunto;
116 116
117 /** Atributo conteudoCriptografado. */ 117 /** Atributo conteudoCriptografado. */
@@ -121,7 +121,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -121,7 +121,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
121 private byte[] conteudoCriptografado; 121 private byte[] conteudoCriptografado;
122 122
123 /** Atributo icon. */ 123 /** Atributo icon. */
124 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 124 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class})
125 private String icon; 125 private String icon;
126 126
127 @Temporal(TemporalType.TIMESTAMP) 127 @Temporal(TemporalType.TIMESTAMP)
@@ -143,7 +143,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -143,7 +143,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
143 143
144 /** Atributo formaCriacao. */ 144 /** Atributo formaCriacao. */
145 @ManyToOne(fetch = FetchType.LAZY) 145 @ManyToOne(fetch = FetchType.LAZY)
146 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 146 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class})
147 private Dominio formaCriacao; 147 private Dominio formaCriacao;
148 148
149 /** Atributo status. */ 149 /** Atributo status. */
@@ -177,12 +177,12 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -177,12 +177,12 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
177 177
178 /** Atributo tipoDocumento. */ 178 /** Atributo tipoDocumento. */
179 @ManyToOne(fetch = FetchType.LAZY) 179 @ManyToOne(fetch = FetchType.LAZY)
180 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 180 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class})
181 private TipoDocumento tipoDocumento; 181 private TipoDocumento tipoDocumento;
182 182
183 /** Atributo nivelAcesso. */ 183 /** Atributo nivelAcesso. */
184 @ManyToOne(fetch = FetchType.EAGER) 184 @ManyToOne(fetch = FetchType.EAGER)
185 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 185 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class })
186 private NivelAcessoTipoDocumento nivelAcesso; 186 private NivelAcessoTipoDocumento nivelAcesso;
187 187
188 @ManyToOne(fetch = FetchType.EAGER) 188 @ManyToOne(fetch = FetchType.EAGER)
@@ -191,7 +191,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -191,7 +191,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
191 191
192 /** Atributo sigilo. */ 192 /** Atributo sigilo. */
193 @ManyToOne(fetch = FetchType.LAZY) 193 @ManyToOne(fetch = FetchType.LAZY)
194 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 194 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class})
195 private Sigilo sigilo; 195 private Sigilo sigilo;
196 196
197 @ManyToOne(fetch = FetchType.LAZY) 197 @ManyToOne(fetch = FetchType.LAZY)
@@ -220,7 +220,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable { @@ -220,7 +220,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
220 220
221 /** Atributo anexo. */ 221 /** Atributo anexo. */
222 @OneToOne(mappedBy = "documentoGed", fetch = FetchType.EAGER) 222 @OneToOne(mappedBy = "documentoGed", fetch = FetchType.EAGER)
223 - @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class }) 223 + @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class, Views.processoVHview.class})
224 private AnexoGed anexo; 224 private AnexoGed anexo;
225 225
226 /** Atributo versaoAnterior. */ 226 /** Atributo versaoAnterior. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/HipoteseLegal.java
@@ -69,7 +69,8 @@ public class HipoteseLegal extends PersistentObjectAudit { @@ -69,7 +69,8 @@ public class HipoteseLegal extends PersistentObjectAudit {
69 private String descricao; 69 private String descricao;
70 70
71 /** Atributo nome. */ 71 /** Atributo nome. */
72 - @JsonView({ ViewsEcm.HipoteseLegalList.class, ViewsEcm.TipoProcessoList.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.NivelAcessoTipoDocumentoEdit.class, ViewsEcm.DocumentoGedEdit.class, ViewsEcm.ProcessoEdit.class, ViewsEcm.NivelAcessoTipoProcessoEdit.class }) 72 + @JsonView({ ViewsEcm.HipoteseLegalList.class, ViewsEcm.TipoProcessoList.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.NivelAcessoTipoDocumentoEdit.class, ViewsEcm.DocumentoGedEdit.class, ViewsEcm.ProcessoEdit.class, ViewsEcm.NivelAcessoTipoProcessoEdit.class,
  73 + Views.processoVHview.class})
73 private String nome; 74 private String nome;
74 75
75 /** Atributo fundamentacaoLegal. */ 76 /** Atributo fundamentacaoLegal. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/InteressadoProcesso.java
@@ -63,7 +63,7 @@ public class InteressadoProcesso extends PersistentObjectAudit { @@ -63,7 +63,7 @@ public class InteressadoProcesso extends PersistentObjectAudit {
63 63
64 /** Atributo interessado. */ 64 /** Atributo interessado. */
65 @ManyToOne(fetch = FetchType.LAZY) 65 @ManyToOne(fetch = FetchType.LAZY)
66 - @JsonView({ ViewsEcm.ProcessoEdit.class }) 66 + @JsonView({ ViewsEcm.ProcessoEdit.class, Views.processoVHview.class})
67 private Pessoa interessado; 67 private Pessoa interessado;
68 68
69 /** 69 /**
cit-ecm-api/src/main/java/br/com/centralit/api/model/NivelAcessoTipoDocumento.java
@@ -64,7 +64,7 @@ public class NivelAcessoTipoDocumento extends PersistentObjectAudit { @@ -64,7 +64,7 @@ public class NivelAcessoTipoDocumento extends PersistentObjectAudit {
64 64
65 /** Atributo tipoAcesso. */ 65 /** Atributo tipoAcesso. */
66 @ManyToOne(fetch = FetchType.LAZY) 66 @ManyToOne(fetch = FetchType.LAZY)
67 - @JsonView({ ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.NivelAcessoTipoDocumentoEdit.class, ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 67 + @JsonView({ ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.NivelAcessoTipoDocumentoEdit.class, ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class })
68 private Dominio nivelAcesso; 68 private Dominio nivelAcesso;
69 69
70 /** Atributo tipoDocumento. */ 70 /** Atributo tipoDocumento. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/NivelAcessoTipoProcesso.java
@@ -72,7 +72,7 @@ public class NivelAcessoTipoProcesso extends PersistentObjectAudit { @@ -72,7 +72,7 @@ public class NivelAcessoTipoProcesso extends PersistentObjectAudit {
72 72
73 /** Atributo tipoAcesso. */ 73 /** Atributo tipoAcesso. */
74 @ManyToOne(fetch = FetchType.LAZY) 74 @ManyToOne(fetch = FetchType.LAZY)
75 - @JsonView({ ViewsEcm.TipoProcessoEdit.class, ViewsEcm.NivelAcessoTipoProcessoEdit.class, Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 75 + @JsonView({ ViewsEcm.TipoProcessoEdit.class, ViewsEcm.NivelAcessoTipoProcessoEdit.class, Views.ProcessoList.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class})
76 private Dominio nivelAcesso; 76 private Dominio nivelAcesso;
77 77
78 @OneToMany(fetch = FetchType.LAZY, mappedBy = "nivelAcessoTipoProcesso", cascade = CascadeType.ALL) 78 @OneToMany(fetch = FetchType.LAZY, mappedBy = "nivelAcessoTipoProcesso", cascade = CascadeType.ALL)
cit-ecm-api/src/main/java/br/com/centralit/api/model/PlanoClassificacao.java
@@ -77,7 +77,8 @@ public class PlanoClassificacao extends PersistentObjectAuditOrganizacao impleme @@ -77,7 +77,8 @@ public class PlanoClassificacao extends PersistentObjectAuditOrganizacao impleme
77 private String codigo; 77 private String codigo;
78 78
79 /** Atributo nome. */ 79 /** Atributo nome. */
80 - @JsonView({ ViewsEcm.PlanoClassificacaoListView.class, ViewsEcm.PlanoClassificacaoParent.class, ViewsEcm.PlanoClassificacaoAutocompleteRecursive.class, ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoProcessoEdit.class, ViewsEcm.DocumentoGedEdit.class, ViewsEcm.ProcessoEdit.class }) 80 + @JsonView({ ViewsEcm.PlanoClassificacaoListView.class, ViewsEcm.PlanoClassificacaoParent.class, ViewsEcm.PlanoClassificacaoAutocompleteRecursive.class, ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoProcessoEdit.class, ViewsEcm.DocumentoGedEdit.class, ViewsEcm.ProcessoEdit.class,
  81 + Views.processoVHview.class})
81 private String nome; 82 private String nome;
82 83
83 /** Atributo observacao. */ 84 /** Atributo observacao. */
@@ -100,7 +101,8 @@ public class PlanoClassificacao extends PersistentObjectAuditOrganizacao impleme @@ -100,7 +101,8 @@ public class PlanoClassificacao extends PersistentObjectAuditOrganizacao impleme
100 private Boolean permitirUsarComoClassificacao; 101 private Boolean permitirUsarComoClassificacao;
101 102
102 @Transient 103 @Transient
103 - @JsonView({ ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.TipoProcessoEdit.class, Views.ProcessoList.class, Views.DocumentoGedEdit.class, ViewsEcm.TipoDocumentoPlanoClassificacaoAutoCompleteView.class, Views.UnidadeProcessoListView.class }) 104 + @JsonView({ ViewsEcm.PlanoCLassificacaoAutoComplete.class, ViewsEcm.TipoDocumentoEdit.class, ViewsEcm.TipoProcessoEdit.class, Views.ProcessoList.class, Views.DocumentoGedEdit.class, ViewsEcm.TipoDocumentoPlanoClassificacaoAutoCompleteView.class, Views.UnidadeProcessoListView.class,
  105 + Views.processoVHview.class})
104 private String assunto; 106 private String assunto;
105 107
106 /** Atributo tipoDestinacao. */ 108 /** Atributo tipoDestinacao. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/Processo.java
@@ -80,11 +80,11 @@ public class Processo extends PersistentObjectUnidade { @@ -80,11 +80,11 @@ public class Processo extends PersistentObjectUnidade {
80 /** Atributo id. */ 80 /** Atributo id. */
81 @Id 81 @Id
82 @GeneratedValue(strategy = GenerationType.AUTO) 82 @GeneratedValue(strategy = GenerationType.AUTO)
83 - @JsonView({ Views.GenericView.class, Views.UnidadeProcessoListView.class }) 83 + @JsonView({ Views.GenericView.class })
84 private Long id; 84 private Long id;
85 85
86 /** Atributo assuntoComplementar. */ 86 /** Atributo assuntoComplementar. */
87 - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 87 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
88 private String assuntoComplementar; 88 private String assuntoComplementar;
89 89
90 /** Atributo dataReferencia. */ 90 /** Atributo dataReferencia. */
@@ -101,7 +101,7 @@ public class Processo extends PersistentObjectUnidade { @@ -101,7 +101,7 @@ public class Processo extends PersistentObjectUnidade {
101 private Calendar dataConclusao; 101 private Calendar dataConclusao;
102 102
103 /** Atributo nup. */ 103 /** Atributo nup. */
104 - @JsonView({ Views.ProcessoList.class, Views.ProcessoRelacionadoList.class, Views.AnexarProcesso.class, Views.ProcessoAutoCompleteView.class, Views.UnidadeProcessoListView.class }) 104 + @JsonView({ Views.ProcessoList.class, Views.ProcessoRelacionadoList.class, Views.AnexarProcesso.class, Views.ProcessoAutoCompleteView.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
105 private String nup; 105 private String nup;
106 106
107 /** Atributo nome. */ 107 /** Atributo nome. */
@@ -112,14 +112,14 @@ public class Processo extends PersistentObjectUnidade { @@ -112,14 +112,14 @@ public class Processo extends PersistentObjectUnidade {
112 private Long idTask; 112 private Long idTask;
113 113
114 /** Atributo observacaoGeral. */ 114 /** Atributo observacaoGeral. */
115 - @JsonView({ Views.ProcessoEdit.class }) 115 + @JsonView({ Views.ProcessoEdit.class, Views.processoVHview.class })
116 private String observacaoGeral; 116 private String observacaoGeral;
117 117
118 @JsonView({ Views.ProcessoEdit.class }) 118 @JsonView({ Views.ProcessoEdit.class })
119 private String tipoAssunto; 119 private String tipoAssunto;
120 120
121 /** Atributo idProcessInstance. */ 121 /** Atributo idProcessInstance. */
122 - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 122 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
123 private Long idProcessInstance; 123 private Long idProcessInstance;
124 124
125 /** Atributo aprovado. */ 125 /** Atributo aprovado. */
@@ -140,7 +140,7 @@ public class Processo extends PersistentObjectUnidade { @@ -140,7 +140,7 @@ public class Processo extends PersistentObjectUnidade {
140 140
141 /** Atributo status. */ 141 /** Atributo status. */
142 @ManyToOne(fetch = FetchType.LAZY) 142 @ManyToOne(fetch = FetchType.LAZY)
143 - @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class }) 143 + @JsonView({ Views.ProcessoEdit.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
144 private Dominio status; 144 private Dominio status;
145 145
146 /** Atributo tramitarDocumento. */ 146 /** Atributo tramitarDocumento. */
@@ -149,18 +149,18 @@ public class Processo extends PersistentObjectUnidade { @@ -149,18 +149,18 @@ public class Processo extends PersistentObjectUnidade {
149 private TramitarDocumento tramitarDocumento; 149 private TramitarDocumento tramitarDocumento;
150 150
151 /** Atributo tipoProcesso. */ 151 /** Atributo tipoProcesso. */
152 - @JsonView({ Views.ProcessoList.class, Views.ProcessoRelacionadoList.class, Views.AnexarProcesso.class, Views.UnidadeProcessoListView.class }) 152 + @JsonView({ Views.ProcessoList.class, Views.ProcessoRelacionadoList.class, Views.AnexarProcesso.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
153 @ManyToOne(fetch = FetchType.LAZY) 153 @ManyToOne(fetch = FetchType.LAZY)
154 private TipoProcesso tipoProcesso; 154 private TipoProcesso tipoProcesso;
155 155
156 /** Atributo assunto. */ 156 /** Atributo assunto. */
157 @ManyToOne(fetch = FetchType.LAZY) 157 @ManyToOne(fetch = FetchType.LAZY)
158 - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 158 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
159 private PlanoClassificacao assunto; 159 private PlanoClassificacao assunto;
160 160
161 /** Atributo nivelAcesso. */ 161 /** Atributo nivelAcesso. */
162 @ManyToOne(fetch = FetchType.LAZY) 162 @ManyToOne(fetch = FetchType.LAZY)
163 - @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class }) 163 + @JsonView({ Views.ProcessoList.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class })
164 private NivelAcessoTipoProcesso nivelAcesso; 164 private NivelAcessoTipoProcesso nivelAcesso;
165 165
166 @ManyToOne(fetch = FetchType.LAZY) 166 @ManyToOne(fetch = FetchType.LAZY)
@@ -174,7 +174,7 @@ public class Processo extends PersistentObjectUnidade { @@ -174,7 +174,7 @@ public class Processo extends PersistentObjectUnidade {
174 174
175 /** Atributo hipoteseLegal. */ 175 /** Atributo hipoteseLegal. */
176 @ManyToOne(fetch = FetchType.LAZY) 176 @ManyToOne(fetch = FetchType.LAZY)
177 - @JsonView({ Views.ProcessoEdit.class }) 177 + @JsonView({ Views.ProcessoEdit.class, Views.processoVHview.class })
178 private HipoteseLegal hipoteseLegal; 178 private HipoteseLegal hipoteseLegal;
179 179
180 /** Atributo cienciaProcesso. */ 180 /** Atributo cienciaProcesso. */
@@ -199,12 +199,12 @@ public class Processo extends PersistentObjectUnidade { @@ -199,12 +199,12 @@ public class Processo extends PersistentObjectUnidade {
199 199
200 /** Atributo Interessados. */ 200 /** Atributo Interessados. */
201 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL, orphanRemoval = true) 201 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL, orphanRemoval = true)
202 - @JsonView({ Views.ProcessoEdit.class }) 202 + @JsonView({ Views.ProcessoEdit.class, Views.processoVHview.class })
203 private Collection<InteressadoProcesso> interessados; 203 private Collection<InteressadoProcesso> interessados;
204 204
205 /** Atributo documentos. */ 205 /** Atributo documentos. */
206 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL) 206 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL)
207 - @JsonView({ Views.ProcessoEdit.class }) 207 + @JsonView({ Views.ProcessoEdit.class, Views.processoVHview.class})
208 private Collection<DocumentoGed> documentos; 208 private Collection<DocumentoGed> documentos;
209 209
210 /** Atributo relacionados. */ 210 /** Atributo relacionados. */
@@ -226,6 +226,7 @@ public class Processo extends PersistentObjectUnidade { @@ -226,6 +226,7 @@ public class Processo extends PersistentObjectUnidade {
226 private Collection<CredencialProcesso> credenciais; 226 private Collection<CredencialProcesso> credenciais;
227 227
228 /** Atributo unidadesProcesso. */ 228 /** Atributo unidadesProcesso. */
  229 + @JsonView({ Views.processoVHview.class })
229 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL) 230 @OneToMany(fetch = FetchType.LAZY, mappedBy = "processo", cascade = CascadeType.ALL)
230 private Collection<UnidadeProcesso> unidadesProcesso; 231 private Collection<UnidadeProcesso> unidadesProcesso;
231 232
cit-ecm-api/src/main/java/br/com/centralit/api/model/TipoDocumento.java
@@ -67,7 +67,7 @@ public class TipoDocumento extends PersistentObjectAudit { @@ -67,7 +67,7 @@ public class TipoDocumento extends PersistentObjectAudit {
67 private String descricao; 67 private String descricao;
68 68
69 /** Atributo nome. */ 69 /** Atributo nome. */
70 - @JsonView({ ViewsEcm.TipoDocumentoList.class, ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class }) 70 + @JsonView({ ViewsEcm.TipoDocumentoList.class, ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, Views.processoVHview.class })
71 private String nome; 71 private String nome;
72 72
73 /** Atributo formaCriacao. */ 73 /** Atributo formaCriacao. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/TipoProcesso.java
@@ -63,11 +63,11 @@ public class TipoProcesso extends PersistentObjectUnidade { @@ -63,11 +63,11 @@ public class TipoProcesso extends PersistentObjectUnidade {
63 private Long id; 63 private Long id;
64 64
65 /** Atributo descricao. */ 65 /** Atributo descricao. */
66 - @JsonView({ ViewsEcm.TipoProcessoList.class, Views.UnidadeProcessoListView.class }) 66 + @JsonView({ ViewsEcm.TipoProcessoList.class, Views.UnidadeProcessoListView.class})
67 private String descricao; 67 private String descricao;
68 68
69 /** Atributo nome. */ 69 /** Atributo nome. */
70 - @JsonView({ ViewsEcm.TipoProcessoList.class, Views.ProcessoList.class, Views.ProcessoRelacionadoList.class }) 70 + @JsonView({ ViewsEcm.TipoProcessoList.class, Views.ProcessoList.class, Views.ProcessoRelacionadoList.class, Views.processoVHview.class})
71 private String nome; 71 private String nome;
72 72
73 /** Atributo nome. */ 73 /** Atributo nome. */
cit-ecm-api/src/main/java/br/com/centralit/api/model/UnidadeProcesso.java
@@ -77,12 +77,12 @@ public class UnidadeProcesso extends PersistentObjectAudit { @@ -77,12 +77,12 @@ public class UnidadeProcesso extends PersistentObjectAudit {
77 77
78 /** Atributo grupo. */ 78 /** Atributo grupo. */
79 @ManyToOne(fetch = FetchType.LAZY) 79 @ManyToOne(fetch = FetchType.LAZY)
80 - @JsonView({ Views.EnviarProcessoView.class}) 80 + @JsonView({ Views.EnviarProcessoView.class, Views.processoVHview.class})
81 private Unidade unidade; 81 private Unidade unidade;
82 82
83 /** Atributo usuarioResponsavel. */ 83 /** Atributo usuarioResponsavel. */
84 @ManyToOne(fetch = FetchType.LAZY) 84 @ManyToOne(fetch = FetchType.LAZY)
85 - @JsonView({ Views.EnviarProcessoView.class, Views.UnidadeProcessoListView.class }) 85 + @JsonView({ Views.EnviarProcessoView.class, Views.UnidadeProcessoListView.class, Views.processoVHview.class})
86 private Usuario usuarioResponsavel; 86 private Usuario usuarioResponsavel;
87 87
88 /** 88 /**
cit-ecm-api/src/main/java/br/com/centralit/api/security/CustomWebSecurityExpresssionRoot.java
@@ -100,5 +100,27 @@ public class CustomWebSecurityExpresssionRoot extends WebSecurityExpressionRoot @@ -100,5 +100,27 @@ public class CustomWebSecurityExpresssionRoot extends WebSecurityExpressionRoot
100 100
101 return this.credencialProcessoService.permiteRenunciar(idProcesso); 101 return this.credencialProcessoService.permiteRenunciar(idProcesso);
102 } 102 }
  103 +
  104 + /**
  105 + * <p>
  106 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  107 + * </p>
  108 + *
  109 + * <p>
  110 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  111 + * </p>
  112 + *
  113 + * Método responsável por verificar se o usuario tem permissão para executar o processo
  114 + *
  115 + * @author rogerio.costa
  116 + *
  117 + * @return boolean
  118 + */
  119 + public boolean permiteExecutar() {
  120 +
  121 + Long idProcesso = (Long) this.request.getSession().getAttribute("idProcesso");
  122 +
  123 + return this.credencialProcessoService.permiteExecutar(idProcesso);
  124 + }
103 125
104 } 126 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/CredencialProcessoService.java
@@ -221,4 +221,40 @@ public interface CredencialProcessoService extends GenericService&lt;CredencialProc @@ -221,4 +221,40 @@ public interface CredencialProcessoService extends GenericService&lt;CredencialProc
221 */ 221 */
222 Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo); 222 Collection<Grupo> findGrupoPorSigilo(Sigilo sigilo);
223 223
  224 + /**
  225 + * <p>
  226 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  227 + * </p>
  228 + *
  229 + * <p>
  230 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  231 + * </p>
  232 + *
  233 + * Método responsável por validar acesso para o processo
  234 + *
  235 + * @author rogerio.costa
  236 + *
  237 + * @param idProcessInstance
  238 + */
  239 + void validarAcessoPesquisa(Long idProcessInstance);
  240 +
  241 + /**
  242 + * <p>
  243 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  244 + * </p>
  245 + *
  246 + * <p>
  247 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  248 + * </p>
  249 + *
  250 + * Método responsável por verificar se o usuario tem permissão para executar o processo
  251 + *
  252 + * @author rogerio.costa
  253 + *
  254 + * @param idProcesso
  255 + *
  256 + * @return Boolean
  257 + */
  258 + Boolean permiteExecutar(Long idProcesso);
  259 +
224 } 260 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/ProcessoService.java
@@ -2,6 +2,7 @@ package br.com.centralit.api.service; @@ -2,6 +2,7 @@ package br.com.centralit.api.service;
2 2
3 import br.com.centralit.api.model.PlanoClassificacao; 3 import br.com.centralit.api.model.PlanoClassificacao;
4 import br.com.centralit.api.model.Processo; 4 import br.com.centralit.api.model.Processo;
  5 +import br.com.centralit.api.viewHelper.ProcessoVH;
5 import br.com.centralit.framework.service.arquitetura.GenericService; 6 import br.com.centralit.framework.service.arquitetura.GenericService;
6 7
7 import com.googlecode.genericdao.search.ISearch; 8 import com.googlecode.genericdao.search.ISearch;
@@ -222,4 +223,22 @@ public interface ProcessoService extends GenericService&lt;Processo, Long&gt; { @@ -222,4 +223,22 @@ public interface ProcessoService extends GenericService&lt;Processo, Long&gt; {
222 */ 223 */
223 <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search); 224 <RT> SearchResult<RT> searchAndCountPorSigilo(ISearch search);
224 225
  226 + /**
  227 + * <p>
  228 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  229 + * </p>
  230 + *
  231 + * <p>
  232 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  233 + * </p>
  234 + *
  235 + * Método responsável por obter o processo.
  236 + *
  237 + * @author rogerio.costa
  238 + *
  239 + * @param id
  240 + * @return
  241 + */
  242 + ProcessoVH getProcessoView(Long id);
  243 +
225 } 244 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/UnidadeProcessoService.java
@@ -200,4 +200,23 @@ public interface UnidadeProcessoService extends GenericService&lt;UnidadeProcesso, @@ -200,4 +200,23 @@ public interface UnidadeProcessoService extends GenericService&lt;UnidadeProcesso,
200 */ 200 */
201 Boolean isProcessoEnviado(Long idProcesso); 201 Boolean isProcessoEnviado(Long idProcesso);
202 202
  203 + /**
  204 + * <p>
  205 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  206 + * </p>
  207 + *
  208 + * <p>
  209 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  210 + * </p>
  211 + *
  212 + * Método responsável por verificar se o processo pertence a unidade
  213 + *
  214 + * @author rogerio.costa
  215 + *
  216 + * @param idProcesso
  217 + * @param idUnidade
  218 + * @return boolean
  219 + */
  220 + boolean isProcessoNaUnidadeUsuarioLogado(Long idProcesso);
  221 +
203 } 222 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/CredencialProcessoServiceImpl.java
@@ -5,6 +5,8 @@ import java.util.Collection; @@ -5,6 +5,8 @@ import java.util.Collection;
5 import java.util.LinkedList; 5 import java.util.LinkedList;
6 import java.util.List; 6 import java.util.List;
7 7
  8 +import javax.servlet.http.HttpServletRequest;
  9 +
8 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
10 12
@@ -19,6 +21,7 @@ import br.com.centralit.api.service.GrupoService; @@ -19,6 +21,7 @@ import br.com.centralit.api.service.GrupoService;
19 import br.com.centralit.api.service.HistoricoCredencialProcessoService; 21 import br.com.centralit.api.service.HistoricoCredencialProcessoService;
20 import br.com.centralit.api.service.ProcessoService; 22 import br.com.centralit.api.service.ProcessoService;
21 import br.com.centralit.api.service.SigiloService; 23 import br.com.centralit.api.service.SigiloService;
  24 +import br.com.centralit.api.service.UnidadeProcessoService;
22 import br.com.centralit.api.service.UsuarioService; 25 import br.com.centralit.api.service.UsuarioService;
23 import br.com.centralit.api.viewHelper.GrupoUsuarioVH; 26 import br.com.centralit.api.viewHelper.GrupoUsuarioVH;
24 import br.com.centralit.api.viewHelper.HerancaSistemaVH; 27 import br.com.centralit.api.viewHelper.HerancaSistemaVH;
@@ -89,6 +92,14 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial @@ -89,6 +92,14 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial
89 @Autowired 92 @Autowired
90 private SigiloService sigiloService; 93 private SigiloService sigiloService;
91 94
  95 + /** Atributo unidadeProcessoService. */
  96 + @Autowired
  97 + private UnidadeProcessoService unidadeProcessoService;
  98 +
  99 + /** Atributo request. */
  100 + @Autowired
  101 + private HttpServletRequest request;
  102 +
92 /** 103 /**
93 * Responsável pela criação de novas instâncias desta classe. 104 * Responsável pela criação de novas instâncias desta classe.
94 * 105 *
@@ -812,4 +823,44 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial @@ -812,4 +823,44 @@ public class CredencialProcessoServiceImpl extends GenericServiceImpl&lt;Credencial
812 return Boolean.FALSE; 823 return Boolean.FALSE;
813 } 824 }
814 825
  826 + @Override
  827 + public void validarAcessoPesquisa(Long idProcessInstance) {
  828 +
  829 + Processo processo = (Processo) this.processoService.findByKeyValueUnique("idProcessInstance", idProcessInstance.toString());
  830 +
  831 + this.request.getSession().setAttribute("idProcesso", processo.getId());
  832 +
  833 + }
  834 +
  835 + /**
  836 + * <p>
  837 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  838 + * </p>
  839 + *
  840 + * <p>
  841 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  842 + * </p>
  843 + *
  844 + * Método responsável por verificar se o usuario tem permissão para executar o processo
  845 + *
  846 + * @author rogerio.costa
  847 + *
  848 + * @param idProcesso
  849 + *
  850 + * @return Boolean
  851 + */
  852 + public Boolean permiteExecutar(Long idProcesso) {
  853 +
  854 + Processo processo = this.processoService.find(idProcesso);
  855 +
  856 + if (processo.getNivelAcesso().getNivelAcesso().getCodigo().equals(2L)) {
  857 +
  858 + return Boolean.TRUE;
  859 +
  860 + }
  861 +
  862 + return this.unidadeProcessoService.isProcessoNaUnidadeUsuarioLogado(idProcesso);
  863 +
  864 + }
  865 +
815 } 866 }
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/ProcessoServiceImpl.java
@@ -42,6 +42,7 @@ import br.com.centralit.api.service.SolrService; @@ -42,6 +42,7 @@ import br.com.centralit.api.service.SolrService;
42 import br.com.centralit.api.service.TemporalidadeService; 42 import br.com.centralit.api.service.TemporalidadeService;
43 import br.com.centralit.api.service.UnidadeProcessoService; 43 import br.com.centralit.api.service.UnidadeProcessoService;
44 import br.com.centralit.api.service.UnidadeService; 44 import br.com.centralit.api.service.UnidadeService;
  45 +import br.com.centralit.api.viewHelper.ProcessoVH;
45 import br.com.centralit.framework.esi.enumerated.VariableTypeEnum; 46 import br.com.centralit.framework.esi.enumerated.VariableTypeEnum;
46 import br.com.centralit.framework.esi.environment.EnvironmentOutput; 47 import br.com.centralit.framework.esi.environment.EnvironmentOutput;
47 import br.com.centralit.framework.esi.environment.EnvironmentVariable; 48 import br.com.centralit.framework.esi.environment.EnvironmentVariable;
@@ -95,6 +96,8 @@ import com.googlecode.genericdao.search.SearchResult; @@ -95,6 +96,8 @@ import com.googlecode.genericdao.search.SearchResult;
95 @Service("processoService") 96 @Service("processoService")
96 public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> implements ProcessoService { 97 public class ProcessoServiceImpl extends GenericServiceImpl<Processo, Long> implements ProcessoService {
97 98
  99 + private static final String ECM_VALIDACAO_PERMISSAO_OPERACAO = "ECM.VALIDACAO.PERMISSAO_OPERACAO";
  100 +
98 /** Cosntante VALIDAR_OUTRAS_UNIDADES. */ 101 /** Cosntante VALIDAR_OUTRAS_UNIDADES. */
99 private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES"; 102 private static final String VALIDAR_OUTRAS_UNIDADES = "ECM.VALIDACAO.VALIDAR_ALTERACAO_NIVEL_ACESSO_OUTRAS_UNIDADES";
100 103
@@ -176,12 +179,13 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -176,12 +179,13 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
176 this.gerarNUP(processo); 179 this.gerarNUP(processo);
177 } 180 }
178 181
179 - this.saveSolr(processo);  
180 -  
181 // Verifica se o processo é sigiloso, verdadeiro sejá estarta o businessProcess, falso envia uma notificação para os grupos responsáeis. 182 // Verifica se o processo é sigiloso, verdadeiro sejá estarta o businessProcess, falso envia uma notificação para os grupos responsáeis.
182 if (!UtilObjeto.isReferencia(processo.getSigilo())) { 183 if (!UtilObjeto.isReferencia(processo.getSigilo())) {
183 184
184 this.startBusinessProcess(processo); 185 this.startBusinessProcess(processo);
  186 +
  187 + this.saveSolr(processo);
  188 +
185 } else { 189 } else {
186 190
187 this.enviarNotificacaoProcessoSigiloso(processo); 191 this.enviarNotificacaoProcessoSigiloso(processo);
@@ -275,10 +279,7 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -275,10 +279,7 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
275 279
276 try { 280 try {
277 281
278 - if (!UtilObjeto.isReferencia(processo.getSigilo())) {  
279 -  
280 - this.solrService.addProcesso(processo);  
281 - } 282 + this.solrService.addProcesso(processo);
282 283
283 } catch (final Exception e) { 284 } catch (final Exception e) {
284 285
@@ -697,6 +698,72 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl @@ -697,6 +698,72 @@ public class ProcessoServiceImpl extends GenericServiceImpl&lt;Processo, Long&gt; impl
697 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a> 698 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
698 * </p> 699 * </p>
699 * 700 *
  701 + * Método responsável por obter o processo.
  702 + *
  703 + * @author rogerio.costa
  704 + *
  705 + * @param id
  706 + * @return
  707 + */
  708 + public ProcessoVH getProcessoView(Long id) {
  709 +
  710 + Processo processo = super.getReference(id);
  711 +
  712 + this.verificarPermissaoAcessoProcesso(id, processo);
  713 +
  714 + processo.setDocumentos(this.documentoGedService.findByIdProcessoUltimaVersao(id));
  715 +
  716 + ProcessoVH processoVH = new ProcessoVH();
  717 +
  718 + processoVH.setProcesso(processo);
  719 +
  720 + return processoVH;
  721 + }
  722 +
  723 + /**
  724 + * <p>
  725 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  726 + * </p>
  727 + *
  728 + * <p>
  729 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  730 + * </p>
  731 + *
  732 + * Método responsável por verificar se o usuario contem permissão para acessar o processo
  733 + *
  734 + * @author rogerio.costa
  735 + *
  736 + * @param id
  737 + * @param processo
  738 + */
  739 + private void verificarPermissaoAcessoProcesso(Long id, Processo processo) {
  740 +
  741 + if (processo.getNivelAcesso().getNivelAcesso().getCodigo().equals(0L)) {
  742 +
  743 + if (!this.credencialProcessoService.contemPermissaoProcesso(id)) {
  744 +
  745 + throw new BusinessException(ECM_VALIDACAO_PERMISSAO_OPERACAO, CodigoErro.REGRA_NEGOCIO.getValue());
  746 + }
  747 +
  748 + } else if (processo.getNivelAcesso().getNivelAcesso().getCodigo().equals(1L)) {
  749 +
  750 + if (!this.unidadeProcessoService.isProcessoNaUnidadeUsuarioLogado(id)) {
  751 +
  752 + throw new BusinessException(ECM_VALIDACAO_PERMISSAO_OPERACAO, CodigoErro.REGRA_NEGOCIO.getValue());
  753 +
  754 + }
  755 + }
  756 + }
  757 +
  758 + /**
  759 + * <p>
  760 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  761 + * </p>
  762 + *
  763 + * <p>
  764 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  765 + * </p>
  766 + *
700 * Método responsável por iniciar o gerenciamento do processo 767 * Método responsável por iniciar o gerenciamento do processo
701 * 768 *
702 * @author rogerio.costa 769 * @author rogerio.costa
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/SolrServiceImpl.java
@@ -78,7 +78,7 @@ public class SolrServiceImpl implements SolrService { @@ -78,7 +78,7 @@ public class SolrServiceImpl implements SolrService {
78 78
79 // Add some example docs 79 // Add some example docs
80 SolrInputDocument processoDoc = new SolrInputDocument(); 80 SolrInputDocument processoDoc = new SolrInputDocument();
81 - processoDoc.setField("id", "proc_" + processo.getId()); 81 + processoDoc.setField("id", processo.getId());
82 processoDoc.setField("nup", processo.getNup()); 82 processoDoc.setField("nup", processo.getNup());
83 processoDoc.setField("objeto", "Processo"); 83 processoDoc.setField("objeto", "Processo");
84 processoDoc.setField("tipoProcesso", processo.getTipoProcesso().getNome()); 84 processoDoc.setField("tipoProcesso", processo.getTipoProcesso().getNome());
@@ -93,6 +93,7 @@ public class SolrServiceImpl implements SolrService { @@ -93,6 +93,7 @@ public class SolrServiceImpl implements SolrService {
93 processoDoc.setField("situacao", ""); 93 processoDoc.setField("situacao", "");
94 processoDoc.setField("nivelAcesso", processo.getNivelAcesso().getNivelAcesso().getDescricao()); 94 processoDoc.setField("nivelAcesso", processo.getNivelAcesso().getNivelAcesso().getDescricao());
95 processoDoc.setField("formatoDocumento", ""); 95 processoDoc.setField("formatoDocumento", "");
  96 + processoDoc.setField("idProcessInstance", processo.getIdProcessInstance().toString());
96 97
97 solrClient.add(processoDoc); 98 solrClient.add(processoDoc);
98 99
@@ -117,7 +118,7 @@ public class SolrServiceImpl implements SolrService { @@ -117,7 +118,7 @@ public class SolrServiceImpl implements SolrService {
117 118
118 sb.append("doc_").append(documentoGed.getIdRaiz() != null ? documentoGed.getIdRaiz() : documentoGed.getId()); 119 sb.append("doc_").append(documentoGed.getIdRaiz() != null ? documentoGed.getIdRaiz() : documentoGed.getId());
119 120
120 - documentoDoc.setField("id", "doc_" + sb.toString()); 121 + documentoDoc.setField("id", sb.toString());
121 documentoDoc.setField("nup", documentoGed.getNumero()); 122 documentoDoc.setField("nup", documentoGed.getNumero());
122 documentoDoc.setField("objeto", "Documento"); 123 documentoDoc.setField("objeto", "Documento");
123 documentoDoc.setField("tipoDocumento", documentoGed.getTipoDocumento().getNome()); 124 documentoDoc.setField("tipoDocumento", documentoGed.getTipoDocumento().getNome());
@@ -131,6 +132,8 @@ public class SolrServiceImpl implements SolrService { @@ -131,6 +132,8 @@ public class SolrServiceImpl implements SolrService {
131 documentoDoc.setField("situacao", ""); 132 documentoDoc.setField("situacao", "");
132 documentoDoc.setField("nivelAcesso", documentoGed.getNivelAcesso().getNivelAcesso().getDescricao()); 133 documentoDoc.setField("nivelAcesso", documentoGed.getNivelAcesso().getNivelAcesso().getDescricao());
133 documentoDoc.setField("formatoDocumento", documentoGed.getFormaCriacao().getDescricao()); 134 documentoDoc.setField("formatoDocumento", documentoGed.getFormaCriacao().getDescricao());
  135 + documentoDoc.setField("idProcessInstance", documentoGed.getProcesso().getIdProcessInstance().toString());
  136 + documentoDoc.setField("idProcesso", documentoGed.getProcesso().getId().toString());
134 // verifica se o nivel de acesso é restrito 137 // verifica se o nivel de acesso é restrito
135 if (!documentoGed.getNivelAcesso().getNivelAcesso().getCodigo().equals(1L)) { 138 if (!documentoGed.getNivelAcesso().getNivelAcesso().getCodigo().equals(1L)) {
136 139
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/UnidadeProcessoServiceImpl.java
@@ -364,4 +364,32 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces @@ -364,4 +364,32 @@ public class UnidadeProcessoServiceImpl extends GenericServiceImpl&lt;UnidadeProces
364 364
365 } 365 }
366 366
  367 + /**
  368 + * <p>
  369 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  370 + * </p>
  371 + *
  372 + * <p>
  373 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  374 + * </p>
  375 + *
  376 + * Método responsável por verificar se o processo pertence a unidade
  377 + *
  378 + * @author rogerio.costa
  379 + *
  380 + * @param idProcesso
  381 + * @param idUnidade
  382 + * @return boolean
  383 + */
  384 + public boolean isProcessoNaUnidadeUsuarioLogado(Long idProcesso) {
  385 +
  386 + if (UtilObjeto.isReferencia(this.getUsuario().getUnidade())) {
  387 +
  388 + return this.unidadeProcessoDao.isProcessoNaUnidadeUsuarioLogado(idProcesso, this.getUsuario().getUnidade().getId());
  389 + }
  390 +
  391 + return Boolean.FALSE;
  392 +
  393 + }
  394 +
367 } 395 }
cit-ecm-api/src/main/resources/scripts/v1.0.0-alpha9/01-cit-ecm-1.0.0-ALFA-3-postgres.sql
@@ -36,4 +36,9 @@ INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedic @@ -36,4 +36,9 @@ INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedic
36 VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 1)); 36 VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 1));
37 INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id) 37 INSERT INTO tarjaassinatura(id, databloqueio, datainativo, datacriacao, dataedicao, version, conteudo, descricao, inativador_id, autor_id, editor_id, anexoimagem_id, tipoassinatura_id)
38 VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 2)); 38 VALUES (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0, '', '', null, (select id from seguranca_usuario where username = 'admin'), null, null, (select id from dominio where chave = 'tipoAssinatura' and codigo = 2));
39 --- CIRO - 18/04/2016 - FIM  
40 \ No newline at end of file 39 \ No newline at end of file
  40 +
  41 +update dominio set chave='estadoDocumentoGed' where chave = 'statusDocumentoGed';
  42 +-- CIRO - 18/04/2016 - FIM
  43 +
  44 +
  45 +
cit-ecm-web/src/main/java/br/com/centralit/controller/CredencialProcessoController.java
@@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestMethod; @@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
11 import org.springframework.web.bind.annotation.RequestParam; 11 import org.springframework.web.bind.annotation.RequestParam;
12 import org.springframework.web.bind.annotation.ResponseBody; 12 import org.springframework.web.bind.annotation.ResponseBody;
13 13
14 -import br.com.centralit.api.framework.json.ViewsEcm;  
15 import br.com.centralit.api.model.CredencialProcesso; 14 import br.com.centralit.api.model.CredencialProcesso;
16 import br.com.centralit.api.service.CredencialProcessoService; 15 import br.com.centralit.api.service.CredencialProcessoService;
17 import br.com.centralit.api.viewHelper.GrupoUsuarioVH; 16 import br.com.centralit.api.viewHelper.GrupoUsuarioVH;
@@ -167,6 +166,18 @@ public class CredencialProcessoController extends GenericController&lt;CredencialPr @@ -167,6 +166,18 @@ public class CredencialProcessoController extends GenericController&lt;CredencialPr
167 return responseBody; 166 return responseBody;
168 } 167 }
169 168
  169 + @RequestMapping(method = RequestMethod.POST, value = "/validarAcessoPesquisa")
  170 + @ResponseBody
  171 + public ResponseBodyWrapper validarAcessoPesquisa(@RequestBody String idProcessInstance) {
  172 +
  173 + this.credencialProcessoService.validarAcessoPesquisa(Long.parseLong(idProcessInstance));
  174 +
  175 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(Boolean.TRUE, Views.GenericView.class);
  176 +
  177 + return responseBody;
  178 +
  179 + }
  180 +
170 @Override 181 @Override
171 public Class<Views.CredencialProcessoView> getEditView() { 182 public Class<Views.CredencialProcessoView> getEditView() {
172 183
cit-ecm-web/src/main/java/br/com/centralit/controller/ProcessoController.java
@@ -122,6 +122,15 @@ public class ProcessoController extends GenericController&lt;Processo&gt; { @@ -122,6 +122,15 @@ public class ProcessoController extends GenericController&lt;Processo&gt; {
122 return responseBody; 122 return responseBody;
123 } 123 }
124 124
  125 + @RequestMapping(method = RequestMethod.GET, value = "/getProcessoVH")
  126 + @ResponseBody
  127 + public ResponseBodyWrapper getProcessoVH(@RequestParam(value = "idProcesso") Long idProcesso) {
  128 +
  129 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.processoService.getProcessoView(idProcesso), Views.processoVHview.class);
  130 +
  131 + return responseBody;
  132 + }
  133 +
125 /** 134 /**
126 * <p> 135 * <p>
127 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a> 136 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
@@ -159,9 +168,9 @@ public class ProcessoController extends GenericController&lt;Processo&gt; { @@ -159,9 +168,9 @@ public class ProcessoController extends GenericController&lt;Processo&gt; {
159 search.setResultMode(Search.RESULT_MAP); 168 search.setResultMode(Search.RESULT_MAP);
160 169
161 SearchResult searchResult = null; 170 SearchResult searchResult = null;
162 - 171 +
163 String nomeGrid = UtilString.isNullOrEmpty(searchParams.getNome()) ? "" : searchParams.getNome(); 172 String nomeGrid = UtilString.isNullOrEmpty(searchParams.getNome()) ? "" : searchParams.getNome();
164 - 173 +
165 switch (nomeGrid) { 174 switch (nomeGrid) {
166 case Processo.GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO: 175 case Processo.GRID_CLASSIFICACAO_PROCESSO_DOCUMENTO:
167 searchResult = this.processoService.searchAndCountPorSigilo(search); 176 searchResult = this.processoService.searchAndCountPorSigilo(search);
cit-ecm-web/src/main/java/br/com/centralit/controller/UnidadeProcessoController.java
@@ -58,7 +58,7 @@ import br.com.centralit.framework.view.ResultResponseVH; @@ -58,7 +58,7 @@ import br.com.centralit.framework.view.ResultResponseVH;
58 * @author rogerio.costa 58 * @author rogerio.costa
59 * 59 *
60 */ 60 */
61 -@SuppressWarnings({"unchecked", "rawtypes"}) 61 +@SuppressWarnings({ "unchecked", "rawtypes" })
62 @Controller 62 @Controller
63 @RequestMapping("/rest/unidadeProcesso") 63 @RequestMapping("/rest/unidadeProcesso")
64 public class UnidadeProcessoController extends GenericController<UnidadeProcesso> { 64 public class UnidadeProcessoController extends GenericController<UnidadeProcesso> {
@@ -127,6 +127,32 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso @@ -127,6 +127,32 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso
127 return responseBody; 127 return responseBody;
128 } 128 }
129 129
  130 + /**
  131 + * <p>
  132 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  133 + * </p>
  134 + *
  135 + * <p>
  136 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  137 + * </p>
  138 + *
  139 + * Método responsável por
  140 + *
  141 + * @author rogerio.costa
  142 + *
  143 + * @param idProcesso
  144 + * @param idUnidade
  145 + * @return
  146 + */
  147 + @RequestMapping(value = "/isProcessoNaUnidadeUsuarioLogado", method = RequestMethod.GET, produces = "application/json")
  148 + @ResponseBody
  149 + public ResponseBodyWrapper isProcessoNaUnidadeUsuarioLogado(@RequestParam(value = "idProcesso") Long idProcesso) {
  150 +
  151 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.unidadeProcessoService.isProcessoNaUnidadeUsuarioLogado(idProcesso), Views.GenericView.class);
  152 +
  153 + return responseBody;
  154 + }
  155 +
130 @RequestMapping(value = "/getPage", method = RequestMethod.POST) 156 @RequestMapping(value = "/getPage", method = RequestMethod.POST)
131 @ResponseBody 157 @ResponseBody
132 public ResponseBodyWrapper findGrid(@RequestBody SearchParams searchParams) { 158 public ResponseBodyWrapper findGrid(@RequestBody SearchParams searchParams) {
@@ -138,13 +164,13 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso @@ -138,13 +164,13 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso
138 search.setResultMode(Search.RESULT_MAP); 164 search.setResultMode(Search.RESULT_MAP);
139 165
140 SearchResult searchResult = null; 166 SearchResult searchResult = null;
141 - 167 +
142 String nomeGrid = UtilString.isNullOrEmpty(searchParams.getNome()) ? "" : searchParams.getNome(); 168 String nomeGrid = UtilString.isNullOrEmpty(searchParams.getNome()) ? "" : searchParams.getNome();
143 - 169 +
144 switch (nomeGrid) { 170 switch (nomeGrid) {
145 case Processo.GRID_PROCESSO_NA_UNIDADE: 171 case Processo.GRID_PROCESSO_NA_UNIDADE:
146 - searchResult = this.unidadeProcessoService.searchAndCountPorUnidade(search);  
147 - break; 172 + searchResult = this.unidadeProcessoService.searchAndCountPorUnidade(search);
  173 + break;
148 default: 174 default:
149 searchResult = genericService.searchAndCount(search); 175 searchResult = genericService.searchAndCount(search);
150 break; 176 break;
@@ -162,7 +188,6 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso @@ -162,7 +188,6 @@ public class UnidadeProcessoController extends GenericController&lt;UnidadeProcesso
162 return responseBody; 188 return responseBody;
163 } 189 }
164 190
165 -  
166 @Override 191 @Override
167 public Class<Views.EnviarProcessoView> getEditView() { 192 public Class<Views.EnviarProcessoView> getEditView() {
168 193
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
@@ -454,6 +454,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -454,6 +454,7 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
454 internacionalizacaoList.add(new Internacionalizacao("ECM.ASSINADO_SUCESSO", "Documento assinado com sucesso!", dominio, modulo)); 454 internacionalizacaoList.add(new Internacionalizacao("ECM.ASSINADO_SUCESSO", "Documento assinado com sucesso!", dominio, modulo));
455 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURA_DO_DOCUMENTO", "Assinatura do Documento", dominio, modulo)); 455 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.ASSINATURA_DO_DOCUMENTO", "Assinatura do Documento", dominio, modulo));
456 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DOCUMENTO_SEM_ASSINATURA", "Documento sem assinaturas!", dominio, modulo)); 456 internacionalizacaoList.add(new Internacionalizacao("ECM.LABEL.DOCUMENTO_SEM_ASSINATURA", "Documento sem assinaturas!", dominio, modulo));
  457 +
457 458
458 } 459 }
459 460
@@ -573,5 +574,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen @@ -573,5 +574,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
573 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo)); 574 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo));
574 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo)); 575 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo));
575 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo)); 576 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo));
  577 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.INFORMACAO_RESTRITA", "Informação restrita", dominio, modulo));
576 } 578 }
577 } 579 }
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/GerenciarProcessoController.js
@@ -615,7 +615,7 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -615,7 +615,7 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
615 $scope.siglas = []; 615 $scope.siglas = [];
616 616
617 // CARREGA O PROCESSO VINCULADO A TAREFA 617 // CARREGA O PROCESSO VINCULADO A TAREFA
618 - $timeout( function () { 618 + $timeout(function() {
619 619
620 ProcessoRepository.getProcessoGerenciamento($scope.idProcesso).then( function ( result ) { 620 ProcessoRepository.getProcessoGerenciamento($scope.idProcesso).then( function ( result ) {
621 $scope.processo = result.originalElement; 621 $scope.processo = result.originalElement;
@@ -638,10 +638,10 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -638,10 +638,10 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
638 638
639 $scope.setLoading( false ); 639 $scope.setLoading( false );
640 640
641 - } ); 641 + });
642 642
643 - }, 400 );  
644 - } ); 643 + }, 400);
  644 + });
645 }; 645 };
646 // FIM EXECUTAR BPE 646 // FIM EXECUTAR BPE
647 647
@@ -689,6 +689,29 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim @@ -689,6 +689,29 @@ citApp.controller(&#39;GerenciarProcessoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;$tim
689 689
690 }; 690 };
691 691
  692 + //Obter o processoVH
  693 + $scope.getProcessoVH = function (idProcesso) {
  694 +
  695 + $scope.setLoadingGet(true);
  696 +
  697 + ProcessoRepository.getProcessoVH(idProcesso).then(function(result) {
  698 + //Processo do scopo do gerenciamento
  699 + $scope.processoVH = result.originalElement;
  700 +
  701 + $scope.processo = $scope.processoVH.processo;
  702 + $scope.idProcesso = $scope.processo.id;
  703 +
  704 + $scope.fecharPagina();
  705 +
  706 + $scope.apresentarCabecalho = true;
  707 +
  708 + $scope.widgetExemploIsCollapsed = false;
  709 +
  710 + $scope.setLoading(false);
  711 + });
  712 +
  713 + };
  714 +
692 $scope.atualizarAtribuicaoProcesso = function (idProcesso){ 715 $scope.atualizarAtribuicaoProcesso = function (idProcesso){
693 716
694 ProcessoRepository.verificarAtribuicaoProcessoPrimeiroAcesso(idProcesso).then( function ( result ) { 717 ProcessoRepository.verificarAtribuicaoProcessoPrimeiroAcesso(idProcesso).then( function ( result ) {
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/SolrSearchController.js
@@ -26,11 +26,13 @@ @@ -26,11 +26,13 @@
26 * @param Utils 26 * @param Utils
27 */ 27 */
28 28
29 -citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route','$routeParams','$window','$timeout','SolrSearchService','Utils', "$compile", 'DominioRepository', '$filter',  
30 - function SolrSearchController($scope, $attrs, $location, $route, $routeParams, $window, $timeout, SolrSearchService, Utils, $compile, DominioRepository, $filter) { 29 +citApp.controller('SolrSearchController', ['$scope','$attrs','$location','$route','$routeParams','$window','$timeout','SolrSearchService','Utils', "$compile", 'DominioRepository', '$filter', "workflowFilterCriteriaService",
  30 + "BusinessProcessRepository", "appService", "$rootScope", "$translate", 'UnidadeProcessoRepository', 'CredencialProcessoRepository',
  31 + function SolrSearchController($scope, $attrs, $location, $route, $routeParams, $window, $timeout, SolrSearchService, Utils, $compile, DominioRepository, $filter, workflowFilterCriteriaService, BusinessProcessRepository,
  32 + appService, $rootScope, $translate, UnidadeProcessoRepository, CredencialProcessoRepository) {
31 33
32 $scope.searchHintsField = 'tipoProcesso,tipoDocumento,objeto,assunto,autor,atribuidoA,destinatario,unidadeGeradora,situacao,nivelAcesso,dataCriacao'; 34 $scope.searchHintsField = 'tipoProcesso,tipoDocumento,objeto,assunto,autor,atribuidoA,destinatario,unidadeGeradora,situacao,nivelAcesso,dataCriacao';
33 - 35 +
34 // instructional message to aid the user in constructing a query 36 // instructional message to aid the user in constructing a query
35 $scope.messages = [ 37 $scope.messages = [
36 "Enter one or more search terms. Press Enter to search.", 38 "Enter one or more search terms. Press Enter to search.",
@@ -123,7 +125,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -123,7 +125,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
123 $scope.handleSetPage = function() { 125 $scope.handleSetPage = function() {
124 126
125 $scope.timeout = $timeout(function () { 127 $scope.timeout = $timeout(function () {
126 - var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); 128 + var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
127 query.setOption("rows", "10"); 129 query.setOption("rows", "10");
128 query.setOption("facet", "true"); 130 query.setOption("facet", "true");
129 query.setOption("facet.limit", $scope.maxHints); 131 query.setOption("facet.limit", $scope.maxHints);
@@ -187,6 +189,8 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -187,6 +189,8 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
187 results.docs[i].conteudo = results.docs[i].conteudo + item; 189 results.docs[i].conteudo = results.docs[i].conteudo + item;
188 }); 190 });
189 191
  192 + }else{
  193 + results.docs[i].conteudo = "";
190 } 194 }
191 } 195 }
192 196
@@ -330,7 +334,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -330,7 +334,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
330 if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) { 334 if ($scope.userQuery && $scope.userQuery.length >= $scope.minSearchLength) {
331 if ($scope.timeout) $timeout.cancel($scope.timeout); 335 if ($scope.timeout) $timeout.cancel($scope.timeout);
332 $scope.timeout = $timeout(function () { 336 $scope.timeout = $timeout(function () {
333 - var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); 337 + var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
334 query.setOption("rows", "10"); 338 query.setOption("rows", "10");
335 query.setOption("facet", "true"); 339 query.setOption("facet", "true");
336 query.setOption("facet.limit", $scope.maxHints); 340 query.setOption("facet.limit", $scope.maxHints);
@@ -409,7 +413,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -409,7 +413,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
409 $scope.userQuery = "*:*"; 413 $scope.userQuery = "*:*";
410 } 414 }
411 $scope.timeout = $timeout(function () { 415 $scope.timeout = $timeout(function () {
412 - var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); 416 + var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
413 query.setOption("rows", "10"); 417 query.setOption("rows", "10");
414 query.setOption("facet", "true"); 418 query.setOption("facet", "true");
415 query.setOption("facet.limit", $scope.maxHints); 419 query.setOption("facet.limit", $scope.maxHints);
@@ -440,7 +444,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -440,7 +444,7 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
440 valueFilter = "*:*"; 444 valueFilter = "*:*";
441 } 445 }
442 $scope.timeout = $timeout(function () { 446 $scope.timeout = $timeout(function () {
443 - var query = SolrSearchService.createQuery("https://172.20.0.74:8983/solr/jcg"); 447 + var query = SolrSearchService.createQuery("https://localhost:8983/solr/jcg");
444 query.setOption("rows", "10"); 448 query.setOption("rows", "10");
445 query.setOption("facet", "true"); 449 query.setOption("facet", "true");
446 query.setOption("facet.limit", $scope.maxHints); 450 query.setOption("facet.limit", $scope.maxHints);
@@ -600,8 +604,162 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route @@ -600,8 +604,162 @@ citApp.controller(&#39;SolrSearchController&#39;, [&#39;$scope&#39;,&#39;$attrs&#39;,&#39;$location&#39;,&#39;$route
600 $scope.parameterDatePesquisa = $.grep($scope.filtroDateList, function(e){ return e.codigo == 0; })[0].originalElement; 604 $scope.parameterDatePesquisa = $.grep($scope.filtroDateList, function(e){ return e.codigo == 0; })[0].originalElement;
601 605
602 }); 606 });
603 -  
604 - 607 +
  608 + $scope.obterTransclude = function(doc) {
  609 +
  610 + doc.$show = !doc.$show;
  611 + $scope.documents.forEach(function(item){
  612 + if(item.id != doc.id){
  613 + item.$expandido = false;
  614 + item.$show = false;
  615 + }
  616 + });
  617 +
  618 + $scope.docSelecionado = doc;
  619 + if(doc.$show){
  620 + _getFilterCriteriaTarefa();
  621 + _fetchBusinessProcess(doc);
  622 + }else{
  623 + doc.$expandido = false;
  624 + doc.$show = false;
  625 + };
  626 + };
  627 +
  628 + function _getFilterCriteriaTarefa(){
  629 + var filterService = workflowFilterCriteriaService.getDefaultFilterCriteria();
  630 + $scope.filterCriteriaBusinessProcess = {
  631 + start : 1,
  632 + sort : 'workItem.processInstance.id',
  633 + limit : 10,
  634 + deadline : 1,
  635 + processDeadline : 1,
  636 + timeManagementStatus : "",
  637 + fields : [ 'workItem.id', 'workItem.processInstance.id'],
  638 + filters : [{type: 'numeric', field: 'workItem.processInstance.id', value : $scope.docSelecionado.idProcessInstance}
  639 + , {type: 'string', field: 'workItem.flowElement.name'}
  640 + , {type: 'string', field: 'workItem.processInstance.businessProcess.description'}
  641 + , {type: 'string', field: 'workItem.processInstance.flowStatus.name'}]
  642 + };
  643 + $scope.filterCriteriaBusinessProcess.username = filterService.username;
  644 + $scope.filterCriteriaBusinessProcess.groups = filterService.groups;
  645 + }
  646 +
  647 + function _fetchBusinessProcess(doc) {
  648 + $scope.assignments = [];
  649 + $scope.btnAction = false;
  650 + $scope.workItem = null;
  651 + $scope.setLoadingGet(true);
  652 + BusinessProcessRepository.tasksByParam($scope.filterCriteriaBusinessProcess).then(function(result) {
  653 + $scope.assignments = result.originalElement.objects;
  654 +
  655 + if($scope.docSelecionado.idProcessInstance){
  656 + CredencialProcessoRepository.validarAcessoPesquisa($scope.docSelecionado.idProcessInstance).then(function(result) {
  657 +
  658 + $scope.urlInclude= '/cit-ecm-web/html/pesquisa/tarefasProcesso.jsp?i=' + $scope.docSelecionado.id;
  659 + doc.$expandido = !doc.$expandido;
  660 + });
  661 +
  662 + }
  663 + if($scope.assignments.length > 0){
  664 + _recuperarPermissoes($scope.assignments[0].id, doc);
  665 + };
  666 + $scope.setLoadingGet(false);
  667 + });
  668 + };
  669 +
  670 + function _recuperarPermissoes(idAssignment, doc){
  671 + BusinessProcessRepository.getPermissions({id: idAssignment}).then(function(result) {
  672 + $scope.workItem = result.originalElement;
  673 + vincularWorkItemAssignments();
  674 + $scope.btnAction = !(!$scope.workItem.execute && !$scope.workItem.suspend && !$scope.workItem.delegate && !$scope.workItem.restart && !$scope.workItem.visualize);
  675 + $scope.docSelecionado.workItem = $scope.workItem;
  676 + $scope.setLoadingGet(false);
  677 + });
  678 + };
  679 +
  680 + function vincularWorkItemAssignments(){
  681 + $scope.assignments.forEach(function(assignment){
  682 + assignment.workItem = $scope.workItem;
  683 + assignment.checked = false;
  684 + });
  685 + if($scope.assignments.length > 0){
  686 + $scope.assignments[0].checked = true;
  687 + }
  688 + };
  689 +
  690 + $scope.executarTarefa = function(){
  691 + _getAssignmentSelected();
  692 + if($scope.workItem){
  693 + var pagina = '/cit-esi-web/assets/js/angular/custom/directive/html/userTask.html';
  694 + if ($scope.workItem.flowElement.userInterface && $scope.workItem.flowElement.userInterface.executeCustomPage) {
  695 + pagina = $scope.workItem.flowElement.userInterface.URLCustomPage;
  696 + _abrirPaginaTarefa(pagina);
  697 + }else if ($scope.workItem.flowElement.userInterface && $scope.workItem.flowElement.userInterface.resource && $scope.workItem.flowElement.userInterface.resourceName) {
  698 + FormBuilderRepository.getByName($scope.workItem.flowElement.userInterface.resourceName).then(function(result) {
  699 + pagina = '/cit-esi-web/forms/'+result.originalElement.path+'/'+result.originalElement.resource.name+"_task.html";
  700 + _abrirPaginaTarefa(pagina);
  701 + });
  702 + }else{
  703 + _abrirPaginaTarefa(pagina);
  704 + }
  705 + }
  706 + };
  707 +
  708 + function _abrirPaginaTarefa(pagina){
  709 + if (appService.existsWorkspace(pagina)) {
  710 + $scope.showAlert('warning', $translate.instant('ESI.MSG.JA_EXISTE_TELA_TAREFA'));
  711 + return ;
  712 + }
  713 + $scope.processInstance = $scope.docSelecionado.workItem.processInstance;
  714 + $scope.processInstance.collapsed = true;
  715 + $scope.processInstance.collapsedError = true;
  716 + $rootScope.task = $scope.workItem;
  717 + $rootScope.processInstance = $scope.processInstance;
  718 + $rootScope.controllerScope = $scope;
  719 +
  720 + var nome = $scope.task.flowElement.description;
  721 + if (!nome || nome == '')
  722 + nome = $scope.workItem.flowElement.name;
  723 +
  724 + $scope.addNewWorkspace($translate.instant('ESI.PERMISSAO.EXECUTAR')+" "+$translate.instant('ESI.TAREFA').toLowerCase()+" '"+nome+"'", pagina, true, 'mod-red-dark', $scope.workItem);
  725 + };
  726 +
  727 + function _getAssignmentSelected() {
  728 + for(var pos = 0; pos < $scope.assignments.length; pos++){
  729 + if($scope.assignments[pos].checked){
  730 + $scope.docSelecionado.workItem = $scope.assignments[pos];
  731 + break;
  732 + }
  733 + }
  734 + };
  735 +
  736 + //Abre a tela de visualização de processo e documentos
  737 + $scope.abreVisualizar = function(){
  738 +
  739 + var pagina = '/cit-ecm-web/html/processoVisualizacao/processoView.html';
  740 +
  741 + var paginaGerenciamento = '/cit-ecm-web/html/gerenciarProcesso/gerenciarProcesso.html';
  742 +
  743 + if (appService.existsWorkspace(paginaGerenciamento)) {
  744 + $scope.$openModalConfirm({message:$translate.instant('ECM.MSG.EXISTE_PROCESSO_ABERTO'), callback: function(){
  745 + $scope.$modalConfirmInstance.dismiss('cancel');
  746 + $scope.setLoading(true);
  747 + $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
  748 + $timeout(function() {
  749 + angular.element('#visualizarGerenciarProcesso').scope().getProcessoVH($scope.docSelecionado.objeto === 'Processo'? $scope.docSelecionado.id : $scope.docSelecionado.idProcesso);
  750 +
  751 + }, 100);
  752 + $scope.setLoading(false);
  753 + }});
  754 + }else{
  755 + $scope.openWorkspaceIfNotOpen($translate.instant('ECM.LABEL.PROCESSO'), pagina, 'mod-orange');
  756 + $timeout(function() {
  757 + angular.element('#visualizarGerenciarProcesso').scope().getProcessoVH($scope.docSelecionado.objeto === 'Processo'? $scope.docSelecionado.id : $scope.docSelecionado.idProcesso);
  758 +
  759 + }, 100);
  760 + };
  761 + };
  762 +
605 $scope.init(); 763 $scope.init();
606 }]); 764 }]);
607 765
cit-ecm-web/src/main/webapp/assets/js/angular/custom/repository/CredencialProcessoRepository.js
@@ -21,8 +21,12 @@ citApp.factory(&#39;CredencialProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractRepos @@ -21,8 +21,12 @@ citApp.factory(&#39;CredencialProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractRepos
21 return restangularEcm.one(this.route).getList("findByIdProcesso", {idProcesso : idProcesso}).then(); 21 return restangularEcm.one(this.route).getList("findByIdProcesso", {idProcesso : idProcesso}).then();
22 }; 22 };
23 23
24 - this.renunciar = function (idProcesso) {  
25 - return restangularEcm.one(this.route + "/renunciar", idProcesso).remove(); 24 + this.findByIdProcesso = function(idProcesso) {
  25 + return restangularEcm.one(this.route).getList("findByIdProcesso", {idProcesso : idProcesso}).then();
  26 + };
  27 +
  28 + this.validarAcessoPesquisa = function (idProcessInstance) {
  29 + return restangularEcm.all(this.route + '/validarAcessoPesquisa').post(idProcessInstance);
26 }; 30 };
27 31
28 } 32 }
cit-ecm-web/src/main/webapp/assets/js/angular/custom/repository/ProcessoRepository.js
@@ -32,6 +32,11 @@ citApp.factory(&#39;ProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractRepository&#39;, fu @@ -32,6 +32,11 @@ citApp.factory(&#39;ProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractRepository&#39;, fu
32 32
33 }; 33 };
34 34
  35 + this.getProcessoVH = function (idProcesso){
  36 + return restangularEcm.one(this.route + '/getProcessoVH').get({"idProcesso": idProcesso});
  37 +
  38 + };
  39 +
35 this.verificarAtribuicaoProcessoPrimeiroAcesso = function (idProcesso){ 40 this.verificarAtribuicaoProcessoPrimeiroAcesso = function (idProcesso){
36 return restangularEcm.one(this.route + '/verificarAtribuicaoProcessoPrimeiroAcesso').get({"idProcesso": idProcesso}); 41 return restangularEcm.one(this.route + '/verificarAtribuicaoProcessoPrimeiroAcesso').get({"idProcesso": idProcesso});
37 42
cit-ecm-web/src/main/webapp/assets/js/angular/custom/repository/UnidadeProcessoRepository.js
@@ -18,6 +18,11 @@ citApp.factory(&#39;UnidadeProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractReposito @@ -18,6 +18,11 @@ citApp.factory(&#39;UnidadeProcessoRepository&#39;, [&#39;RestangularEcm&#39;, &#39;AbstractReposito
18 18
19 }; 19 };
20 20
  21 + this.isProcessoNaUnidadeUsuarioLogado = function(idProcesso) {
  22 + return restangularEcm.one(this.route + "/isProcessoNaUnidadeUsuarioLogado").get({"idProcesso" : idProcesso});
  23 +
  24 + };
  25 +
21 } 26 }
22 27
23 AbstractRepository.extend(UnidadeProcessoRepository); 28 AbstractRepository.extend(UnidadeProcessoRepository);
cit-ecm-web/src/main/webapp/html/gerenciarProcesso/includeInformacaoProcesso.html
@@ -142,12 +142,18 @@ @@ -142,12 +142,18 @@
142 </div> 142 </div>
143 <div class="profile-info-value"> 143 <div class="profile-info-value">
144 <br> 144 <br>
145 - <div class="row"> 145 + <div class="row" ng-if="processoUnidades.length > 0">
146 <ul style="list-style-type: disc; margin-bottom: 3px" ng-repeat="processoUnidade in processoUnidades"> 146 <ul style="list-style-type: disc; margin-bottom: 3px" ng-repeat="processoUnidade in processoUnidades">
147 <li>{{processoUnidade.unidade.sigla}} <span ng-if="processoUnidade.usuarioResponsavel">- {{processoUnidade.usuarioResponsavel.username}}</span></li> 147 <li>{{processoUnidade.unidade.sigla}} <span ng-if="processoUnidade.usuarioResponsavel">- {{processoUnidade.usuarioResponsavel.username}}</span></li>
148 </ul> 148 </ul>
149 149
150 </div> 150 </div>
  151 + <div class="row" ng-if="processo.unidadesProcesso.length > 0">
  152 + <ul style="list-style-type: disc; margin-bottom: 3px" ng-repeat="processoUnidade in processo.unidadesProcesso">
  153 + <li>{{processoUnidade.unidade.sigla}} <span ng-if="processoUnidade.usuarioResponsavel">- {{processoUnidade.usuarioResponsavel.username}}</span></li>
  154 + </ul>
  155 +
  156 + </div>
151 </div> 157 </div>
152 </div> 158 </div>
153 </div> 159 </div>
cit-ecm-web/src/main/webapp/html/pesquisa/pesquisa.html
@@ -22,8 +22,7 @@ @@ -22,8 +22,7 @@
22 <div class="row"> 22 <div class="row">
23 <div class="col-sm-10"> 23 <div class="col-sm-10">
24 <div class="input-group" id="inputs"> 24 <div class="input-group" id="inputs">
25 - <input type="text" class="form-control" id="query" type="text" placeholder="{{$translate.instant('ECM.LABEL.PLACEHOLDER_PESQUISA')}}" ng-model="userQuery" autocomplete="off" ng-focus="onfocus()"  
26 - ng-keyup="onkeyup($event)"> 25 + <input type="text" class="form-control" id="query" type="text" placeholder="{{$translate.instant('ECM.LABEL.PLACEHOLDER_PESQUISA')}}" ng-model="userQuery" autocomplete="off" ng-keyup="onkeyup($event)">
27 <div class="input-group-btn"> 26 <div class="input-group-btn">
28 <button class="btn btn-default" type="button" id="submit" name="submit" ng-click="handleSubmit()"> 27 <button class="btn btn-default" type="button" id="submit" name="submit" ng-click="handleSubmit()">
29 <i class="ace-icon fa fa-search icon-on-right bigger-110"></i> 28 <i class="ace-icon fa fa-search icon-on-right bigger-110"></i>
@@ -75,8 +74,10 @@ @@ -75,8 +74,10 @@
75 <b translate>ECM.LABEL.TIPODOCUMENTO</b> 74 <b translate>ECM.LABEL.TIPODOCUMENTO</b>
76 </h5> 75 </h5>
77 <ul class="filters_list"> 76 <ul class="filters_list">
78 - <li ng-repeat="hint in hints['tipoDocumento']" ng-class="{'selected' : hint.selected}"><a href="javascript: return false" ng-click="selectHint('tipoDocumento',$index);" class="filters">  
79 - <span class="itens" ng-show="hint.quantidade > 0">{{hint.title}}</span> <span class="qtd" ng-show="hint.quantidade > 0">{{hint.quantidade}}</span> 77 + <li ng-repeat="hint in hints['tipoDocumento']" ng-class="{'selected' : hint.selected}">
  78 + <a href="javascript: return false" ng-click="selectHint('tipoDocumento',$index);" class="filters">
  79 + <span class="itens" ng-show="hint.quantidade > 0">{{hint.title}}</span>
  80 + <span class="qtd" ng-show="hint.quantidade > 0">{{hint.quantidade}}</span>
80 </a></li> 81 </a></li>
81 </ul> 82 </ul>
82 </li> 83 </li>
@@ -86,9 +87,12 @@ @@ -86,9 +87,12 @@
86 <b translate>ECM.LABEL.ASSUNTO</b> 87 <b translate>ECM.LABEL.ASSUNTO</b>
87 </h5> 88 </h5>
88 <ul class="filters_list"> 89 <ul class="filters_list">
89 - <li ng-repeat="hint in hints['assunto']" ng-class="{'selected' : hint.selected}"><a href="javascript: return false" ng-click="selectHint('assunto',$index)" class="filters"> <span  
90 - class="itens" ng-show="hint.quantidade > 0">{{hint.title}}</span> <span class="qtd" ng-show="hint.quantidade > 0">{{hint.quantidade}}</span>  
91 - </a></li> 90 + <li ng-repeat="hint in hints['assunto']" ng-class="{'selected' : hint.selected}">
  91 + <a href="javascript: return false" ng-click="selectHint('assunto',$index)" class="filters">
  92 + <span class="itens" ng-show="hint.quantidade > 0">{{hint.title}}</span>
  93 + <span class="qtd" ng-show="hint.quantidade > 0">{{hint.quantidade}}</span>
  94 + </a>
  95 + </li>
92 </ul> 96 </ul>
93 </li> 97 </li>
94 98
@@ -232,13 +236,23 @@ @@ -232,13 +236,23 @@
232 <label class="result_metadado">{{doc.assunto}}</label> 236 <label class="result_metadado">{{doc.assunto}}</label>
233 </div> 237 </div>
234 </div> 238 </div>
235 - <div class="row"> 239 + <div class="row" ng-show="doc.assuntoComplementar.length > 0 || doc.conteudo.length > 0">
236 <div class="col-md-12"> 240 <div class="col-md-12">
237 <div ng-show="doc.objeto == 'Processo'">{{doc.assuntoComplementar}}</div> 241 <div ng-show="doc.objeto == 'Processo'">{{doc.assuntoComplementar}}</div>
238 242
239 <div class="result_pesquisa" id="{{doc.id}}"></div> 243 <div class="result_pesquisa" id="{{doc.id}}"></div>
240 </div> 244 </div>
241 </div> 245 </div>
  246 +
  247 + <div class="row" style="padding-bottom: 15px;">
  248 + <div class="col-md-12">
  249 + <hr style="margin-top: 8px; margin-bottom: -6px; border: 0; border-bottom: 1px dotted #aaa; margin-left: 22px;">
  250 + <a href="javascript: return false" class="green" title="{{$translate.instant('LABEL.EXPANDIR')}}" ng-click="obterTransclude(doc)">
  251 + <i class="ace-icon fa fa-2x" ng-class="{'fa-angle-double-down': doc.$expandido, 'fa-angle-double-right': !doc.$expandido}"></i>
  252 + </a>
  253 + <div ng-if="doc.$expandido" ng-include src="urlInclude"></div>
  254 + </div>
  255 + </div>
242 256
243 <div class="row"> 257 <div class="row">
244 <div class="col-md-6"> 258 <div class="col-md-6">