Commit 08f527446de460ddbc9a12989314ee7ded30fba5

Authored by geovane.filho
1 parent afd35325
Exists in master

Redmine #4783 Terminando reestruturação de telas da entrada

cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
@@ -34,6 +34,10 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp @@ -34,6 +34,10 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp
34 // Limpa formulário para novo cadastro 34 // Limpa formulário para novo cadastro
35 $scope.resetForm = function() { 35 $scope.resetForm = function() {
36 $scope.limparEntradaAlmoxarifado(); 36 $scope.limparEntradaAlmoxarifado();
  37 +
  38 + $scope.listaEntradaItemSelecao = [];
  39 +
  40 + $scope.atualizarListaSizeSelectEntradaItem();
37 $scope.edit = true; 41 $scope.edit = true;
38 $timeout(function(){ 42 $timeout(function(){
39 $scope.entradaAlmoxarifadoForm.$submitted = false; 43 $scope.entradaAlmoxarifadoForm.$submitted = false;
@@ -55,7 +59,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp @@ -55,7 +59,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp
55 dataRecebimento : '', 59 dataRecebimento : '',
56 dataContabil : '', 60 dataContabil : '',
57 documentos : [], 61 documentos : [],
58 - entradasIten : [], 62 + entradasItem : [],
59 dominioTipoEntrada : $scope.dominioTipoEntrada ? $scope.dominioTipoEntrada : null, 63 dominioTipoEntrada : $scope.dominioTipoEntrada ? $scope.dominioTipoEntrada : null,
60 dominioTipoRecebimento : $scope.dominioTipoRecebimento ? $scope.dominioTipoRecebimento : null, 64 dominioTipoRecebimento : $scope.dominioTipoRecebimento ? $scope.dominioTipoRecebimento : null,
61 observacoes : [], 65 observacoes : [],
@@ -131,6 +135,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp @@ -131,6 +135,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp
131 }); 135 });
132 136
133 $scope.calcularValorTotalMateriais(); 137 $scope.calcularValorTotalMateriais();
  138 + $scope.atualizarListaSizeSelectEntradaItem();
134 $scope.edit = edit; 139 $scope.edit = edit;
135 $scope.setLoading(false); 140 $scope.setLoading(false);
136 }); 141 });
@@ -186,7 +191,8 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp @@ -186,7 +191,8 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp
186 }); 191 });
187 192
188 $scope.inicializarModalMateriais = function(){ 193 $scope.inicializarModalMateriais = function(){
189 - $scope.editEntrada = true; 194 + $scope.editEntrada = false;
  195 + $scope.newEntrada = true;
190 $scope.limparModalMateriais(); 196 $scope.limparModalMateriais();
191 $scope.$openModal('modal-materiais-consumo.html', 'lg'); 197 $scope.$openModal('modal-materiais-consumo.html', 'lg');
192 }; 198 };
@@ -227,81 +233,50 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp @@ -227,81 +233,50 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp
227 $scope.setLoading(false); 233 $scope.setLoading(false);
228 } 234 }
229 }; 235 };
230 -  
231 - $scope.limparCamposMaterial = function(){  
232 -  
233 - $scope.unidadesMedidasEntrada = [];  
234 - };  
235 -  
236 - $scope.definirTipoNumerico = function(){  
237 - $timeout(function(){  
238 - if($scope.entradaItem.unidadeMedidaEntrada){  
239 - if($scope.entradaItem.unidadeMedidaEntrada.tipoNumerico && $scope.entradaItem.unidadeMedidaEntrada.tipoNumerico.codigo == $scope.TIPO_NUMERICO_INTEIRO ){  
240 - $scope.tipoNumerico = 0;  
241 - }else{  
242 - $scope.tipoNumerico = 2;  
243 - };  
244 -  
245 - if($scope.entradaItem.unidadeMedidaEntrada.sigla){  
246 - if($scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao && $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao > 0){  
247 - $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada = $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;  
248 - }  
249 - }  
250 - } else{  
251 - $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada = null;  
252 - }  
253 - });  
254 - };  
255 -  
256 - $scope.calcularQuantidadeEValores = function(){  
257 - $timeout(function(){  
258 - if($scope.entradaItem.quantidadeDominioTipoUnidadeEntrada && $scope.entradaItem.$quantidadeEntrada){  
259 - $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada;  
260 - }  
261 - if($scope.entradaItem.valorTotal && $scope.entradaItem.quantidade){  
262 - $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade;  
263 - }  
264 - });  
265 - };  
266 236
267 $scope.addEntradaItem = function(formDialogMateriais) { 237 $scope.addEntradaItem = function(formDialogMateriais) {
268 formDialogMateriais.$submitted = true; 238 formDialogMateriais.$submitted = true;
269 239
270 if(formDialogMateriais.$valid){ 240 if(formDialogMateriais.$valid){
271 241
272 - if($scope.entradaItem.$quantidadeEntrada > 0){  
273 -  
274 - if($scope.entradaItem.$validarPrecoMedio){  
275 -  
276 - var idAlmoxarifado = $scope.entradaAlmoxarifado.almoxarifado ? $scope.entradaAlmoxarifado.almoxarifado.id : null;  
277 -  
278 - EntradaAlmoxarifadoItemRepository.validarPrecoMedio($scope.entradaItem.valorUnitario, $scope.entradaItem.material.id, idAlmoxarifado).then(function(result) {}); 242 + if(!$scope.entradaItem.$quantidadeEntrada || $scope.entradaItem.$quantidadeEntrada <= 0){
  243 + $scope.showAlert('error', $translate.instant('VALIDACAO.QUANTIDADE_MAIOR_ZERO'));
  244 + return;
  245 + }
  246 +
  247 + if(!$scope.entradaItem.valorTotal || $scope.entradaItem.valorTotal <= 0){
  248 + $scope.showAlert('error', $translate.instant('ADMINISTRACAODEMATERIAIS.VALIDACAO.VALOR_TOTAL_MAIOR_ZERO'));
  249 + return;
  250 + }
  251 +
  252 + if($scope.entradaItem.$validarPrecoMedio){
279 253
280 - } 254 + var idAlmoxarifado = $scope.entradaAlmoxarifado.almoxarifado ? $scope.entradaAlmoxarifado.almoxarifado.id : null;
281 255
282 - if(!$scope.entradaItem.uuid){  
283 - $scope.entradaItem.uuid = getUuid();  
284 - $scope.entradaAlmoxarifado.entradasIten.push($scope.entradaItem);  
285 - }else{  
286 - var entradasItemTemp = [];  
287 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem, $index) {  
288 - if(entradaItem.uuid === $scope.entradaItem.uuid){  
289 - entradasItemTemp.push($scope.entradaItem);  
290 - }else{  
291 - entradasItemTemp.push(entradaItem);  
292 - }  
293 - });  
294 - $scope.entradaAlmoxarifado.entradasIten = entradasItemTemp;  
295 - } 256 + EntradaAlmoxarifadoItemRepository.validarPrecoMedio($scope.entradaItem.valorUnitario, $scope.entradaItem.material.id, idAlmoxarifado).then(function(result) {});
296 257
297 - $scope.calcularValorTotalMateriais(); 258 + }
298 259
299 - $scope.$modalInstance.dismiss('cancel');  
300 - 260 + if(!$scope.entradaItem.uuid){
  261 + $scope.entradaItem.uuid = getUuid();
  262 + $scope.entradaAlmoxarifado.entradasItem.push($scope.entradaItem);
301 }else{ 263 }else{
302 - $scope.showAlert('error', $translate.instant('VALIDACAO.QUANTIDADE_MAIOR_ZERO')); 264 + var entradasItemTemp = [];
  265 + $scope.entradaAlmoxarifado.entradasItem.forEach(function (entradaItem, $index) {
  266 + if(entradaItem.uuid === $scope.entradaItem.uuid){
  267 + entradasItemTemp.push($scope.entradaItem);
  268 + }else{
  269 + entradasItemTemp.push(entradaItem);
  270 + }
  271 + });
  272 + $scope.entradaAlmoxarifado.entradasItem = entradasItemTemp;
303 } 273 }
304 274
  275 + $scope.calcularValorTotalMateriais();
  276 +
  277 + $scope.$modalInstance.dismiss('cancel');
  278 + $scope.atualizarListaSizeSelectEntradaItem();
  279 +
305 }else{ 280 }else{
306 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS')); 281 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
307 } 282 }
@@ -309,36 +284,79 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -309,36 +284,79 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
309 $scope.entradaItemSelecionado = null; 284 $scope.entradaItemSelecionado = null;
310 285
311 }; 286 };
312 -  
313 - $scope.abrirEntradaItem = function(editar){  
314 -  
315 - if($scope.entradaItemSelecionado){  
316 -  
317 - $scope.editEntrada = editar;  
318 - $scope.entradaItem = clone($scope.entradaItemSelecionado);  
319 - $scope.entradaItem.$quantidadeEntrada = $scope.entradaItem.quantidade / $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada;  
320 - $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){  
321 - return item.unidadeMedida;  
322 - });;  
323 - $scope.caracteristicas = $scope.entradaItem.caracteristicas;  
324 -  
325 - $scope.caracteristicas.forEach(function(bemPatrimonialCaracteristica) {  
326 - if(bemPatrimonialCaracteristica.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'ARQUIVO'){  
327 - $scope.uploaderCaracteristica.queue = clone(bemPatrimonialCaracteristica.uploadAnexo); 287 +
  288 + // Seleciona todos os itens da entrada
  289 + $scope.checkAllEntradaItem = function(value) {
  290 + $scope.listaEntradaItemSelecao = [];
  291 + angular.forEach($scope.entradaAlmoxarifado.entradasItem, function (item) {
  292 + item.$checked = value;
  293 + $scope.listaEntradaItemSelecao.push(item);
  294 + });
  295 + if(!value){
  296 + $scope.listaEntradaItemSelecao = [];
  297 + }
  298 + $scope.atualizarListaSizeSelectEntradaItem();
  299 + };
  300 +
  301 + $scope.checkEntradaItem = function(item){
  302 + if(item.$checked){
  303 + $scope.listaEntradaItemSelecao.push(item);
  304 + }else{
  305 + $scope.listaEntradaItemSelecao.splice($scope.listaEntradaItemSelecao.indexOf(item), 1);
  306 + }
  307 + };
  308 +
  309 + $scope.atualizarListaSizeSelectEntradaItem = function() {
  310 + if(!$scope.listaEntradaItemSize){
  311 + $scope.listaEntradaItemSize = 0;
  312 + };
  313 + var lista = $scope.getEntradaItemChecked();
  314 + $scope.listaEntradaItemSize = lista.length;
  315 + };
  316 +
  317 + // recupera as entradas itens selecionadas
  318 + $scope.getEntradaItemChecked = function() {
  319 + var entradaItemChecked = [];
  320 +
  321 + if ($scope.entradaAlmoxarifado.entradasItem) {
  322 + for (var i = 0; i < $scope.entradaAlmoxarifado.entradasItem.length; i++) {
  323 + if ($scope.entradaAlmoxarifado.entradasItem[i].$checked) {
  324 + entradaItemChecked.push(angular.copy($scope.entradaAlmoxarifado.entradasItem[i]));
328 } 325 }
329 - });  
330 -  
331 - if($scope.entradaItem.dataValidade && !$scope.entradaItem.id){  
332 - $scope.entradaItem.dataValidade = $filter('date')($scope.entradaItem.dataValidade, "dd/MM/yyyy");  
333 } 326 }
  327 + }
334 328
335 - $scope.$openModal('modal-materiais-consumo.html', 'lg'); 329 + return entradaItemChecked;
  330 + };
336 331
337 - }else{ 332 + $scope.abrirEntradaItem = function(editar){
  333 + $scope.entradaItem = null;
  334 + // recupera os itens de entrada selecionados
  335 + var itensSelecionados = $scope.getEntradaItemChecked();
338 336
339 - $scope.showAlert('warning', editar ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO')); 337 + if (itensSelecionados.length > 1) {
  338 + $scope.showAlert('warning', editar? $translate.instant('MSG.SELECIONE_APENAS_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_APENAS_UM_ITEM_PARA_VISUALIZACAO'));
  339 + return;
340 } 340 }
341 341
  342 + if(itensSelecionados.length === 0) {
  343 + $scope.showAlert('warning', editar? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
  344 + return;
  345 + }
  346 +
  347 + $scope.newEntrada = false;
  348 + $scope.editEntrada = editar;
  349 + $scope.entradaItem = itensSelecionados[0];
  350 + $scope.entradaItem.$quantidadeEntrada = $scope.entradaItem.quantidade / $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  351 + $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){
  352 + return item.unidadeMedida;
  353 + });
  354 +
  355 + if($scope.entradaItem.dataValidade && !$scope.entradaItem.id){
  356 + $scope.entradaItem.dataValidade = $filter('date')($scope.entradaItem.dataValidade, "dd/MM/yyyy");
  357 + }
  358 +
  359 + $scope.$openModal('modal-materiais-consumo.html', 'lg');
342 }; 360 };
343 361
344 $scope.removerEntradaItem = function(){ 362 $scope.removerEntradaItem = function(){
@@ -378,19 +396,20 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -378,19 +396,20 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
378 $scope.excluirItemAlmoxarifadoDaLista = function(entradaItemSelecionada){ 396 $scope.excluirItemAlmoxarifadoDaLista = function(entradaItemSelecionada){
379 var index = 0; 397 var index = 0;
380 $scope.valorTotalMateriais = 0.0; 398 $scope.valorTotalMateriais = 0.0;
381 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem, key) { 399 + $scope.entradaAlmoxarifado.entradasItem.forEach(function (entradaItem, key) {
382 if(entradaItemSelecionada.uuid === entradaItem.uuid) { 400 if(entradaItemSelecionada.uuid === entradaItem.uuid) {
383 index = key; 401 index = key;
384 } 402 }
385 }); 403 });
386 - $scope.entradaAlmoxarifado.entradasIten.splice(index, 1); 404 + $scope.entradaAlmoxarifado.entradasItem.splice(index, 1);
387 $scope.calcularValorTotalMateriais(); 405 $scope.calcularValorTotalMateriais();
  406 + $scope.atualizarListaSizeSelectEntradaItem();
388 $scope.$modalConfirmInstance.dismiss('cancel'); 407 $scope.$modalConfirmInstance.dismiss('cancel');
389 }; 408 };
390 409
391 $scope.calcularValorTotalMateriais = function(){ 410 $scope.calcularValorTotalMateriais = function(){
392 $scope.valorTotalMateriais = 0.0; 411 $scope.valorTotalMateriais = 0.0;
393 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem) { 412 + $scope.entradaAlmoxarifado.entradasItem.forEach(function (entradaItem) {
394 $scope.valorTotalMateriais = converterMoedaToNumber(entradaItem.valorTotal) + $scope.valorTotalMateriais; 413 $scope.valorTotalMateriais = converterMoedaToNumber(entradaItem.valorTotal) + $scope.valorTotalMateriais;
395 }); 414 });
396 }; 415 };
@@ -480,7 +499,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -480,7 +499,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
480 499
481 var formularioValido = true; 500 var formularioValido = true;
482 501
483 - if(!form.$valid || !$scope.entradaAlmoxarifado.entradasIten.length > 0 || !$scope.entradaAlmoxarifado.documentos.length > 0){ 502 + if(!form.$valid || !$scope.entradaAlmoxarifado.entradasItem.length > 0 || !$scope.entradaAlmoxarifado.documentos.length > 0){
484 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS')); 503 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
485 formularioValido = false; 504 formularioValido = false;
486 505
@@ -664,20 +683,22 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -664,20 +683,22 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
664 //Watch para controlar as definições de material selecionado na modal de adição de materiais 683 //Watch para controlar as definições de material selecionado na modal de adição de materiais
665 $scope.$watch('entradaItem.material', function() { 684 $scope.$watch('entradaItem.material', function() {
666 $timeout(function() { 685 $timeout(function() {
667 - if (!$scope.entradaItem) {  
668 - $scope.entradaItem = {  
669 - $validarPrecoMedio : true  
670 - }; 686 + if ($scope.newEntrada) {
  687 + if (!$scope.entradaItem) {
  688 + $scope.entradaItem = {
  689 + $validarPrecoMedio : true
  690 + };
  691 + }
  692 + $scope.entradaItem.quantidade = null;
  693 + $scope.entradaItem.valorTotal = null;
  694 + $scope.entradaItem.valorUnitario = null;
  695 + $scope.entradaItem.unidadeMedidaEntrada = null;
  696 + $scope.entradaItem.materialLocalEstoque = null;
  697 + $scope.unidadesMedidasEntrada = [];
  698 + $scope.enderecosMaterial = [];
671 } 699 }
672 - $scope.entradaItem.quantidade = null;  
673 - $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada = null;  
674 - $scope.entradaItem.valorTotal = null;  
675 - $scope.entradaItem.valorUnitario = null;  
676 - $scope.entradaItem.unidadeMedidaEntrada = null;  
677 - $scope.entradaItem.materialLocalEstoque = null;  
678 - $scope.unidadesMedidasEntrada = [];  
679 700
680 - if ($scope.entradaItem.material) { 701 + if ($scope.entradaItem.material) {
681 $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){ 702 $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){
682 if (item.isPadrao && !$scope.entradaItem.unidadeMedidaEntrada) { 703 if (item.isPadrao && !$scope.entradaItem.unidadeMedidaEntrada) {
683 $scope.entradaItem.unidadeMedidaEntrada = item.unidadeMedida; 704 $scope.entradaItem.unidadeMedidaEntrada = item.unidadeMedida;
@@ -685,20 +706,57 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -685,20 +706,57 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
685 return item.unidadeMedida; 706 return item.unidadeMedida;
686 }); 707 });
687 708
688 - $scope.enderecosMaterial = [];  
689 MaterialLocalEstoqueRepository.listarMaterialEstoquePorMaterial($scope.entradaItem.material.id).then(function(result) { 709 MaterialLocalEstoqueRepository.listarMaterialEstoquePorMaterial($scope.entradaItem.material.id).then(function(result) {
690 - for (var i = 0; i < result.length; i++) {  
691 - $scope.enderecosMaterial.push(result[i].originalElement); 710 + $scope.enderecosMaterial = [];
  711 + for (var i = 0; i < result.length; i++) {
  712 + $scope.enderecosMaterial.push(result[i].originalElement);
692 713
693 - if (result[i].localPrincipal && !$scope.entradaItem.materialLocalEstoque) {  
694 - $scope.entradaItem.materialLocalEstoque = result[i].originalElement;  
695 - }  
696 - } 714 + if (result[i].localPrincipal && !$scope.entradaItem.materialLocalEstoque) {
  715 + $scope.entradaItem.materialLocalEstoque = result[i].originalElement;
  716 + }
  717 + }
697 }); 718 });
698 } 719 }
699 }); 720 });
700 }); 721 });
701 722
  723 + //Watch para controlar as mudanças da quantidade na entrada de materiais
  724 + $scope.$watch('entradaItem.$quantidadeEntrada', function() {
  725 + $timeout(function(){
  726 + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){
  727 + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  728 + } else {
  729 + delete $scope.entradaItem.quantidade;
  730 + }
  731 + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){
  732 + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade;
  733 + } else {
  734 + delete $scope.entradaItem.valorUnitario;
  735 + }
  736 + });
  737 + });
  738 +
  739 + //Watch para controlar as mudanças da unidade de medida na entrada de materiais
  740 + $scope.$watch('entradaItem.unidadeMedidaEntrada', function() {
  741 + $timeout(function(){
  742 + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){
  743 + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  744 + } else {
  745 + delete $scope.entradaItem.quantidade;
  746 + }
  747 + });
  748 + });
  749 +
  750 + //Watch para controlar as mudanças do valor total da entrada de materiais
  751 + $scope.$watch('entradaItem.valorTotal', function() {
  752 + $timeout(function(){
  753 + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){
  754 + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade;
  755 + } else {
  756 + delete $scope.entradaItem.valorUnitario;
  757 + }
  758 + });
  759 + });
702 760
703 761
704 762
@@ -837,7 +895,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -837,7 +895,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
837 function validStepMateriais() { 895 function validStepMateriais() {
838 $scope.stepValid = true; 896 $scope.stepValid = true;
839 897
840 - if ($scope.entradaAlmoxarifadoForm.materiaisForm.$invalid) { 898 + if ($scope.entradaAlmoxarifadoForm.materiaisForm.$invalid || !($scope.entradaAlmoxarifado.entradasItem.length > 0)) {
841 $scope.stepValid = false; 899 $scope.stepValid = false;
842 } 900 }
843 901
@@ -847,7 +905,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -847,7 +905,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
847 //Funcao especifica que retorna se o formulario de documentos esta valido 905 //Funcao especifica que retorna se o formulario de documentos esta valido
848 function validStepDocumentos() { 906 function validStepDocumentos() {
849 $scope.stepValid = true; 907 $scope.stepValid = true;
850 - if ($scope.entradaAlmoxarifadoForm.documentosForm.$invalid || !$scope.entradaAlmoxarifado.documentos.length > 0) { 908 + if ($scope.entradaAlmoxarifadoForm.documentosForm.$invalid || !($scope.entradaAlmoxarifado.documentos.length > 0)) {
851 $scope.stepValid = false; 909 $scope.stepValid = false;
852 } 910 }
853 return $scope.stepValid; 911 return $scope.stepValid;
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_add_materiais.html
1 <ng-form name="formDialogMateriais" autocomplete="off"> 1 <ng-form name="formDialogMateriais" autocomplete="off">
2 <div class="modal-header"> 2 <div class="modal-header">
3 - <button class="btn btn-clear" type="button" ng-hide="!editEntrada" ng-click="addEntradaItem(formDialogMateriais)"> 3 + <button class="btn btn-clear" type="button" ng-hide="!editEntrada && !newEntrada" ng-click="addEntradaItem(formDialogMateriais)">
4 <i class="fa fa-save green"></i> 4 <i class="fa fa-save green"></i>
5 <translate>{{entradaItem.id ? 'LABEL.SALVAR' : 'LABEL.ADICIONAR'}} </translate> 5 <translate>{{entradaItem.id ? 'LABEL.SALVAR' : 'LABEL.ADICIONAR'}} </translate>
6 </button> 6 </button>
@@ -13,54 +13,54 @@ @@ -13,54 +13,54 @@
13 13
14 <div class="modal-body"> 14 <div class="modal-body">
15 <h2 class="title-modal blue"><translate>ALMOXARIFADO.LABEL.MATERIAIS</translate></h2> 15 <h2 class="title-modal blue"><translate>ALMOXARIFADO.LABEL.MATERIAIS</translate></h2>
16 - <p ng-show="editEntrada"> 16 + <p ng-show="editEntrada || newEntrada">
17 <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate> 17 <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate>
18 </small> 18 </small>
19 </p> 19 </p>
20 <div class="row"> 20 <div class="row">
21 <div class="col-md-4"> 21 <div class="col-md-4">
22 - <label-input-checkbox ng-model="entradaItem.$validarPrecoMedio" ng-disabled="!editEntrada" ng-label="ALMOXARIFADO.LABEL.VALIDAR_PRECO_MEDIO" ></label-input-checkbox> 22 + <label-input-checkbox ng-model="entradaItem.$validarPrecoMedio" ng-disabled="!editEntrada && !newEntrada" ng-label="ALMOXARIFADO.LABEL.VALIDAR_PRECO_MEDIO" ></label-input-checkbox>
23 </div> 23 </div>
24 </div> 24 </div>
25 25
26 <div class="row"> 26 <div class="row">
27 <br> 27 <br>
28 <div class="col-sm-6"> 28 <div class="col-sm-6">
29 - <auto-complete ng-find="findMaterial(value)" ng-set-result="carregarItensMaterial(item)" ng-item="item.codigoEDescricao" ng-acao-borracha="limparCamposMaterial()"  
30 - ng-id="entradaItem.material" form="formDialogMateriais" ng-label="LABEL.MATERIAL" ng-disabled="!editEntrada" ng-model="entradaItem.material" ng-obrigatorio="true"> 29 + <auto-complete ng-find="findMaterial(value)" ng-set-result="carregarItensMaterial(item)" ng-item="item.codigoEDescricao" ng-id="entradaItem.material" form="formDialogMateriais"
  30 + ng-label="LABEL.MATERIAL" ng-disabled="!newEntrada" ng-model="entradaItem.material" ng-obrigatorio="true">
31 </auto-complete> 31 </auto-complete>
32 </div> 32 </div>
33 <div class="col-sm-2"> 33 <div class="col-sm-2">
34 - <label-select ng-id="entradaItem.unidadeMedidaEntrada" ng-custom-change="definirTipoNumerico()" ng-label="ALMOXARIFADO.LABEL.UN_MEDIDA" ng-model="entradaItem.unidadeMedidaEntrada"  
35 - form="formDialogMateriais" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" ng-custom-options="unidadeMedida as unidadeMedida.sigla for unidadeMedida"  
36 - track-by="track by unidadeMedida.id" ng-list="unidadesMedidasEntrada"/> 34 + <label-select ng-id="entradaItem.unidadeMedidaEntrada" ng-label="ALMOXARIFADO.LABEL.UN_MEDIDA" ng-model="entradaItem.unidadeMedidaEntrada"
  35 + form="formDialogMateriais" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada"
  36 + ng-custom-options="unidadeMedida as unidadeMedida.sigla for unidadeMedida" track-by="track by unidadeMedida.id" ng-list="unidadesMedidasEntrada"/>
37 </div> 37 </div>
38 <div class="col-sm-4"> 38 <div class="col-sm-4">
39 <label-select ng-id="entradaItem.materialLocalEstoque.endereco" ng-custom-change="" ng-label="ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE" ng-model="entradaItem.materialLocalEstoque" 39 <label-select ng-id="entradaItem.materialLocalEstoque.endereco" ng-custom-change="" ng-label="ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE" ng-model="entradaItem.materialLocalEstoque"
40 - form="formDialogMateriais" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" ng-custom-options="materialLocal as materialLocal.endereco.descricao for materialLocal"  
41 - track-by="track by materialLocal.id" ng-list="enderecosMaterial"/> 40 + form="formDialogMateriais" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada && !entradaItem.id"
  41 + ng-custom-options="materialLocal as materialLocal.endereco.descricao for materialLocal" track-by="track by materialLocal.id" ng-list="enderecosMaterial"/>
42 </div> 42 </div>
43 </div> 43 </div>
44 44
45 <div class="row"> 45 <div class="row">
46 <div class="col-sm-3"> 46 <div class="col-sm-3">
47 - <label-input-decimal ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-evento-change="calcularQuantidadeEValores()" ng-obrigatorio="editEntrada"  
48 - ng-disabled="!editEntrada" form="formDialogMateriais" ng-model="entradaItem.$quantidadeEntrada" ng-precisao="tipoNumerico" ng-custom-maxlength="11"/> 47 + <label-input-decimal ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada"
  48 + form="formDialogMateriais" ng-model="entradaItem.$quantidadeEntrada" ng-precisao="tipoNumerico" ng-custom-maxlength="11"/>
49 </div> 49 </div>
50 50
51 <div class="col-sm-3"> 51 <div class="col-sm-3">
52 - <label-input-money ng-id="entradaItem.valorTotal" ng-evento-change="calcularQuantidadeEValores()" ng-label="ALMOXARIFADO.LABEL.VALOR_TOTAL_MATERIAL_SUBTOTAL" ng-obrigatorio="editEntrada"  
53 - ng-disabled="!editEntrada" form="formDialogMateriais" ng-model="entradaItem.valorTotal" ng-custom-maxlength="19"/> 52 + <label-input-money ng-id="entradaItem.valorTotal" ng-label="ALMOXARIFADO.LABEL.VALOR_TOTAL_MATERIAL_SUBTOTAL" ng-obrigatorio="editEntrada || newEntrada"
  53 + ng-disabled="!editEntrada && !newEntrada" form="formDialogMateriais" ng-model="entradaItem.valorTotal" ng-custom-maxlength="19"/>
54 </div> 54 </div>
55 55
56 <div class="col-sm-3"> 56 <div class="col-sm-3">
57 - <label-input ng-id="entradaItem.numeroLote" ng-label="ALMOXARIFADO.LABEL.NUMERO_LOTE" ng-obrigatorio="false" ng-disabled="!editEntrada" form="formDialogMateriais" 57 + <label-input ng-id="entradaItem.numeroLote" ng-label="ALMOXARIFADO.LABEL.NUMERO_LOTE" ng-obrigatorio="false" ng-disabled="!editEntrada && !newEntrada" form="formDialogMateriais"
58 ng-model="entradaItem.numeroLote" /> 58 ng-model="entradaItem.numeroLote" />
59 </div> 59 </div>
60 60
61 <div class="col-sm-3"> 61 <div class="col-sm-3">
62 - <label-input-data ng-id="entradaItem.dataValidade" ng-label="ALMOXARIFADO.LABEL.DATA_VALIDADE" ng-obrigatorio="false" ng-disabled="!editEntrada" ng-model="entradaItem.dataValidade"  
63 - form="formDialogMateriais" /> 62 + <label-input-data ng-id="entradaItem.dataValidade" ng-label="ALMOXARIFADO.LABEL.DATA_VALIDADE" ng-obrigatorio="false" ng-disabled="!editEntrada && !newEntrada"
  63 + ng-model="entradaItem.dataValidade" form="formDialogMateriais" />
64 </div> 64 </div>
65 </div> 65 </div>
66 66
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoEdit.html
@@ -52,19 +52,19 @@ @@ -52,19 +52,19 @@
52 52
53 <div> 53 <div>
54 <ul class="wizard-steps"> 54 <ul class="wizard-steps">
55 - <li ng-class="{'active': isCurrentStep(0), 'complete' : !entradaAlmoxarifadoForm.dadosEntradaForm.$invalid, 'invalid' : (entradaAlmoxarifadoForm.dadosEntradaForm.$submitted && entradaAlmoxarifadoForm.dadosEntradaForm.$invalid)}" 55 + <li ng-class="{'active': isCurrentStep(0), 'complete' : !entradaAlmoxarifadoForm.dadosEntradaForm.$invalid, 'incomplete' : (entradaAlmoxarifadoForm.dadosEntradaForm.$submitted && entradaAlmoxarifadoForm.dadosEntradaForm.$invalid)}"
56 ng-click="setCurrentStep(0)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}"> 56 ng-click="setCurrentStep(0)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}">
57 <span class="step">1</span> 57 <span class="step">1</span>
58 <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DADOS_ENTRADA</translate></a> 58 <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DADOS_ENTRADA</translate></a>
59 </li> 59 </li>
60 60
61 - <li ng-class="{'active': isCurrentStep(1), 'complete' : ((isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3)) && !entradaAlmoxarifadoForm.materiaisForm.$invalid), 'invalid' : ((entradaAlmoxarifadoForm.materiaisForm.$submitted || step > 1) && entradaAlmoxarifadoForm.materiaisForm.$invalid) && (isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3))}" 61 + <li ng-class="{'active': isCurrentStep(1), 'complete' : ((isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3)) && !entradaAlmoxarifadoForm.materiaisForm.$invalid && (entradaAlmoxarifado.entradasItem.length > 0)), 'incomplete' : ((entradaAlmoxarifadoForm.materiaisForm.$submitted || step > 1) && (entradaAlmoxarifadoForm.materiaisForm.$invalid || !(entradaAlmoxarifado.entradasItem.length > 0))) && (isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3))}"
62 ng-click="setCurrentStep(1)" title="{{$translate.instant('LABEL.MATERIAIS')}}" alt="{{$translate.instant('LABEL.MATERIAIS')}}"> 62 ng-click="setCurrentStep(1)" title="{{$translate.instant('LABEL.MATERIAIS')}}" alt="{{$translate.instant('LABEL.MATERIAIS')}}">
63 <span class="step">2</span> 63 <span class="step">2</span>
64 <a href="#void" class="title" style="text-decoration: none;"><translate>LABEL.MATERIAIS</translate></a> 64 <a href="#void" class="title" style="text-decoration: none;"><translate>LABEL.MATERIAIS</translate></a>
65 </li> 65 </li>
66 66
67 - <li ng-class="{'active': isCurrentStep(2), 'complete' : ((isCurrentStep(2) || isCurrentStep(3)) && !entradaAlmoxarifadoForm.documentosForm.$invalid), 'invalid' : ((entradaAlmoxarifadoForm.documentosForm.$submitted || step > 1) && entradaAlmoxarifadoForm.documentosForm.$invalid) && (isCurrentStep(2) || isCurrentStep(3)) && entradaAlmoxarifado.documentos.length < 1}" 67 + <li ng-class="{'active': isCurrentStep(2), 'complete' : ((isCurrentStep(2) || isCurrentStep(3)) && (entradaAlmoxarifado.documentos.length > 0)), 'incomplete' : ((entradaAlmoxarifadoForm.documentosForm.$submitted || step > 2) && !(entradaAlmoxarifado.documentos.length > 0)) && (isCurrentStep(2) || isCurrentStep(3))}"
68 ng-click="setCurrentStep(2)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}"> 68 ng-click="setCurrentStep(2)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}">
69 <span class="step">3</span> 69 <span class="step">3</span>
70 <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DOCUMENTOS</translate></a> 70 <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DOCUMENTOS</translate></a>
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg2.html
@@ -2,10 +2,10 @@ @@ -2,10 +2,10 @@
2 <div class="page-content"> 2 <div class="page-content">
3 <fieldset> 3 <fieldset>
4 <legend> 4 <legend>
5 - <label ng-class="{'has-error' : materiaisForm.$submitted && entradaAlmoxarifado.entradasIten && entradaAlmoxarifado.entradasIten.length < 1}"> 5 + <label ng-class="{'has-error' : materiaisForm.$submitted && entradaAlmoxarifado.entradasItem && entradaAlmoxarifado.entradasItem.length < 1}">
6 <translate>ALMOXARIFADO.LABEL.MATERIAIS</translate> 6 <translate>ALMOXARIFADO.LABEL.MATERIAIS</translate>
7 <span class='red' ng-if=" edit">*</span> 7 <span class='red' ng-if=" edit">*</span>
8 - <i ng-show="materiaisForm.$submitted && entradaAlmoxarifado.entradasIten && entradaAlmoxarifado.entradasIten.length < 1" class='fa fa-warning red' 8 + <i ng-show="materiaisForm.$submitted && entradaAlmoxarifado.entradasItem && entradaAlmoxarifado.entradasItem.length < 1" class='fa fa-warning red'
9 tooltip="{{$translate.instant('ALMOXARIFADO.LABEL.MATERIAIS') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i> 9 tooltip="{{$translate.instant('ALMOXARIFADO.LABEL.MATERIAIS') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>
10 </label> 10 </label>
11 </legend> 11 </legend>
@@ -58,23 +58,27 @@ @@ -58,23 +58,27 @@
58 <thead> 58 <thead>
59 <tr> 59 <tr>
60 <th width="20px" class="text-center"></th> 60 <th width="20px" class="text-center"></th>
61 - <th width="10%" class="text-center"><translate>LABEL.ITEM</translate></th>  
62 - <th style="width: 25%;" class="text-center"><translate>LABEL.DESCRICAO_MATERIAL</translate></th> 61 + <th width="7%" class="text-center"><translate>LABEL.ITEM</translate></th>
  62 + <th style="width: 20%;" class="text-center"><translate>LABEL.DESCRICAO_MATERIAL</translate></th>
  63 + <th style="width: 14%;" class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE</translate></th>
63 <th style="width: 15%;" class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th> 64 <th style="width: 15%;" class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>
64 - <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.UNIDADES</translate></th> 65 + <th style="width: 14%;" class="text-center"><translate>ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE</translate></th>
65 <th style="width: 15%;" class="text-center"><translate>LABEL.VALOR_UNITARIO</translate></th> 66 <th style="width: 15%;" class="text-center"><translate>LABEL.VALOR_UNITARIO</translate></th>
66 <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.SUBTOTAL</translate></th> 67 <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.SUBTOTAL</translate></th>
67 </tr> 68 </tr>
68 </thead> 69 </thead>
69 <tbody> 70 <tbody>
70 - <tr ng-hide="entradaAlmoxarifado.entradasIten.length != 0">  
71 - <td colspan="7" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td> 71 + <tr ng-hide="entradaAlmoxarifado.entradasItem.length != 0">
  72 + <td colspan="8" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
72 </tr> 73 </tr>
73 - <tr ng-repeat="entradaItemLista in entradaAlmoxarifado.entradasIten">  
74 - <td class="text-center"><input type="radio" name="entradaItemChecked" ng-value="entradaItemLista" ng-model="$parent.entradaItemSelecionado"/></td> 74 + <tr ng-repeat="entradaItemLista in entradaAlmoxarifado.entradasItem">
  75 + <td class="text-center">
  76 + <input type="checkbox" name="entradaItemChecked" ng-model="entradaItemLista.$checked" ng-click="checkEntradaItem(entradaItemLista); atualizarListaSizeSelectEntradaItem()"/>
  77 + </td>
75 <td class="text-center">{{$index +1}}</td> 78 <td class="text-center">{{$index +1}}</td>
76 <td class="text-center">{{ entradaItemLista.material.descricao }}</td> 79 <td class="text-center">{{ entradaItemLista.material.descricao }}</td>
77 - <td class="text-center">{{ entradaItemLista.material.unidadeArmazenamento.descricao }}</td> 80 + <td class="text-center">{{ entradaItemLista.quantidade / entradaItemLista.unidadeMedidaEntrada.quantidadePadrao }}</td>
  81 + <td class="text-center">{{ entradaItemLista.unidadeMedidaEntrada.descricao }}</td>
78 <td class="text-center">{{ entradaItemLista.quantidade }}</td> 82 <td class="text-center">{{ entradaItemLista.quantidade }}</td>
79 <td class="text-center">{{ entradaItemLista.valorUnitario | currency:"R$":2}}</td> 83 <td class="text-center">{{ entradaItemLista.valorUnitario | currency:"R$":2}}</td>
80 <td class="text-center">{{ entradaItemLista.valorTotal | currency}}</td> 84 <td class="text-center">{{ entradaItemLista.valorTotal | currency}}</td>