Commit efaf1267edbfdeadc9cf90b2b4717eb2fd7dcf6a
Exists in
master
Merge branch 'tarefa-3822' of http://ferramentasgo.centralit.com.br:8080/scm/git…
…/cit-grp-almoxarifado into tarefa-3822 # Conflicts: # cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js
Showing
8 changed files
with
52 additions
and
45 deletions
Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/MovimentoEstoqueDaoHibernate.java
... | ... | @@ -181,7 +181,9 @@ public class MovimentoEstoqueDaoHibernate extends CitGenericDAOImpl implements M |
181 | 181 | Map<String, Object> parametros = new HashMap<String, Object>(); |
182 | 182 | StringBuilder sql = new StringBuilder(); |
183 | 183 | |
184 | - sql.append("select atendimento.dataAtendimento, atendimentoItem.quantidade from alm_me_movimentoestoque me "); | |
184 | + sql.append("select atendimento.dataAtendimento, "); | |
185 | + sql.append(" (select sum(quantidade) from alm_rc_at_item_endereco where alm_rc_at_item_endereco.at_req_consumoitem_id = atendimentoItem.id) as quantidade "); | |
186 | + sql.append(" from alm_me_movimentoestoque me "); | |
185 | 187 | sql.append(" inner join dominio dominio on dominio.id = me.dominioClasseReferencia_id "); |
186 | 188 | sql.append(" left join alm_rc_atendimentoitem atendimentoItem on atendimentoItem.id = me.idClasseReferencia "); |
187 | 189 | sql.append(" left join alm_rc_atendimento atendimento on atendimento.id = atendimentoItem.AtendimentoReqConsumo_Id "); | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumoItem.java
... | ... | @@ -16,7 +16,6 @@ import javax.persistence.Table; |
16 | 16 | |
17 | 17 | import org.hibernate.envers.AuditTable; |
18 | 18 | import org.hibernate.envers.Audited; |
19 | -import org.hibernate.envers.NotAudited; | |
20 | 19 | |
21 | 20 | import br.com.centralit.api.framework.json.ViewsAlmoxarifado; |
22 | 21 | import br.com.centralit.framework.json.Views; |
... | ... | @@ -61,7 +60,7 @@ import com.fasterxml.jackson.annotation.JsonView; |
61 | 60 | @AuditTable(value = "alm_rc_atenditem_aud") |
62 | 61 | @Entity |
63 | 62 | @Table(name="alm_rc_atendimentoitem") |
64 | -@JsonIgnoreProperties({"$info", "$verInfo", "$quantidade", "$locaisEstoque", "$hasError"}) | |
63 | +@JsonIgnoreProperties({"$info", "$verInfo", "$quantidade", "$locaisEstoque", "$hasError", "$somaQtdAtendida"}) | |
65 | 64 | public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrganizacao { |
66 | 65 | |
67 | 66 | /** Atributo serialVersionUID. */ | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumoItemEndereco.java
... | ... | @@ -18,12 +18,14 @@ import br.com.centralit.api.framework.json.ViewsAlmoxarifado; |
18 | 18 | import br.com.centralit.framework.json.Views; |
19 | 19 | import br.com.centralit.framework.model.arquitetura.PersistentObject; |
20 | 20 | |
21 | +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | |
21 | 22 | import com.fasterxml.jackson.annotation.JsonView; |
22 | 23 | |
23 | 24 | @Audited |
24 | 25 | @AuditTable(value = "alm_rc_at_item_end_aud") |
25 | 26 | @Entity |
26 | 27 | @Table(name = "alm_rc_at_item_endereco") |
28 | +@JsonIgnoreProperties({"$hasError"}) | |
27 | 29 | public class AtendimentoRequisicaoConsumoItemEndereco extends PersistentObject { |
28 | 30 | |
29 | 31 | private static final long serialVersionUID = 1L; | ... | ... |
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java
... | ... | @@ -188,14 +188,15 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl< |
188 | 188 | for(AtendimentoRequisicaoConsumo atendimento : entity.getAtendimentos()){ |
189 | 189 | for(AtendimentoRequisicaoConsumoItem atendimentoItem : atendimento.getAtendimentoRequisicaoConsumoItems()){ |
190 | 190 | for(AtendimentoRequisicaoConsumoItemEndereco itemEndereco : atendimentoItem.getAtendimentoRequisicaoConsumoItemEnderecos()){ |
191 | - | |
192 | - if(somatorioQuantidadesAtentidasPorMaterial.containsKey(itemEndereco.getMaterialLocalEstoque())){ | |
193 | - | |
194 | - somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(), | |
195 | - somatorioQuantidadesAtentidasPorMaterial.get(itemEndereco.getMaterialLocalEstoque()).add(itemEndereco.getQuantidade())); | |
196 | - | |
197 | - }else{ | |
198 | - somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(), itemEndereco.getQuantidade()); | |
191 | + if(itemEndereco.getQuantidade() != null){ | |
192 | + if(somatorioQuantidadesAtentidasPorMaterial.containsKey(itemEndereco.getMaterialLocalEstoque())){ | |
193 | + | |
194 | + somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(), | |
195 | + somatorioQuantidadesAtentidasPorMaterial.get(itemEndereco.getMaterialLocalEstoque()).add(itemEndereco.getQuantidade())); | |
196 | + | |
197 | + }else{ | |
198 | + somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(), itemEndereco.getQuantidade()); | |
199 | + } | |
199 | 200 | } |
200 | 201 | } |
201 | 202 | } |
... | ... | @@ -215,8 +216,8 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl< |
215 | 216 | mensagem = internacionalizacaoService.getTranslate("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE", getIdioma()); |
216 | 217 | mensagem += "<br/><br/><ul>"; |
217 | 218 | for(MaterialLocalEstoque materialLocalEstoque: materiaisRejeitados){ |
218 | - mensagem += "<li><b>Material:</b> " + materialLocalEstoque.getMaterialEstoque().getMaterial().getDescricao() + "</li>"; | |
219 | - mensagem += "<li><b>Endereço de estoque:</b> " + materialLocalEstoque.getEndereco().getDescricao() + "</li><br/>"; | |
219 | + mensagem += "<li>Material: <b>" + materialLocalEstoque.getMaterialEstoque().getMaterial().getDescricao() + "</b></li>"; | |
220 | + mensagem += "<li>Endereço de estoque: <b>" + materialLocalEstoque.getEndereco().getDescricao() + "</b></li><br/>"; | |
220 | 221 | } |
221 | 222 | mensagem += "</ul>"; |
222 | 223 | } | ... | ... |
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
... | ... | @@ -373,7 +373,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat |
373 | 373 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.CONTABILIZAR_ENTRADA_ITEM_SEM_ENDERECO", "Não é possível contabilizar a entrada pois existem materiais sem endereço de estoque definido!", dominio, modulo)); |
374 | 374 | |
375 | 375 | internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE", "A soma das quantidades informadas para atendimento ultrapassam o saldo disponivel no endereço de estoque selecionado no(s) seguinte(s) material(ais):", dominio, modulo)); |
376 | - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE_TOOLTIP", "A soma das quantidades à atender informadas para este material ultrapassaram o saldo disponivel para este endereço de estoque.", dominio, modulo)); | |
376 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE_TOOLTIP", "A soma das quantidades à atender informadas para este material ultrapassaram o saldo disponivel no(s) endereço(s) de estoque.", dominio, modulo)); | |
377 | + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDER_SUPERIOR_SALDO_ESTOQUE", "A quantidade a ser atendida é superior ao saldo disponível no(s) seguinte(s) endereço(s) de estoque: ", dominio, modulo)); | |
377 | 378 | } |
378 | 379 | |
379 | 380 | private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { | ... | ... |
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js
... | ... | @@ -376,7 +376,7 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
376 | 376 | }); |
377 | 377 | }); |
378 | 378 | |
379 | - //buscarInformacoesParaAtendimento(atendimentoItem); | |
379 | + buscarInformacoesParaAtendimento(atendimentoItem); | |
380 | 380 | |
381 | 381 | atendimento.atendimentoRequisicaoConsumoItems.push(atendimentoItem); |
382 | 382 | }); |
... | ... | @@ -407,20 +407,13 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
407 | 407 | if(result.materiaisLocalEstoque.length > 0){ |
408 | 408 | $scope.atendimentos.forEach(function(atendimento){ |
409 | 409 | atendimento.atendimentoRequisicaoConsumoItems.forEach(function(atendimentoItem){ |
410 | - result.materiaisLocalEstoque.forEach(function(localEstoque){ | |
411 | - | |
412 | - if(atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.length == 1){ | |
413 | - if(atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos[0].materialLocalEstoque.id === localEstoque.id){ | |
410 | + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(itemEndereco){ | |
411 | + result.materiaisLocalEstoque.forEach(function(localEstoque){ | |
412 | + if(itemEndereco.materialLocalEstoque.id === localEstoque.id){ | |
414 | 413 | atendimentoItem.$hasError = true; |
414 | + itemEndereco.$hasError = true; | |
415 | 415 | } |
416 | - }else{ | |
417 | - angular.forEach(atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos, function(atendimentoRequisicaoConsumoItemEndereco){ | |
418 | - if(atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.id === localEstoque.id){ | |
419 | - atendimentoItem.$hasError = true; | |
420 | - atendimentoRequisicaoConsumoItemEndereco.$hasError = true; | |
421 | - } | |
422 | - }); | |
423 | - } | |
416 | + }); | |
424 | 417 | |
425 | 418 | }); |
426 | 419 | }); |
... | ... | @@ -439,7 +432,7 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
439 | 432 | $scope.setLoading(false); |
440 | 433 | }); |
441 | 434 | } |
442 | - }); | |
435 | + }); | |
443 | 436 | } |
444 | 437 | } else { |
445 | 438 | $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO'), " ", false); |
... | ... | @@ -573,7 +566,7 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
573 | 566 | |
574 | 567 | $scope.listaEnderecosSelect = []; |
575 | 568 | |
576 | - if(enderecosAdicionados[0]){ | |
569 | + if(enderecosAdicionados[0] && enderecosAdicionados[0].materialLocalEstoque){ | |
577 | 570 | if(enderecosAdicionados.length > 0){ |
578 | 571 | enderecosItem.forEach(function(enderecoItem){ |
579 | 572 | enderecosAdicionados.forEach(function(enderecoAdicionado){ |
... | ... | @@ -595,11 +588,9 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
595 | 588 | } |
596 | 589 | |
597 | 590 | $scope.addEnderecoToList = function(item){ |
598 | - if(item){ | |
591 | + if($scope.listaEnderecosAdicionados.indexOf(item) == -1){ | |
599 | 592 | $scope.listaEnderecosAdicionados.push(item); |
600 | 593 | $scope.listaEnderecosSelect.splice($scope.listaEnderecosSelect.indexOf(item), 1); |
601 | - $scope.itemAtendimentoRequisicaoConsumoItemEndereco = null; | |
602 | - item = null; | |
603 | 594 | } |
604 | 595 | }; |
605 | 596 | |
... | ... | @@ -619,15 +610,26 @@ citApp.controller( 'AtendimentoRequisicaoConsumoController', |
619 | 610 | } |
620 | 611 | |
621 | 612 | $scope.saveListaEnderecos = function(){ |
622 | - $scope.atendimentoItemEmEdicao.atendimentoRequisicaoConsumoItemEnderecos = angular.copy($scope.listaEnderecosAdicionados); | |
623 | - $scope.$modalInstance.dismiss('cancel'); | |
624 | - | |
613 | + var hasError = false; | |
614 | + var mensagemErro = $translate.instant('ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDER_SUPERIOR_SALDO_ESTOQUE'); | |
625 | 615 | $scope.atendimentoItemEmEdicao.$somaQtdAtendida = 0; |
626 | 616 | $scope.listaEnderecosAdicionados.forEach(function(item){ |
627 | - if(item.quantidade){ | |
617 | + if(item.materialLocalEstoque.quantidade < parseFloat(item.quantidade)){ | |
618 | + hasError = true; | |
619 | + mensagemErro += "<br />" + item.materialLocalEstoque.endereco.descricao; | |
620 | + } | |
621 | + | |
622 | + if(item.quantidade && !hasError){ | |
628 | 623 | $scope.atendimentoItemEmEdicao.$somaQtdAtendida += parseFloat(item.quantidade); |
629 | 624 | } |
630 | 625 | }); |
626 | + | |
627 | + if(!hasError){ | |
628 | + $scope.atendimentoItemEmEdicao.atendimentoRequisicaoConsumoItemEnderecos = angular.copy($scope.listaEnderecosAdicionados); | |
629 | + $scope.$modalInstance.dismiss('cancel'); | |
630 | + }else{ | |
631 | + $scope.showAlert('error', mensagemErro, " ", false); | |
632 | + } | |
631 | 633 | } |
632 | 634 | |
633 | 635 | }]); | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoEdit.html
... | ... | @@ -142,7 +142,7 @@ |
142 | 142 | <td ng-show="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length <= 1"> |
143 | 143 | <label-select ng-id="atendimentoRequisicaoConsumoItem.materialLocalEstoque$index" ng-obrigatorio="true" |
144 | 144 | ng-model="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos[0]" ng-list="atendimentoRequisicaoConsumoItem.$locaisEstoque" |
145 | - form="atendimentoRequisicaoConsumoForm" | |
145 | + form="atendimentoRequisicaoConsumoForm" track-by="track by atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.id" | |
146 | 146 | ng-custom-options="atendimentoRequisicaoConsumoItemEndereco as atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.endereco.descricao for atendimentoRequisicaoConsumoItemEndereco"></label-select> |
147 | 147 | </td> |
148 | 148 | <td ng-show="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length > 1"> |
... | ... | @@ -158,7 +158,7 @@ |
158 | 158 | </td> |
159 | 159 | |
160 | 160 | <td ng-if="atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidade != atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidadeAtendida && atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length <= 1" class="text-center"> |
161 | - <label-input-decimal ng-id="atendimentoRequisicaoConsumoItem.quantidade$index" ng-obrigatorio="true" ng-evento-blur="aplicarValidacaoDecimal" | |
161 | + <label-input-decimal ng-id="atendimentoRequisicaoConsumoItem.quantidade$index" ng-evento-blur="aplicarValidacaoDecimal" ng-evento-change="atendimentoRequisicaoConsumoItem.$hasError = false" | |
162 | 162 | ng-model="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos[0].quantidade" form="atendimentoRequisicaoConsumoForm" ng-disabled="!edit" ng-custom-maxlength="{{atendimentoRequisicaoConsumoItem.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 4 : 11}}" |
163 | 163 | ng-precisao="{{atendimentoRequisicaoConsumoItem.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 'decimal'}}" /> |
164 | 164 | </td> |
... | ... | @@ -218,10 +218,10 @@ |
218 | 218 | <th class="text-center"><translate>LABEL.CAPACIDADE</translate></th> |
219 | 219 | </tr> |
220 | 220 | </thead> |
221 | - <tbody ng-repeat="localEstoque in atendimentoRequisicaoConsumoItem.$locaisEstoque"> | |
222 | - <td class="text-center">{{localEstoque.endereco.descricao}}</td> | |
223 | - <td class="text-center">{{localEstoque.quantidade}}</td> | |
224 | - <td class="text-center">{{localEstoque.capacidade}}</td> | |
221 | + <tbody ng-repeat="enderecoEstoque in atendimentoRequisicaoConsumoItem.$locaisEstoque"> | |
222 | + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.endereco.descricao}}</td> | |
223 | + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.quantidade}}</td> | |
224 | + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.capacidade}}</td> | |
225 | 225 | </tbody> |
226 | 226 | </table> |
227 | 227 | </td> | ... | ... |
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/dialog_atendimento_item_enderecos.html
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | <div class="col-sm-12"> |
30 | 30 | <div class="panel panel-default"> |
31 | 31 | <div class="panel-heading clearfix"> |
32 | - <button class="btn btn-clear" type="button" ng-disabled="listaEnderecosSelect.length == 0" | |
32 | + <button class="btn btn-clear" type="button" ng-disabled="listaEnderecosSelect.length == 0 || !itemAtendimentoRequisicaoConsumoItemEndereco" | |
33 | 33 | ng-click="addEnderecoToList(itemAtendimentoRequisicaoConsumoItemEndereco)"> |
34 | 34 | <i class="fa fa-plus-circle yellow-dark"></i> |
35 | 35 | <translate>LABEL.ADICIONAR</translate> |
... | ... | @@ -49,13 +49,13 @@ |
49 | 49 | </tr> |
50 | 50 | </thead> |
51 | 51 | <tbody ng-repeat="atendimentoRequisicaoConsumoItemEndereco in listaEnderecosAdicionados"> |
52 | - <tr> | |
52 | + <tr ng-class="atendimentoRequisicaoConsumoItemEndereco.$hasError ? 'danger' : ''"> | |
53 | 53 | <td class="text-center"><input type="checkbox" ng-checked="atendimentoRequisicaoConsumoItemEndereco.$checkedChBox" ng-model="atendimentoRequisicaoConsumoItemEndereco.$checkedChBox" /></td> |
54 | 54 | <td class="text-center">{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.endereco.descricao}}</td> |
55 | 55 | <td class="text-center">{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.quantidade}}</td> |
56 | 56 | <td class="text-center"> |
57 | 57 | <label-input-decimal ng-id="atendimentoRequisicaoConsumoItemEndereco.quantidade" ng-obrigatorio="true" ng-evento-blur="aplicarValidacaoDecimal" |
58 | - ng-model="atendimentoRequisicaoConsumoItemEndereco.quantidade" form="atendimentoRequisicaoConsumoForm" | |
58 | + ng-model="atendimentoRequisicaoConsumoItemEndereco.quantidade" form="atendimentoRequisicaoConsumoForm" ng-evento-blur="atendimentoRequisicaoConsumoItemEndereco.$hasError = false" | |
59 | 59 | ng-custom-maxlength="{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.materialEstoque.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 4 : 11}}" |
60 | 60 | ng-precisao="{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.materialEstoque.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 'decimal'}}" /> |
61 | 61 | </td> | ... | ... |