Commit fe62be018e8a71521a2bb4ddd64b429e2cd996be

Authored by erick.sato
1 parent a5de072e
Exists in master

[Redmine Atendimento #4206]Alteração geração de codigo estudo tecnico

cit-contratos-api/src/main/java/br/com/centralit/api/dao/EstudoTecnicoDao.java
... ... @@ -53,4 +53,6 @@ public interface EstudoTecnicoDao extends CitGenericDAO{
53 53 */
54 54 public Collection<EstudoTecnico> findAutoCompleteEstudoTecnicoPorCodigoAndOrganizacao(String codigo, Long idOrganizacao);
55 55  
  56 + EstudoTecnico buscarUltimoRegistroPorDataEmissao(int ano, Long idOrganizacao);
  57 +
56 58 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/dao/impl/EstudoTecnicoDaoHibernate.java
1 1 package br.com.centralit.api.dao.impl;
2 2  
  3 +import java.util.Calendar;
3 4 import java.util.Collection;
4 5  
5 6 import org.springframework.stereotype.Repository;
... ... @@ -10,6 +11,7 @@ import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
10 11 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
11 12  
12 13 import com.googlecode.genericdao.search.Filter;
  14 +import com.googlecode.genericdao.search.Search;
13 15 import com.googlecode.genericdao.search.Sort;
14 16  
15 17  
... ... @@ -64,11 +66,11 @@ public class EstudoTecnicoDaoHibernate extends CitGenericDAOImpl implements Estu
64 66  
65 67 SearchSeven search = new SearchSeven(this.persistentClass);
66 68  
67   - search.addFilterILike("codigo", "%" + codigo + "%");
  69 + search.addFilterILike("registroSequencial.sequencialAno", "%" + codigo + "%");
68 70  
69 71 search.addFilterEmpty("dataInativo");
70 72  
71   - search.addSort(Sort.asc("codigo"));
  73 + search.addSort(Sort.asc("registroSequencial.sequencialAno"));
72 74  
73 75 search.setMaxResults(10);
74 76  
... ... @@ -89,9 +91,9 @@ public class EstudoTecnicoDaoHibernate extends CitGenericDAOImpl implements Estu
89 91  
90 92 SearchSeven searchSeven = new SearchSeven(this.persistentClass);
91 93  
92   - searchSeven.addSort(Sort.asc("codigo"));
  94 + searchSeven.addSort(Sort.asc("registroSequencial.sequencialAno"));
93 95  
94   - searchSeven.addFilter(Filter.ilike("codigo", "%" + codigo + "%"));
  96 + searchSeven.addFilter(Filter.ilike("registroSequencial.sequencialAno", "%" + codigo + "%"));
95 97  
96 98 searchSeven.addFilterEqual("organizacao.id", idOrganizacao);
97 99  
... ... @@ -101,4 +103,33 @@ public class EstudoTecnicoDaoHibernate extends CitGenericDAOImpl implements Estu
101 103  
102 104 }
103 105  
  106 + @Override
  107 + public EstudoTecnico buscarUltimoRegistroPorDataEmissao(int ano, Long idOrganizacao) {
  108 + int anoInformado = ano;
  109 +
  110 + Calendar dataInicial = Calendar.getInstance();
  111 + dataInicial.set(anoInformado, Calendar.JANUARY, 1);
  112 + dataInicial.set(Calendar.HOUR_OF_DAY,00);
  113 + dataInicial.set(Calendar.MINUTE,00);
  114 + dataInicial.set(Calendar.SECOND,00);
  115 + dataInicial.set(Calendar.MILLISECOND,0);
  116 +
  117 + Calendar dataFinal = Calendar.getInstance();
  118 + dataFinal.set(anoInformado, Calendar.DECEMBER, 31);
  119 + dataFinal.set(Calendar.HOUR_OF_DAY,23);
  120 + dataFinal.set(Calendar.MINUTE,59);
  121 + dataFinal.set(Calendar.SECOND,59);
  122 + dataFinal.set(Calendar.MILLISECOND,999);
  123 +
  124 + Search search = new Search();
  125 + search.addFilterNotNull("registroSequencial.numeroSequencial");
  126 + search.addFilterEqual("organizacao.id", idOrganizacao);
  127 + search.addFilterGreaterOrEqual("dataCriacao", dataInicial);
  128 + search.addFilterLessOrEqual("dataCriacao", dataFinal);
  129 + search.addSortDesc("registroSequencial.numeroSequencial");
  130 + search.setMaxResults(1);
  131 +
  132 + return searchUnique(search);
  133 + }
  134 +
104 135 }
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/model/EstudoTecnico.java
... ... @@ -5,6 +5,7 @@ import java.util.Collection;
5 5  
6 6 import javax.persistence.CascadeType;
7 7 import javax.persistence.Column;
  8 +import javax.persistence.Embedded;
8 9 import javax.persistence.Entity;
9 10 import javax.persistence.FetchType;
10 11 import javax.persistence.GeneratedValue;
... ... @@ -59,10 +60,9 @@ public class EstudoTecnico extends PersistentObjectAuditOrganizacao {
59 60 @JsonView({ Views.GenericView.class })
60 61 private Long id;
61 62  
62   - /** Atributo codigo. */
63   - @Column(length = 30, nullable=false)
64   - @JsonView({ ViewsContrato.EstudoTecnicoEditView.class, ViewsContrato.TermoReferenciaListView.class, ViewsContrato.EstudoTecnicoAutoCompleteView.class, ViewsContrato.ContratoEditView.class })
65   - private String codigo;
  63 + @Embedded
  64 + @JsonView({ ViewsContrato.EstudoTecnicoEditView.class, ViewsContrato.TermoReferenciaEditView.class, Views.GenericView.class })
  65 + private RegistroSequencial registroSequencial;
66 66  
67 67 /** Atributo numeroPortaria. */
68 68 @Column(length = 30, nullable=false)
... ... @@ -167,6 +167,16 @@ public class EstudoTecnico extends PersistentObjectAuditOrganizacao {
167 167 @JsonView({ ViewsContrato.EstudoTecnicoEditView.class })
168 168 private Collection<EstudoTecnicoDocumento> documentos;
169 169  
  170 + public RegistroSequencial getRegistroSequencial() {
  171 +
  172 + return registroSequencial;
  173 + }
  174 +
  175 + public void setRegistroOcorrenciaSequencial(RegistroSequencial registroSequencial) {
  176 +
  177 + this.registroSequencial = registroSequencial;
  178 + }
  179 +
170 180 /**
171 181 * Retorna o valor do atributo <code>id</code>
172 182 *
... ... @@ -189,26 +199,6 @@ public class EstudoTecnico extends PersistentObjectAuditOrganizacao {
189 199 }
190 200  
191 201 /**
192   - * Retorna o valor do atributo <code>codigo</code>
193   - *
194   - * @return <code>String</code>
195   - */
196   - public String getCodigo() {
197   -
198   - return codigo;
199   - }
200   -
201   - /**
202   - * Define o valor do atributo <code>codigo</code>.
203   - *
204   - * @param codigo
205   - */
206   - public void setCodigo(String codigo) {
207   -
208   - this.codigo = codigo;
209   - }
210   -
211   - /**
212 202 * Retorna o valor do atributo <code>numeroPortaria</code>
213 203 *
214 204 * @return <code>String</code>
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/ContratoEmpenhoServiceImpl.java
... ... @@ -11,6 +11,14 @@ import java.util.Map;
11 11  
12 12 import javax.servlet.http.HttpServletResponse;
13 13  
  14 +import net.sf.jasperreports.engine.JRException;
  15 +import net.sf.jasperreports.engine.JasperCompileManager;
  16 +import net.sf.jasperreports.engine.JasperFillManager;
  17 +import net.sf.jasperreports.engine.JasperPrint;
  18 +import net.sf.jasperreports.engine.JasperReport;
  19 +import net.sf.jasperreports.engine.design.JasperDesign;
  20 +import net.sf.jasperreports.engine.xml.JRXmlLoader;
  21 +
14 22 import org.springframework.beans.factory.annotation.Autowired;
15 23 import org.springframework.security.core.context.SecurityContextHolder;
16 24 import org.springframework.stereotype.Service;
... ... @@ -38,13 +46,6 @@ import br.com.centralit.framework.util.UtilColecao;
38 46 import br.com.centralit.framework.util.UtilDataBase;
39 47 import br.com.centralit.framework.util.UtilDate;
40 48 import br.com.centralit.framework.util.UtilObjeto;
41   -import net.sf.jasperreports.engine.JRException;
42   -import net.sf.jasperreports.engine.JasperCompileManager;
43   -import net.sf.jasperreports.engine.JasperFillManager;
44   -import net.sf.jasperreports.engine.JasperPrint;
45   -import net.sf.jasperreports.engine.JasperReport;
46   -import net.sf.jasperreports.engine.design.JasperDesign;
47   -import net.sf.jasperreports.engine.xml.JRXmlLoader;
48 49  
49 50 /**
50 51 *
... ...
cit-contratos-api/src/main/java/br/com/centralit/api/service/impl/EstudoTecnicoServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3 3 import java.util.ArrayList;
  4 +import java.util.Calendar;
4 5 import java.util.Collection;
5 6 import java.util.HashMap;
6 7 import java.util.List;
7 8 import java.util.Map;
8 9  
  10 +import org.apache.commons.lang3.StringUtils;
9 11 import org.springframework.beans.factory.annotation.Autowired;
10 12 import org.springframework.beans.factory.annotation.Qualifier;
11 13 import org.springframework.security.core.context.SecurityContextHolder;
... ... @@ -28,6 +30,7 @@ import br.com.centralit.api.model.EstudoTecnicoRequisitoNegocio;
28 30 import br.com.centralit.api.model.Fornecedor;
29 31 import br.com.centralit.api.model.OrgaoExterno;
30 32 import br.com.centralit.api.model.QuestionarioPergunta;
  33 +import br.com.centralit.api.model.RegistroSequencial;
31 34 import br.com.centralit.api.service.AnexoService;
32 35 import br.com.centralit.api.service.ColaboradorService;
33 36 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
... ... @@ -148,7 +151,7 @@ public class EstudoTecnicoServiceImpl extends GenericServiceImpl&lt;EstudoTecnico,
148 151 this.montarObjetoEstudoTecnico(estudoTecnico);
149 152  
150 153 // verifica se tem codigo, senao gera e salva entidade
151   - if (UtilObjeto.isReferencia(estudoTecnico.getCodigo())) {
  154 + if (UtilObjeto.isReferencia(estudoTecnico.getRegistroSequencial())) {
152 155  
153 156 return super.save(estudoTecnico);
154 157  
... ... @@ -183,7 +186,7 @@ public class EstudoTecnicoServiceImpl extends GenericServiceImpl&lt;EstudoTecnico,
183 186 this.montarObjetoEstudoTecnico(estudoTecnico);
184 187  
185 188 // verifica se tem codigo, senao gera e salva entidade
186   - if (UtilObjeto.isReferencia(estudoTecnico.getCodigo())) {
  189 + if (UtilObjeto.isReferencia(estudoTecnico.getRegistroSequencial())) {
187 190  
188 191 return super.save(estudoTecnico);
189 192  
... ... @@ -397,17 +400,22 @@ public class EstudoTecnicoServiceImpl extends GenericServiceImpl&lt;EstudoTecnico,
397 400 */
398 401 private void configurarCodigo(EstudoTecnico entitySaved) {
399 402  
400   - EstudoTecnico ultimoRegistro = (EstudoTecnico) this.estudoTecnicoDao.buscarUltimoRegistroComOrdenadoParametrizada(CAMPO_BUSCA_PARAMETRIZADA_ULTIMO_REGISTRO);
  403 + Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
  404 + Calendar date = Calendar.getInstance();
  405 + EstudoTecnico ultimoRegistro = (EstudoTecnico) estudoTecnicoDao.buscarUltimoRegistroPorDataEmissao(date.get(Calendar.YEAR), usuarioLogado.getOrganizacao().getId());
401 406  
402 407 Long sequencial = null;
403   -
404   - if (UtilObjeto.isReferencia(ultimoRegistro)) {
405   - sequencial = ultimoRegistro.getCodigo() == null ? null : Long.parseLong(ultimoRegistro.getCodigo());
  408 + if (ultimoRegistro != null) {
  409 + sequencial = ultimoRegistro.getRegistroSequencial().getNumeroSequencial() == null ? null : ultimoRegistro.getRegistroSequencial().getNumeroSequencial();
406 410 }
407   -
408   - String codigo = this.configuracaoParametroSistemaService.gerarNumeroIdentificacaoSeguencial(sequencial);
409   -
410   - entitySaved.setCodigo(codigo);
  411 + if (sequencial != null){
  412 + sequencial++;
  413 + } else {
  414 + sequencial = 1l;
  415 + }
  416 + String numeroAnoOcorrencia = StringUtils.leftPad(sequencial.toString() + date.get(Calendar.YEAR), 9, "0");
  417 + RegistroSequencial registroSequencial = new RegistroSequencial(sequencial, numeroAnoOcorrencia);
  418 + entitySaved.setRegistroOcorrenciaSequencial(registroSequencial);
411 419 }
412 420  
413 421 @Override
... ...
cit-contratos-api/src/main/resources/script-bd/v1.0.0-alpha10/01-cit-contratos-1.0.0-ALFA-10-postgres.sql
1 1 -- ERICK SATO INÍCIO 30/03/2016
2 2 TRUNCATE INTERNACIONALIZACAO;
3 3 UPDATE DOMINIO SET descricao = 'Reforço' where CHAVE = 'tipoFinalidadeEmpenhoContrato' AND descricao = 'Redorço';
4   --- ERICK SATO FIM 30/03/2016
5 4 \ No newline at end of file
  5 +-- ERICK SATO FIM 30/03/2016
  6 +
  7 +-- ERICK INIICIO 31/03/2016
  8 +
  9 +--cnt_estudoTecnico
  10 +ALTER TABLE cnt_estudoTecnico ADD COLUMN numerosequencial bigint NULL;
  11 +ALTER TABLE cnt_estudoTecnico ADD COLUMN sequencialAno varchar(20) NULL;
  12 +
  13 +DO $$
  14 +DECLARE
  15 + r RECORD;
  16 +BEGIN
  17 + FOR r IN
  18 + SELECT
  19 + lpad(CAST(concat(CAST(CAST(codigo AS integer) AS VARCHAR), CAST(date_part('Year', (SELECT CURRENT_TIMESTAMP)) AS VARCHAR)) AS VARCHAR),9,'0') AS SEQUENCIALANO
  20 + FROM cnt_estudoTecnico
  21 + LOOP
  22 + UPDATE cnt_estudoTecnico SET numerosequencial = CAST(codigo AS integer), sequencialAno = r.SEQUENCIALANO WHERE
  23 + lpad(CAST(concat(CAST(CAST(codigo AS integer) AS VARCHAR), CAST(date_part('Year', (SELECT CURRENT_TIMESTAMP)) AS VARCHAR)) AS VARCHAR),9,'0') = r.SEQUENCIALANO;
  24 + END LOOP;
  25 +END$$;
  26 +
  27 +ALTER TABLE cnt_estudoTecnico DROP COLUMN codigo;
  28 +
  29 +-- ERICK FIM 31/03/2016
  30 +
... ...
cit-contratos-api/src/test/java/br/com/centralit/api/service/impl/EstudoTecnicoServiceImplTest.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3   -import static org.hamcrest.MatcherAssert.assertThat;
4   -import static org.hamcrest.Matchers.equalTo;
5 3 import static org.junit.Assert.assertNotNull;
6 4 import static org.junit.Assert.assertTrue;
7 5 import static org.mockito.Matchers.any;
... ... @@ -122,7 +120,7 @@ public class EstudoTecnicoServiceImplTest extends GenericServiceImplTest&lt;EstudoT
122 120  
123 121 @Override
124 122 protected void inicializarMocksDasDependencias() {
125   -
  123 +
126 124 }
127 125  
128 126 @Before
... ... @@ -190,9 +188,7 @@ public class EstudoTecnicoServiceImplTest extends GenericServiceImplTest&lt;EstudoT
190 188  
191 189 assertNotNull(estudoTecnicoSaved.getId());
192 190 assertTrue(estudoTecnicoSaved.getId() > 0);
193   - assertNotNull(estudoTecnicoSaved.getCodigo());
194   - assertThat(estudoTecnicoSaved.getCodigo(), equalTo(CODIGO_INICIAL_ESTUDO_TECNICO_TESTE_SAVE_SEM_CODIGO));
195   -
  191 + assertNotNull(estudoTecnicoSaved.getRegistroSequencial());
196 192 LOG.info("==================== Finalizando testSavePrimeiroRegistroEstudoTecnicoSemCodigo ==================== ");
197 193  
198 194 }
... ... @@ -204,7 +200,6 @@ public class EstudoTecnicoServiceImplTest extends GenericServiceImplTest&lt;EstudoT
204 200  
205 201 EstudoTecnico estudoTecnico = Fixture.from(EstudoTecnico.class).gimme("valid");
206 202 estudoTecnico.setId(1L);
207   - estudoTecnico.setCodigo("000001");
208 203  
209 204 Colaborador colaborador = Fixture.from(Colaborador.class).gimme("valid");
210 205  
... ... @@ -233,7 +228,6 @@ public class EstudoTecnicoServiceImplTest extends GenericServiceImplTest&lt;EstudoT
233 228  
234 229 assertNotNull(estudoTecnicoSaved.getId());
235 230 assertTrue(estudoTecnicoSaved.getId() > 0);
236   - assertNotNull(estudoTecnicoSaved.getCodigo());
237 231  
238 232 LOG.info("==================== Finalizando testMergeRegistroEstudoTecnicoComCodigo ==================== ");
239 233  
... ...
cit-contratos-web/src/main/webapp/assets/js/angular/custom/controller/EstudoTecnicoListController.js
... ... @@ -13,9 +13,10 @@ citApp.controller(&#39;EstudoTecnicoListController&#39;, [&#39;$scope&#39;, &#39;EstudoTecnicoReposi
13 13  
14 14 $scope.headers = [
15 15 {
16   - value : 'codigo',
  16 + value : 'registroSequencial.sequencialAno',
17 17 title : $translate.instant('LABEL.NUM_ESTUDO_TECNICO'),
18   - align : 'text-center'
  18 + align : 'text-center',
  19 + mask : [new RegExp(/(\d{3})(\d{1,4})$/), '$1/$2']
19 20 },{
20 21 value : 'descricaoSolucao',
21 22 title : $translate.instant('CONTRATOS.LABEL.DESCRICAO_SOLUCAO'),
... ... @@ -28,8 +29,8 @@ citApp.controller(&#39;EstudoTecnicoListController&#39;, [&#39;$scope&#39;, &#39;EstudoTecnicoReposi
28 29 dir : 'asc',
29 30 sort : 'id',
30 31 limit : 10,
31   - fields: ['id', 'codigo', 'descricaoSolucao'],
32   - filters : [{type: 'numeric-range', field: 'codigo'},
  32 + fields: ['id', 'registroSequencial.sequencialAno', 'descricaoSolucao'],
  33 + filters : [{type: 'numeric-range', field: 'registroSequencial.sequencialAno'},
33 34 {type: 'string', field: 'descricaoSolucao'}]
34 35 };
35 36  
... ...
cit-contratos-web/src/main/webapp/html/contrato/dialog_item_contrato.html
... ... @@ -22,7 +22,7 @@
22 22 <fieldset>
23 23 <div class="row">
24 24 <div class="col-sm-4">
25   - <auto-complete ng-label="LABEL.ESTUDO_TECNICO" ng-id="itemContratoTemp.estudoTecnico" ng-item="item.codigo"
  25 + <auto-complete ng-label="LABEL.ESTUDO_TECNICO" ng-id="itemContratoTemp.estudoTecnico" ng-item="item.registroSequencial.sequencialAno"
26 26 ng-model="itemContratoTemp.estudoTecnico" form="formDialogItemContrato" ng-obrigatorio="editItemContrato"
27 27 ng-disabled="!editItemContrato" ng-find="findAutoCompleteEstudoTecnicoPorCodigoAndOrganizacao(value)"/>
28 28 </div><!-- .col-sm-4 -->
... ...
cit-contratos-web/src/main/webapp/html/estudoTecnico/estudoTecnicoPg1.html
... ... @@ -7,8 +7,8 @@
7 7  
8 8 <div class='row'>
9 9 <div class="col-sm-3">
10   - <label-input ng-type="text" ng-id="estudoTecnico.codigo" ng-label="CONTRATOS.LABEL.NUM_ESTUDO_TECNICO" ng-obrigatorio="false" ng-disabled="true" form="planejamentoContratacaoForm"
11   - ng-model="estudoTecnico.codigo" ng-custom-maxlength="6" />
  10 + <label-input ng-type="text" ng-id="estudoTecnico.registroSequencial.sequencialAno" ng-label="CONTRATOS.LABEL.NUM_ESTUDO_TECNICO" ng-obrigatorio="false" ng-disabled="true" form="planejamentoContratacaoForm"
  11 + ng-model="estudoTecnico.registroSequencial.sequencialAno" ng-custom-maxlength="6" ng-mask="999999/9999"/>
12 12 </div>
13 13  
14 14 <div class="col-sm-3">
... ...