Commit 1fcb31af39d6cf00b7be12667a84ec3c35804ad6

Authored by geovane.filho
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
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&lt;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(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;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(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;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(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;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 -->
... ...