Commit efaf1267edbfdeadc9cf90b2b4717eb2fd7dcf6a

Authored by erick.sato
2 parents a8f7aef9 270cbfcf
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
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&lt;
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&lt;
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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( &#39;AtendimentoRequisicaoConsumoController&#39;,
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>
... ...