Commit 1fcb31af39d6cf00b7be12667a84ec3c35804ad6
1 parent
d9a90b20
Exists in
master
Redmine #4783 Arrumando contabilização de saldo em estoque e marcação na listage…
…m da entrada das que não estão contabilizadas
Showing
6 changed files
with
103 additions
and
76 deletions
Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoServiceImpl.java
... | ... | @@ -212,22 +212,19 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl<EntradaAl |
212 | 212 | dataContabil.setTime(entradaAlmoxarifado.getDataContabil().getTime()); |
213 | 213 | } |
214 | 214 | |
215 | - EntradaAlmoxarifado entradaMovimento = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entradaAlmoxarifado); | |
216 | - | |
217 | 215 | List<ContaContabilMovimento> movimentosContabeis = this.contaContabilMovimentoAlmoxarifadoService.findAllByEntradaAlmoxarifado(entradaAlmoxarifado); |
216 | + this.contaContabilMovimentoAlmoxarifadoService.removeList(movimentosContabeis); | |
217 | + | |
218 | 218 | List<MovimentoEstoque> movimentosEstoque = this.movimentoEstoqueService.findAllByEntrada(entradaAlmoxarifado); |
219 | + this.movimentoEstoqueService.removeList(movimentosEstoque); | |
219 | 220 | |
220 | - if(dataContabil != null){ | |
221 | - this.contaContabilMovimentoAlmoxarifadoService.removeList(movimentosContabeis); | |
221 | + EntradaAlmoxarifado entradaMovimento = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entradaAlmoxarifado); | |
222 | + | |
223 | + if(dataContabil != null) { | |
222 | 224 | this.contaContabilMovimentoAlmoxarifadoService.geraMovimento((EntradaAlmoxarifado) entradaMovimento.clone()); |
223 | - | |
224 | - this.movimentoEstoqueService.removeList(movimentosEstoque); | |
225 | 225 | this.movimentoEstoqueService.gerarMovimento((EntradaAlmoxarifado) entradaMovimento.clone()); |
226 | 226 | |
227 | 227 | entradaMovimento.getDataContabil().setTime(dataContabil.getTime()); |
228 | - } else { | |
229 | - this.contaContabilMovimentoAlmoxarifadoService.removeList(movimentosContabeis); | |
230 | - this.movimentoEstoqueService.removeList(movimentosEstoque); | |
231 | 228 | } |
232 | 229 | |
233 | 230 | return entradaMovimento; | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MovimentoEstoqueServiceImpl.java
... | ... | @@ -83,6 +83,8 @@ import br.com.centralit.framework.util.UtilObjeto; |
83 | 83 | @Service("movimentoEstoqueService") |
84 | 84 | public class MovimentoEstoqueServiceImpl extends GenericServiceImpl<MovimentoEstoque, Long> implements MovimentoEstoqueService { |
85 | 85 | |
86 | + private static final int IGUAL = 0; | |
87 | + | |
86 | 88 | private static int SCALE_DIVISOR_DECIMAL = 4; |
87 | 89 | |
88 | 90 | private static final String ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_ATENDIMENTO_REQUISICAO_CONSUMO_DATA_ATENDIMENTO = "atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.dataAtendimento"; |
... | ... | @@ -351,8 +353,15 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl<MovimentoEst |
351 | 353 | BigDecimal valorTotalNovo = materialEstoque.getValorTotalMedio().subtract(entradaItem.getValorTotal()); |
352 | 354 | BigDecimal quantidadeTotalNova = materialEstoque.getQuantidadeTotal().subtract(entradaItem.getQuantidade()); |
353 | 355 | |
354 | - BigDecimal valorUnitarioNovo = valorTotalNovo.divide(quantidadeTotalNova, SCALE_DIVISOR_DECIMAL, RoundingMode.CEILING); | |
355 | - BigDecimal restoMedioNovo = valorTotalNovo.subtract(valorUnitarioNovo.multiply(quantidadeTotalNova)); | |
356 | + BigDecimal valorUnitarioNovo = null; | |
357 | + BigDecimal restoMedioNovo = null; | |
358 | + if (valorTotalNovo.compareTo(BigDecimal.ZERO) == IGUAL || quantidadeTotalNova.compareTo(BigDecimal.ZERO) == IGUAL) { | |
359 | + valorUnitarioNovo = BigDecimal.ZERO; | |
360 | + restoMedioNovo = BigDecimal.ZERO; | |
361 | + } else { | |
362 | + valorUnitarioNovo = valorTotalNovo.divide(quantidadeTotalNova, SCALE_DIVISOR_DECIMAL, RoundingMode.CEILING); | |
363 | + restoMedioNovo = valorTotalNovo.subtract(valorUnitarioNovo.multiply(quantidadeTotalNova)); | |
364 | + } | |
356 | 365 | |
357 | 366 | materialEstoque.setValorUnitarioMedio(valorUnitarioNovo); |
358 | 367 | materialEstoque.setRestoMedio(restoMedioNovo); | ... | ... |
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
... | ... | @@ -538,72 +538,92 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
538 | 538 | }); |
539 | 539 | |
540 | 540 | $scope.setLoadingSalva(true); |
541 | - | |
542 | - EntradaAlmoxarifadoRepository.save($scope.entradaAlmoxarifado).then(function(result) { | |
543 | - $scope.entradaAlmoxarifado = result.originalElement; | |
544 | - | |
545 | - if ($scope.entradaAlmoxarifado.fornecedor) { | |
546 | - $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
547 | - $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj; | |
548 | - } | |
549 | - | |
550 | - // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir | |
551 | - salvarListaDocumentos(entradaTemp); | |
552 | - $scope.setLoading(false); | |
553 | - | |
554 | - var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil); | |
555 | - | |
556 | - $scope.setLoadingSalva(true); | |
557 | - | |
558 | - if (dataContabilAntiga && !dataContabil) { | |
559 | - MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) { | |
560 | - if (result.saidas) { | |
541 | + | |
542 | + var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil); | |
543 | + | |
544 | + if (dataContabilAntiga && !dataContabil) { | |
545 | + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) { | |
546 | + if (result.saidas) { | |
547 | + $scope.setLoading(false); | |
548 | + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS') + result.saidas); | |
549 | + } else { | |
550 | + var error = true; | |
551 | + $scope.entradaAlmoxarifado.dataContabil = dataContabil; | |
552 | + | |
553 | + $scope.entradaAlmoxarifado.valorTotalNota = converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota); | |
554 | + | |
555 | + EntradaAlmoxarifadoRepository.concluir($scope.entradaAlmoxarifado).then(function(result) { | |
556 | + $scope.resetForm(); | |
557 | + error = false; | |
558 | + $scope.entradaAlmoxarifado = result.originalElement; | |
559 | + $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')($scope.entradaAlmoxarifado.dataRecebimento, "dd/MM/yyyy"); | |
560 | + $scope.entradaAlmoxarifado.dataContabil = $filter('date')($scope.entradaAlmoxarifado.dataContabil, "dd/MM/yyyy"); | |
561 | + $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy"); | |
562 | + if ($scope.entradaAlmoxarifado.fornecedor) { | |
563 | + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
564 | + $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj; | |
565 | + } | |
561 | 566 | $scope.setLoading(false); |
562 | - $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS') + result.saidas); | |
563 | - } else { | |
564 | - concluir(dataContabil); | |
565 | - } | |
566 | - }); | |
567 | - } else { | |
568 | - concluir(dataContabil); | |
569 | - } | |
570 | - }); | |
567 | + | |
568 | + // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir | |
569 | + salvarListaDocumentos(entradaTemp); | |
570 | + if (dataContabil) { | |
571 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA')); | |
572 | + $scope.contabilizado = true; | |
573 | + } else { | |
574 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA')); | |
575 | + } | |
576 | + $scope.atualizaPaginaPesquisa(); | |
577 | + }); | |
578 | + | |
579 | + $timeout(function() { | |
580 | + if (error) { | |
581 | + $scope.entradaAlmoxarifado.dataContabil = dataContabilAntiga; | |
582 | + } | |
583 | + }, 1000); | |
584 | + } | |
585 | + }); | |
586 | + } else { | |
587 | + var error = true; | |
588 | + $scope.entradaAlmoxarifado.dataContabil = dataContabil; | |
589 | + | |
590 | + $scope.entradaAlmoxarifado.valorTotalNota = converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota); | |
591 | + | |
592 | + EntradaAlmoxarifadoRepository.concluir($scope.entradaAlmoxarifado).then(function(result) { | |
593 | + $scope.resetForm(); | |
594 | + error = false; | |
595 | + $scope.entradaAlmoxarifado = result.originalElement; | |
596 | + $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')($scope.entradaAlmoxarifado.dataRecebimento, "dd/MM/yyyy"); | |
597 | + $scope.entradaAlmoxarifado.dataContabil = $filter('date')($scope.entradaAlmoxarifado.dataContabil, "dd/MM/yyyy"); | |
598 | + $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy"); | |
599 | + if ($scope.entradaAlmoxarifado.fornecedor) { | |
600 | + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
601 | + $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj; | |
602 | + } | |
603 | + $scope.setLoading(false); | |
604 | + | |
605 | + // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir | |
606 | + salvarListaDocumentos(entradaTemp); | |
607 | + if (dataContabil) { | |
608 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA')); | |
609 | + $scope.contabilizado = true; | |
610 | + } else { | |
611 | + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA')); | |
612 | + } | |
613 | + $scope.atualizaPaginaPesquisa(); | |
614 | + }); | |
615 | + | |
616 | + $timeout(function() { | |
617 | + if (error) { | |
618 | + $scope.entradaAlmoxarifado.dataContabil = dataContabilAntiga; | |
619 | + } | |
620 | + }, 1000); | |
621 | + } | |
571 | 622 | } |
572 | 623 | }; |
573 | 624 | |
574 | 625 | var concluir = function(dataContabil) { |
575 | - var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil); | |
576 | - var error = true; | |
577 | - $scope.entradaAlmoxarifado.dataContabil = dataContabil; | |
578 | - | |
579 | - $scope.entradaAlmoxarifado.valorTotalNota = converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota); | |
580 | - | |
581 | - EntradaAlmoxarifadoRepository.concluir($scope.entradaAlmoxarifado).then(function(result) { | |
582 | - $scope.resetForm(); | |
583 | - error = false; | |
584 | - $scope.entradaAlmoxarifado = result.originalElement; | |
585 | - $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')($scope.entradaAlmoxarifado.dataRecebimento, "dd/MM/yyyy"); | |
586 | - $scope.entradaAlmoxarifado.dataContabil = $filter('date')($scope.entradaAlmoxarifado.dataContabil, "dd/MM/yyyy"); | |
587 | - $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy"); | |
588 | - if ($scope.entradaAlmoxarifado.fornecedor) { | |
589 | - $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; | |
590 | - $scope.entradaAlmoxarifado.fornecedor['cpfCnpj'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.cpfCnpj; | |
591 | - } | |
592 | - $scope.setLoading(false); | |
593 | - if (dataContabil) { | |
594 | - $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA')); | |
595 | - $scope.contabilizado = true; | |
596 | - } else { | |
597 | - $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA')); | |
598 | - } | |
599 | - $scope.atualizaPaginaPesquisa(); | |
600 | - }); | |
601 | - | |
602 | - $timeout(function() { | |
603 | - if (error) { | |
604 | - $scope.entradaAlmoxarifado.dataContabil = dataContabilAntiga; | |
605 | - } | |
606 | - }, 1000); | |
626 | + | |
607 | 627 | }; |
608 | 628 | |
609 | 629 | // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento |
... | ... | @@ -853,7 +873,7 @@ citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUp |
853 | 873 | }); |
854 | 874 | |
855 | 875 | //Watch para controlar as mudanças de almoxarifado |
856 | - $scope.setAlmoxarifado = function(){ | |
876 | + $scope.setAlmoxarifado = function() { | |
857 | 877 | $timeout(function() { |
858 | 878 | if ($scope.entradaAlmoxarifado.almoxarifado) { |
859 | 879 | if ($scope.entradaAlmoxarifado.entradasItem && $scope.entradaAlmoxarifado.entradasItem.length > 0) { | ... | ... |
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoListController.js
... | ... | @@ -22,7 +22,8 @@ citApp.controller('EntradaAlmoxarifadoListController', ['$scope', 'EntradaAlmoxa |
22 | 22 | dir : 'asc', |
23 | 23 | sort : 'id', |
24 | 24 | limit : 10, |
25 | - fields: ['id', 'notaRecebimento', 'dataRecebimento', 'dataContabil', 'almoxarifado.nome', 'dominioTipoEntrada.descricao', 'fornecedor.pessoa.nome', 'valorTotalNota'], | |
25 | + fields: ['id', 'notaRecebimento', 'dataRecebimento', 'dataContabil', 'almoxarifado.nome', 'dominioTipoEntrada.descricao', 'fornecedor.pessoa.nome', 'valorTotalNota', | |
26 | + 'isContabilizada'], | |
26 | 27 | filters : [ {type : 'numeric-range', field : 'notaRecebimento' } , |
27 | 28 | {type : 'date-range', field : 'dataRecebimento' } , |
28 | 29 | {type : 'date-range', field : 'dataContabil' } , | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_add_materiais.html
... | ... | @@ -37,7 +37,7 @@ |
37 | 37 | </div> |
38 | 38 | <div class="col-sm-4"> |
39 | 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-disabled="(!editEntrada && !newEntrada) || (entradaItem.id && entradaAlmoxarifado.dataContabil)" label-info-tooltip="{{$translate.instant('ALMOXARIFADO.MSG.ENDERECO_ESTOQUE_NECESSARIO_CONTABILIZAR')}}" | |
40 | + form="formDialogMateriais" ng-disabled="!editEntrada && !newEntrada" label-info-tooltip="{{$translate.instant('ALMOXARIFADO.MSG.ENDERECO_ESTOQUE_NECESSARIO_CONTABILIZAR')}}" | |
41 | 41 | ng-custom-options="materialLocal as materialLocal.endereco.descricao for materialLocal" track-by="track by materialLocal.id" ng-list="enderecosMaterial"/> |
42 | 42 | </div> |
43 | 43 | </div> | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoList.html
... | ... | @@ -53,5 +53,5 @@ |
53 | 53 | <breadcrumb ng-workspace="workspace"></breadcrumb> |
54 | 54 | |
55 | 55 | <list-view ng-lista="entradaAlmoxarifadoList" ng-repository="EntradaAlmoxarifadoRepository" ng-use-custom-remove="true" ng-custom-remove="removerEntrada()" ng-headers="headers" |
56 | - ng-filter-criteria="filterCriteria" ng-item-selecionado="entradaAlmoxarifadoChecked"></list-view> | |
56 | + ng-filter-criteria="filterCriteria" ng-item-selecionado="entradaAlmoxarifadoChecked" ng-campo-marcacao="isContabilizada"></list-view> | |
57 | 57 | </div><!-- .page-content --> | ... | ... |