Commit 6d0b17cd07049957812247f8e0109f7a60673588

Authored by Ciro Junior
2 parents f3d9dd14 885afe33
Exists in master

Merge remote-tracking branch 'origin/tarefa-4235' into cnt-1.0.0-alfa11

# Conflicts:
#	cit-contratos-api/src/main/java/br/com/centralit/api/model/Contrato.java
#	cit-contratos-api/src/main/resources/script-bd/v1.0.0-alpha11/01-cit-contratos-1.0.0-ALFA-11-postgres.sql
cit-contratos-api/src/main/java/br/com/centralit/api/model/Contrato.java
... ... @@ -66,8 +66,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
66 66 */
67 67 @Entity
68 68 @Table(name = "cnt_contrato")
69   -@JsonIgnoreProperties({ "valorTotalItens", "cnpjFornecedor",
70   - "valorTotalLiberado", "ultimaDataVigenciaFinal" })
  69 +@JsonIgnoreProperties({ "valorTotalItens", "cnpjFornecedor", "valorTotalLiberado", "ultimaDataVigenciaFinal" })
71 70 public class Contrato extends PersistentObjectAuditOrganizacao {
72 71  
73 72 /** Atributo serialVersionUID. */
... ... @@ -87,13 +86,13 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
87 86 /** Atributo numeroProcesso. */
88 87 @Column(length = 30, nullable = false)
89 88 @JsonView({ ViewsContrato.ContratoEditView.class,
90   - ViewsContrato.ContratoAutoCompleteView.class,
91   - ViewsContrato.OrdemFornecimentoEditView.class,
92   - ViewsContrato.EncerramentoContratoEditView.class,
93   - ViewsContrato.ContratoEventoEditView.class,
94   - ViewsContrato.EventoApostilamentoEditView.class,
95   - ViewsContrato.EventoPenalidadeEditView.class,
96   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  89 + ViewsContrato.ContratoAutoCompleteView.class,
  90 + ViewsContrato.OrdemFornecimentoEditView.class,
  91 + ViewsContrato.EncerramentoContratoEditView.class,
  92 + ViewsContrato.ContratoEventoEditView.class,
  93 + ViewsContrato.EventoApostilamentoEditView.class,
  94 + ViewsContrato.EventoPenalidadeEditView.class,
  95 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
97 96 private Long numeroProcesso;
98 97  
99 98 /** Atributo exercicio. */
... ... @@ -106,46 +105,46 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
106 105 /** Atributo numeroAnoContrato. */
107 106 @Column(length = 30, nullable = false)
108 107 @JsonView({ ViewsContrato.ContratoEditView.class,
109   - ViewsContrato.ContratoAutoCompleteView.class,
110   - ViewsContrato.CronogramaExecucaoEditView.class,
111   - ViewsContrato.OrdemFornecimentoListView.class,
112   - ViewsContrato.RegistroOcorrenciaEditView.class,
113   - ViewsContrato.NotificacaoContratoEditView.class,
114   - ViewsContrato.ContratoEventoEditView.class,
115   - ViewsContrato.EventoApostilamentoEditView.class,
116   - ViewsContrato.EventoPenalidadeEditView.class,
117   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  108 + ViewsContrato.ContratoAutoCompleteView.class,
  109 + ViewsContrato.CronogramaExecucaoEditView.class,
  110 + ViewsContrato.OrdemFornecimentoListView.class,
  111 + ViewsContrato.RegistroOcorrenciaEditView.class,
  112 + ViewsContrato.NotificacaoContratoEditView.class,
  113 + ViewsContrato.ContratoEventoEditView.class,
  114 + ViewsContrato.EventoApostilamentoEditView.class,
  115 + ViewsContrato.EventoPenalidadeEditView.class,
  116 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
118 117 private String numeroAnoContrato;
119 118  
120 119 /** Atributo numeroAnoContrato. */
121 120 @Transient
122 121 @JsonView({ ViewsContrato.ContratoEditView.class,
123   - ViewsContrato.OrdemFornecimentoListView.class,
124   - ViewsContrato.ContratoAutoCompleteView.class,
125   - ViewsContrato.CronogramaExecucaoEditView.class,
126   - ViewsContrato.RegistroOcorrenciaEditView.class,
127   - ViewsContrato.NotificacaoContratoEditView.class,
128   - ViewsContrato.EncerramentoContratoListView.class,
129   - ViewsContrato.ContratoEventoEditView.class,
130   - ViewsContrato.EventoApostilamentoEditView.class,
131   - ViewsContrato.EventoPenalidadeEditView.class,
132   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  122 + ViewsContrato.OrdemFornecimentoListView.class,
  123 + ViewsContrato.ContratoAutoCompleteView.class,
  124 + ViewsContrato.CronogramaExecucaoEditView.class,
  125 + ViewsContrato.RegistroOcorrenciaEditView.class,
  126 + ViewsContrato.NotificacaoContratoEditView.class,
  127 + ViewsContrato.EncerramentoContratoListView.class,
  128 + ViewsContrato.ContratoEventoEditView.class,
  129 + ViewsContrato.EventoApostilamentoEditView.class,
  130 + ViewsContrato.EventoPenalidadeEditView.class,
  131 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
133 132 private String numeroAnoContratoFormatado;
134 133  
135 134 /** Atributo dominioTipoContrato. */
136 135 @ManyToOne(fetch = FetchType.LAZY, optional = false)
137 136 @JsonView({ ViewsContrato.ContratoEditView.class,
138   - ViewsContrato.ContratoAutoCompleteView.class,
139   - ViewsContrato.EncerramentoContratoEditView.class,
140   - ViewsContrato.RegistroOcorrenciaEditView.class })
  137 + ViewsContrato.ContratoAutoCompleteView.class,
  138 + ViewsContrato.EncerramentoContratoEditView.class,
  139 + ViewsContrato.RegistroOcorrenciaEditView.class })
141 140 private Dominio dominioTipoContrato;
142 141  
143 142 /** Atributo dominioTipoAquisicao. */
144 143 @ManyToOne(fetch = FetchType.LAZY, optional = false)
145 144 @JsonView({ ViewsContrato.ContratoEditView.class,
146   - ViewsContrato.ContratoAutoCompleteView.class,
147   - ViewsContrato.OrdemFornecimentoEditView.class,
148   - ViewsContrato.EncerramentoContratoEditView.class })
  145 + ViewsContrato.ContratoAutoCompleteView.class,
  146 + ViewsContrato.OrdemFornecimentoEditView.class,
  147 + ViewsContrato.EncerramentoContratoEditView.class })
149 148 private Dominio dominioTipoAquisicao;
150 149  
151 150 /** Atributo dataCelebracao. */
... ... @@ -154,8 +153,8 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
154 153 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
155 154 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
156 155 @JsonView({ ViewsContrato.ContratoEditView.class,
157   - ViewsContrato.ContratoAutoCompleteView.class,
158   - ViewsContrato.EncerramentoContratoEditView.class })
  156 + ViewsContrato.ContratoAutoCompleteView.class,
  157 + ViewsContrato.EncerramentoContratoEditView.class })
159 158 private Calendar dataCelebracao;
160 159  
161 160 /** Atributo dataVigenciaInicial. */
... ... @@ -164,14 +163,14 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
164 163 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
165 164 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
166 165 @JsonView({ ViewsContrato.ContratoEditView.class,
167   - ViewsContrato.ContratoAutoCompleteView.class,
168   - ViewsContrato.OrdemFornecimentoEditView.class,
169   - ViewsContrato.CronogramaExecucaoEditView.class,
170   - ViewsContrato.RegistroOcorrenciaEditView.class,
171   - ViewsContrato.NotificacaoContratoEditView.class,
172   - ViewsContrato.EncerramentoContratoEditView.class,
173   - ViewsContrato.EventoApostilamentoEditView.class,
174   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  166 + ViewsContrato.ContratoAutoCompleteView.class,
  167 + ViewsContrato.OrdemFornecimentoEditView.class,
  168 + ViewsContrato.CronogramaExecucaoEditView.class,
  169 + ViewsContrato.RegistroOcorrenciaEditView.class,
  170 + ViewsContrato.NotificacaoContratoEditView.class,
  171 + ViewsContrato.EncerramentoContratoEditView.class,
  172 + ViewsContrato.EventoApostilamentoEditView.class,
  173 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
175 174 private Calendar dataVigenciaInicial;
176 175  
177 176 /** Atributo dataVigenciaFinal. */
... ... @@ -180,51 +179,51 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
180 179 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
181 180 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
182 181 @JsonView({ ViewsContrato.ContratoEditView.class,
183   - ViewsContrato.ContratoAutoCompleteView.class,
184   - ViewsContrato.OrdemFornecimentoEditView.class,
185   - ViewsContrato.CronogramaExecucaoEditView.class,
186   - ViewsContrato.RegistroOcorrenciaEditView.class,
187   - ViewsContrato.NotificacaoContratoEditView.class,
188   - ViewsContrato.EncerramentoContratoEditView.class,
189   - ViewsContrato.EventoApostilamentoEditView.class,
190   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  182 + ViewsContrato.ContratoAutoCompleteView.class,
  183 + ViewsContrato.OrdemFornecimentoEditView.class,
  184 + ViewsContrato.CronogramaExecucaoEditView.class,
  185 + ViewsContrato.RegistroOcorrenciaEditView.class,
  186 + ViewsContrato.NotificacaoContratoEditView.class,
  187 + ViewsContrato.EncerramentoContratoEditView.class,
  188 + ViewsContrato.EventoApostilamentoEditView.class,
  189 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
191 190 private Calendar dataVigenciaFinal;
192 191  
193 192 @Transient
194 193 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
195 194 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
196 195 @JsonView({ ViewsContrato.ContratoEditView.class,
197   - ViewsContrato.ContratoAutoCompleteView.class,
198   - ViewsContrato.OrdemFornecimentoEditView.class,
199   - ViewsContrato.CronogramaExecucaoEditView.class,
200   - ViewsContrato.RegistroOcorrenciaEditView.class,
201   - ViewsContrato.NotificacaoContratoEditView.class,
202   - ViewsContrato.EncerramentoContratoEditView.class,
203   - ViewsContrato.EventoApostilamentoEditView.class,
204   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  196 + ViewsContrato.ContratoAutoCompleteView.class,
  197 + ViewsContrato.OrdemFornecimentoEditView.class,
  198 + ViewsContrato.CronogramaExecucaoEditView.class,
  199 + ViewsContrato.RegistroOcorrenciaEditView.class,
  200 + ViewsContrato.NotificacaoContratoEditView.class,
  201 + ViewsContrato.EncerramentoContratoEditView.class,
  202 + ViewsContrato.EventoApostilamentoEditView.class,
  203 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
205 204 private Calendar dataUltimaVigenciaFinal;
206 205  
207 206 /** Atributo dominioSituacaoAtual. */
208 207 @ManyToOne(fetch = FetchType.LAZY, optional = false)
209 208 @JsonView({ ViewsContrato.ContratoEditView.class,
210   - ViewsContrato.ContratoAutoCompleteView.class,
211   - ViewsContrato.OrdemFornecimentoEditView.class,
212   - ViewsContrato.RegistroOcorrenciaEditView.class,
213   - ViewsContrato.ContratoEventoEditView.class,
214   - ViewsContrato.EventoApostilamentoEditView.class })
  209 + ViewsContrato.ContratoAutoCompleteView.class,
  210 + ViewsContrato.OrdemFornecimentoEditView.class,
  211 + ViewsContrato.RegistroOcorrenciaEditView.class,
  212 + ViewsContrato.ContratoEventoEditView.class,
  213 + ViewsContrato.EventoApostilamentoEditView.class })
215 214 private Dominio dominioSituacaoAtual;
216 215  
217 216 /** Atributo fornecedor. */
218 217 @ManyToOne(fetch = FetchType.LAZY, optional = false)
219 218 @JsonView({ ViewsContrato.ContratoEditView.class,
220   - ViewsContrato.ContratoAutoCompleteView.class,
221   - ViewsContrato.OrdemFornecimentoEditView.class,
222   - ViewsContrato.CronogramaExecucaoEditView.class,
223   - ViewsContrato.RegistroOcorrenciaEditView.class,
224   - ViewsContrato.NotificacaoContratoEditView.class,
225   - ViewsContrato.EncerramentoContratoListView.class,
226   - ViewsContrato.EventoApostilamentoEditView.class,
227   - ViewsContrato.EventoPenalidadeEditView.class })
  219 + ViewsContrato.ContratoAutoCompleteView.class,
  220 + ViewsContrato.OrdemFornecimentoEditView.class,
  221 + ViewsContrato.CronogramaExecucaoEditView.class,
  222 + ViewsContrato.RegistroOcorrenciaEditView.class,
  223 + ViewsContrato.NotificacaoContratoEditView.class,
  224 + ViewsContrato.EncerramentoContratoListView.class,
  225 + ViewsContrato.EventoApostilamentoEditView.class,
  226 + ViewsContrato.EventoPenalidadeEditView.class })
228 227 private Fornecedor fornecedor;
229 228  
230 229 /** Atributo disponivel. */
... ... @@ -233,10 +232,10 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
233 232  
234 233 /** Atributo objetoContratacao. */
235 234 @JsonView({ ViewsContrato.ContratoEditView.class,
236   - ViewsContrato.ContratoAutoCompleteView.class,
237   - ViewsContrato.EncerramentoContratoEditView.class,
238   - ViewsContrato.EventoApostilamentoEditView.class,
239   - ViewsContrato.EventoRecebimentoObjetoEditView.class })
  235 + ViewsContrato.ContratoAutoCompleteView.class,
  236 + ViewsContrato.EncerramentoContratoEditView.class,
  237 + ViewsContrato.EventoApostilamentoEditView.class,
  238 + ViewsContrato.EventoRecebimentoObjetoEditView.class })
240 239 @Column(length = 1024, nullable = false)
241 240 private String objetoContratacao;
242 241  
... ... @@ -244,20 +243,20 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
244 243 @Column(precision = 20, scale = 4)
245 244 @JsonDeserialize(using = MoneyDeserializer.class)
246 245 @JsonView({ ViewsContrato.ContratoEditView.class,
247   - ViewsContrato.ContratoAutoCompleteView.class,
248   - ViewsContrato.CronogramaExecucaoEditView.class,
249   - ViewsContrato.EncerramentoContratoEditView.class,
250   - ViewsContrato.RegistroOcorrenciaEditView.class,
251   - ViewsContrato.ContratoEventoEditView.class })
  246 + ViewsContrato.ContratoAutoCompleteView.class,
  247 + ViewsContrato.CronogramaExecucaoEditView.class,
  248 + ViewsContrato.EncerramentoContratoEditView.class,
  249 + ViewsContrato.RegistroOcorrenciaEditView.class,
  250 + ViewsContrato.ContratoEventoEditView.class })
252 251 private BigDecimal valorContrato;
253 252  
254 253 @Transient
255 254 @JsonView({ ViewsContrato.ContratoEditView.class,
256   - ViewsContrato.ContratoAutoCompleteView.class,
257   - ViewsContrato.CronogramaExecucaoEditView.class,
258   - ViewsContrato.EncerramentoContratoEditView.class,
259   - ViewsContrato.RegistroOcorrenciaEditView.class,
260   - ViewsContrato.ContratoEventoEditView.class })
  255 + ViewsContrato.ContratoAutoCompleteView.class,
  256 + ViewsContrato.CronogramaExecucaoEditView.class,
  257 + ViewsContrato.EncerramentoContratoEditView.class,
  258 + ViewsContrato.RegistroOcorrenciaEditView.class,
  259 + ViewsContrato.ContratoEventoEditView.class })
261 260 private BigDecimal valorTotalContrato;
262 261  
263 262 /** Atributo dominioFormaPagamentoContrato. */
... ... @@ -288,8 +287,8 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
288 287 /** Atributo ctrtEmpenhos. */
289 288 @OneToMany(fetch = FetchType.LAZY, mappedBy = "contratoAditivo", cascade = CascadeType.ALL, targetEntity = EventoAditivo.class)
290 289 @JsonView({ ViewsContrato.EventoAditivoEditView.class,
291   - ViewsContrato.ContratoEventoEditView.class,
292   - ViewsContrato.ContratoEditView.class })
  290 + ViewsContrato.ContratoEventoEditView.class,
  291 + ViewsContrato.ContratoEditView.class })
293 292 private Collection<EventoAditivo> aditivos;
294 293  
295 294 /** Atributo valorGarantia. */
... ... @@ -322,8 +321,7 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
322 321  
323 322 /** Atributo ctrtEmpenhos. */
324 323 @OneToMany(fetch = FetchType.LAZY, mappedBy = "contrato", cascade = CascadeType.ALL)
325   - @JsonView({ ViewsContrato.ContratoEditView.class,
326   - ViewsContrato.CronogramaExecucaoEditView.class })
  324 + @JsonView({ ViewsContrato.ContratoEditView.class, ViewsContrato.CronogramaExecucaoEditView.class })
327 325 private Collection<ContratoItem> ctrtItens;
328 326  
329 327 /** Atributo garantias. ctrtEnvolvidos */
... ... @@ -331,10 +329,6 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
331 329 @JsonView({ ViewsContrato.ContratoEditView.class })
332 330 private Collection<ContratoEnvolvido> ctrtEnvolvidos;
333 331  
334   - @OneToMany(fetch = FetchType.LAZY, mappedBy = "contrato", cascade = CascadeType.ALL)
335   - @JsonView({ ViewsContrato.ContratoEditView.class })
336   - private Collection<ContratoEnvolvidoJustificativa> justificativas;
337   -
338 332 /** Atributo dominioModalidadeGarantia. */
339 333 @ManyToOne(fetch = FetchType.LAZY)
340 334 @JsonView({ ViewsContrato.ContratoEditView.class })
... ... @@ -594,6 +588,7 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
594 588 * @return <code>Calendar</code>
595 589 */
596 590 public Calendar getDataUltimaVigenciaFinal() {
  591 +
597 592 if (this.aditivos == null || this.aditivos.isEmpty()) {
598 593 return this.dataVigenciaFinal;
599 594 } else {
... ... @@ -725,6 +720,7 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
725 720 * @return <code>BigDecimal</code>
726 721 */
727 722 public BigDecimal getValorTotalContrato() {
  723 +
728 724 if (this.aditivos == null || this.aditivos.isEmpty()) {
729 725 return this.valorContrato;
730 726 } else {
... ... @@ -1006,6 +1002,7 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
1006 1002 * @return the ordensFornecimento
1007 1003 */
1008 1004 public Collection<OrdemFornecimento> getOrdensFornecimento() {
  1005 +
1009 1006 return ordensFornecimento;
1010 1007 }
1011 1008  
... ... @@ -1013,18 +1010,9 @@ public class Contrato extends PersistentObjectAuditOrganizacao {
1013 1010 * @param ordensFornecimento
1014 1011 * the ordensFornecimento to set
1015 1012 */
1016   - public void setOrdensFornecimento(
1017   - Collection<OrdemFornecimento> ordensFornecimento) {
1018   - this.ordensFornecimento = ordensFornecimento;
1019   - }
  1013 + public void setOrdensFornecimento(Collection<OrdemFornecimento> ordensFornecimento) {
1020 1014  
1021   - public Collection<ContratoEnvolvidoJustificativa> getJustificativas() {
1022   - return justificativas;
1023   - }
1024   -
1025   - public void setJustificativas(
1026   - Collection<ContratoEnvolvidoJustificativa> justificativas) {
1027   - this.justificativas = justificativas;
  1015 + this.ordensFornecimento = ordensFornecimento;
1028 1016 }
1029 1017  
1030 1018 /**
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/model/ContratoEnvolvido.java
1 1 package br.com.centralit.api.model;
2 2  
  3 +import java.util.Collection;
  4 +
  5 +import javax.persistence.CascadeType;
3 6 import javax.persistence.Entity;
4 7 import javax.persistence.FetchType;
5 8 import javax.persistence.GeneratedValue;
... ... @@ -7,29 +10,41 @@ import javax.persistence.GenerationType;
7 10 import javax.persistence.Id;
8 11 import javax.persistence.JoinColumn;
9 12 import javax.persistence.ManyToOne;
  13 +import javax.persistence.OneToMany;
10 14 import javax.persistence.Table;
11 15  
  16 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  17 +import com.fasterxml.jackson.annotation.JsonView;
  18 +
12 19 import br.com.centralit.api.viewHelper.ViewsContrato;
13 20 import br.com.centralit.framework.json.Views;
14 21 import br.com.centralit.framework.model.Dominio;
15 22 import br.com.centralit.framework.model.arquitetura.PersistentObjectAudit;
16 23  
17   -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
18   -import com.fasterxml.jackson.annotation.JsonView;
19   -
20   -
21 24 /**
22   - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
  25 + * <p>
  26 + * <img src="http://centralit.com.br/images/logo_central.png">
  27 + * </p>
23 28 *
24   - * <p><b>Company: </b> Central IT - Governança Corporativa - </p>
  29 + * <p>
  30 + * <b>Company: </b> Central IT - Governança Corporativa -
  31 + * </p>
25 32 *
26   - * <p><b>Title: </b></p>
  33 + * <p>
  34 + * <b>Title: </b>
  35 + * </p>
27 36 *
28   - * <p><b>Description: </b></p>
  37 + * <p>
  38 + * <b>Description: </b>
  39 + * </p>
29 40 *
30   - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
  41 + * <p>
  42 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  43 + * </p>
31 44 *
32   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  45 + * <p>
  46 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  47 + * </p>
33 48 *
34 49 * @since 19/01/2016 - 16:47:54
35 50 *
... ... @@ -39,18 +54,18 @@ import com.fasterxml.jackson.annotation.JsonView;
39 54 *
40 55 */
41 56 @Entity
42   -@Table(name="cnt_cn_envolvido")
43   -@JsonIgnoreProperties({ "$checked" })
  57 +@Table(name = "cnt_cn_envolvido")
  58 +@JsonIgnoreProperties({ "$checked", "justificativasAnterioresLength" })
44 59 public class ContratoEnvolvido extends PersistentObjectAudit {
45 60  
46   - /** Atributo serialVersionUID. */
47   - private static final long serialVersionUID = 1L;
  61 + /** Atributo serialVersionUID. */
  62 + private static final long serialVersionUID = 1L;
48 63  
49   - /** Atributo id. */
50   - @Id
51   - @GeneratedValue(strategy = GenerationType.AUTO)
52   - @JsonView({ Views.GenericView.class })
53   - private Long id;
  64 + /** Atributo id. */
  65 + @Id
  66 + @GeneratedValue(strategy = GenerationType.AUTO)
  67 + @JsonView({ Views.GenericView.class })
  68 + private Long id;
54 69  
55 70 /** Atributo contrato. */
56 71 @ManyToOne(fetch = FetchType.LAZY, optional = true)
... ... @@ -61,15 +76,19 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
61 76 private Contrato contratoInativo;
62 77  
63 78 /** Atributo colaborador. */
64   - @ManyToOne(fetch = FetchType.LAZY, optional=false)
65   - @JsonView({ ViewsContrato.ContratoEditView.class, Views.ContratoView.class })
  79 + @ManyToOne(fetch = FetchType.LAZY, optional = false)
  80 + @JsonView({ ViewsContrato.ContratoEditView.class, Views.ContratoView.class })
66 81 private Colaborador envolvido;
67 82  
68 83 /** Atributo dominioFormaPagamentoContrato. */
69   - @ManyToOne(fetch = FetchType.LAZY, optional=false)
70   - @JoinColumn(name = "papelenvolvidocontrato_id")
71   - @JsonView({ ViewsContrato.ContratoEditView.class })
72   - private Dominio dominioPapelEnvolvidoContrato;
  84 + @ManyToOne(fetch = FetchType.LAZY, optional = false)
  85 + @JoinColumn(name = "papelenvolvidocontrato_id")
  86 + @JsonView({ ViewsContrato.ContratoEditView.class })
  87 + private Dominio dominioPapelEnvolvidoContrato;
  88 +
  89 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "contratoEnvolvido", cascade = CascadeType.ALL)
  90 + @JsonView({ ViewsContrato.ContratoEditView.class })
  91 + private Collection<ContratoEnvolvidoJustificativa> justificativas;
73 92  
74 93 /**
75 94 * Retorna o valor do atributo <code>id</code>
... ... @@ -81,7 +100,6 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
81 100 return id;
82 101 }
83 102  
84   -
85 103 /**
86 104 * Define o valor do atributo <code>id</code>.
87 105 *
... ... @@ -92,7 +110,6 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
92 110 this.id = id;
93 111 }
94 112  
95   -
96 113 /**
97 114 * Retorna o valor do atributo <code>contrato</code>
98 115 *
... ... @@ -103,7 +120,6 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
103 120 return contrato;
104 121 }
105 122  
106   -
107 123 /**
108 124 * Define o valor do atributo <code>contrato</code>.
109 125 *
... ... @@ -114,7 +130,6 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
114 130 this.contrato = contrato;
115 131 }
116 132  
117   -
118 133 /**
119 134 * Retorna o valor do atributo <code>contratoInativo</code>
120 135 *
... ... @@ -125,7 +140,6 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
125 140 return contratoInativo;
126 141 }
127 142  
128   -
129 143 /**
130 144 * Define o valor do atributo <code>contratoInativo</code>.
131 145 *
... ... @@ -136,25 +150,34 @@ public class ContratoEnvolvido extends PersistentObjectAudit {
136 150 this.contratoInativo = contratoInativo;
137 151 }
138 152  
139   -
140 153 public Colaborador getEnvolvido() {
  154 +
141 155 return envolvido;
142 156 }
143 157  
144   -
145 158 public void setEnvolvido(Colaborador envolvido) {
  159 +
146 160 this.envolvido = envolvido;
147 161 }
148 162  
149   -
150 163 public Dominio getDominioPapelEnvolvidoContrato() {
  164 +
151 165 return dominioPapelEnvolvidoContrato;
152 166 }
153 167  
  168 + public void setDominioPapelEnvolvidoContrato(Dominio dominioPapelEnvolvidoContrato) {
154 169  
155   - public void setDominioPapelEnvolvidoContrato(
156   - Dominio dominioPapelEnvolvidoContrato) {
157 170 this.dominioPapelEnvolvidoContrato = dominioPapelEnvolvidoContrato;
158 171 }
159 172  
  173 + public Collection<ContratoEnvolvidoJustificativa> getJustificativas() {
  174 +
  175 + return justificativas;
  176 + }
  177 +
  178 + public void setJustificativas(Collection<ContratoEnvolvidoJustificativa> justificativas) {
  179 +
  180 + this.justificativas = justificativas;
  181 + }
  182 +
160 183 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/model/ContratoEnvolvidoJustificativa.java
... ... @@ -52,7 +52,7 @@ public class ContratoEnvolvidoJustificativa extends PersistentObjectAudit {
52 52 private String descricao;
53 53  
54 54 @ManyToOne(fetch = FetchType.LAZY, optional = true)
55   - private Contrato contrato;
  55 + private ContratoEnvolvido contratoEnvolvido;
56 56  
57 57 public Long getId() {
58 58  
... ... @@ -67,17 +67,21 @@ public class ContratoEnvolvidoJustificativa extends PersistentObjectAudit {
67 67 public String getDescricao() {
68 68 return descricao;
69 69 }
70   -
  70 +
71 71 public void setDescricao(String descricao) {
72 72 this.descricao = descricao;
73 73 }
74   -
75   - public Contrato getContrato() {
76   - return contrato;
  74 +
  75 +
  76 + public ContratoEnvolvido getContratoEnvolvido() {
  77 +
  78 + return contratoEnvolvido;
77 79 }
78 80  
79   - public void setContrato(Contrato contrato) {
80   - this.contrato = contrato;
  81 +
  82 + public void setContratoEnvolvido(ContratoEnvolvido contratoEnvolvido) {
  83 +
  84 + this.contratoEnvolvido = contratoEnvolvido;
81 85 }
82 86  
83 87 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/ContratoServiceImpl.java
... ... @@ -8,6 +8,7 @@ import java.util.Currency;
8 8 import java.util.Iterator;
9 9 import java.util.List;
10 10  
  11 +import org.apache.commons.collections.CollectionUtils;
11 12 import org.springframework.beans.factory.annotation.Autowired;
12 13 import org.springframework.beans.factory.annotation.Qualifier;
13 14 import org.springframework.security.core.context.SecurityContextHolder;
... ... @@ -38,7 +39,6 @@ import br.com.centralit.api.service.EstudoTecnicoService;
38 39 import br.com.centralit.api.service.EventoAditivoService;
39 40 import br.com.centralit.api.service.FornecedorService;
40 41 import br.com.centralit.api.service.InternacionalizacaoService;
41   -import br.com.centralit.api.service.OrdemFornecimentoService;
42 42 import br.com.centralit.api.service.ParceiroService;
43 43 import br.com.centralit.api.service.UsuarioService;
44 44 import br.com.centralit.framework.exception.CodigoErro;
... ... @@ -115,9 +115,6 @@ public class ContratoServiceImpl extends GenericServiceImpl&lt;Contrato, Long&gt; impl
115 115 @Autowired
116 116 private EventoAditivoService aditivoService;
117 117  
118   - @Autowired
119   - private OrdemFornecimentoService ordemFornecimentoService;
120   -
121 118 /**
122 119 * Responsável pela criação de novas instâncias desta classe.
123 120 * @param contratoDao
... ... @@ -277,25 +274,19 @@ public class ContratoServiceImpl extends GenericServiceImpl&lt;Contrato, Long&gt; impl
277 274 }
278 275 }
279 276  
280   - // cria vinculo do contrato com as ctrtItens
281   - if (!UtilColecao.isVazio(contrato.getCtrtEnvolvidos())){
282   -
  277 + // cria vinculo do contrato com os envolvidos
  278 + if (CollectionUtils.isNotEmpty(contrato.getCtrtEnvolvidos())){
283 279 for (ContratoEnvolvido contratoEnvolvido : contrato.getCtrtEnvolvidos()) {
284   -
285 280 contratoEnvolvido.setEnvolvido(this.colaboradorService.find(contratoEnvolvido.getEnvolvido().getId()));
286   -
287 281 contratoEnvolvido.setContrato(contrato);
  282 + if (CollectionUtils.isNotEmpty(contratoEnvolvido.getJustificativas())){
  283 + for(ContratoEnvolvidoJustificativa justificativa : contratoEnvolvido.getJustificativas()){
  284 + justificativa.setContratoEnvolvido(contratoEnvolvido);
  285 + justificativa.setAutor(this.usuarioService.find(justificativa.getAutor().getId()));
  286 + }
  287 + }
288 288 }
289   - }
290   -
291   - // cria vinculo do contrato com as justificativas de alterções dos envolvidos
292   - if (!UtilColecao.isVazio(contrato.getJustificativas())){
293   -
294   - for (ContratoEnvolvidoJustificativa justificativa : contrato.getJustificativas()) {
295   -
296   - justificativa.setContrato(contrato);
297 289 }
298   - }
299 290  
300 291 if (!UtilColecao.isVazio(contrato.getAditivos())){
301 292 for (EventoAditivo aditivo : contrato.getAditivos()) {
... ...
cit-contratos-api/src/main/resources/script-bd/v1.0.0-alpha11/01-cit-contratos-1.0.0-ALFA-11-postgres.sql
... ... @@ -16,4 +16,15 @@ VALUES (NEXTVAL(&#39;hibernate_sequence&#39;), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, true,
16 16 ALTER TABLE cnt_ev_recebimentoobjeto DROP COLUMN nomeobjeto;
17 17 TRUNCATE CASCADE MENU;
18 18 TRUNCATE PAGINA;
19   --- LUÍS CÉSRA FIM 06/04/2016
20 19 \ No newline at end of file
  20 +-- LUÍS CÉSRA FIM 06/04/2016
  21 +
  22 +-- CIRO INICIO 07/04/2016
  23 +ALTER TABLE cnt_en_justificativa DROP CONSTRAINT fk_fa7tb16mca69yyhv2uvi4qd63;
  24 +ALTER TABLE cnt_en_justificativa DROP COLUMN contrato_id;
  25 +
  26 +ALTER TABLE cnt_en_justificativa ADD COLUMN contratoenvolvido_id bigint;
  27 +ALTER TABLE cnt_en_justificativa ADD CONSTRAINT fk_qgt7nl7x7xlduo7mysfv2lkqi FOREIGN KEY (contratoenvolvido_id)
  28 +REFERENCES cnt_cn_envolvido (id) MATCH SIMPLE
  29 +ON UPDATE NO ACTION
  30 +ON DELETE NO ACTION;
  31 +-- CIRO FIM 07/04/2016
... ...
cit-contratos-web/src/main/java/br/com/centralit/listener/StartupListenerContratos.java
... ... @@ -981,6 +981,7 @@ public class StartupListenerContratos extends UtilStartup implements Application
981 981 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.RELATORIO_PENALIDADE_APLICADA", "Relatório de penalidades aplicadas", dominio, modulo));
982 982  
983 983 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.RELATORIOS", "Relatórios do contrato", dominio, modulo));
  984 + internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.ADICIONAR_JUSTIFICATIVA", "Adicionar Justificativa", dominio, modulo));
984 985  
985 986 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.TERMO_REFERENCIA_PROJETO_BASICO", "Termo de referência/Projeto Básico", dominio, modulo));
986 987 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.CONTRATO_SEM_VINCULO_TERMO", "Contrato selecionado está sem vínculo a um termo de referência.", dominio, modulo));
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/ContratoController.js
... ... @@ -87,14 +87,13 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
87 87 };
88 88 // ###################### FIM: INICIALIZACAO DE VARIAVEIS ###########################
89 89  
90   - // Limpa formulrio para novo cadastro
  90 + // Limpa formulario para novo cadastro
91 91 $scope.resetForm = function() {
92 92  
93 93 $scope.contrato = {
94 94 ctrtEmpenhos : [],
95 95 ctrtItens : [],
96 96 ctrtEnvolvidos : [],
97   - justificativas : [],
98 97 ctrtValoresPagamento : [],
99 98 dominioSituacaoAtual : {codigo : 1},
100 99 valorTotalEmpenhado : 0.0,
... ... @@ -243,83 +242,79 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
243 242 $scope.contratoForm.anexosObservacoesContratoForm.$submitted = true;
244 243  
245 244 // verifica formulario valido
246   - if ($scope.contratoForm.$valid) {
247   -
248   - // data da celebracao nao pode ser maior que a data de vigencia inicial do contrato
249   - if(!isPeriodoValido($scope.contrato.dataCelebracao, $scope.contrato.dataVigenciaInicial)){
250   -
251   - $scope.showAlert('error', $translate.instant('VALIDACAO.DATA_CELEBRACAO_MAIOR_DATA_VIGENCIA_INICIAL'));
252   - return;
253   - }
254   -
255   - // data de vigencia inicial nao pode ser maior que a data de vigencia final do contrato
256   - if(!isPeriodoValido($scope.contrato.dataVigenciaInicial, $scope.contrato.dataVigenciaFinal)){
  245 + if ($scope.contratoForm.$invalid) {
  246 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
  247 + return;
  248 + }
257 249  
258   - $scope.showAlert('error', $translate.instant('VALIDACAO.DATA_VIGENCIA_INICIAL_MAIOR_DATA_VIGENCIA_FINAL_CONTRATO'));
259   - return;
260   - }
  250 + if(!$scope.informacoesValidas()){
  251 + return;
  252 + };
261 253  
262   - // data de vigencia inicial nao pode ser maior que a data de vigencia final do contrato
263   - if($scope.contrato.ctrtEnvolvidos && $scope.contrato.ctrtEnvolvidos.length > 0 && $scope.contrato.ctrtEnvolvidos.length < 3){
  254 + if ($scope.contrato.id && $scope.contrato.ctrtEnvolvidos){
  255 + angular.forEach($scope.contrato.ctrtEnvolvidos, function(envolvido){
  256 + if (envolvido.justificativas.length === 0){
  257 + angular.forEach(envolvido.justificativas, function(justificativa){
  258 + delete justificativa.autor;
  259 + delete justificativa.dataCriacao;
  260 + });
  261 + }
  262 + });
  263 + }
264 264  
265   - $scope.showAlert('error', $translate.instant('VALIDACAO.CONTRATO_EXIGE_MINIMO_TRES_ENVOLVIDOS'));
  265 + if ($scope.contrato.ctrtValoresPagamento && $scope.contrato.ctrtValoresPagamento.length > 0){
  266 + if (!validarContratoValoresPagamento()){
266 267 return;
267 268 }
  269 + angular.forEach($scope.contrato.ctrtValoresPagamento, function(parcelaValorPagamento){
  270 + if (parcelaValorPagamento.seguencia){
  271 + delete parcelaValorPagamento.seguencia;
  272 + }
  273 + });
  274 + }
268 275  
269   - if($scope.contrato.id && $scope.hasAlteracaoEnvolvido){
  276 + $scope.contratoTemp = {
  277 + documentos: []
  278 + };
270 279  
271   - $scope.showAlert('error', $translate.instant('CONTRATOS.VALIDACAO.ALTERACAO_ENVOLVIDOS_EXIGE_JUSTIFICATIVA'));
272   - return;
273   - } else {
274   - angular.forEach($scope.contrato.justificativas, function(justificativa){
275   - delete justificativa.autor;
276   - delete justificativa.dataCriacao;
  280 + // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento
  281 + angular.forEach($scope.contrato.documentos, function(documento, key) {
  282 + if (documento.uploadsDocumento) {
  283 + $scope.contratoTemp.documentos.push({
  284 + uploadsDocumento: clone(documento.uploadsDocumento),
  285 + numero: clone(documento.numero)
277 286 });
  287 + // deleta esse atributo por causa de um erro de ciclo no json
  288 + delete documento.uploadsDocumento;
278 289 }
  290 + });
279 291  
280   - if ($scope.contrato.ctrtValoresPagamento && $scope.contrato.ctrtValoresPagamento.length > 0){
281   -
282   - if (!validarContratoValoresPagamento()){
283   -
284   - return;
285   -
286   - } else {
287   -
288   - angular.forEach($scope.contrato.ctrtValoresPagamento, function(parcelaValorPagamento){
289   -
290   - if (parcelaValorPagamento.seguencia){
291   -
292   - delete parcelaValorPagamento.seguencia;
293   - }
294   - });
295   - }
296   - }
297   -
298   - $scope.contratoTemp = {
299   - documentos: []
300   - };
  292 + if ($scope.contrato.programaAcao && $scope.contrato.programaAcao.originalElement) {
  293 + $scope.contrato.programaAcao = $scope.contrato.programaAcao.originalElement;
  294 + }
  295 + verificarValorTotalEmpenhado();
  296 + };
301 297  
302   - // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento
303   - angular.forEach($scope.contrato.documentos, function(documento, key) {
304   - if (documento.uploadsDocumento) {
305   - $scope.contratoTemp.documentos.push({
306   - uploadsDocumento: clone(documento.uploadsDocumento),
307   - numero: clone(documento.numero)
308   - });
309   - // deleta esse atributo por causa de um erro de ciclo no json
310   - delete documento.uploadsDocumento;
311   - }
312   - });
  298 + $scope.informacoesValidas = function () {
313 299  
314   - if ($scope.contrato.programaAcao && $scope.contrato.programaAcao.originalElement) {
315   - $scope.contrato.programaAcao = $scope.contrato.programaAcao.originalElement;
316   - }
  300 + // data da celebracao nao pode ser maior que a data de vigencia inicial do contrato
  301 + if(!isPeriodoValido($scope.contrato.dataCelebracao, $scope.contrato.dataVigenciaInicial)){
  302 + $scope.showAlert('error', $translate.instant('VALIDACAO.DATA_CELEBRACAO_MAIOR_DATA_VIGENCIA_INICIAL'));
  303 + return false;
  304 + }
317 305  
318   - verificarValorTotalEmpenhado();
319   - } else {
  306 + // data de vigencia inicial nao pode ser maior que a data de vigencia final do contrato
  307 + if(!isPeriodoValido($scope.contrato.dataVigenciaInicial, $scope.contrato.dataVigenciaFinal)){
  308 + $scope.showAlert('error', $translate.instant('VALIDACAO.DATA_VIGENCIA_INICIAL_MAIOR_DATA_VIGENCIA_FINAL_CONTRATO'));
  309 + return false;
  310 + }
320 311  
321   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
  312 + // data de vigencia inicial nao pode ser maior que a data de vigencia final do contrato
  313 + if($scope.contrato.ctrtEnvolvidos && $scope.contrato.ctrtEnvolvidos.length > 0 && $scope.contrato.ctrtEnvolvidos.length < 3){
  314 + $scope.showAlert('error', $translate.instant('VALIDACAO.CONTRATO_EXIGE_MINIMO_TRES_ENVOLVIDOS'));
  315 + return false;
322 316 }
  317 + return true;
323 318 };
324 319  
325 320 function save() {
... ... @@ -1369,10 +1364,8 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
1369 1364 });
1370 1365  
1371 1366 if (contratoEnvolvidosChecked.length > 1){
1372   -
1373 1367 $scope.acaoEmMassaEnvolvido = true;
1374 1368 } else {
1375   -
1376 1369 $scope.acaoEmMassaEnvolvido = false;
1377 1370 }
1378 1371 };
... ... @@ -1380,79 +1373,77 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
1380 1373 // responsavel por abrir modal de adicao de um contratoEnvolvido
1381 1374 $scope.openModalContratoEnvolvido = function() {
1382 1375  
1383   - filtrarPapeisSelecionados();
1384   -
1385   - $scope.contratoEnvolvidoTemp = {};
1386 1376 $scope.editEnvolvido = true;
1387   - $scope.$openModal('modal-envolvido.html', 'lg');
  1377 + $scope.contratoEnvolvidoTemp = {justificativas : []};
  1378 + $scope.contrato.ctrtEnvolvidos.forEach(function(item){
  1379 + if(item.$checked){
  1380 + item.$checked = false;
  1381 + }
  1382 + });
  1383 + filtrarPapeisSelecionados();
  1384 + $scope.$openModal('dialog_envolvido.html', 'lg');
1388 1385 };
1389 1386  
1390   - // responsavel por abrir modal de adicao de uma justificativa
1391   - $scope.openModalJustificativa = function() {
1392   -
1393   - $scope.justificativaTemp = {};
1394   - $scope.editEnvolvido = true;
1395   - $scope.$openModal('modal-justificativa.html', 'lg');
  1387 + $scope.closeModalContratoEvolvido = function(formDialogEnvolvido) {
  1388 + $scope.hasAlteracaoEnvolvido = false;
  1389 + formDialogEnvolvido.$submitted = false;
  1390 + $scope.$modalInstance.dismiss('cancel');
1396 1391 };
1397 1392  
1398 1393 $scope.adicionarContratoEnvolvido = function (formDialogEnvolvido, continuarEditando) {
1399 1394  
1400 1395 formDialogEnvolvido.$submitted = true;
  1396 + if($scope.contrato.id && $scope.hasAlteracaoEnvolvido){
  1397 + if($scope.contratoEnvolvidoTemp.justificativas.length === 0 ||
  1398 + $scope.contratoEnvolvidoTemp.justificativas.length === $scope.contratoEnvolvidoTemp.justificativasAnterioresLength){
  1399 + $scope.showAlert('error', $translate.instant('CONTRATOS.VALIDACAO.ALTERACAO_ENVOLVIDOS_EXIGE_JUSTIFICATIVA'));
  1400 + return;
  1401 + }
  1402 + }
1401 1403  
1402   - if (formDialogEnvolvido.$valid) {
1403   - if ($scope.contrato.ctrtEnvolvidos){
1404   - if ($scope.contratoEnvolvidoTemp.$checked) {
1405   - for (var i = 0; i < $scope.contrato.ctrtEnvolvidos.length; i++) {
1406   - if ($scope.contrato.ctrtEnvolvidos[i].$checked) {
1407   - $scope.contrato.ctrtEnvolvidos[i] = $scope.contratoEnvolvidoTemp;
1408   - }
  1404 + if (formDialogEnvolvido.$invalid) {
  1405 + //Mensagem de erro de campos obrigatorios nao preenchidos
  1406 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  1407 + return;
  1408 + }
  1409 + if ($scope.contrato.ctrtEnvolvidos){
  1410 + if ($scope.contratoEnvolvidoTemp.$checked) {
  1411 + for (var i = 0; i < $scope.contrato.ctrtEnvolvidos.length; i++) {
  1412 + if ($scope.contrato.ctrtEnvolvidos[i].$checked) {
  1413 + $scope.contrato.ctrtEnvolvidos[i] = $scope.contratoEnvolvidoTemp;
1409 1414 }
1410   - } else {
1411   - $scope.contrato.ctrtEnvolvidos.push($scope.contratoEnvolvidoTemp);
1412 1415 }
1413   - }
1414   -
1415   - $scope.contratoEnvolvidoTemp = {};
1416   - if (continuarEditando) {
1417   - formDialogEnvolvido.$submitted = false;
1418   - formDialogEnvolvido.$setPristine();
1419   - filtrarPapeisSelecionados();
1420 1416 } else {
1421   - $scope.$modalInstance.dismiss('cancel');
  1417 + $scope.contrato.ctrtEnvolvidos.push($scope.contratoEnvolvidoTemp);
1422 1418 }
  1419 + }
1423 1420  
1424   - if ($scope.contrato.id){
1425   - $scope.hasAlteracaoEnvolvido = true;
1426   - }
  1421 + $scope.contratoEnvolvidoTemp = {};
  1422 + $scope.justificativaTemp = {};
  1423 + $scope.hasAlteracaoEnvolvido = false;
  1424 + if (continuarEditando) {
  1425 + formDialogEnvolvido.$submitted = false;
  1426 + formDialogEnvolvido.$setPristine();
  1427 + filtrarPapeisSelecionados();
1427 1428 } else {
1428   - //Mensagem de erro de campos obrigatorios n�o preenchidos
1429   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  1429 + $scope.$modalInstance.dismiss('cancel');
1430 1430 }
1431 1431 };
1432 1432  
1433   - $scope.adicionarJustificativa = function (formDialogJustificativa, continuarEditando) {
  1433 + $scope.adicionarJustificativa = function (form) {
1434 1434  
1435   - formDialogJustificativa.$submitted = true;
  1435 + form.$submitted = true;
1436 1436  
1437   - if (formDialogJustificativa.$valid) {
1438   - if ($scope.contrato.justificativas){
1439   - $scope.justificativaTemp.autor = $scope.usuarioLogado;
1440   - $scope.justificativaTemp.dataCriacao = new Date();
1441   - $scope.contrato.justificativas.push($scope.justificativaTemp);
1442   - }
1443   -
1444   - $scope.justificativaTemp = {};
1445   - if (continuarEditando) {
1446   - formDialogJustificativa.$submitted = false;
1447   - formDialogJustificativa.$setPristine();
1448   - } else {
1449   - $scope.$modalInstance.dismiss('cancel');
1450   - }
1451   - $scope.hasAlteracaoEnvolvido = false;
1452   - } else {
1453   - //Mensagem de erro de campos obrigatorios n�o preenchidos
1454   - $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  1437 + if ($scope.justificativaTemp.descricao === '' || $scope.justificativaTemp.descricao == undefined) {
  1438 + $scope.showAlert('error', $translate.instant('CONTRATOS.VALIDACAO.ALTERACAO_ENVOLVIDOS_EXIGE_JUSTIFICATIVA'));
  1439 + return;
  1440 + }
  1441 + if ($scope.contratoEnvolvidoTemp.justificativas){
  1442 + $scope.justificativaTemp.autor = $scope.usuarioLogado;
  1443 + $scope.justificativaTemp.dataCriacao = new Date();
  1444 + $scope.contratoEnvolvidoTemp.justificativas.push($scope.justificativaTemp);
1455 1445 }
  1446 + $scope.justificativaTemp = {};
1456 1447 };
1457 1448  
1458 1449 function filtrarPapeisSelecionados() {
... ... @@ -1460,16 +1451,18 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
1460 1451  
1461 1452 var dominiosPapelEnvolvidoContrato = [];
1462 1453 $scope.contrato.ctrtEnvolvidos.forEach(function(item){
1463   -
1464   - dominiosPapelEnvolvidoContrato.push(item.dominioPapelEnvolvidoContrato);
  1454 + if(!item.$checked){
  1455 + dominiosPapelEnvolvidoContrato.push(item.dominioPapelEnvolvidoContrato);
  1456 + }
1465 1457 });
1466 1458  
1467 1459 $scope.dominioPapelEnvolvidoList = $filter('idNotEqualDominio')($scope.dominioPapelEnvolvidoListFixa, dominiosPapelEnvolvidoContrato);
1468 1460  
1469   - if ($scope.dominioPapelEnvolvidoList && $scope.dominioPapelEnvolvidoList.length === 0){
1470   -
1471   - $scope.showAlert('warning', $translate.instant('CONTRATOS.MSG.TODOS_PAPEIS_ENVOLVIDOS_ADICIONADOS'));
1472   - return;
  1461 + if($scope.editEnvolvido){
  1462 + if ($scope.dominioPapelEnvolvidoList && $scope.dominioPapelEnvolvidoList.length === 0){
  1463 + $scope.showAlert('warning', $translate.instant('CONTRATOS.MSG.TODOS_PAPEIS_ENVOLVIDOS_ADICIONADOS'));
  1464 + return;
  1465 + }
1473 1466 }
1474 1467 }
1475 1468 };
... ... @@ -1519,10 +1512,6 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
1519 1512 }
1520 1513  
1521 1514 $scope.dominioPapelEnvolvidoList.push(papelExcluido);
1522   -
1523   - if ($scope.contrato.id) {
1524   - $scope.hasAlteracaoEnvolvido = true;
1525   - }
1526 1515 }
1527 1516 });
1528 1517 };
... ... @@ -1558,25 +1547,29 @@ citApp.controller(&#39;ContratoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUploader&#39;, &#39;C
1558 1547 };
1559 1548  
1560 1549 // Responsavel por abrir modal de envolvido para edicao ou visualizacao do item selecionado
1561   - $scope.abrirContratoEnvolvido = function(edit) {
1562   -
1563   - filtrarPapeisSelecionados();
  1550 + $scope.visualizarEditarContratoEnvolvido = function(edit) {
1564 1551  
1565 1552 $scope.editEnvolvido = edit;
1566   -
1567 1553 $scope.contratoEnvolvidoTemp = null;
1568   -
1569 1554 // recupera o item de contrato selecionado
1570 1555 $scope.contratoEnvolvidoTemp = $scope.getCheckedContratoEnvolvido();
1571   -
1572 1556 if(!$scope.contratoEnvolvidoTemp) {
1573   -
1574 1557 $scope.showAlert('warning', !edit ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
1575 1558 return;
1576 1559 }
1577   -
  1560 + $scope.justificativaTemp = {};
  1561 + if($scope.contratoEnvolvidoTemp.justificativas){
  1562 + $scope.contratoEnvolvidoTemp.justificativasAnterioresLength = $scope.contratoEnvolvidoTemp.justificativas.length;
  1563 + } else {
  1564 + $scope.contratoEnvolvidoTemp.justificativasAnterioresLength = 0;
  1565 + $scope.contratoEnvolvidoTemp.justificativas = [];
  1566 + }
  1567 + if($scope.contrato.id){
  1568 + $scope.hasAlteracaoEnvolvido = edit;
  1569 + }
  1570 + filtrarPapeisSelecionados();
1578 1571 $timeout(function() {
1579   - $scope.$openModal('modal-envolvido.html', 'lg');
  1572 + $scope.$openModal('dialog_envolvido.html', 'lg');
1580 1573 });
1581 1574 };
1582 1575  
... ...
cit-contratos-web/src/main/webapp/html/contrato/contratoPg5.html
... ... @@ -9,11 +9,11 @@
9 9 tooltip="{{$translate.instant('VALIDACAO.CONTRATO_EXIGE_MINIMO_TRES_ENVOLVIDOS')}}" tooltip-placement='top'/>
10 10 </label>
11 11 </legend>
12   -
13   - <script type="text/ng-template" id="modal-envolvido.html">
  12 +
  13 + <script type="text/ng-template" id="dialog_envolvido.html">
14 14 <div ng-include src="'/cit-contratos-web/html/contrato/dialog_envolvido.html'" />
15 15 </script>
16   -
  16 +
17 17 <div class="row margin-top">
18 18 <div class="col-sm-12">
19 19 <div class="panel panel-default">
... ... @@ -23,15 +23,15 @@
23 23 <i class="fa fa-plus-circle yellow-dark"></i>
24 24 <translate>LABEL.ADICIONAR</translate>
25 25 </button>
26   -
  26 +
27 27 <button title="{{$translate.instant('LABEL.VISUALIZAR')}}" alt="{{$translate.instant('LABEL.VISUALIZAR')}}" class="btn btn-clear" type="button"
28   - ng-click="abrirContratoEnvolvido(false);" ng-disabled="acaoEmMassaEnvolvido">
  28 + ng-click="visualizarEditarContratoEnvolvido(false);" ng-if="!acaoEmMassaEnvolvido">
29 29 <i class="fa fa-search blue"></i>
30 30 <translate>LABEL.VISUALIZAR</translate>
31 31 </button>
32   -
  32 +
33 33 <button title="{{$translate.instant('LABEL.EDITAR')}}" alt="{{$translate.instant('LABEL.EDITAR')}}" ng-show="edit" class="btn btn-clear" type="button"
34   - ng-click="abrirContratoEnvolvido(true);" ng-if="!acaoEmMassaEnvolvido">
  34 + ng-click="visualizarEditarContratoEnvolvido(true);" ng-if="!acaoEmMassaEnvolvido">
35 35 <i class="fa fa-pencil blue"></i>
36 36 <translate>LABEL.EDITAR</translate>
37 37 </button>
... ... @@ -65,55 +65,5 @@
65 65 </div><!-- .col -->
66 66 </div> <!-- .row -->
67 67 </fieldset><!-- .fieldset -->
68   -
69   - <fieldset ng-if="(contrato.id && hasAlteracaoEnvolvido) || (contrato.id && contrato.justificativas.length > 0)">
70   - <legend>
71   - <label ng-class="{'has-error' : informacoesEnvolvidosContratoForm.$submitted && hasAlteracaoEnvolvido && (!contrato.justificativas || contrato.justificativas.length < 1)}">
72   - <translate>LABEL.JUSTIFICATIVAS</translate>
73   - <span class='red' ng-show="true">*</span>
74   - <i ng-show="informacoesEnvolvidosContratoForm.$submitted && hasAlteracaoEnvolvido && (!contrato.justificativas || contrato.justificativas.length < 1)" class='fa fa-warning red'
75   - tooltip="{{$translate.instant('CONTRATOS.VALIDACAO.ALTERACAO_ENVOLVIDOS_EXIGE_JUSTIFICATIVA')}}" tooltip-placement='top'/>
76   - </label>
77   - </legend>
78   -
79   - <script type="text/ng-template" id="modal-justificativa.html">
80   - <div ng-include src="'/cit-contratos-web/html/contrato/dialog_justificativa.html'" />
81   - </script>
82   -
83   - <div class="row margin-top">
84   - <div class="col-sm-12">
85   - <div class="panel panel-default">
86   - <div class="panel-heading clearfix">
87   - <button title="{{$translate.instant('LABEL.ADICIONAR')}}" alt="{{$translate.instant('LABEL.ADICIONAR')}}" class="btn btn-clear" type="button" ng-show="true"
88   - ng-click="openModalJustificativa();">
89   - <i class="fa fa-plus-circle yellow-dark"></i>
90   - <translate>LABEL.ADICIONAR</translate>
91   - </button>
92   - </div><!-- .panel-heading -->
93   - <table class="table table-bordered table-striped">
94   - <thead>
95   - <tr>
96   - <th style="width: 5%;" class="text-center">#</th>
97   - <th style="width: 15%;" class="text-center"><translate>LABEL.DATA</translate></th>
98   - <th style="width: 65%;" class="text-center"><translate>LABEL.JUSTIFICATIVA</translate></th>
99   - <th style="width: 15%;" class="text-center"><translate>LABEL.USUARIO</translate></th>
100   - </tr>
101   - </thead>
102   - <tbody>
103   - <tr ng-hide="(contrato.justificativas && contrato.justificativas.length != 0)">
104   - <td colspan="4" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
105   - </tr>
106   - <tr ng-repeat="justificativa in contrato.justificativas">
107   - <td class="text-center">{{$index +1}}</td>
108   - <td class="text-center">{{ justificativa.dataCriacao | date : 'dd/MM/yyyy' }}</td>
109   - <td class="text-justify">{{ justificativa.descricao }}</td>
110   - <td class="text-center">{{ justificativa.autor.username }}</td>
111   - </tr>
112   - </tbody>
113   - </table>
114   - </div><!-- .painel -->
115   - </div><!-- .col -->
116   - </div> <!-- .row -->
117   - </fieldset><!-- .fieldset -->
118 68 </div><!-- /.page-content -->
119 69 </ng-form>
120 70 \ No newline at end of file
... ...
cit-contratos-web/src/main/webapp/html/contrato/dialog_envolvido.html
1 1 <ng-form name="formDialogEnvolvido" autocomplete="off">
2 2 <div class="modal-header">
3   - <button title="{{$translate.instant('LABEL.ADICIONAR')}}" alt="{{$translate.instant('LABEL.ADICIONAR')}}"
4   - ng-click="adicionarContratoEnvolvido(formDialogEnvolvido, false)" ng-if="editEnvolvido" class="btn btn-clear" type="button">
5   - <i class="fa fa-save green"></i>
6   - <translate>LABEL.ADICIONAR</translate>
7   - </button>
8   - <button title="{{$translate.instant('LABEL.ADICIONAR_NOVO')}}" alt="{{$translate.instant('LABEL.ADICIONAR_NOVO')}}"
9   - ng-click="adicionarContratoEnvolvido(formDialogEnvolvido, true)" ng-if="editEnvolvido" class="btn btn-clear" type="button">
10   - <i class="fa fa-save green"></i>
11   - <translate>LABEL.ADICIONAR_CONTINUAR</translate>
12   - </button>
13   -
14   - <button title="{{$translate.instant('LABEL.FECHAR')}}" alt="{{$translate.instant('LABEL.FECHAR')}}"
15   - ng-click="$dismiss('cancel');" class="btn btn-clear" type="button">
16   - <i class="fa fa-times red"></i>
17   - <translate>LABEL.FECHAR</translate>
18   - </button>
  3 + <button title="{{$translate.instant('LABEL.ADICIONAR')}}" alt="{{$translate.instant('LABEL.ADICIONAR')}}"
  4 + ng-click="adicionarContratoEnvolvido(formDialogEnvolvido, false)" ng-if="editEnvolvido" class="btn btn-clear" type="button">
  5 + <i class="fa fa-save green"></i>
  6 + <translate>LABEL.ADICIONAR</translate>
  7 + </button>
  8 + <button title="{{$translate.instant('LABEL.ADICIONAR_NOVO')}}" alt="{{$translate.instant('LABEL.ADICIONAR_NOVO')}}"
  9 + ng-click="adicionarContratoEnvolvido(formDialogEnvolvido, true)" ng-show="editEnvolvido && !hasAlteracaoEnvolvido" class="btn btn-clear" type="button">
  10 + <i class="fa fa-save green"></i>
  11 + <translate>LABEL.ADICIONAR_CONTINUAR</translate>
  12 + </button>
  13 +
  14 + <button title="{{$translate.instant('LABEL.FECHAR')}}" alt="{{$translate.instant('LABEL.FECHAR')}}"
  15 + ng-click="closeModalContratoEvolvido(formDialogEnvolvido);" class="btn btn-clear" type="button">
  16 + <i class="fa fa-times red"></i>
  17 + <translate>LABEL.FECHAR</translate>
  18 + </button>
19 19 </div>
20 20  
21 21 <div class="modal-body">
22   - <h2 class="title-modal"><translate>LABEL.ENVOLVIDO</translate></h2>
23   - <p ng-show="editEnvolvido">
24   - <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate></small>
25   - </p>
26   -
  22 + <h2 class="title-modal"><translate>LABEL.ENVOLVIDO</translate></h2>
  23 + <p ng-show="editEnvolvido">
  24 + <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate></small>
  25 + </p>
  26 +
27 27 <fieldset>
28 28 <div class="row">
29   - <div class="col-sm-4">
30   - <auto-complete ng-find="findEnvolvido(value)" ng-item="item.pessoa.nome"
31   - ng-id="contratoEnvolvidoTemp.envolvido" ng-label="LABEL.NOME_ENVOLVIDO" ng-model="contratoEnvolvidoTemp.envolvido"
32   - ng-disabled="!edit" form="formDialogEnvolvido" ng-obrigatorio="true"/>
  29 + <div class="col-sm-6">
  30 + <auto-complete ng-find="findEnvolvido(value)" ng-item="item.pessoa.nome" ng-disabled="!editEnvolvido"
  31 + ng-id="contratoEnvolvidoTemp.envolvido" ng-label="LABEL.NOME_ENVOLVIDO" ng-model="contratoEnvolvidoTemp.envolvido"
  32 + ng-disabled="!edit" form="formDialogEnvolvido" ng-obrigatorio="true" />
33 33 </div>
34   -
35   - <div class="col-sm-4">
36   - <label-input ng-type="text" ng-id="contratoEnvolvidoTemp.envolvido.matricula" ng-label="LABEL.MATRICULA"
37   - ng-model="contratoEnvolvidoTemp.envolvido.matricula" ng-custom-maxlength="30" form="formDialogEnvolvido"
  34 +
  35 + <div class="col-sm-3">
  36 + <label-input ng-type="text" ng-id="contratoEnvolvidoTemp.envolvido.matricula" ng-label="LABEL.MATRICULA"
  37 + ng-model="contratoEnvolvidoTemp.envolvido.matricula" ng-custom-maxlength="30" form="formDialogEnvolvido"
38 38 ng-disabled="true" ng-obrigatorio="false"/>
39 39 </div><!-- .col-sm-4 -->
40   -
41   - <div class="col-sm-4">
42   - <label-select ng-label="LABEL.PAPEL" ng-id="contratoEnvolvidoTemp.dominioPapelEnvolvidoContrato"
43   - ng-model="contratoEnvolvidoTemp.dominioPapelEnvolvidoContrato" ng-list="dominioPapelEnvolvidoList"
44   - form="formDialogEnvolvido" ng-obrigatorio="editEnvolvido" ng-disabled="!editEnvolvido"
  40 +
  41 + <div class="col-sm-3" >
  42 + <label-select ng-label="LABEL.PAPEL" ng-id="contratoEnvolvidoTemp.dominioPapelEnvolvidoContrato"
  43 + ng-model="contratoEnvolvidoTemp.dominioPapelEnvolvidoContrato" ng-list="dominioPapelEnvolvidoList"
  44 + form="formDialogEnvolvido" ng-obrigatorio="editEnvolvido && dominioPapelEnvolvidoList.length > 0"
  45 + ng-disabled="!editEnvolvido || dominioPapelEnvolvidoList.length == 0"
45 46 ng-custom-options="dominioPapelEnvolvido.originalElement as dominioPapelEnvolvido.descricao for dominioPapelEnvolvido"
46 47 track-by="track by dominioPapelEnvolvido.id"/>
47 48 </div><!-- .col-sm-4 -->
48 49 </div><!-- .row -->
  50 + </fieldset>
  51 + <fieldset ng-if="(contrato.id && hasAlteracaoEnvolvido) || (contrato.id && contratoEnvolvidoTemp.justificativas.length > 0)">
  52 + <div class="row">
  53 + <div class="col-sm-12">
  54 + <h2 class="title-modal"><translate>LABEL.JUSTIFICATIVA</translate></h2>
  55 + <p ng-show="editEnvolvido">
  56 + <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate></small>
  57 + </p>
  58 + </div>
  59 + </div>
  60 + <div class="row">
  61 + <div class="col-sm-12">
  62 + <label-text-area ng-id="justificativaTemp.descricao" ng-label="LABEL.JUSTIFICATIVA" ng-hide="!editEnvolvido"
  63 + form="formDialogJustificativa" rows="3" ng-custom-maxlength="500"
  64 + ng-model="justificativaTemp.descricao" ></label-text-area>
  65 + </div>
  66 + </div><!-- .row -->
  67 + <div class="row">
  68 + <div class="col-sm-4">
  69 + <button title="{{$translate.instant('CONTRATOS.LABEL.ADICIONAR_JUSTIFICATIVA')}}" alt="{{$translate.instant('CONTRATOS.LABEL.ADICIONAR_JUSTIFICATIVA')}}"
  70 + ng-click="adicionarJustificativa(formDialogEnvolvido)" ng-hide="!editEnvolvido" class="btn btn-success" type="button">
  71 + <i class="fa fa-save white"></i>
  72 + <translate>CONTRATOS.LABEL.ADICIONAR_JUSTIFICATIVA</translate>
  73 + </button>
  74 + </div>
  75 + </div><!-- .row -->
  76 + </br>
  77 + <div class="row">
  78 + <div class="col-sm-12">
  79 + <table class="table table-bordered table-striped">
  80 + <thead>
  81 + <tr>
  82 + <th style="width: 5%;" class="text-center">#</th>
  83 + <th style="width: 15%;" class="text-center"><translate>LABEL.DATA</translate></th>
  84 + <th style="width: 65%;" class="text-center"><translate>LABEL.JUSTIFICATIVA</translate></th>
  85 + <th style="width: 15%;" class="text-center"><translate>LABEL.USUARIO</translate></th>
  86 + </tr>
  87 + </thead>
  88 + <tbody>
  89 + <tr ng-hide="(contratoEnvolvidoTemp.justificativas && contratoEnvolvidoTemp.justificativas.length != 0)">
  90 + <td colspan="4" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
  91 + </tr>
  92 + <tr ng-repeat="justificativa in contratoEnvolvidoTemp.justificativas">
  93 + <td class="text-center">{{$index +1}}</td>
  94 + <td class="text-center">{{ justificativa.dataCriacao | date : 'dd/MM/yyyy' }}</td>
  95 + <td class="text-justify">{{ justificativa.descricao }}</td>
  96 + <td class="text-center">{{ justificativa.autor.username }}</td>
  97 + </tr>
  98 + </tbody>
  99 + </table>
  100 + </div><!-- .<!-- .col -->
  101 + </div><!-- .<!-- .row -->
49 102 </fieldset><!-- .fieldset -->
50 103 </div><!-- .<!-- .modal-body -->
51   -</ng-form>
52 104 \ No newline at end of file
  105 +</ng-form>
... ...