Commit 763e9bb5b774133c9b2c93c55d6d1526155ef034

Authored by erick.sato
2 parents 86741157 486ebd32
Exists in master

Merge branch 'tarefa-4331' into cnt-1.0.0-alfa11

cit-contratos-api/src/main/java/br/com/centralit/api/dao/EventoAditivoDao.java
... ... @@ -7,7 +7,7 @@ import br.com.centralit.api.model.EventoAditivo;
7 7 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
8 8  
9 9 /**
10   - *
  10 + *
11 11 * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
12 12 *
13 13 * <p><b>Company: </b> Central IT - Governança Corporativa - </p>
... ... @@ -15,11 +15,11 @@ import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
15 15 * <p><b>Title: </b></p>
16 16 *
17 17 * <p><b>Description: </b></p>
18   - *
  18 + *
19 19 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
20 20 *
21   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
22   - *
  21 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  22 + *
23 23 * @since 15/03/2016 - 18:35:42
24 24 *
25 25 * @version 1.0.0
... ... @@ -30,10 +30,10 @@ import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
30 30 public interface EventoAditivoDao extends CitGenericDAO {
31 31  
32 32 /**
33   - *
  33 + *
34 34 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
35 35 *
36   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  36 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
37 37 *
38 38 * Método responsável por
39 39 *
... ... @@ -45,10 +45,10 @@ public interface EventoAditivoDao extends CitGenericDAO {
45 45 Collection<EventoAditivo> findAllByContrato(Long contratoId);
46 46  
47 47 /**
48   - *
  48 + *
49 49 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
50 50 *
51   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  51 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
52 52 *
53 53 * Método responsável por buscar o último registro de aditivo de um determinado contrato no ano da data de emissão
54 54 *
... ... @@ -61,4 +61,6 @@ public interface EventoAditivoDao extends CitGenericDAO {
61 61 * @return
62 62 */
63 63 EventoAditivo buscarUltimoRegistroPorDataEmissaoEContrato(String property, Calendar dataEmissao, Long contratoId, Long organizacaoId);
  64 +
  65 + boolean existeAditivoPosterior(Calendar dataInicioAditivo, Long idContrato);
64 66 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/dao/impl/EventoAditivoDaoHibernate.java
... ... @@ -2,6 +2,7 @@ package br.com.centralit.api.dao.impl;
2 2  
3 3 import java.util.Calendar;
4 4 import java.util.Collection;
  5 +import java.util.List;
5 6  
6 7 import org.springframework.stereotype.Repository;
7 8  
... ... @@ -13,37 +14,37 @@ import br.com.centralit.framework.dao.arquitetura.SearchSeven;
13 14 import com.googlecode.genericdao.search.Search;
14 15  
15 16 /**
16   - *
  17 + *
17 18 * <p>
18 19 * <img src="http://centralit.com.br/images/logo_central.png">
19 20 * </p>
20   - *
  21 + *
21 22 * <p>
22 23 * <b>Company: </b> Central IT - Governança Corporativa -
23 24 * </p>
24   - *
  25 + *
25 26 * <p>
26 27 * <b>Title: </b>
27 28 * </p>
28   - *
  29 + *
29 30 * <p>
30 31 * <b>Description: </b>
31 32 * </p>
32   - *
  33 + *
33 34 * <p>
34 35 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
35 36 * </p>
36   - *
  37 + *
37 38 * <p>
38 39 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
39 40 * </p>
40   - *
  41 + *
41 42 * @since 15/03/2016 - 18:36:13
42   - *
  43 + *
43 44 * @version 1.0.0
44   - *
  45 + *
45 46 * @author geovane.filho
46   - *
  47 + *
47 48 */
48 49 @Repository("eventoAditivoDao")
49 50 public class EventoAditivoDaoHibernate extends CitGenericDAOImpl implements EventoAditivoDao {
... ... @@ -100,4 +101,16 @@ public class EventoAditivoDaoHibernate extends CitGenericDAOImpl implements Even
100 101 return searchUnique(search);
101 102 }
102 103  
  104 + @Override
  105 + public boolean existeAditivoPosterior(Calendar dataInicioAditivo, Long idContrato) {
  106 + SearchSeven search = new SearchSeven();
  107 +
  108 + search.addFilterIn("contrato.id", idContrato);
  109 + search.addFilterGreaterThan("dataEmissao", dataInicioAditivo);
  110 +
  111 + List<Object> list = this.search(search);
  112 +
  113 + return list != null && list.size() > 0 ? true : false;
  114 + }
  115 +
103 116 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/EventoAditivoService.java
1 1 package br.com.centralit.api.service;
2 2  
3   -import java.io.InputStream;
4 3 import java.sql.Connection;
5 4 import java.util.Collection;
6 5  
... ... @@ -28,4 +27,8 @@ public interface EventoAditivoService extends GenericService&lt;EventoAditivo, Long
28 27 Collection<EventoAditivo> findAllByContrato(Long contratoId);
29 28  
30 29 JasperPrint getJasperPrintAditivo(Long idAditivo, Connection conn, Usuario user, String titulo) throws JRException;
  30 +
  31 + Boolean permiteExclusaoAditivo(Long idAditivo);
  32 +
  33 + Boolean existeAditivoPrazoPosterior(Long idAditivo);
31 34 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/EventoAditivoServiceImpl.java
... ... @@ -6,6 +6,7 @@ import java.text.DecimalFormat;
6 6 import java.text.SimpleDateFormat;
7 7 import java.util.Calendar;
8 8 import java.util.Collection;
  9 +import java.util.GregorianCalendar;
9 10 import java.util.HashMap;
10 11 import java.util.Map;
11 12  
... ... @@ -40,6 +41,7 @@ import br.com.centralit.framework.model.Usuario;
40 41 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
41 42 import br.com.centralit.framework.util.Util;
42 43 import br.com.centralit.framework.util.UtilDataBase;
  44 +import br.com.centralit.framework.util.UtilDate;
43 45 import br.com.centralit.framework.util.UtilObjeto;
44 46  
45 47 /**
... ... @@ -257,4 +259,32 @@ public class EventoAditivoServiceImpl extends GenericServiceImpl&lt;EventoAditivo,
257 259 }
258 260 }
259 261  
  262 + @Override
  263 + public Boolean permiteExclusaoAditivo(Long idAditivo) {
  264 + EventoAditivo aditivo = this.find(idAditivo);
  265 +
  266 + if(aditivo.getDataInicio().before(GregorianCalendar.getInstance()) ){
  267 + return false;
  268 + }
  269 +
  270 + if(UtilDate.isMesmaData(aditivo.getDataInicio(), GregorianCalendar.getInstance())){
  271 + return false;
  272 + }
  273 +
  274 + if(this.eventoAditivoDao.existeAditivoPosterior(aditivo.getDataInicio(), aditivo.getContrato().getId())){
  275 + return false;
  276 + }
  277 +
  278 + return true;
  279 + }
  280 +
  281 + @Override
  282 + public Boolean existeAditivoPrazoPosterior(Long idAditivo) {
  283 + EventoAditivo aditivo = this.find(idAditivo);
  284 + if(this.eventoAditivoDao.existeAditivoPosterior(aditivo.getDataInicio(), aditivo.getContrato().getId())){
  285 + return true;
  286 + }
  287 + return false;
  288 + }
  289 +
260 290 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/validation/EventoAditivoValidator.java
1 1 package br.com.centralit.api.service.validation;
2 2  
3 3 import java.math.BigDecimal;
  4 +import java.sql.Timestamp;
4 5 import java.util.Calendar;
5 6  
6 7 import org.springframework.stereotype.Component;
... ... @@ -11,11 +12,12 @@ import org.springframework.validation.Validator;
11 12 import br.com.centralit.api.model.DominioContrato;
12 13 import br.com.centralit.api.model.EventoAditivo;
13 14 import br.com.centralit.framework.exception.CodigoErro;
  15 +import br.com.centralit.framework.util.UtilDate;
14 16 import br.com.centralit.framework.util.UtilObjeto;
15 17  
16 18  
17 19 /**
18   - *
  20 + *
19 21 * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
20 22 *
21 23 * <p><b>Company: </b> Central IT - Governança Corporativa - </p>
... ... @@ -23,11 +25,11 @@ import br.com.centralit.framework.util.UtilObjeto;
23 25 * <p><b>Title: </b></p>
24 26 *
25 27 * <p><b>Description: </b></p>
26   - *
  28 + *
27 29 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
28 30 *
29   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
30   - *
  31 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  32 + *
31 33 * @since 16/03/2016 - 11:10:02
32 34 *
33 35 * @version 1.0.0
... ... @@ -56,98 +58,115 @@ public class EventoAditivoValidator implements Validator{
56 58  
57 59 EventoAditivo aditivo = (EventoAditivo) target;
58 60 Calendar dataFinal = null;
59   -
60   - ValidationUtils.rejectIfEmpty(errors, "contrato", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.CONTRATO");
61   -
62   - if (UtilObjeto.isReferencia(aditivo.getContrato())) {
  61 + if(UtilObjeto.isReferencia(aditivo.getContrato())){
63 62 dataFinal = aditivo.getContrato().getDataVigenciaFinal();
64   -
  63 + }
  64 + ValidationUtils.rejectIfEmpty(errors, "contrato", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.CONTRATO");
  65 +
  66 + if (UtilObjeto.isReferencia(aditivo.getContrato()) && !UtilObjeto.isReferencia(aditivo.getId())) {
  67 + dataFinal = aditivo.getContrato().getDataUltimaVigenciaFinal();
  68 + }else{
65 69 if (UtilObjeto.isReferencia(aditivo.getContrato().getAditivos())) {
66 70 for (EventoAditivo adContrato : aditivo.getContrato().getAditivos()) {
67   - if (((!UtilObjeto.isReferencia(aditivo.getId())) || (UtilObjeto.isReferencia(aditivo.getId()) && !adContrato.getId().equals(aditivo.getId()))) && adContrato.getAditivoDePrazo() && adContrato.getDataFim().after(dataFinal)) {
  71 + if( adContrato.getAditivoDePrazo() && adContrato.getDataFim().before(aditivo.getDataInicio()) && adContrato.getDataFim().after(dataFinal)){
68 72 dataFinal = adContrato.getDataFim();
69 73 }
70 74 }
71 75 }
72 76 }
73 77  
  78 + if(aditivo.getDataEmissao().after(aditivo.getDataInicio())){
  79 + errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.ADITIVO_DATA_EMISSAO_MAIOR_DATA_INICIO");
  80 + }
  81 +
74 82 ValidationUtils.rejectIfEmpty(errors, "registroSequencial", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.NUM_ADITIVO");
75   -
  83 +
76 84 ValidationUtils.rejectIfEmpty(errors, "dataEmissao", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.DATA_EMISSAO_OCORRENCIA");
77   -
  85 +
78 86 if (UtilObjeto.isReferencia(aditivo.getDataEmissao()) && UtilObjeto.isReferencia(aditivo.getContrato()) &&
79 87 (aditivo.getDataEmissao().before(aditivo.getContrato().getDataVigenciaInicial()) || aditivo.getDataEmissao().after(dataFinal))) {
80 88 errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_DENTRO_REFERENCIA");
81 89 }
82   -
  90 +
83 91 ValidationUtils.rejectIfEmpty(errors, "tipoAlteracao", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ALTERACAO");
84   -
  92 +
85 93 if (!(aditivo.getAditivoDeValor() || aditivo.getAditivoDePrazo() || aditivo.getAditivoDeClausula())) {
86 94 errors.rejectValue("aditivoDePrazo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.TIPO_ADITIVO");
87 95 errors.rejectValue("aditivoDeValor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.TIPO_ADITIVO");
88 96 errors.rejectValue("aditivoDeClausula", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.TIPO_ADITIVO");
89 97 }
90   -
  98 +
91 99 if (aditivo.getAditivoDePrazo()) {
92 100 if (UtilObjeto.isReferencia(aditivo.getDataEmissao())) {
93   - Calendar ultimaDataEmissao = null;
  101 + Calendar ultimaDataEmissaoAditivoAnterior = null;
  102 + Calendar ultimaDataEmissaoAditivoPosterior = null;
94 103 int qntAditivoPrazo = 0;
95 104 if (UtilObjeto.isReferencia(aditivo.getContrato().getAditivos())) {
96 105 for (EventoAditivo adContrato : aditivo.getContrato().getAditivos()) {
97 106 if (((!UtilObjeto.isReferencia(aditivo.getId())) || (UtilObjeto.isReferencia(aditivo.getId()) && !adContrato.getId().equals(aditivo.getId()))) && adContrato.getAditivoDePrazo()) {
98 107 qntAditivoPrazo++;
99   - if (!UtilObjeto.isReferencia(ultimaDataEmissao)) {
100   - ultimaDataEmissao = adContrato.getDataEmissao();
101   - } else {
102   - if (adContrato.getDataEmissao().after(ultimaDataEmissao)) {
103   - ultimaDataEmissao = adContrato.getDataEmissao();
104   - }
  108 + if (adContrato.getDataEmissao().before(aditivo.getDataEmissao())) {
  109 + ultimaDataEmissaoAditivoAnterior = adContrato.getDataEmissao();
  110 + }
  111 + if(adContrato.getDataEmissao().after(aditivo.getDataEmissao())){
  112 + ultimaDataEmissaoAditivoPosterior = adContrato.getDataEmissao();
105 113 }
106 114 }
107 115 }
108 116 }
109   -
  117 +
110 118 if (qntAditivoPrazo >= MAXIMO_ADITIVO_PRAZO) {
111 119 errors.rejectValue("aditivoDePrazo", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.MAXIMO_ADITIVO_PRAZO");
112 120 }
113   -
114   - if (UtilObjeto.isReferencia(ultimaDataEmissao)) {
115   - if (ultimaDataEmissao.get(Calendar.YEAR) < aditivo.getDataEmissao().get(Calendar.YEAR)) {
116   - if (ultimaDataEmissao.get(Calendar.MONTH) <= aditivo.getDataEmissao().get(Calendar.MONTH)) {
117   - if ((ultimaDataEmissao.get(Calendar.MONTH) == aditivo.getDataEmissao().get(Calendar.MONTH)) &&
118   - ultimaDataEmissao.get(Calendar.DAY_OF_MONTH) >= aditivo.getDataEmissao().get(Calendar.DAY_OF_MONTH)) {
  121 +
  122 + if (UtilObjeto.isReferencia(ultimaDataEmissaoAditivoAnterior)) {
  123 +
  124 + if (ultimaDataEmissaoAditivoAnterior.get(Calendar.YEAR) < aditivo.getDataEmissao().get(Calendar.YEAR)) {
  125 + if ( ultimaDataEmissaoAditivoAnterior.get(Calendar.MONTH) <= aditivo.getDataEmissao().get(Calendar.MONTH)) {
  126 + if ((ultimaDataEmissaoAditivoAnterior.get(Calendar.MONTH) == aditivo.getDataEmissao().get(Calendar.MONTH)) &&
  127 + ultimaDataEmissaoAditivoAnterior.get(Calendar.DAY_OF_MONTH) > aditivo.getDataEmissao().get(Calendar.DAY_OF_MONTH)) {
119 128 errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_12_MESES");
120 129 }
121   - } else {
122   - errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_12_MESES");
123 130 }
124 131 } else {
125 132 errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_12_MESES");
126 133 }
127 134 }
  135 + if (UtilObjeto.isReferencia(ultimaDataEmissaoAditivoPosterior)) {
  136 + if (ultimaDataEmissaoAditivoPosterior.get(Calendar.YEAR) > aditivo.getDataEmissao().get(Calendar.YEAR)) {
  137 + if (ultimaDataEmissaoAditivoPosterior.get(Calendar.MONTH) >= aditivo.getDataEmissao().get(Calendar.MONTH)) {
  138 + if ((ultimaDataEmissaoAditivoPosterior.get(Calendar.MONTH) == aditivo.getDataEmissao().get(Calendar.MONTH)) &&
  139 + ultimaDataEmissaoAditivoPosterior.get(Calendar.DAY_OF_MONTH) < aditivo.getDataEmissao().get(Calendar.DAY_OF_MONTH)) {
  140 + errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_12_MESES_POSTERIOR");
  141 + }
  142 + }
  143 + } else {
  144 + errors.rejectValue("dataEmissao", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_EMISSAO_12_MESES_POSTERIOR");
  145 + }
  146 + }
128 147 }
129   -
  148 +
130 149 ValidationUtils.rejectIfEmpty(errors, "dataInicio", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.DATA_INICIO_ADITIVO");
131 150 ValidationUtils.rejectIfEmpty(errors, "dataFim", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.DATA_FINAL_ADITIVO");
132   -
  151 +
133 152 if (UtilObjeto.isReferencia(aditivo.getDataInicio()) && dataFinal.compareTo(aditivo.getDataInicio()) >= 0){
134 153 errors.rejectValue("dataInicio", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_INICIO_ADITIVO_MAIOR_DATA_FINAL");
135 154 }
136   -
  155 +
137 156 if (UtilObjeto.isReferencia(aditivo.getDataInicio()) && UtilObjeto.isReferencia(aditivo.getDataFim()) && aditivo.getDataInicio().compareTo(aditivo.getDataFim()) >= 0) {
138 157 errors.rejectValue("dataInicio", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.DATA_INICIO_ADITIVO_MAIOR_DATA_FIM_ADITIVO");
139 158 }
140 159 }
141   -
  160 +
142 161 if (aditivo.getAditivoDeValor()) {
143 162 ValidationUtils.rejectIfEmpty(errors, "tipoAlteracaoValor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ALTERACAO");
144 163 ValidationUtils.rejectIfEmpty(errors, "tipoObjeto", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.TIPO_OBJETO");
145 164 ValidationUtils.rejectIfEmpty(errors, "valorAditivo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.VALOR_ADITIVO");
146 165 ValidationUtils.rejectIfEmpty(errors, "percentualAditivo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.PERCENTUAL_ADITIVO");
147   -
  166 +
148 167 Calendar dataInicioPrazo = null;
149 168 Calendar dataFimPrazo = null;
150   -
  169 +
151 170 if (UtilObjeto.isReferencia(aditivo.getContrato())) {
152 171 if (dataDentroPrazo(aditivo.getDataEmissao(), aditivo.getContrato().getDataVigenciaInicial(), aditivo.getContrato().getDataVigenciaFinal())) {
153 172 dataInicioPrazo = aditivo.getContrato().getDataVigenciaInicial();
... ... @@ -164,16 +183,16 @@ public class EventoAditivoValidator implements Validator{
164 183 }
165 184 }
166 185 }
167   -
  186 +
168 187 if (UtilObjeto.isReferencia(dataInicioPrazo) && UtilObjeto.isReferencia(dataFimPrazo)) {
169 188 BigDecimal percentualTotalAditivo = BigDecimal.ZERO;
170   -
  189 +
171 190 if (aditivo.getTipoAlteracaoValor().getCodigo().equals(DominioContrato.CODIGO_TIPO_ALTERACAO_VALOR_ACRESCIMO)) {
172 191 percentualTotalAditivo = percentualTotalAditivo.add(aditivo.getPercentualAditivo());
173 192 } else if (aditivo.getTipoAlteracaoValor().getCodigo().equals(DominioContrato.CODIGO_TIPO_ALTERACAO_VALOR_SUPRESSAO)) {
174 193 percentualTotalAditivo = percentualTotalAditivo.subtract(aditivo.getPercentualAditivo());
175 194 }
176   -
  195 +
177 196 if (UtilObjeto.isReferencia(aditivo.getContrato().getAditivos())) {
178 197 for (EventoAditivo adContrato : aditivo.getContrato().getAditivos()) {
179 198 if (((!UtilObjeto.isReferencia(aditivo.getId())) || (UtilObjeto.isReferencia(aditivo.getId()) && !adContrato.getId().equals(aditivo.getId()))) && adContrato.getAditivoDeValor() && dataDentroPrazo(adContrato.getDataEmissao(), dataInicioPrazo, dataFimPrazo) &&
... ... @@ -186,7 +205,7 @@ public class EventoAditivoValidator implements Validator{
186 205 }
187 206 }
188 207 }
189   -
  208 +
190 209 if (aditivo.getTipoObjeto().getCodigo().equals(DominioContrato.CODIGO_TIPO_OBJETO_OBRAS_SERVICOS_COMPRAS)) {
191 210 if (percentualTotalAditivo.abs().compareTo(PERCENTAGEM_MAXIMA_OBRAS_SERVICOS_COMPRAS) > 0) {
192 211 errors.rejectValue("percentualAditivo", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.PERCENTAGEM_MAIOR_OBRAS_SERVICOS_COMPRAS");
... ... @@ -196,22 +215,22 @@ public class EventoAditivoValidator implements Validator{
196 215 errors.rejectValue("percentualAditivo", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "CONTRATOS.MSG.PERCENTAGEM_MAIOR_REFORMA_IMOVEIS");
197 216 }
198 217 }
199   -
  218 +
200 219 }
201 220 }
202   -
  221 +
203 222 if (aditivo.getAditivoDeClausula()) {
204 223 ValidationUtils.rejectIfEmpty(errors, "descricao", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.DESCRICAO_ADITIVO");
205 224 }
206   -
  225 +
207 226 ValidationUtils.rejectIfEmpty(errors, "justificativa", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CONTRATOS.LABEL.JUSTIFICATIVA_ADITIVO");
208 227 }
209   -
  228 +
210 229 /**
211   - *
  230 + *
212 231 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
213 232 *
214   - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  233 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
215 234 *
216 235 * Método responsável por verificar se uma determinada data esta dentro de um determinado prazo definido
217 236 *
... ...
cit-contratos-web/src/main/java/br/com/centralit/controller/EventoAditivoController.java
... ... @@ -129,4 +129,17 @@ public class EventoAditivoController extends GenericController&lt;EventoAditivo&gt;{
129 129  
130 130 }
131 131  
  132 +
  133 + @RequestMapping(value = "/permiteExclusaoAditivo", method = RequestMethod.GET)
  134 + @ResponseBody
  135 + public Boolean permiteExclusaoAditivo(@RequestParam(value="aditivoId") Long idAditivo) {
  136 + return this.eventoAditivoService.permiteExclusaoAditivo(idAditivo);
  137 + }
  138 +
  139 + @RequestMapping(value = "/existeAditivoPrazoPosterior", method = RequestMethod.GET)
  140 + @ResponseBody
  141 + public Boolean existeAditivoPrazoPosterior(@RequestParam(value="aditivoId") Long idAditivo) {
  142 + return this.eventoAditivoService.existeAditivoPrazoPosterior(idAditivo);
  143 + }
  144 +
132 145 }
... ...
cit-contratos-web/src/main/java/br/com/centralit/listener/StartupListenerContratos.java
... ... @@ -985,6 +985,10 @@ public class StartupListenerContratos extends UtilStartup implements Application
985 985 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.TERMO_REFERENCIA_PROJETO_BASICO", "Termo de referência/Projeto Básico", dominio, modulo));
986 986 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.CONTRATO_SEM_VINCULO_TERMO", "Contrato selecionado está sem vínculo a um termo de referência.", dominio, modulo));
987 987 internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.LABEL.ENCERRAMENTO_CONTRATO", "Encerramento de contrato", dominio, modulo));
  988 +
  989 + internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.MSG.EXCLUSAO_ADITIVO_NEGADA", "Exclusão não permitida, o aditivo de prazo já está vigente ou há aditivos de prazo subsequentes a este.", dominio, modulo));
  990 + internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.MSG.DATA_EMISSAO_12_MESES_POSTERIOR", "Data de emissão não permitida, pois infere intervalo de 12 meses em relação ao aditivo subsequente.", dominio, modulo));
  991 + internacionalizacaoList.add(new Internacionalizacao("CONTRATOS.MSG.ADITIVO_DATA_EMISSAO_MAIOR_DATA_INICIO", "Data de emissão deve ser menor que a data de início do aditivo.", dominio, modulo));
988 992 }
989 993  
990 994 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/VisaoContratoController.js
... ... @@ -160,17 +160,27 @@ citApp.controller(&#39;VisaoContratoController&#39;, [&#39;$scope&#39;,
160 160 };
161 161  
162 162 $scope.editarModal = function (evento) {
163   - $scope.edit = true;
164   - $scope.abreModal(evento.tipoEvento.nome);
  163 + $scope.edit = true;
  164 +
  165 + if($scope.evento.aditivoDePrazo){
  166 + EventoAditivoRepository.existeAditivoPrazoPosterior($scope.evento.id).then(function (result) {
  167 + $scope.naoPermiteAlterarDataFim = result;
  168 + $scope.abreModal(evento.tipoEvento.nome);
  169 + });
  170 + }else{
  171 + $scope.abreModal(evento.tipoEvento.nome);
  172 + }
  173 +
165 174 };
166 175  
167 176 $scope.criarEvento = function () {
168   - $scope.evento = null;
169   - $timeout(function () {
170   - $scope.edit = true;
171   - $scope.abreModal($scope.contrato.contratoEvento.tipoEventoId);
172   - delete $scope.contrato.contratoEvento;
173   - });
  177 + $scope.naoPermiteAlterarDataFim = false;
  178 + $scope.evento = null;
  179 + $timeout(function () {
  180 + $scope.edit = true;
  181 + $scope.abreModal($scope.contrato.contratoEvento.tipoEventoId);
  182 + delete $scope.contrato.contratoEvento;
  183 + });
174 184 };
175 185  
176 186 var eventoClasses = {
... ... @@ -519,8 +529,19 @@ citApp.controller(&#39;VisaoContratoController&#39;, [&#39;$scope&#39;,
519 529 };
520 530  
521 531 $scope.removerEvento = function(){
522   - $scope.evento.justificativaExclusao = '';
523   - $scope.$openModal('modal-justificativa-exclusao.html', 'lg');
  532 + if($scope.evento.aditivoDePrazo){
  533 + EventoAditivoRepository.permiteExclusaoAditivo($scope.evento.id).then(function (result) {
  534 + if(result){
  535 + $scope.evento.justificativaExclusao = '';
  536 + $scope.$openModal('modal-justificativa-exclusao.html', 'lg');
  537 + }else{
  538 + $scope.showAlert('warning', $translate.instant('CONTRATOS.MSG.EXCLUSAO_ADITIVO_NEGADA'));
  539 + }
  540 + });
  541 + }else{
  542 + $scope.evento.justificativaExclusao = '';
  543 + $scope.$openModal('modal-justificativa-exclusao.html', 'lg');
  544 + }
524 545 };
525 546  
526 547 $scope.salvarJustificativaExclusao = function(form){
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/repository/EventoAditivoRepository.js
... ... @@ -4,10 +4,18 @@ citApp.factory(&#39;EventoAditivoRepository&#39;, [&#39;RestangularContratos&#39;, &#39;AbstractRepo
4 4  
5 5 function EventoAditivoRepository() {
6 6 AbstractRepository.call(this, restangularContratos, 'rest/eventoAditivo');
7   -
  7 +
8 8 this.findAllByContrato = function(contratoId) {
9 9 return restangularContratos.all(this.route+'/findAllByContrato').post(contratoId);
10   - };
  10 + };
  11 +
  12 + this.permiteExclusaoAditivo = function(aditivoId) {
  13 + return restangularContratos.one(this.route + "/permiteExclusaoAditivo").get({"aditivoId": aditivoId}).then();
  14 + };
  15 + this.existeAditivoPrazoPosterior = function(aditivoId) {
  16 + return restangularContratos.one(this.route + "/existeAditivoPrazoPosterior").get({"aditivoId": aditivoId}).then();
  17 + };
  18 +
11 19 }
12 20  
13 21 AbstractRepository.extend(EventoAditivoRepository);
... ...
cit-contratos-web/src/main/webapp/html/eventos/cnt_ev_aditivo.html
... ... @@ -61,12 +61,12 @@
61 61 </div>
62 62 <div class="col-sm-4">
63 63 <label-input-data ng-id="aditivo.dataEmissao" ng-label="LABEL.DATA_EMISSAO_OCORRENCIA" ng-obrigatorio="true" ng-model="aditivo.dataEmissao" form="formDialogAditivo"
64   - ng-disabled="!edit || aditivo.id" ng-format="dd/MM/yyyy">
  64 + ng-disabled="!edit || (aditivo.aditivoDeClausula && aditivo.id)" ng-format="dd/MM/yyyy">
65 65 </label-input-data>
66 66 </div>
67 67 <div class="col-sm-4">
68 68 <label-select ng-label="LABEL.TIPO_ALTERACAO" ng-id="aditivo.tipoAlteracao" ng-model="aditivo.tipoAlteracao" form="formDialogAditivo" ng-list="tiposAlteracaoContrato"
69   - ng-custom-options="item.originalElement as item.descricao for item" track-by="track by item.id" ng-disabled="!edit || aditivo.id" ng-obrigatorio="true">
  69 + ng-custom-options="item.originalElement as item.descricao for item" track-by="track by item.id" ng-disabled="!edit || (aditivo.aditivoDeClausula && aditivo.id)" ng-obrigatorio="true">
70 70 </label-select>
71 71 </div>
72 72 </div>
... ... @@ -107,7 +107,7 @@
107 107 ng-model="aditivo.dataInicio" form="formDialogAditivo" />
108 108 </div>
109 109 <div class="col-sm-3">
110   - <label-input-data ng-id="aditivo.dataFim" ng-label="CONTRATOS.LABEL.DATA_FINAL_ADITIVO" ng-obrigatorio="aditivo.aditivoDePrazo" ng-disabled="!edit"
  110 + <label-input-data ng-id="aditivo.dataFim" ng-label="CONTRATOS.LABEL.DATA_FINAL_ADITIVO" ng-obrigatorio="aditivo.aditivoDePrazo" ng-disabled="!edit || naoPermiteAlterarDataFim"
111 111 ng-model="aditivo.dataFim" form="formDialogAditivo" />
112 112 </div>
113 113 </div>
... ... @@ -117,14 +117,14 @@
117 117 <div class="row">
118 118 <div class="col-sm-6">
119 119 <label-input-radio ng-id="aditivo.tipoAlteracaoValor.codigo" ng-label="LABEL.TIPO_ALTERACAO" list="tiposAlteracaoValor" ng-model="aditivo.tipoAlteracaoValor.codigo"
120   - ng-obrigatorio="aditivo.aditivoDeValor" text="descricao" value="codigo" form="formDialogAditivo" ng-disabled="!edit || aditivo.id">
  120 + ng-obrigatorio="aditivo.aditivoDeValor" text="descricao" value="codigo" form="formDialogAditivo" ng-disabled="!edit">
121 121 </label-input-radio>
122 122 </div>
123 123 </div>
124 124 <div class="row">
125 125 <div class="col-sm-4">
126 126 <label-select ng-label="CONTRATOS.LABEL.TIPO_OBJETO" ng-id="aditivo.tipoObjeto" ng-model="aditivo.tipoObjeto" form="formDialogAditivo" ng-list="tiposObjeto"
127   - ng-custom-options="item.originalElement as item.descricao for item" track-by="track by item.id" ng-disabled="!edit || aditivo.id" ng-obrigatorio="true">
  127 + ng-custom-options="item.originalElement as item.descricao for item" track-by="track by item.id" ng-disabled="!edit" ng-obrigatorio="true">
128 128 </label-select>
129 129 </div>
130 130 <div class="col-sm-3">
... ...