Commit 5f5948121e7f011262e3660fe4da66bc9435a402

Authored by luis.camargo
2 parents ecd43e80 7aaefbdf
Exists in master

Merge branch 'master' into cnt-1.1.0-alfa3

cit-core/src/main/java/br/com/centralit/framework/util/UtilString.java
1 1 package br.com.centralit.framework.util;
2 2  
3 3 import java.io.UnsupportedEncodingException;
  4 +import java.text.ParseException;
  5 +
  6 +import javax.swing.text.MaskFormatter;
4 7  
5 8  
6 9 /**
... ... @@ -209,4 +212,16 @@ public class UtilString {
209 212 else
210 213 return str.substring(0, 1).toLowerCase() + str.substring(1);
211 214 }
  215 +
  216 + public static String formatarString(String texto, String mascara){
  217 + String result = texto;
  218 + try {
  219 + MaskFormatter mf = new MaskFormatter(mascara);
  220 + mf.setValueContainsLiteralCharacters(false);
  221 + result = mf.valueToString(texto);
  222 + } catch (ParseException e) {
  223 + e.printStackTrace();
  224 + }
  225 + return result;
  226 + }
212 227 }
... ...
cit-portal-api/src/main/java/br/com/centralit/api/service/impl/RascunhoServiceImpl.java
... ... @@ -40,9 +40,14 @@ public class RascunhoServiceImpl extends GenericServiceImpl<Rascunho, Long> impl
40 40  
41 41 @Override
42 42 public Rascunho merge(Rascunho entity) {
  43 + boolean rascunhoNull = false;
43 44 if(!UtilObjeto.isReferencia(entity.getAutor()) && !UtilObjeto.isReferencia(entity.getEditor()) && UtilObjeto.isReferencia(entity.getDetentor())){
44 45 Rascunho rascunho = this.find(entity.getId());
45   - entity.setAutor(rascunho.getAutor());
  46 + if(rascunho != null){
  47 + entity.setAutor(rascunho.getAutor());
  48 + }else{
  49 + rascunhoNull = true;
  50 + }
46 51 }else{
47 52 Usuario usuario = null;
48 53 if (SecurityContextHolder.getContext().getAuthentication() != null) {
... ... @@ -52,12 +57,15 @@ public class RascunhoServiceImpl extends GenericServiceImpl<Rascunho, Long> impl
52 57 }
53 58 entity.setDetentor(usuario);
54 59 }
55   - return salvar(entity);
  60 + return !rascunhoNull ? salvar(entity) : null;
56 61 }
57 62  
58 63 private Rascunho salvar(Rascunho entity) {
59   - validarEntidade(entity, this.validator);
60   - return super.save(entity);
  64 + if(entity != null){
  65 + validarEntidade(entity, this.validator);
  66 + return super.save(entity);
  67 + }
  68 + return null;
61 69 }
62 70  
63 71 @Override
... ...
cit-portal-web/src/main/java/br/com/centralit/listener/StartupListener.java
... ... @@ -949,6 +949,8 @@ public class StartupListener extends UtilStartup implements ApplicationListener<
949 949  
950 950 internacionalizacaoList.add(new Internacionalizacao("MSG.INFO_NOTIFICACAO_NOVA", "Chegaram novas notificações para você.", dominio, modulo));
951 951 internacionalizacaoList.add(new Internacionalizacao("MSG.INFO_NOTIFICACAO_PENDENTES", "Há notificações não lidas por você.", dominio, modulo));
  952 + internacionalizacaoList.add(new Internacionalizacao("MSG.SELECIONE_AO_MENOS_UM_ITEM_PARA_SER_REMOVIDO", "Selecione ao menos um item para ser removido!", dominio, modulo));
  953 + internacionalizacaoList.add(new Internacionalizacao("MSG.SELECIONE_APENAS_UM_ITEM_PARA_PREENCHER_CARACTERISTICA", "Selecione apenas um item para preencher suas características!", dominio, modulo));
952 954  
953 955 }
954 956  
... ... @@ -1301,6 +1303,7 @@ public class StartupListener extends UtilStartup implements ApplicationListener<
1301 1303 internacionalizacaoList.add(new Internacionalizacao("PORTAL.MSG.EDITAR_NAO_PERMITIDO_ACAO_VISUALIZAR", "Não é permitido editar um item na visualização do registro", dominio, modulo));
1302 1304 internacionalizacaoList.add(new Internacionalizacao("PORTAL.MSG.EXCLUIR_NAO_PERMITIDO_ACAO_VISUALIZAR", "Não é permitido excluir um item na visualização do registro", dominio, modulo));
1303 1305 internacionalizacaoList.add(new Internacionalizacao("PORTAL.MSG.REMOCAO_GRUPO_NAO_PERMITIDA", "Não é permitido remover este grupo.", dominio, modulo));
  1306 + internacionalizacaoList.add(new Internacionalizacao("PORTAL.MSG.CHAVE_MENU_DUPLICADA", "A chave do menu já existe", dominio, modulo));
1304 1307  
1305 1308 }
1306 1309  
... ... @@ -1464,6 +1467,8 @@ public class StartupListener extends UtilStartup implements ApplicationListener<
1464 1467 internacionalizacaoList.add(new Internacionalizacao("LABEL.DETALHES_AUDITORIA", "Detalhes Auditoria", dominio, modulo));
1465 1468 internacionalizacaoList.add(new Internacionalizacao("LABEL.DOCUMENTOS", "Documentos", dominio, modulo));
1466 1469  
  1470 + internacionalizacaoList.add(new Internacionalizacao("LABEL.CPF_CNPJ", "CPF/CNPJ", dominio, modulo));
  1471 +
1467 1472 }
1468 1473  
1469 1474 /**
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/controller/AppController.js
... ... @@ -1593,5 +1593,13 @@ citApp.controller('AppController', ['$scope', '$routeParams', '$timeout', '$loca
1593 1593 $scope.limparUsernameRascunho = function(){
1594 1594 $scope.editorRascunho = null;
1595 1595 };
  1596 +
  1597 + $scope.aplicarValidacaoDecimal = function(element){
  1598 + if(element.precisao && element.precisao == 'decimal')
  1599 + if(element.model)
  1600 + element.model = parseFloat(element.model).toFixed(2);
  1601 + else
  1602 + element.model = '';
  1603 + };
1596 1604  
1597 1605 }]);
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/directive/LabelInputDecimalDirective.js
... ... @@ -24,7 +24,7 @@ citApp.directive("labelInputDecimal", ["$translate", function($translate) {
24 24 restrict : 'E',
25 25 template : "<div class='form-group' ng-class=\"{'has-error': form[id].$error.required && (!form[id].$pristine || form.$submitted)}\">" +
26 26 " <label for='{{id}}' class='control-label' ng-if='labelRender'><translate>{{label}}</translate> <span class='red' ng-show='obrigatorio'>*</span> <i ng-if='obrigatorio' ng-show='form[id].$error.required && (!form[id].$pristine || form.$submitted)' class='fa fa-warning red' tooltip='{{labelAlertTooltipCopy}}' tooltip-placement='top'></i> <i ng-if='labelInfoTooltipRender' class='fa fa-info-circle blue' tooltip='{{labelInfoTooltip}}' tooltip-placement='top'></i> <i ng-if='labelQuestionTooltipRender' class='fa fa-question-circle green' tooltip='{{labelQuestionTooltip}}' tooltip-placement='top'></i></label>"+
27   - " <input type='text' class='form-control' ng-change='eventoChange()' ng-blur='eventoBlur()' ng-keydown='removeModel($event)' id='{{id}}' name='{{id}}' ng-model='model' ng-disabled='disabled' maxlength='{{maxlength ? maxlength : 23}}' ng-required='obrigatorio' ui-number-mask='{{precisao}}'/>" +
  27 + " <input type='text' class='form-control' ng-change='eventoChange()' ng-blur='eventoBlur(this)' ng-keydown='removeModel($event)' id='{{id}}' name='{{id}}' ng-model='model' ng-disabled='disabled' maxlength='{{maxlength ? maxlength : 23}}' ng-required='obrigatorio' ui-number-mask='{{precisao}}'/>" +
28 28 "</div>",
29 29  
30 30 controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
... ... @@ -58,7 +58,6 @@ citApp.directive(&quot;labelInputDecimal&quot;, [&quot;$translate&quot;, function($translate) {
58 58 }
59 59 }],
60 60 link : function($scope, $element, attibutes){
61   -
62 61 $scope.removeModel = function(event){
63 62 if((event.keyCode === 8 || event.keyCode === 46) && $scope.model === 0.0){
64 63 $scope.model = null;
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/directive/ListViewDirective.js
... ... @@ -15,7 +15,11 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
15 15 exibirColunaSelecao : '=?ngExibirColunaSelecao',
16 16 templateTransclude : '@transclude',
17 17 modelParent : '=?ngModelParent',
18   - customTransclude : '&ngCustomTransclude'
  18 + customTransclude : '&ngCustomTransclude',
  19 + setTotalPages : '=?setTotalPages',
  20 + setTotalItens : '=?setTotalItens',
  21 + useCustomFilterTemp : '=?useCustomFilterTemp',
  22 + customFilter : '&ngCustomFilter'
19 23 },
20 24 replace : true,
21 25 restrict : 'E',
... ... @@ -23,8 +27,18 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
23 27 templateUrl : 'assets/js/angular/custom/directive/html/listView.html',
24 28 controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {
25 29  
26   - $scope.totalPages = 10;
27   - $scope.totalItens = 0;
  30 + if($scope.setTotalPages){
  31 + $scope.totalPages = $scope.setTotalPages;
  32 + }else{
  33 + $scope.totalPages = 10;
  34 + }
  35 +
  36 + if($scope.setTotalItens){
  37 + $scope.totalItens = $scope.setTotalPages;
  38 + }else{
  39 + $scope.totalItens = 0;
  40 + }
  41 +
28 42 $scope.limit = 10;
29 43 $scope.repositorio = $injector.get($scope.repository);
30 44 $scope.appController = angular.element("#citapp-controller").scope();
... ... @@ -75,6 +89,11 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
75 89 }
76 90 });
77 91  
  92 + if($scope.useCustomFilterTemp){
  93 + $scope.customFilter();
  94 + return;
  95 + }
  96 +
78 97 $scope.fetchResult().then(function() {
79 98 // The request fires correctly but sometimes the ui doesn't update,
80 99 // that's a fix
... ... @@ -94,6 +113,12 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
94 113 $scope.filterCriteria.dir = sortDir;
95 114 $scope.filterCriteria.sort = sortedBy;
96 115 $scope.filterCriteria.start = 1;
  116 +
  117 + if($scope.useCustomFilterTemp){
  118 + $scope.customFilter();
  119 + return;
  120 + }
  121 +
97 122 $scope.fetchResult().then(function() {
98 123 // The request fires correctly but sometimes the ui doesn't update,
99 124 // that's a fix
... ... @@ -103,6 +128,13 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
103 128  
104 129 // RECUPERA LISTA E SETA RESULTADO NA GRID
105 130 $scope.fetchResult = function(page) {
  131 +
  132 + if($scope.useCustomFilterTemp){
  133 + $scope.customFilter();
  134 + return;
  135 + }
  136 +
  137 +
106 138 $scope.appController.setLoadingPesquisa(true);
107 139 $scope.itemSelecionado = undefined;
108 140 return $scope.repositorio.getListPage($scope.filterCriteria).then(function(result) {
... ... @@ -176,6 +208,7 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
176 208  
177 209 // Limpa os filtros avançados
178 210 $scope.limparFilters = function() {
  211 + $scope.useCustomFilterTemp = false;
179 212 $scope.filterCriteria.keywordValue = null;
180 213 if($scope.filtersCopy){
181 214 $scope.filterCriteria.filters= angular.copy($scope.filtersCopy);
... ... @@ -225,6 +258,22 @@ citApp.directive(&quot;listView&quot;, [&quot;$translate&quot;, &quot;$injector&quot;, &quot;$timeout&quot;, &quot;$filter&quot;,
225 258 $scope.aplicarMask = function(value, mask){
226 259 return value.replace(mask[0], mask[1]);
227 260 };
  261 +
  262 + $scope.$watch('setTotalPages', function() {
  263 + if($scope.setTotalPages){
  264 + $scope.totalPages = $scope.setTotalPages;
  265 + }else{
  266 + $scope.totalPages = 10;
  267 + }
  268 + });
  269 +
  270 + $scope.$watch('setTotalItens', function() {
  271 + if($scope.setTotalItens){
  272 + $scope.totalItens = $scope.setTotalItens;
  273 + }else{
  274 + $scope.totalItens = 10;
  275 + }
  276 + });
228 277  
229 278 $scope.$on('filtroDirective-listViewDirective', function(event, active) {
230 279 $scope.$showAdvancedFilters = active;
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/directive/MasksDirective.js
... ... @@ -1571,14 +1571,20 @@ angular.module(&#39;ui.utils.masks.number&#39;, [])
1571 1571  
1572 1572 var pos = value.indexOf(",");
1573 1573 var result;
  1574 + //se não ouver maxlength, 9 eh padrão...
  1575 + var maxLength = attrs.maxlength ? attrs.maxlength : 9;
  1576 + // -3 conta virgula e 2 casa decimais
  1577 + var digitos = maxLength - 3;
  1578 + var part1 = '';
  1579 + var part2 = '';
1574 1580 if (pos !== -1) {
1575   - var part1 = value.substr(0, pos > 6 ? 6 : pos);
1576   - var part2 = value.substr(pos > 6 ? 6 : pos + 1);
  1581 + part1 = value.substr(0, pos > digitos ? digitos : pos);
  1582 + part2 = value.substr(pos > digitos ? digitos : pos + 1);
1577 1583 //2 casas decimais......
1578 1584 part2 = part2.substr(0,2);
1579 1585 result = cleanForDecimal(part1) + "," + cleanForDecimal(part2);
1580 1586 } else {
1581   - result = cleanForDecimal(value).substr(0,6);
  1587 + result = cleanForDecimal(value).substr(0,digitos);
1582 1588 }
1583 1589  
1584 1590 result = result ==',' ? '' : result;
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/directive/html/listView.html
... ... @@ -29,7 +29,8 @@
29 29 <th ng-if="(isCheckBox == undefined || !isCheckBox) && exibirColunaSelecao" class="text-center" style="width: 5%"></th>
30 30 <th ng-if="exibirExpandir" class="text-center" style="width: 5%"></th>
31 31 <th class="text-center" ng-repeat="header in headers" style="width: {{header.tamanho ? header.tamanho : divisaoColunas}}%">
32   - <sort-by onsort="onSort" sortdir="filterCriteria.dir" sortedby="filterCriteria.sort" sortvalue="{{ header.value }}">{{ header.title }}</sort-by>
  32 + <div ng-if="!header.notSort"><sort-by onsort="onSort" sortdir="filterCriteria.dir" sortedby="filterCriteria.sort" sortvalue="{{ header.value }}">{{ header.title }}</sort-by></div>
  33 + <div ng-if="header.notSort">{{ header.title }}</div>
33 34 </th>
34 35 </tr>
35 36 </thead>
... ...
cit-portal-web/src/main/webapp/assets/js/angular/custom/utils/functions.js
... ... @@ -21,6 +21,25 @@ function aplicarMascara(valor, mascara){
21 21 return result;
22 22 };
23 23  
  24 +function aplicarCpfCnpj(input) {
  25 + if (input.length == 11) {
  26 + var t = input.split('');
  27 + t.splice(3, 0, '.');
  28 + t.splice(7, 0, '.');
  29 + t.splice(11, 0, '-');
  30 + return t.join('');
  31 + }
  32 + if (input.length == 14) {
  33 + var t = input.split('');
  34 + t.splice(2, 0, '.');
  35 + t.splice(6, 0, '.');
  36 + t.splice(10, 0, '/');
  37 + t.splice(15, 0, '-');
  38 + return t.join('');
  39 + }
  40 + return input;
  41 +}
  42 +
24 43 // serve para converter strings com o formato > yyyy ou mm/yyyy ou dd/mm/yyyy ou dd-mm-yyyy em date
25 44 function converterStringEmDate(str) {
26 45 if (str) {
... ...